Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ichJC-0002LA-Jx for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Dec 2019 02:56:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ichJA-0004pZ-Vc for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Dec 2019 02:56:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ichJA-0004pQ-0p for pgsql-hackers@lists.postgresql.org; Thu, 05 Dec 2019 02:56:00 +0000 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ichJ4-00074l-1n for pgsql-hackers@postgresql.org; Thu, 05 Dec 2019 02:55:58 +0000 Received: by mail-pg1-x541.google.com with SMTP id r11so872567pgf.1 for ; Wed, 04 Dec 2019 18:55:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=UD5cikMHciTlchxkNWO/ymQMVGpinHRA2Pa6Cn60byw=; b=xS77BJfSjNgkZiZPnb7pB3GMxsGR4+oznrTmWsnQ7SFhx80EAb+plactKU3diy+Va8 XETbZpVEkrBw9h9brVB9kk+KDZmEMUTdkMMQsyIQMvy0sExsEmRU0zhz6ruQKTts5857 SHT6d72xwftmB831L5KZSN2tEy/0IciV1qVSCFY8eLUWmxKyuqqxzq3m7aa/Fm7uLPXN nKT56D53LBaqF15kJc2b2cWtClKjIwZDFyIL9qUdGYafM1hCVZaFleyZC4DK9QfZoiA8 rV7S8zgsWpf/bqIDX4VZ+6eB4vUv1Ip9ajYSRc21WggSOd0lKX/DUfkm+EviI/Y0VyK5 ctJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=UD5cikMHciTlchxkNWO/ymQMVGpinHRA2Pa6Cn60byw=; b=DSE/6tZaiQimd0g0jrErP4Io2X1qZMuWBMCGYwBViF0xMJK68K6g5B9Bsl5Nr3gG6F anowCZQUQ2gD7Dt/+x8lfc3LNgHy/vGqFcmehLvWiL+fP6ASXR6z+/pI25XHifRPKBjX NLzOufViFgQvTHDrpOI4dmgPs5YxPU30awLeEuMs0lhZTPiJm8cpzixcfyQZAfrzqQVX CPOBZ96ylFiRsFYzIpLeGzZiNhLs3wMrYxTK6jZzlEMjeZOaNAuMYsJ+n2vQbf9DSOzG 2jRWa4ZZSHKiQwYpSC7fKgE/Ro6iyx6VizQnQI7i3wtQOShQVMyKh01ojzoaUkUgWllY +h1g== X-Gm-Message-State: APjAAAXY4LM12Jfj4ltJxUcD3yREqAbYUukoFMFkaEwjioXMCxFLsuIc SzaQZquQpb27yjsLfW+r40AeGw== X-Google-Smtp-Source: APXvYqz4pGPeIEgpPeXZTDdCTjqU4xzLmAgxdtdg9yIwOWKrE2XJewu96ZHwVAAyrKY1BA+GJSypkg== X-Received: by 2002:a63:3e03:: with SMTP id l3mr7009276pga.118.1575514552265; Wed, 04 Dec 2019 18:55:52 -0800 (PST) Received: from jdavis ([2600:1010:b021:96ac:a997:d3cf:3a3b:ca00]) by smtp.gmail.com with ESMTPSA id k29sm9987960pfh.104.2019.12.04.18.55.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 04 Dec 2019 18:55:50 -0800 (PST) Message-ID: <2c8dc5c9178c391493dfbf6c2f595dc298dd477e.camel@j-davis.com> Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Tomas Vondra Cc: Taylor Vesely , Adam Lee , Melanie Plageman , pgsql-hackers@postgresql.org Date: Wed, 04 Dec 2019 18:55:43 -0800 In-Reply-To: <20191128174644.snpuqldt5rndjru7@development> References: <507ac540ec7c20136364b5272acbcd4574aa76ef.camel@j-davis.com> <20190703001753.s5e5cme3ucjgeu6c@development> <20190711155520.zqipi23o3yybx7ym@development> <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191128174644.snpuqldt5rndjru7@development> Content-Type: multipart/mixed; boundary="=-TizX62B2or/6dj6b90vT" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-TizX62B2or/6dj6b90vT Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Thanks very much for a great review! I've attached a new patch. There are some significant changes in the new version also: In the non-spilling path, removed the extra nullcheck branch in the compiled evaltrans expression. When the first tuple is spilled, I the branch becomes necessary, so I recompile the expression using a new opcode that includes that branch. I also changed the read-from-spill path to use a slot with TTSOpsMinimalTuple (avoiding the need to make it into a virtual slot right away), which means I need to recompile the evaltrans expression for that case, as well. I also improved the way we initialize the hash tables to use a better estimate for the number of groups. And I made it only initialize one hash table in the read-from-spill path. With all of the changes I made (thanks to some suggestions from Andres) the performance is looking pretty good. It's pretty easy to beat Sort+Group when the group size is 10+. Even for average group size of ~1, HashAgg is getting really close to Sort in some cases. There are still a few things to do, most notably costing. I also need to project before spilling to avoid wasting disk. And I'm sure my changes have created some more problems, so I have some significant work to do on quality. My answers to your questions inline: On Thu, 2019-11-28 at 18:46 +0100, Tomas Vondra wrote: > Could we instead track how many tuples we actually consumed for the > the > in-memory groups, and then use this information to improve the > estimate > of number of groups? I mean, if we know we've consumed 1000 tuples > which > created 100 groups, then we know there's ~1:10 ratio. That would be a good estimate for an even distribution, but not necessarily for a skewed distribution. I'm not opposed to it, but it's generally my philosophy to overpartition as it seems there's not a big downside. > A couple of comments based on eye-balling the patch: > > > 1) Shouldn't the hashagg_mem_overflow use the other GUC naming, i.e. > maybe it should be enable_hashagg_mem_overflow or something similar? The enable_* naming is for planner GUCs. hashagg_mem_overflow is an execution-time GUC that disables spilling and overflows work_mem (that is, it reverts to the old behavior). > > assume the pointer really is NULL. Surely we'll get a segfault on the > preceding line which does dereference it > > pergroup = &pergroup_allaggs[op->d.agg_init_trans.transno]; > > Or am I missing anything? That's not actually dereferencing anything, it's just doing a pointer calculation. You are probably right that it's not a good thing to rely on, or at least not quite as readable, so I changed the order to put the NULL check first. > > 3) execGrouping.c > > A couple of functions would deserve a comment, explaining what it > does. > > - LookupTupleHashEntryHash > - prepare_hash_slot > - calculate_hash Done, thank you. > And it's not clear to me why we should remove part of the comment > before > TupleHashTableHash. Trying to remember back to when I first did that, but IIRC the comment was not updated from a previous change, and I was cleaning it up. I will check over that again to be sure it's an improvement. > > 4) I'm not sure I agree with this reasoning that > HASH_PARTITION_FACTOR > making the hash tables smaller is desirable - it may be, but if that > was > generally the case we'd just use small hash tables all the time. It's > a > bit annoying to give user the capability to set work_mem and then > kinda > override that. I think adding some kind of headroom is reasonable to avoid recursively spilling, but perhaps it's not critical. I see this as a tuning question more than anything else. I don't see it as "overriding" work_mem, but I can see where you're coming from. > 5) Not sure what "directly" means in this context? > > * partitions at the time we need to spill, and because this > algorithm > * shouldn't depend too directly on the internal memory needs of a > * BufFile. > > #define HASH_PARTITION_MEM (HASH_MIN_PARTITIONS * BLCKSZ) > > Does that mean we don't want to link to PGAlignedBlock, or what? That's what I meant, yes, but I reworded the comment to not say that. > 6) I think we should have some protection against underflows in this > piece of code: > > - this would probably deserve some protection against underflow if > HASH_PARTITION_MEM gets too big > > if (hashagg_mem_overflow) > aggstate->hash_mem_limit = SIZE_MAX; > else > aggstate->hash_mem_limit = (work_mem * 1024L) - > HASH_PARTITION_MEM; > > At the moment it's safe because work_mem is 64kB at least, and > HASH_PARTITION_MEM is 32kB (4 partitions, 8kB each). But if we happen > to > bump HASH_MIN_PARTITIONS up, this can underflow. Thank you, done. > 7) Shouldn't lookup_hash_entry briefly explain why/how it handles the > memory limit? Improved. > > 8) The comment before lookup_hash_entries says: > > ... > * Return false if hash table has exceeded its memory limit. > .. > > But that's clearly bogus, because that's a void function. Thank you, improved comment. > 9) Shouldn't the hash_finish_initial_spills calls in > agg_retrieve_direct > have a comment, similar to the surrounding code? Might be an > overkill, > not sure. Sure, done. > 10) The comment for agg_refill_hash_table says > > * Should only be called after all in memory hash table entries have > been > * consumed. > > Can we enforce that with an assert, somehow? It's a bit awkward. Simplehash doesn't expose the number of groups, and we would also have to check each hash table. Not a bad idea to add an interface to simplehash to make that work, though. > 11) The hash_spill_npartitions naming seems a bit confusing, because > it > seems to imply it's about the "spill" while in practice it just > choses > number of spill partitions. Maybe hash_choose_num_spill_partitions > would > be better? Done. > 12) It's not clear to me why we need HASH_MAX_PARTITIONS? What's the > reasoning behind the current value (256)? Not wanting to pick too > many > partitions? Comment? > > if (npartitions > HASH_MAX_PARTITIONS) > npartitions = HASH_MAX_PARTITIONS; Added a comment. There's no deep reasoning there -- I just don't want it to choose to create 5000 files and surprise a user. > 13) As for this: > > /* make sure that we don't exhaust the hash bits */ > if (partition_bits + input_bits >= 32) > partition_bits = 32 - input_bits; > > We already ran into this issue (exhausting bits in a hash value) in > hashjoin batching, we should be careful to use the same approach in > both > places (not the same code, just general approach). Didn't investigate this yet, but will do. Regards, Jeff Davis --=-TizX62B2or/6dj6b90vT Content-Disposition: attachment; filename="hashagg-20191204.diff" Content-Type: text/x-patch; name="hashagg-20191204.diff"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCA1M2FjMTQ0OTBhMS4uMTBiZmQ3ZTFjM2MgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTE3 NTEsNiArMTc1MSwyMyBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWhhc2hh Z2ctbWVtLW92ZXJmbG93IiB4cmVmbGFiZWw9Imhhc2hhZ2dfbWVtX292ZXJmbG93Ij4KKyAgICAg IDx0ZXJtPjx2YXJuYW1lPmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l Pmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3Rp dGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgSWYgaGFzaCBhZ2dyZWdhdGlvbiBleGNlZWRz IDx2YXJuYW1lPndvcmtfbWVtPC92YXJuYW1lPiBhdCBxdWVyeQorICAgICAgICAgZXhlY3V0aW9u IHRpbWUsIGFuZCA8dmFybmFtZT5oYXNoYWdnX21lbV9vdmVyZmxvdzwvdmFybmFtZT4gaXMgc2V0 CisgICAgICAgICB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGNvbnRpbnVlIGNvbnN1bWluZyBt b3JlIG1lbW9yeSByYXRoZXIgdGhhbgorICAgICAgICAgcGVyZm9ybWluZyBkaXNrLWJhc2VkIGhh c2ggYWdncmVnYXRpb24uIFRoZSBkZWZhdWx0CisgICAgICAgICBpcyA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtc3RhY2stZGVwdGgiIHhy ZWZsYWJlbD0ibWF4X3N0YWNrX2RlcHRoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9zdGFj a19kZXB0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KQEAgLTQ0NTEsNiArNDQ2OCwyNCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1oYXNoYWdnLXNwaWxsIiB4cmVmbGFiZWw9ImVuYWJsZV9oYXNoYWdnX3Nw aWxsIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmlt YXJ5Pjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2Fi bGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFuCisg ICAgICAgIHR5cGVzIHdoZW4gdGhlIG1lbW9yeSB1c2FnZSBpcyBleHBlY3RlZCB0bworICAgICAg ICBleGNlZWQgPHZhcm5hbWU+d29ya19tZW08L3Zhcm5hbWU+LiBUaGlzIG9ubHkgYWZmZWN0cyB0 aGUgcGxhbm5lcgorICAgICAgICBjaG9pY2U7IGFjdHVhbCBiZWhhdmlvciBhdCBleGVjdXRpb24g dGltZSBpcyBkaWN0YXRlZCBieQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtaGFzaGFnZy1t ZW0tb3ZlcmZsb3ciLz4uIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWhhc2hqb2luIiB4cmVm bGFiZWw9ImVuYWJsZV9oYXNoam9pbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaGFz aGpvaW48L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggNjJmYjM0MzRhMzIuLjA5MmE3OWVhMTRmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMDIsNiArMTAyLDcgQEAgc3RhdGljIHZvaWQgc2hvd190 YWJsZXNhbXBsZShUYWJsZVNhbXBsZUNsYXVzZSAqdHNjLCBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwK IAkJCQkJCQkgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfc29ydF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsK IHN0YXRpYyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICpoYXNo c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5m byhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAq cWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xODI2LDYgKzE4MjcsOCBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQljYXNlIFRfQWdnOgogCQkJc2hv d19hZ2dfa2V5cyhjYXN0Tm9kZShBZ2dTdGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7 CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5j ZXN0b3JzLCBlcyk7CisJCQlpZiAoZXMtPmFuYWx5emUpCisJCQkJc2hvd19oYXNoYWdnX2luZm8o KEFnZ1N0YXRlICopIHBsYW5zdGF0ZSwgZXMpOwogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwpAQCAtMjcxNSw2ICsyNzE4LDU2IEBAIHNob3dfaGFz aF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCX0KIH0KIAor LyoKKyAqIElmIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBpbmZvcm1hdGlvbiBvbiBoYXNoIGFnZ3Jl Z2F0ZSBtZW1vcnkgdXNhZ2UgYW5kCisgKiBiYXRjaGVzLgorICovCitzdGF0aWMgdm9pZAorc2hv d19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorewor CUFnZwkJKmFnZwkgICA9IChBZ2cgKilhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKwlsb25nCSBtZW1Q ZWFrS2IgPSAoYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgKyAxMDIzKSAvIDEwMjQ7CisJbG9uZwkg ZGlza0tiICAgID0gKGFnZ3N0YXRlLT5oYXNoX2Rpc2tfdXNlZCArIDEwMjMpIC8gMTAyNDsKKwor CisJQXNzZXJ0KElzQShhZ2dzdGF0ZSwgQWdnU3RhdGUpKTsKKworCWlmIChhZ2ctPmFnZ3N0cmF0 ZWd5ICE9IEFHR19IQVNIRUQgJiYKKwkJYWdnLT5hZ2dzdHJhdGVneSAhPSBBR0dfTUlYRUQpCisJ CXJldHVybjsKKworCWlmIChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKGVzLT5zdHIsIGVzLT5pbmRlbnQgKiAyKTsKKwkJYXBw ZW5kU3RyaW5nSW5mbygKKwkJCWVzLT5zdHIsCisJCQkiTWVtb3J5IFVzYWdlOiAlbGRrQiIsCisJ CQltZW1QZWFrS2IpOworCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQgPiAwKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKAorCQkJCWVzLT5zdHIsCisJCQkJIiAgQmF0Y2hlczog JWQgIERpc2sgVXNhZ2U6JWxka0IiLAorCQkJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCwg ZGlza0tiKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm8oCisJCQllcy0+c3RyLAorCQkJIlxu Iik7CisJfQorCWVsc2UKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlBlYWsgTWVtb3J5 IFVzYWdlIiwgImtCIiwgbWVtUGVha0tiLCBlcyk7CisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRj aGVzX3VzZWQgPiAwKQorCQl7CisJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJIYXNoQWdnIEJh dGNoZXMiLCBOVUxMLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQsIGVz KTsKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkRpc2sgVXNhZ2UiLCAia0IiLCBkaXNrS2Is IGVzKTsKKwkJfQorCX0KK30KKwogLyoKICAqIElmIGl0J3MgRVhQTEFJTiBBTkFMWVpFLCBzaG93 IGV4YWN0L2xvc3N5IHBhZ2VzIGZvciBhIEJpdG1hcEhlYXBTY2FuIG5vZGUKICAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggN2U0ODY0NDllY2EuLmI2ZDgwZWJlMTRjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTc5LDcgKzc5LDggQEAgc3RhdGljIHZvaWQgRXhlY0luaXRDb2Vy Y2VUb0RvbWFpbihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9tYWluICpjdGVzdCwK IHN0YXRpYyB2b2lkIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dT dGF0ZSAqYWdnc3RhdGUsCiAJCQkJCQkJCSAgRXhwckV2YWxTdGVwICpzY3JhdGNoLAogCQkJCQkJ CQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAot CQkJCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNo KTsKKwkJCQkJCQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlz aGFzaCwKKwkJCQkJCQkJICBib29sIHNwaWxsZWQpOwogCiAKIC8qCkBAIC0yOTI3LDcgKzI5Mjgs NyBAQCBFeGVjSW5pdENvZXJjZVRvRG9tYWluKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgQ29lcmNl VG9Eb21haW4gKmN0ZXN0LAogICovCiBFeHByU3RhdGUgKgogRXhlY0J1aWxkQWdnVHJhbnMoQWdn U3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAotCQkJCSAgYm9vbCBkb1Nv cnQsIGJvb2wgZG9IYXNoKQorCQkJCSAgYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoLCBib29sIHNw aWxsZWQpCiB7CiAJRXhwclN0YXRlICAqc3RhdGUgPSBtYWtlTm9kZShFeHByU3RhdGUpOwogCVBs YW5TdGF0ZSAgKnBhcmVudCA9ICZhZ2dzdGF0ZS0+c3MucHM7CkBAIC0zMTYwLDcgKzMxNjEsOCBA QCBFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2Ug cGhhc2UsCiAJCQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBwcm9jZXNzR3JvdXBpbmdTZXRzOyBz ZXRubysrKQogCQkJewogCQkJCUV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChzdGF0ZSwgYWdnc3RhdGUs ICZzY3JhdGNoLCB0cmFuc19mY2luZm8sCi0JCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBz ZXRubywgc2V0b2ZmLCBmYWxzZSk7CisJCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRu bywgc2V0b2ZmLCBmYWxzZSwKKwkJCQkJCQkJCSAgc3BpbGxlZCk7CiAJCQkJc2V0b2ZmKys7CiAJ CQl9CiAJCX0KQEAgLTMxNzgsNyArMzE4MCw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRl ICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKIAkJCWZvciAoc2V0bm8gPSAwOyBz ZXRubyA8IG51bUhhc2hlczsgc2V0bm8rKykKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0Nh bGwoc3RhdGUsIGFnZ3N0YXRlLCAmc2NyYXRjaCwgdHJhbnNfZmNpbmZvLAotCQkJCQkJCQkJICBw ZXJ0cmFucywgdHJhbnNubywgc2V0bm8sIHNldG9mZiwgdHJ1ZSk7CisJCQkJCQkJCQkgIHBlcnRy YW5zLCB0cmFuc25vLCBzZXRubywgc2V0b2ZmLCB0cnVlLAorCQkJCQkJCQkJICBzcGlsbGVkKTsK IAkJCQlzZXRvZmYrKzsKIAkJCX0KIAkJfQpAQCAtMzIyNiw3ICszMjI5LDggQEAgc3RhdGljIHZv aWQKIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdn c3RhdGUsCiAJCQkJCSAgRXhwckV2YWxTdGVwICpzY3JhdGNoLAogCQkJCQkgIEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAotCQkJCQkgIGludCB0cmFu c25vLCBpbnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoKQorCQkJCQkgIGludCB0cmFu c25vLCBpbnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoLAorCQkJCQkgIGJvb2wgc3Bp bGxlZCkKIHsKIAlpbnQJCQlhZGp1c3RfaW5pdF9qdW1wbnVsbCA9IC0xOwogCWludAkJCWFkanVz dF9zdHJpY3RfanVtcG51bGwgPSAtMTsKQEAgLTMyNDgsNyArMzI1Miw4IEBAIEV4ZWNCdWlsZEFn Z1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCWZjaW5m by0+ZmxpbmZvLT5mbl9zdHJpY3QgJiYKIAkJcGVydHJhbnMtPmluaXRWYWx1ZUlzTnVsbCkKIAl7 Ci0JCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfQUdHX0lOSVRfVFJBTlM7CisJCXNjcmF0Y2gtPm9w Y29kZSA9IHNwaWxsZWQgPworCQkJRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEIDogRUVPUF9B R0dfSU5JVF9UUkFOUzsKIAkJc2NyYXRjaC0+ZC5hZ2dfaW5pdF90cmFucy5hZ2dzdGF0ZSA9IGFn Z3N0YXRlOwogCQlzY3JhdGNoLT5kLmFnZ19pbml0X3RyYW5zLnBlcnRyYW5zID0gcGVydHJhbnM7 CiAJCXNjcmF0Y2gtPmQuYWdnX2luaXRfdHJhbnMuc2V0bm8gPSBzZXRubzsKQEAgLTMyNjUsNyAr MzI3MCw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0 ZSAqYWdnc3RhdGUsCiAJaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwICYmCiAJCWZjaW5m by0+ZmxpbmZvLT5mbl9zdHJpY3QpCiAJewotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19T VFJJQ1RfVFJBTlNfQ0hFQ0s7CisJCXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJRUVP UF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQgOiBFRU9QX0FHR19TVFJJQ1RfVFJBTlNf Q0hFQ0s7CiAJCXNjcmF0Y2gtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5hZ2dzdGF0ZSA9IGFn Z3N0YXRlOwogCQlzY3JhdGNoLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0bm8gPSBzZXRu bzsKIAkJc2NyYXRjaC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnNldG9mZiA9IHNldG9mZjsK QEAgLTMyODMsOSArMzI4OSwxMSBAQCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpz dGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRlLAogCiAJLyogaW52b2tlIGFwcHJvcHJpYXRlIHRyYW5z aXRpb24gaW1wbGVtZW50YXRpb24gKi8KIAlpZiAocGVydHJhbnMtPm51bVNvcnRDb2xzID09IDAg JiYgcGVydHJhbnMtPnRyYW5zdHlwZUJ5VmFsKQotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FH R19QTEFJTl9UUkFOU19CWVZBTDsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gc3BpbGxlZCA/CisJCQlF RU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTF9TUElMTEVEIDogRUVPUF9BR0dfUExBSU5fVFJBTlNf QllWQUw7CiAJZWxzZSBpZiAocGVydHJhbnMtPm51bVNvcnRDb2xzID09IDApCi0JCXNjcmF0Y2gt Pm9wY29kZSA9IEVFT1BfQUdHX1BMQUlOX1RSQU5TOworCQlzY3JhdGNoLT5vcGNvZGUgPSBzcGls bGVkID8KKwkJCUVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQgOiBFRU9QX0FHR19QTEFJTl9U UkFOUzsKIAllbHNlIGlmIChwZXJ0cmFucy0+bnVtSW5wdXRzID09IDEpCiAJCXNjcmF0Y2gtPm9w Y29kZSA9IEVFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU07CiAJZWxzZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggZGJlZDU5NzgxNjIuLjQ5ZmJmOGU0YTQyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQzMCw5ICs0MzAsMTMgQEAgRXhl Y0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29s ICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKIAkJ JiZDQVNFX0VFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19OVUxMUywKIAkJJiZDQVNFX0VFT1Bf QUdHX0lOSVRfVFJBTlMsCisJCSYmQ0FTRV9FRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQsCiAJ CSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0ssCisJCSYmQ0FTRV9FRU9QX0FHR19T VFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5T X0JZVkFMLAorCQkmJkNBU0VfRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCwKIAkJ JiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TLAorCQkmJkNBU0VfRUVPUF9BR0dfUExBSU5fVFJB TlNfU1BJTExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU0sCiAJCSYm Q0FTRV9FRU9QX0FHR19PUkRFUkVEX1RSQU5TX1RVUExFLAogCQkmJkNBU0VfRUVPUF9MQVNUCkBA IC0xNjI1LDYgKzE2MjksMzYgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0K KwkJRUVPX0NBU0UoRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEKQorCQl7CisJCQlBZ2dTdGF0 ZSAgICphZ2dzdGF0ZTsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0 ZVBlckdyb3VwIHBlcmdyb3VwX2FsbGFnZ3M7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQuYWdnX2lu aXRfdHJhbnMuYWdnc3RhdGU7CisJCQlwZXJncm91cF9hbGxhZ2dzID0gYWdnc3RhdGUtPmFsbF9w ZXJncm91cHNbb3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0b2ZmXTsKKworCQkJaWYgKHBlcmdyb3Vw X2FsbGFnZ3MgPT0gTlVMTCkKKwkJCQlFRU9fTkVYVCgpOworCisJCQlwZXJncm91cCA9ICZwZXJn cm91cF9hbGxhZ2dzW29wLT5kLmFnZ19pbml0X3RyYW5zLnRyYW5zbm9dOworCisJCQkvKiBJZiB0 cmFuc1ZhbHVlIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQsIGRvIHNvIG5vdy4gKi8KKwkJ CWlmIChwZXJncm91cC0+bm9UcmFuc1ZhbHVlKQorCQkJeworCQkJCUFnZ1N0YXRlUGVyVHJhbnMg cGVydHJhbnMgPSBvcC0+ZC5hZ2dfaW5pdF90cmFucy5wZXJ0cmFuczsKKworCQkJCWFnZ3N0YXRl LT5jdXJhZ2djb250ZXh0ID0gb3AtPmQuYWdnX2luaXRfdHJhbnMuYWdnY29udGV4dDsKKwkJCQlh Z2dzdGF0ZS0+Y3VycmVudF9zZXQgPSBvcC0+ZC5hZ2dfaW5pdF90cmFucy5zZXRubzsKKworCQkJ CUV4ZWNBZ2dJbml0R3JvdXAoYWdnc3RhdGUsIHBlcnRyYW5zLCBwZXJncm91cCk7CisKKwkJCQkv KiBjb3BpZWQgdHJhbnMgdmFsdWUgZnJvbSBpbnB1dCwgZG9uZSB0aGlzIHJvdW5kICovCisJCQkJ RUVPX0pVTVAob3AtPmQuYWdnX2luaXRfdHJhbnMuanVtcG51bGwpOworCQkJfQorCisJCQlFRU9f TkVYVCgpOworCQl9CiAKIAkJLyogY2hlY2sgdGhhdCBhIHN0cmljdCBhZ2dyZWdhdGUncyBpbnB1 dCBpc24ndCBOVUxMICovCiAJCUVFT19DQVNFKEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDSykK QEAgLTE2NDIsNiArMTY3NiwyNSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBF eHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAogCQkJRUVPX05FWFQoKTsKIAkJ fQorCQlFRU9fQ0FTRShFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCkKKwkJewor CQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOwor CQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cF9hbGxhZ2dzOworCisJCQlhZ2dzdGF0ZSA9IG9w LT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suYWdnc3RhdGU7CisJCQlwZXJncm91cF9hbGxhZ2dz ID0gYWdnc3RhdGUtPmFsbF9wZXJncm91cHNbb3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5z ZXRvZmZdOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQorCQkJCUVFT19ORVhU KCk7CisKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQuYWdnX3N0cmljdF90 cmFuc19jaGVjay50cmFuc25vXTsKKworCQkJaWYgKHVubGlrZWx5KHBlcmdyb3VwLT50cmFuc1Zh bHVlSXNOdWxsKSkKKwkJCQlFRU9fSlVNUChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLmp1 bXBudWxsKTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQogCiAJCS8qCiAJCSAqIEV2YWx1YXRlIGFn Z3JlZ2F0ZSB0cmFuc2l0aW9uIC8gY29tYmluZSBmdW5jdGlvbiB0aGF0IGhhcyBhCkBAIC0xNjkx LDYgKzE3NDQsNTIgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJRUVP X0NBU0UoRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCkKKwkJeworCQkJQWdnU3Rh dGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOworCQkJQWdnU3Rh dGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXBfYWxsYWdn czsKKwkJCUZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvOworCQkJTWVtb3J5Q29udGV4dCBvbGRDb250 ZXh0OworCQkJRGF0dW0JCW5ld1ZhbDsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5hZ2dfdHJhbnMu YWdnc3RhdGU7CisJCQlwZXJ0cmFucyA9IG9wLT5kLmFnZ190cmFucy5wZXJ0cmFuczsKKworCQkJ cGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5kLmFnZ190cmFu cy5zZXRvZmZdOworCQkJcGVyZ3JvdXAgPSAmcGVyZ3JvdXBfYWxsYWdnc1tvcC0+ZC5hZ2dfdHJh bnMudHJhbnNub107CisKKwkJCWlmIChwZXJncm91cF9hbGxhZ2dzID09IE5VTEwpCisJCQkJRUVP X05FWFQoKTsKKworCQkJQXNzZXJ0KHBlcnRyYW5zLT50cmFuc3R5cGVCeVZhbCk7CisKKwkJCWZj aW5mbyA9IHBlcnRyYW5zLT50cmFuc2ZuX2ZjaW5mbzsKKworCQkJLyogY2YuIHNlbGVjdF9jdXJy ZW50X3NldCgpICovCisJCQlhZ2dzdGF0ZS0+Y3VyYWdnY29udGV4dCA9IG9wLT5kLmFnZ190cmFu cy5hZ2djb250ZXh0OworCQkJYWdnc3RhdGUtPmN1cnJlbnRfc2V0ID0gb3AtPmQuYWdnX3RyYW5z LnNldG5vOworCisJCQkvKiBzZXQgdXAgYWdnc3RhdGUtPmN1cnBlcnRyYW5zIGZvciBBZ2dHZXRB Z2dyZWYoKSAqLworCQkJYWdnc3RhdGUtPmN1cnBlcnRyYW5zID0gcGVydHJhbnM7CisKKwkJCS8q IGludm9rZSB0cmFuc2l0aW9uIGZ1bmN0aW9uIGluIHBlci10dXBsZSBjb250ZXh0ICovCisJCQlv bGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT50bXBjb250ZXh0LT5l Y3h0X3Blcl90dXBsZV9tZW1vcnkpOworCisJCQlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSBwZXJn cm91cC0+dHJhbnNWYWx1ZTsKKwkJCWZjaW5mby0+YXJnc1swXS5pc251bGwgPSBwZXJncm91cC0+ dHJhbnNWYWx1ZUlzTnVsbDsKKwkJCWZjaW5mby0+aXNudWxsID0gZmFsc2U7IC8qIGp1c3QgaW4g Y2FzZSB0cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisKKwkJCW5ld1ZhbCA9IEZ1bmN0aW9uQ2Fs bEludm9rZShmY2luZm8pOworCisJCQlwZXJncm91cC0+dHJhbnNWYWx1ZSA9IG5ld1ZhbDsKKwkJ CXBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsID0gZmNpbmZvLT5pc251bGw7CisKKwkJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQogCiAJ CS8qCiAJCSAqIEV2YWx1YXRlIGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uIC8gY29tYmluZSBmdW5jdGlv biB0aGF0IGhhcyBhCkBAIC0xNzU2LDYgKzE4NTUsNjcgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVF T19ORVhUKCk7CiAJCX0KKwkJRUVPX0NBU0UoRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCkK KwkJeworCQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRy YW5zOworCQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAg cGVyZ3JvdXBfYWxsYWdnczsKKwkJCUZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvOworCQkJTWVtb3J5 Q29udGV4dCBvbGRDb250ZXh0OworCQkJRGF0dW0JCW5ld1ZhbDsKKworCQkJYWdnc3RhdGUgPSBv cC0+ZC5hZ2dfdHJhbnMuYWdnc3RhdGU7CisJCQlwZXJ0cmFucyA9IG9wLT5kLmFnZ190cmFucy5w ZXJ0cmFuczsKKworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBz W29wLT5kLmFnZ190cmFucy5zZXRvZmZdOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBO VUxMKQorCQkJCUVFT19ORVhUKCk7CisKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nb b3AtPmQuYWdnX3RyYW5zLnRyYW5zbm9dOworCisJCQlBc3NlcnQoIXBlcnRyYW5zLT50cmFuc3R5 cGVCeVZhbCk7CisKKwkJCWZjaW5mbyA9IHBlcnRyYW5zLT50cmFuc2ZuX2ZjaW5mbzsKKworCQkJ LyogY2YuIHNlbGVjdF9jdXJyZW50X3NldCgpICovCisJCQlhZ2dzdGF0ZS0+Y3VyYWdnY29udGV4 dCA9IG9wLT5kLmFnZ190cmFucy5hZ2djb250ZXh0OworCQkJYWdnc3RhdGUtPmN1cnJlbnRfc2V0 ID0gb3AtPmQuYWdnX3RyYW5zLnNldG5vOworCisJCQkvKiBzZXQgdXAgYWdnc3RhdGUtPmN1cnBl cnRyYW5zIGZvciBBZ2dHZXRBZ2dyZWYoKSAqLworCQkJYWdnc3RhdGUtPmN1cnBlcnRyYW5zID0g cGVydHJhbnM7CisKKwkJCS8qIGludm9rZSB0cmFuc2l0aW9uIGZ1bmN0aW9uIGluIHBlci10dXBs ZSBjb250ZXh0ICovCisJCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0 YXRlLT50bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOworCisJCQlmY2luZm8tPmFy Z3NbMF0udmFsdWUgPSBwZXJncm91cC0+dHJhbnNWYWx1ZTsKKwkJCWZjaW5mby0+YXJnc1swXS5p c251bGwgPSBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbDsKKwkJCWZjaW5mby0+aXNudWxsID0g ZmFsc2U7IC8qIGp1c3QgaW4gY2FzZSB0cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisKKwkJCW5l d1ZhbCA9IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOworCisJCQkvKgorCQkJICogRm9yIHBh c3MtYnktcmVmIGRhdGF0eXBlLCBtdXN0IGNvcHkgdGhlIG5ldyB2YWx1ZSBpbnRvCisJCQkgKiBh Z2djb250ZXh0IGFuZCBmcmVlIHRoZSBwcmlvciB0cmFuc1ZhbHVlLiAgQnV0IGlmIHRyYW5zZm4K KwkJCSAqIHJldHVybmVkIGEgcG9pbnRlciB0byBpdHMgZmlyc3QgaW5wdXQsIHdlIGRvbid0IG5l ZWQgdG8gZG8KKwkJCSAqIGFueXRoaW5nLiAgQWxzbywgaWYgdHJhbnNmbiByZXR1cm5lZCBhIHBv aW50ZXIgdG8gYSBSL1cKKwkJCSAqIGV4cGFuZGVkIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgYSBj aGlsZCBvZiB0aGUgYWdnY29udGV4dCwKKwkJCSAqIGFzc3VtZSB3ZSBjYW4gYWRvcHQgdGhhdCB2 YWx1ZSB3aXRob3V0IGNvcHlpbmcgaXQuCisJCQkgKi8KKwkJCWlmIChEYXR1bUdldFBvaW50ZXIo bmV3VmFsKSAhPSBEYXR1bUdldFBvaW50ZXIocGVyZ3JvdXAtPnRyYW5zVmFsdWUpKQorCQkJCW5l d1ZhbCA9IEV4ZWNBZ2dUcmFuc1JlcGFyZW50KGFnZ3N0YXRlLCBwZXJ0cmFucywKKwkJCQkJCQkJ CQkJICBuZXdWYWwsIGZjaW5mby0+aXNudWxsLAorCQkJCQkJCQkJCQkgIHBlcmdyb3VwLT50cmFu c1ZhbHVlLAorCQkJCQkJCQkJCQkgIHBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsKTsKKworCQkJ cGVyZ3JvdXAtPnRyYW5zVmFsdWUgPSBuZXdWYWw7CisJCQlwZXJncm91cC0+dHJhbnNWYWx1ZUlz TnVsbCA9IGZjaW5mby0+aXNudWxsOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29u dGV4dCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKiBwcm9jZXNzIHNpbmdsZS1jb2x1 bW4gb3JkZXJlZCBhZ2dyZWdhdGUgZGF0dW0gKi8KIAkJRUVPX0NBU0UoRUVPUF9BR0dfT1JERVJF RF9UUkFOU19EQVRVTSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91 cGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3VwaW5nLmMKaW5kZXggN2JjNWU0 MDViY2MuLmQ5MjAzN2U4YjRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj R3JvdXBpbmcuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcuYwpAQCAt MjUsOCArMjUsOSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCiAKLXN0YXRpYyB1aW50MzIgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVj dCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSk7CiBzdGF0aWMg aW50CVR1cGxlSGFzaFRhYmxlTWF0Y2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0YiwgY29uc3Qg TWluaW1hbFR1cGxlIHR1cGxlMSwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlMik7CitzdGF0aWMg VHVwbGVIYXNoRW50cnkgTG9va3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoCisJVHVwbGVIYXNo VGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaXNuZXcsIHVpbnQz MiBoYXNoKTsKIAogLyoKICAqIERlZmluZSBwYXJhbWV0ZXJzIGZvciB0dXBsZSBoYXNoIHRhYmxl IGNvZGUgZ2VuZXJhdGlvbi4gVGhlIGludGVyZmFjZSBpcwpAQCAtMjg0LDYgKzI4NSwxNyBAQCBS ZXNldFR1cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSkKIAl0dXBsZWhhc2hf cmVzZXQoaGFzaHRhYmxlLT5oYXNodGFiKTsKIH0KIAorLyoKKyAqIERlc3Ryb3kgdGhlIGhhc2gg dGFibGUuIE5vdGUgdGhhdCB0aGUgdGFibGVjeHQgcGFzc2VkIHRvCisgKiBCdWlsZFR1cGxlSGFz aFRhYmxlRXh0KCkgc2hvdWxkIGFsc28gYmUgcmVzZXQsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJl CisgKiBsZWFrcy4KKyAqLwordm9pZAorRGVzdHJveVR1cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRh YmxlIGhhc2h0YWJsZSkKK3sKKwl0dXBsZWhhc2hfZGVzdHJveShoYXNodGFibGUtPmhhc2h0YWIp OworfQorCiAvKgogICogRmluZCBvciBjcmVhdGUgYSBoYXNodGFibGUgZW50cnkgZm9yIHRoZSB0 dXBsZSBncm91cCBjb250YWluaW5nIHRoZQogICogZ2l2ZW4gdHVwbGUuICBUaGUgdHVwbGUgbXVz dCBiZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBoYXNodGFibGUgZW50cmllcy4KQEAgLTMwMCwxMCAr MzEyLDkgQEAgVHVwbGVIYXNoRW50cnkKIExvb2t1cFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRh YmxlIGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCSBib29sICppc25ldykK IHsKLQlUdXBsZUhhc2hFbnRyeURhdGEgKmVudHJ5OwotCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4 dDsKLQlib29sCQlmb3VuZDsKLQlNaW5pbWFsVHVwbGUga2V5OworCVR1cGxlSGFzaEVudHJ5CWVu dHJ5OworCU1lbW9yeUNvbnRleHQJb2xkQ29udGV4dDsKKwl1aW50MzIJCQloYXNoOwogCiAJLyog TmVlZCB0byBydW4gdGhlIGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8K IAlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7 CkBAIC0zMTMsMzIgKzMyNCwyOSBAQCBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJs ZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCWhhc2h0YWJsZS0+aW5faGFzaF9m dW5jcyA9IGhhc2h0YWJsZS0+dGFiX2hhc2hfZnVuY3M7CiAJaGFzaHRhYmxlLT5jdXJfZXFfZnVu YyA9IGhhc2h0YWJsZS0+dGFiX2VxX2Z1bmM7CiAKLQlrZXkgPSBOVUxMOwkJCQkJLyogZmxhZyB0 byByZWZlcmVuY2UgaW5wdXRzbG90ICovCisJaGFzaCA9IFR1cGxlSGFzaFRhYmxlSGFzaChoYXNo dGFibGUtPmhhc2h0YWIsIE5VTEwpOworCWVudHJ5ID0gTG9va3VwVHVwbGVIYXNoRW50cnlfaW50 ZXJuYWwoaGFzaHRhYmxlLCBzbG90LCBpc25ldywgaGFzaCk7CiAKLQlpZiAoaXNuZXcpCi0Jewot CQllbnRyeSA9IHR1cGxlaGFzaF9pbnNlcnQoaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksICZmb3Vu ZCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCi0JCWlmIChmb3VuZCkK LQkJewotCQkJLyogZm91bmQgcHJlLWV4aXN0aW5nIGVudHJ5ICovCi0JCQkqaXNuZXcgPSBmYWxz ZTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIGNyZWF0ZWQgbmV3IGVudHJ5ICovCi0JCQkqaXNu ZXcgPSB0cnVlOwotCQkJLyogemVybyBjYWxsZXIgZGF0YSAqLwotCQkJZW50cnktPmFkZGl0aW9u YWwgPSBOVUxMOwotCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGFibGVjeHQp OwotCQkJLyogQ29weSB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGUgdGFibGUgY29udGV4dCAqLwot CQkJZW50cnktPmZpcnN0VHVwbGUgPSBFeGVjQ29weVNsb3RNaW5pbWFsVHVwbGUoc2xvdCk7Ci0J CX0KLQl9Ci0JZWxzZQotCXsKLQkJZW50cnkgPSB0dXBsZWhhc2hfbG9va3VwKGhhc2h0YWJsZS0+ aGFzaHRhYiwga2V5KTsKLQl9CisJcmV0dXJuIGVudHJ5OworfQorCisvKgorICogQSB2YXJpYW50 IG9mIExvb2t1cFR1cGxlSGFzaEVudHJ5IGZvciBjYWxsZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGNv bXB1dGVkCisgKiB0aGUgaGFzaCB2YWx1ZS4KKyAqLworVHVwbGVIYXNoRW50cnkKK0xvb2t1cFR1 cGxlSGFzaEVudHJ5SGFzaChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90 ICpzbG90LAorCQkJCQkJIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFzaCkKK3sKKwlUdXBsZUhhc2hF bnRyeQllbnRyeTsKKwlNZW1vcnlDb250ZXh0CW9sZENvbnRleHQ7CisKKwkvKiBOZWVkIHRvIHJ1 biB0aGUgaGFzaCBmdW5jdGlvbnMgaW4gc2hvcnQtbGl2ZWQgY29udGV4dCAqLworCW9sZENvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRhYmxlLT50ZW1wY3h0KTsKKworCWVudHJ5 ID0gTG9va3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoaGFzaHRhYmxlLCBzbG90LCBpc25ldywg aGFzaCk7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CiAKQEAgLTM4Miwx NyArMzkwLDEyIEBAIEZpbmRUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAogLyoKICAqIENvbXB1dGUgdGhlIGhhc2ggdmFsdWUgZm9y IGEgdHVwbGUKICAqCi0gKiBUaGUgcGFzc2VkLWluIGtleSBpcyBhIHBvaW50ZXIgdG8gVHVwbGVI YXNoRW50cnlEYXRhLiAgSW4gYW4gYWN0dWFsIGhhc2gKLSAqIHRhYmxlIGVudHJ5LCB0aGUgZmly c3RUdXBsZSBmaWVsZCBwb2ludHMgdG8gYSB0dXBsZSAoaW4gTWluaW1hbFR1cGxlCi0gKiBmb3Jt YXQpLiAgTG9va3VwVHVwbGVIYXNoRW50cnkgc2V0cyB1cCBhIGR1bW15IFR1cGxlSGFzaEVudHJ5 RGF0YSB3aXRoIGEKLSAqIE5VTEwgZmlyc3RUdXBsZSBmaWVsZCAtLS0gdGhhdCBjdWVzIHVzIHRv IGxvb2sgYXQgdGhlIGlucHV0c2xvdCBpbnN0ZWFkLgotICogVGhpcyBjb252ZW50aW9uIGF2b2lk cyB0aGUgbmVlZCB0byBtYXRlcmlhbGl6ZSB2aXJ0dWFsIGlucHV0IHR1cGxlcyB1bmxlc3MKLSAq IHRoZXkgYWN0dWFsbHkgbmVlZCB0byBnZXQgY29waWVkIGludG8gdGhlIHRhYmxlLgorICogSWYg dHVwbGUgaXMgTlVMTCwgdXNlIHRoZSBpbnB1dCBzbG90IGluc3RlYWQuCiAgKgogICogQWxzbywg dGhlIGNhbGxlciBtdXN0IHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBtZW1vcnkgY29udGV4dCBmb3Ig cnVubmluZwogICogdGhlIGhhc2ggZnVuY3Rpb25zLiAoZHluYWhhc2guYyBkb2Vzbid0IGNoYW5n ZSBDdXJyZW50TWVtb3J5Q29udGV4dC4pCiAgKi8KLXN0YXRpYyB1aW50MzIKK3VpbnQzMgogVHVw bGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmltYWxU dXBsZSB0dXBsZSkKIHsKIAlUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUgPSAoVHVwbGVIYXNoVGFi bGUpIHRiLT5wcml2YXRlX2RhdGE7CkBAIC00MTMsOSArNDE2LDYgQEAgVHVwbGVIYXNoVGFibGVI YXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSkK IAl7CiAJCS8qCiAJCSAqIFByb2Nlc3MgYSB0dXBsZSBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgdGFi bGUuCi0JCSAqCi0JCSAqICh0aGlzIGNhc2UgbmV2ZXIgYWN0dWFsbHkgb2NjdXJzIGR1ZSB0byB0 aGUgd2F5IHNpbXBsZWhhc2guaCBpcwotCQkgKiB1c2VkLCBhcyB0aGUgaGFzaC12YWx1ZSBpcyBz dG9yZWQgaW4gdGhlIGVudHJpZXMpCiAJCSAqLwogCQlzbG90ID0gaGFzaHRhYmxlLT50YWJsZXNs b3Q7CiAJCUV4ZWNTdG9yZU1pbmltYWxUdXBsZSh0dXBsZSwgc2xvdCwgZmFsc2UpOwpAQCAtNDUz LDYgKzQ1Myw1NCBAQCBUdXBsZUhhc2hUYWJsZUhhc2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0 YiwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlKQogCXJldHVybiBtdXJtdXJoYXNoMzIoaGFzaGtl eSk7CiB9CiAKKy8qCisgKiBEb2VzIHRoZSB3b3JrIG9mIExvb2t1cFR1cGxlSGFzaEVudHJ5IGFu ZCBMb29rdXBUdXBsZUhhc2hFbnRyeUhhc2guIFVzZWZ1bAorICogc28gdGhhdCB3ZSBjYW4gYXZv aWQgc3dpdGNoaW5nIHRoZSBtZW1vcnkgY29udGV4dCBtdWx0aXBsZSB0aW1lcyBmb3IKKyAqIExv b2t1cFR1cGxlSGFzaEVudHJ5LgorICovCitzdGF0aWMgVHVwbGVIYXNoRW50cnkKK0xvb2t1cFR1 cGxlSGFzaEVudHJ5X2ludGVybmFsKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQkJICBib29sICppc25ldywgdWludDMyIGhhc2gpCit7CisJVHVw bGVIYXNoRW50cnlEYXRhICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlNaW5pbWFsVHVwbGUga2V5 OworCisJLyogc2V0IHVwIGRhdGEgbmVlZGVkIGJ5IGhhc2ggYW5kIG1hdGNoIGZ1bmN0aW9ucyAq LworCWhhc2h0YWJsZS0+aW5wdXRzbG90ID0gc2xvdDsKKwloYXNodGFibGUtPmluX2hhc2hfZnVu Y3MgPSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOworCWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMg PSBoYXNodGFibGUtPnRhYl9lcV9mdW5jOworCisJa2V5ID0gTlVMTDsJCQkJCS8qIGZsYWcgdG8g cmVmZXJlbmNlIGlucHV0c2xvdCAqLworCisJaWYgKGlzbmV3KQorCXsKKwkJZW50cnkgPSB0dXBs ZWhhc2hfaW5zZXJ0X2hhc2goaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksIGhhc2gsICZmb3VuZCk7 CisKKwkJaWYgKGZvdW5kKQorCQl7CisJCQkvKiBmb3VuZCBwcmUtZXhpc3RpbmcgZW50cnkgKi8K KwkJCSppc25ldyA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogY3JlYXRlZCBuZXcg ZW50cnkgKi8KKwkJCSppc25ldyA9IHRydWU7CisJCQkvKiB6ZXJvIGNhbGxlciBkYXRhICovCisJ CQllbnRyeS0+YWRkaXRpb25hbCA9IE5VTEw7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFz aHRhYmxlLT50YWJsZWN4dCk7CisJCQkvKiBDb3B5IHRoZSBmaXJzdCB0dXBsZSBpbnRvIHRoZSB0 YWJsZSBjb250ZXh0ICovCisJCQllbnRyeS0+Zmlyc3RUdXBsZSA9IEV4ZWNDb3B5U2xvdE1pbmlt YWxUdXBsZShzbG90KTsKKwkJfQorCX0KKwllbHNlCisJeworCQllbnRyeSA9IHR1cGxlaGFzaF9s b29rdXBfaGFzaChoYXNodGFibGUtPmhhc2h0YWIsIGtleSwgaGFzaCk7CisJfQorCisJcmV0dXJu IGVudHJ5OworfQorCiAvKgogICogU2VlIHdoZXRoZXIgdHdvIHR1cGxlcyAocHJlc3VtYWJseSBv ZiB0aGUgc2FtZSBoYXNoIHZhbHVlKSBtYXRjaAogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwppbmRl eCA2ZWUyNGVhYjNkMi4uZjUwOWM4ZThmNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTE5 NCw2ICsxOTQsMTggQEAKICAqCSAgdHJhbnNpdGlvbiB2YWx1ZXMuICBoYXNoY29udGV4dCBpcyB0 aGUgc2luZ2xlIGNvbnRleHQgY3JlYXRlZCB0byBzdXBwb3J0CiAgKgkgIGFsbCBoYXNoIHRhYmxl cy4KICAqCisgKgkgIFdoZW4gdGhlIGhhc2ggdGFibGUgbWVtb3J5IGV4Y2VlZHMgd29ya19tZW0s IHdlIGFkdmFuY2UgdGhlIHRyYW5zaXRpb24KKyAqCSAgc3RhdGVzIG9ubHkgZm9yIGdyb3VwcyBh bHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLiBGb3IgdHVwbGVzIHRoYXQgd291bGQKKyAqCSAgbmVl ZCB0byBjcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBlbnRyaWVzIChhbmQgaW5pdGlhbGl6ZSBuZXcg dHJhbnNpdGlvbgorICoJICBzdGF0ZXMpLCB3ZSBzcGlsbCB0aGVtIHRvIGRpc2sgdG8gYmUgcHJv Y2Vzc2VkIGxhdGVyLiBUaGUgdHVwbGVzIGFyZQorICoJICBzcGlsbGVkIGluIGEgcGFydGl0aW9u ZWQgbWFubmVyLCBzbyB0aGF0IHN1YnNlcXVlbnQgYmF0Y2hlcyBhcmUgc21hbGxlcgorICoJICBh bmQgbGVzcyBsaWtlbHkgdG8gZXhjZWVkIHdvcmtfbWVtIChpZiBhIGJhdGNoIGRvZXMgZXhjZWVk IHdvcmtfbWVtLCBpdAorICoJICBtdXN0IGJlIHNwaWxsZWQgcmVjdXJzaXZlbHkpLgorICoKKyAq CSAgTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHRyYW5zaXRpb24gc3RhdGVzIHRvIHN0YXJ0 IHNtYWxsIGJ1dCB0aGVuCisgKgkgIGdyb3cgdmVyeSBsYXJnZTsgZm9yIGluc3RhbmNlIGluIHRo ZSBjYXNlIG9mIEFSUkFZX0FHRy4gSW4gc3VjaCBjYXNlcywKKyAqCSAgaXQncyBzdGlsbCBwb3Nz aWJsZSB0byBzaWduaWZpY2FudGx5IGV4Y2VlZCB3b3JrX21lbS4KKyAqCiAgKiAgICBUcmFuc2l0 aW9uIC8gQ29tYmluZSBmdW5jdGlvbiBpbnZvY2F0aW9uOgogICoKICAqICAgIEZvciBwZXJmb3Jt YW5jZSByZWFzb25zIHRyYW5zaXRpb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgY29tYmluZQpAQCAt MjI5LDE1ICsyNDEsNzAgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2FnZy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2Uu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCisj aW5jbHVkZSAidXRpbHMvZHluYWhhc2guaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZGRhdHVt LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxl c29ydC5oIgogCisvKgorICogQ29udHJvbCBob3cgbWFueSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVk IHdoZW4gc3BpbGxpbmcgSGFzaEFnZyB0bworICogZGlzay4KKyAqCisgKiBIQVNIX1BBUlRJVElP Tl9GQUNUT1IgaXMgbXVsdGlwbGllZCBieSB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBwYXJ0aXRp b25zCisgKiBuZWVkZWQgc3VjaCB0aGF0IGVhY2ggcGFydGl0aW9uIHdpbGwgZml0IGluIG1lbW9y eS4gVGhlIGZhY3RvciBpcyBzZXQKKyAqIGhpZ2hlciB0aGFuIG9uZSBiZWNhdXNlIHRoZXJlJ3Mg bm90IGEgaGlnaCBjb3N0IHRvIGhhdmluZyBhIGZldyB0b28gbWFueQorICogcGFydGl0aW9ucywg YW5kIGl0IG1ha2VzIGl0IGxlc3MgbGlrZWx5IHRoYXQgYSBwYXJ0aXRpb24gd2lsbCBuZWVkIHRv IGJlCisgKiBzcGlsbGVkIHJlY3Vyc2l2ZWx5LiBBbm90aGVyIGJlbmVmaXQgb2YgaGF2aW5nIG1v cmUsIHNtYWxsZXIgcGFydGl0aW9ucyBpcworICogdGhhdCBzbWFsbCBoYXNoIHRhYmxlcyBtYXkg cGVyZm9ybSBiZXR0ZXIgdGhhbiBsYXJnZSBvbmVzIGR1ZSB0byBtZW1vcnkKKyAqIGNhY2hpbmcg ZWZmZWN0cy4KKyAqCisgKiBIQVNIX1BBUlRJVElPTl9NRU0gaXMgdGhlIGFwcHJveGltYXRlIGFt b3VudCBvZiB3b3JrX21lbSB3ZSBzaG91bGQgcmVzZXJ2ZQorICogZm9yIHRoZSBwYXJ0aXRpb25z IHRoZW1zZWx2ZXMgKGkuZS4gYnVmZmVyaW5nIG9mIHRoZSBmaWxlcyBiYWNraW5nIHRoZQorICog cGFydGl0aW9ucykuIFRoaXMgaXMgc2xvcHB5LCBiZWNhdXNlIHdlIG11c3QgcmVzZXJ2ZSB0aGUg bWVtb3J5IGJlZm9yZQorICogZmlsbGluZyB0aGUgaGFzaCB0YWJsZTsgYnV0IHdlIGNob29zZSB0 aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgYXQgdGhlIHRpbWUKKyAqIHdlIG5lZWQgdG8gc3BpbGwu CisgKgorICogV2UgYWxzbyBzcGVjaWZ5IGEgbWluIGFuZCBtYXggbnVtYmVyIG9mIHBhcnRpdGlv bnMgcGVyIHNwaWxsLiBUb28gZmV3IG1pZ2h0CisgKiBtZWFuIGEgbG90IG9mIHdhc3RlZCBJL08g ZnJvbSByZXBlYXRlZCBzcGlsbGluZyBvZiB0aGUgc2FtZSB0dXBsZXMuIFRvbworICogbWFueSB3 aWxsIHJlc3VsdCBpbiBsb3RzIG9mIG1lbW9yeSB3YXN0ZWQgYnVmZmVyaW5nIHRoZSBzcGlsbCBm aWxlcyAoYW5kCisgKiBwb3NzaWJseSBwdXNoaW5nIGhpZGRlbiBjb3N0cyB0byB0aGUgT1MgZm9y IG1hbmFnaW5nIG1vcmUgZmlsZXMpLgorICovCisjZGVmaW5lIEhBU0hfUEFSVElUSU9OX0ZBQ1RP UiAxLjUwCisjZGVmaW5lIEhBU0hfTUlOX1BBUlRJVElPTlMgNAorI2RlZmluZSBIQVNIX01BWF9Q QVJUSVRJT05TIDI1NgorI2RlZmluZSBIQVNIX1BBUlRJVElPTl9NRU0gKEhBU0hfTUlOX1BBUlRJ VElPTlMgKiBCTENLU1opCisKKy8qCisgKiBSZXByZXNlbnRzIHBhcnRpdGlvbmVkIHNwaWxsIGRh dGEgZm9yIGEgc2luZ2xlIGhhc2h0YWJsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEFnZ1Nw aWxsCit7CisJaW50ICAgICAgIG5fcGFydGl0aW9uczsJCS8qIG51bWJlciBvZiBvdXRwdXQgcGFy dGl0aW9ucyAqLworCWludCAgICAgICBwYXJ0aXRpb25fYml0czsJLyogbnVtYmVyIG9mIGJpdHMg Zm9yIHBhcnRpdGlvbiBtYXNrCisJCQkJCQkJCSAgIGxvZzIobl9wYXJ0aXRpb25zKSBwYXJlbnQg cGFydGl0aW9uIGJpdHMgKi8KKwlCdWZGaWxlICoqcGFydGl0aW9uczsJCS8qIG91dHB1dCBwYXJ0 aXRpb24gZmlsZXMgKi8KKwlpbnQ2NCAgICAqbnR1cGxlczsJCQkvKiBudW1iZXIgb2YgdHVwbGVz IGluIGVhY2ggcGFydGl0aW9uICovCit9IEhhc2hBZ2dTcGlsbDsKKworLyoKKyAqIFJlcHJlc2Vu dHMgd29yayB0byBiZSBkb25lIGZvciBvbmUgcGFzcyBvZiBoYXNoIGFnZ3JlZ2F0aW9uLiBJbml0 aWFsbHksCisgKiBvbmx5IHRoZSBpbnB1dCBmaWVsZHMgYXJlIHNldC4gSWYgc3BpbGxlZCB0byBk aXNrLCBhbHNvIHNldCB0aGUgc3BpbGwgZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEFn Z0JhdGNoCit7CisJQnVmRmlsZSAqaW5wdXRfZmlsZTsJCS8qIGlucHV0IHBhcnRpdGlvbiAqLwor CWludCAgICAgIGlucHV0X2JpdHM7CQkvKiBudW1iZXIgb2YgYml0cyBmb3IgaW5wdXQgcGFydGl0 aW9uIG1hc2sgKi8KKwlpbnQ2NCAgICBpbnB1dF9ncm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVy IG9mIGlucHV0IGdyb3VwcyAqLworCWludAkJIHNldG5vOwkJCQkvKiBncm91cGluZyBzZXQgKi8K KwlIYXNoQWdnU3BpbGwgc3BpbGw7CQkJLyogc3BpbGwgb3V0cHV0ICovCit9IEhhc2hBZ2dCYXRj aDsKKwogc3RhdGljIHZvaWQgc2VsZWN0X2N1cnJlbnRfc2V0KEFnZ1N0YXRlICphZ2dzdGF0ZSwg aW50IHNldG5vLCBib29sIGlzX2hhc2gpOwogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9waGFzZShB Z2dTdGF0ZSAqYWdnc3RhdGUsIGludCBuZXdwaGFzZSk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KmZldGNoX2lucHV0X3R1cGxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CkBAIC0yNzEsMTIgKzMzOCwz NSBAQCBzdGF0aWMgdm9pZCBmaW5hbGl6ZV9hZ2dyZWdhdGVzKEFnZ1N0YXRlICphZ2dzdGF0ZSwK IHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqcHJvamVjdF9hZ2dyZWdhdGVzKEFnZ1N0YXRlICphZ2dz dGF0ZSk7CiBzdGF0aWMgQml0bWFwc2V0ICpmaW5kX3VuYWdncmVnYXRlZF9jb2xzKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CiBzdGF0aWMgYm9vbCBmaW5kX3VuYWdncmVnYXRlZF9jb2xzX3dhbGtlcihO b2RlICpub2RlLCBCaXRtYXBzZXQgKipjb2xub3MpOwotc3RhdGljIHZvaWQgYnVpbGRfaGFzaF90 YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIFR1cGxlSGFzaEVudHJ5RGF0YSAqbG9v a3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB2b2lkIGJ1aWxkX2hh c2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgc2V0bm8sCisJCQkJCQkJIGludDY0IG5n cm91cHNfZXN0aW1hdGUpOworc3RhdGljIHZvaWQgcHJlcGFyZV9oYXNoX3Nsb3QoQWdnU3RhdGUg KmFnZ3N0YXRlKTsKK3N0YXRpYyB2b2lkIGhhc2hfcmVjb21waWxlX2V4cHJlc3Npb25zKEFnZ1N0 YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgdWludDMyIGNhbGN1bGF0ZV9oYXNoKEFnZ1N0YXRlICph Z2dzdGF0ZSk7CitzdGF0aWMgbG9uZyBoYXNoX2Nob29zZV9udW1fYnVja2V0cyhBZ2dTdGF0ZSAq YWdnc3RhdGUsCisJCQkJCQkJCQlsb25nIGVzdGltYXRlZF9uYnVja2V0cywKKwkJCQkJCQkJCVNp emUgbWVtb3J5KTsKK3N0YXRpYyBpbnQgaGFzaF9jaG9vc2VfbnVtX3NwaWxsX3BhcnRpdGlvbnMo dWludDY0IGlucHV0X3R1cGxlcywKKwkJCQkJCQkJCQkJZG91YmxlIGhhc2hlbnRyeXNpemUpOwor c3RhdGljIEFnZ1N0YXRlUGVyR3JvdXAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0 YXRlLCB1aW50MzIgaGFzaCk7CiBzdGF0aWMgdm9pZCBsb29rdXBfaGFzaF9lbnRyaWVzKEFnZ1N0 YXRlICphZ2dzdGF0ZSk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9kaXJl Y3QoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyB2b2lkIGFnZ19maWxsX2hhc2hfdGFibGUo QWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyBib29sIGFnZ19yZWZpbGxfaGFzaF90YWJsZShB Z2dTdGF0ZSAqYWdnc3RhdGUpOwogc3RhdGljIFR1cGxlVGFibGVTbG90ICphZ2dfcmV0cmlldmVf aGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIFR1cGxlVGFibGVTbG90ICph Z2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0 YXRpYyB2b2lkIGhhc2hfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBpbnQgaW5wdXRf Yml0cywKKwkJCQkJCQl1aW50NjQgaW5wdXRfdHVwbGVzLCBkb3VibGUgaGFzaGVudHJ5c2l6ZSk7 CitzdGF0aWMgU2l6ZSBoYXNoX3NwaWxsX3R1cGxlKEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBp bnB1dF9iaXRzLAorCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgdWludDMyIGhhc2gpOwor c3RhdGljIE1pbmltYWxUdXBsZSBoYXNoX3JlYWRfc3BpbGxlZChCdWZGaWxlICpmaWxlLCB1aW50 MzIgKmhhc2hwKTsKK3N0YXRpYyBIYXNoQWdnQmF0Y2ggKmhhc2hfYmF0Y2hfbmV3KEJ1ZkZpbGUg KmlucHV0X2ZpbGUsIGludCBzZXRubywKKwkJCQkJCQkJCWludDY0IGlucHV0X2dyb3VwcywgaW50 IGlucHV0X2JpdHMpOworc3RhdGljIHZvaWQgaGFzaF9maW5pc2hfaW5pdGlhbF9zcGlsbHMoQWdn U3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB2b2lkIGhhc2hfc3BpbGxfZmluaXNoKEFnZ1N0YXRl ICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwKKwkJCQkJCQkgIGludCBzZXRubywgaW50 IGlucHV0X2JpdHMpOworc3RhdGljIHZvaWQgaGFzaF9yZXNldF9zcGlsbChIYXNoQWdnU3BpbGwg KnNwaWxsKTsKK3N0YXRpYyB2b2lkIGhhc2hfcmVzZXRfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0 ZSk7CiBzdGF0aWMgRGF0dW0gR2V0QWdnSW5pdFZhbChEYXR1bSB0ZXh0SW5pdFZhbCwgT2lkIHRy YW5zdHlwZSk7CiBzdGF0aWMgdm9pZCBidWlsZF9wZXJ0cmFuc19mb3JfYWdncmVmKEFnZ1N0YXRl UGVyVHJhbnMgcGVydHJhbnMsCiAJCQkJCQkJCQkgIEFnZ1N0YXRlICphZ2dzdGF0ZSwgRVN0YXRl ICplc3RhdGUsCkBAIC0xMjU0LDE4ICsxMzQ0LDIwIEBAIGZpbmRfdW5hZ2dyZWdhdGVkX2NvbHNf d2Fsa2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbG5vcykKICAqIGZvciBlYWNoIGVudHJ5 LgogICoKICAqIFdlIGhhdmUgYSBzZXBhcmF0ZSBoYXNodGFibGUgYW5kIGFzc29jaWF0ZWQgcGVy aGFzaCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaAotICogZ3JvdXBpbmcgc2V0IGZvciB3aGljaCB3 ZSdyZSBkb2luZyBoYXNoaW5nLgorICogZ3JvdXBpbmcgc2V0IGZvciB3aGljaCB3ZSdyZSBkb2lu ZyBoYXNoaW5nLiBJZiBzZXRubyBpcyAtMSwgYnVpbGQgaGFzaAorICogdGFibGVzIGZvciBhbGwg Z3JvdXBpbmcgc2V0cy4gT3RoZXJ3aXNlLCBidWlsZCBvbmx5IGZvciB0aGUgc3BlY2lmaWVkCisg KiBncm91cGluZyBzZXQuCiAgKgogICogVGhlIGNvbnRlbnRzIG9mIHRoZSBoYXNoIHRhYmxlcyBh bHdheXMgbGl2ZSBpbiB0aGUgaGFzaGNvbnRleHQncyBwZXItdHVwbGUKICAqIG1lbW9yeSBjb250 ZXh0ICh0aGVyZSBpcyBvbmx5IG9uZSBvZiB0aGVzZSBmb3IgYWxsIHRhYmxlcyB0b2dldGhlciwg c2luY2UKICAqIHRoZXkgYXJlIGFsbCByZXNldCBhdCB0aGUgc2FtZSB0aW1lKS4KICAqLwogc3Rh dGljIHZvaWQKLWJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQorYnVpbGRfaGFz aF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBzZXRubywgbG9uZyBuZ3JvdXBzX2VzdGlt YXRlKQogewotCU1lbW9yeUNvbnRleHQgdG1wbWVtID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVj eHRfcGVyX3R1cGxlX21lbW9yeTsKLQlTaXplCQlhZGRpdGlvbmFsc2l6ZTsKLQlpbnQJCQlpOwor CU1lbW9yeUNvbnRleHQJdG1wbWVtID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfcGVyX3R1 cGxlX21lbW9yeTsKKwlTaXplICAgICAgICAgICAgYWRkaXRpb25hbHNpemU7CisJaW50CQkJCWk7 CiAKIAlBc3NlcnQoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19IQVNIRUQgfHwgYWdnc3Rh dGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCk7CiAKQEAgLTEyNzQsMjYgKzEzNjYsNzEgQEAg YnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJZm9yIChpID0gMDsgaSA8IGFn Z3N0YXRlLT5udW1faGFzaGVzOyArK2kpCiAJewogCQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9 ICZhZ2dzdGF0ZS0+cGVyaGFzaFtpXTsKKwkJaW50NjQJCQluZ3JvdXBzOworCQlsb25nCQkJbmJ1 Y2tldHM7CisJCVNpemUJCQltZW1vcnk7CiAKIAkJQXNzZXJ0KHBlcmhhc2gtPmFnZ25vZGUtPm51 bUdyb3VwcyA+IDApOwogCiAJCWlmIChwZXJoYXNoLT5oYXNodGFibGUpCi0JCQlSZXNldFR1cGxl SGFzaFRhYmxlKHBlcmhhc2gtPmhhc2h0YWJsZSk7Ci0JCWVsc2UKLQkJCXBlcmhhc2gtPmhhc2h0 YWJsZSA9IEJ1aWxkVHVwbGVIYXNoVGFibGVFeHQoJmFnZ3N0YXRlLT5zcy5wcywKLQkJCQkJCQkJ CQkJCQkJcGVyaGFzaC0+aGFzaHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3IsCi0JCQkJCQkJCQkJ CQkJCXBlcmhhc2gtPm51bUNvbHMsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmhhc2hHcnBDb2xJ ZHhIYXNoLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5lcWZ1bmNvaWRzLAotCQkJCQkJCQkJCQkJ CQlwZXJoYXNoLT5oYXNoZnVuY3Rpb25zLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2Rl LT5ncnBDb2xsYXRpb25zLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91 cHMsCi0JCQkJCQkJCQkJCQkJCWFkZGl0aW9uYWxzaXplLAotCQkJCQkJCQkJCQkJCQlhZ2dzdGF0 ZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2N4dCwKLQkJCQkJCQkJCQkJCQkJYWdnc3RhdGUtPmhh c2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnksCi0JCQkJCQkJCQkJCQkJCXRtcG1lbSwK LQkJCQkJCQkJCQkJCQkJRE9fQUdHU1BMSVRfU0tJUEZJTkFMKGFnZ3N0YXRlLT5hZ2dzcGxpdCkp OworCQkJRGVzdHJveVR1cGxlSGFzaFRhYmxlKHBlcmhhc2gtPmhhc2h0YWJsZSk7CisJCXBlcmhh c2gtPmhhc2h0YWJsZSA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGJ1aWxkaW5nIGEg aGFzaCB0YWJsZSBmb3Igb25seSBhIHNpbmdsZSBncm91cGluZyBzZXQsCisJCSAqIHNraXAgdGhl IG90aGVycy4KKwkJICovCisJCWlmIChzZXRubyA+PSAwICYmIHNldG5vICE9IGkpCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBVc2UgYW4gZXN0aW1hdGUgZnJvbSBleGVjdXRpb24gdGltZSBp ZiB3ZSBoYXZlIGl0OyBvdGhlcndpc2UgZmFsbAorCQkgKiBiYWNrIHRvIHRoZSBwbGFubmVyIGVz dGltYXRlLgorCQkgKi8KKwkJbmdyb3VwcyA9IG5ncm91cHNfZXN0aW1hdGUgPiAwID8KKwkJCW5n cm91cHNfZXN0aW1hdGUgOiBwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHM7CisKKwkJLyogZGl2 aWRlIG1lbW9yeSBieSB0aGUgbnVtYmVyIG9mIGhhc2ggdGFibGVzIHdlIGFyZSBpbml0aWFsaXpp bmcgKi8KKwkJbWVtb3J5ID0gKGxvbmcpd29ya19tZW0gKiAxMDI0TCAvCisJCQkoc2V0bm8gPj0g MCA/IDEgOiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7CisKKwkJLyogY2hvb3NlIHJlYXNvbmFibGUg bnVtYmVyIG9mIGJ1Y2tldHMgcGVyIGhhc2h0YWJsZSAqLworCQluYnVja2V0cyA9IGhhc2hfY2hv b3NlX251bV9idWNrZXRzKGFnZ3N0YXRlLCBuZ3JvdXBzLCBtZW1vcnkpOworCisJCXBlcmhhc2gt Pmhhc2h0YWJsZSA9IEJ1aWxkVHVwbGVIYXNoVGFibGVFeHQoJmFnZ3N0YXRlLT5zcy5wcywKKwkJ CQkJCQkJCQkJCQlwZXJoYXNoLT5oYXNoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvciwKKwkJCQkJ CQkJCQkJCQlwZXJoYXNoLT5udW1Db2xzLAorCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmhhc2hHcnBD b2xJZHhIYXNoLAorCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmVxZnVuY29pZHMsCisJCQkJCQkJCQkJ CQkJcGVyaGFzaC0+aGFzaGZ1bmN0aW9ucywKKwkJCQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2Rl LT5ncnBDb2xsYXRpb25zLAorCQkJCQkJCQkJCQkJCW5idWNrZXRzLAorCQkJCQkJCQkJCQkJCWFk ZGl0aW9uYWxzaXplLAorCQkJCQkJCQkJCQkJCWFnZ3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVl cnlfY3h0LAorCQkJCQkJCQkJCQkJCWFnZ3N0YXRlLT5oYXNoY29udGV4dC0+ZWN4dF9wZXJfdHVw bGVfbWVtb3J5LAorCQkJCQkJCQkJCQkJCXRtcG1lbSwKKwkJCQkJCQkJCQkJCQlET19BR0dTUExJ VF9TS0lQRklOQUwoYWdnc3RhdGUtPmFnZ3NwbGl0KSk7CiAJfQorCisJYWdnc3RhdGUtPmhhc2hf bWVtX2N1cnJlbnQgPSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKAorCQlhZ2dzdGF0ZS0+aGFz aGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwgdHJ1ZSk7CisJYWdnc3RhdGUtPmhhc2hf bmdyb3Vwc19jdXJyZW50ID0gMDsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgdGhyZXNob2xk IGF0IHdoaWNoIHdlIHN0b3AgY3JlYXRpbmcgbmV3IGhhc2ggZW50cmllcyBhbmQKKwkgKiBzdGFy dCBzcGlsbGluZy4gSWYgYW4gZW1wdHkgaGFzaCB0YWJsZSBleGNlZWRzIHRoZSBsaW1pdCwgaW5j cmVhc2UgdGhlCisJICogbGltaXQgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVtcHR5IGhhc2ggdGFi bGUuIFRoaXMgZW5zdXJlcyB0aGF0IGF0CisJICogbGVhc3Qgb25lIGVudHJ5IGNhbiBiZSBhZGRl ZCBzbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIG1ha2UgcHJvZ3Jlc3MuCisJICovCisJaWYgKGhh c2hhZ2dfbWVtX292ZXJmbG93KQorCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSBTSVpFX01B WDsKKwllbHNlIGlmICh3b3JrX21lbSAqIDEwMjRMID4gSEFTSF9QQVJUSVRJT05fTUVNICogMikK KwkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gKHdvcmtfbWVtICogMTAyNEwpIC0gSEFTSF9Q QVJUSVRJT05fTUVNOworCWVsc2UKKwkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gKHdvcmtf bWVtICogMTAyNEwpOworCisJaWYgKGFnZ3N0YXRlLT5oYXNoX21lbV9jdXJyZW50ID4gYWdnc3Rh dGUtPmhhc2hfbWVtX2xpbWl0KQorCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSBhZ2dzdGF0 ZS0+aGFzaF9tZW1fY3VycmVudDsKIH0KIAogLyoKQEAgLTE0NTUsMjIgKzE1OTIsMTYgQEAgaGFz aF9hZ2dfZW50cnlfc2l6ZShpbnQgbnVtQWdncykKIH0KIAogLyoKLSAqIEZpbmQgb3IgY3JlYXRl IGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVwbGUgZ3JvdXAgY29udGFpbmluZyB0aGUgY3Vy cmVudAotICogdHVwbGUgKGFscmVhZHkgc2V0IGluIHRtcGNvbnRleHQncyBvdXRlcnR1cGxlIHNs b3QpLCBpbiB0aGUgY3VycmVudCBncm91cGluZwotICogc2V0ICh3aGljaCB0aGUgY2FsbGVyIG11 c3QgaGF2ZSBzZWxlY3RlZCAtIG5vdGUgdGhhdCBpbml0aWFsaXplX2FnZ3JlZ2F0ZQotICogZGVw ZW5kcyBvbiB0aGlzKS4KLSAqCi0gKiBXaGVuIGNhbGxlZCwgQ3VycmVudE1lbW9yeUNvbnRleHQg c2hvdWxkIGJlIHRoZSBwZXItcXVlcnkgY29udGV4dC4KKyAqIEV4dHJhY3QgdGhlIGF0dHJpYnV0 ZXMgdGhhdCBtYWtlIHVwIHRoZSBncm91cGluZyBrZXkgaW50byB0aGUKKyAqIGhhc2hzbG90LiBU aGlzIGlzIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBoYXNoIG9mIHRoZSBncm91cGluZyBrZXku CiAgKi8KLXN0YXRpYyBUdXBsZUhhc2hFbnRyeURhdGEgKgotbG9va3VwX2hhc2hfZW50cnkoQWdn U3RhdGUgKmFnZ3N0YXRlKQorc3RhdGljIHZvaWQKK3ByZXBhcmVfaGFzaF9zbG90KEFnZ1N0YXRl ICphZ2dzdGF0ZSkKIHsKLQlUdXBsZVRhYmxlU2xvdCAqaW5wdXRzbG90ID0gYWdnc3RhdGUtPnRt cGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKLQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZh Z2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRdOwotCVR1cGxlVGFibGVTbG90 ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OwotCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50 cnk7Ci0JYm9vbAkJaXNuZXc7Ci0JaW50CQkJaTsKKwlUdXBsZVRhYmxlU2xvdAkqaW5wdXRzbG90 ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKKwlBZ2dTdGF0ZVBlckhh c2gJIHBlcmhhc2ggICA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRd OworCVR1cGxlVGFibGVTbG90CSpoYXNoc2xvdCAgPSBwZXJoYXNoLT5oYXNoc2xvdDsKKwlpbnQJ CQkJIGk7CiAKIAkvKiB0cmFuc2ZlciBqdXN0IHRoZSBuZWVkZWQgY29sdW1ucyBpbnRvIGhhc2hz bG90ICovCiAJc2xvdF9nZXRzb21lYXR0cnMoaW5wdXRzbG90LCBwZXJoYXNoLT5sYXJnZXN0R3Jw Q29sSWR4KTsKQEAgLTE0ODQsMTQgKzE2MTUsMTY5IEBAIGxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0 YXRlICphZ2dzdGF0ZSkKIAkJaGFzaHNsb3QtPnR0c19pc251bGxbaV0gPSBpbnB1dHNsb3QtPnR0 c19pc251bGxbdmFyTnVtYmVyXTsKIAl9CiAJRXhlY1N0b3JlVmlydHVhbFR1cGxlKGhhc2hzbG90 KTsKK30KKworLyoKKyAqIFJlY29tcGlsZSB0aGUgZXhwcmVzc2lvbnMgZm9yIGFkdmFuY2luZyBh Z2dyZWdhdGVzIHdoaWxlIGhhc2hpbmcuIFRoaXMgaXMKKyAqIG5lY2Vzc2FyeSBmb3IgY2VydGFp biBraW5kcyBvZiBzdGF0ZSBjaGFuZ2VzIHRoYXQgYWZmZWN0IHRoZSByZXN1bHRpbmcKKyAqIGV4 cHJlc3Npb24uIEZvciBpbnN0YW5jZSwgY2hhbmdpbmcgYWdnc3RhdGUtPmhhc2hfc3BpbGxlZCBv cgorICogYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzIHJlcXVpcmUgcmVjb21waWxhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK2hhc2hfcmVjb21waWxlX2V4cHJlc3Npb25zKEFnZ1N0YXRlICphZ2dz dGF0ZSkKK3sKKwlBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlOworCisJQXNzZXJ0KGFnZ3N0YXRlLT5h Z2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8CisJCSAgIGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9 PSBBR0dfTUlYRUQpOworCisJaWYgKGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVE KQorCQlwaGFzZSA9ICZhZ2dzdGF0ZS0+cGhhc2VzWzBdOworCWVsc2UgLyogQUdHX01JWEVEICov CisJCXBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbMV07CisKKwlwaGFzZS0+ZXZhbHRyYW5zID0g RXhlY0J1aWxkQWdnVHJhbnMoCisJCWFnZ3N0YXRlLCBwaGFzZSwKKwkJYWdnc3RhdGUtPmFnZ3N0 cmF0ZWd5ID09IEFHR19NSVhFRCA/IHRydWUgOiBmYWxzZSwgLyogZG9zb3J0ICovCisJCXRydWUs IC8qIGRvaGFzaCAqLworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbGVkIC8qIHNwaWxsZWQgKi8pOwor fQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIHZhbHVlIGZvciBhIHR1cGxlLiBJdCdzIHVz ZWZ1bCB0byBkbyB0aGlzIG91dHNpZGUgb2YgdGhlCisgKiBoYXNoIHRhYmxlIHNvIHRoYXQgd2Ug Y2FuIHJldXNlIHNhdmVkIGhhc2ggdmFsdWVzIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nLgorICov CitzdGF0aWMgdWludDMyCitjYWxjdWxhdGVfaGFzaChBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJ QWdnU3RhdGVQZXJIYXNoCSBwZXJoYXNoICAgPSAmYWdnc3RhdGUtPnBlcmhhc2hbYWdnc3RhdGUt PmN1cnJlbnRfc2V0XTsKKwlUdXBsZUhhc2hUYWJsZQkgaGFzaHRhYmxlID0gcGVyaGFzaC0+aGFz aHRhYmxlOworCU1lbW9yeUNvbnRleHQJIG9sZENvbnRleHQ7CisJdWludDMyCQkJIGhhc2g7CisK KwkvKiBzZXQgdXAgZGF0YSBuZWVkZWQgYnkgaGFzaCBhbmQgbWF0Y2ggZnVuY3Rpb25zICovCisJ aGFzaHRhYmxlLT5pbnB1dHNsb3QgPSBwZXJoYXNoLT5oYXNoc2xvdDsKKwloYXNodGFibGUtPmlu X2hhc2hfZnVuY3MgPSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOworCWhhc2h0YWJsZS0+Y3Vy X2VxX2Z1bmMgPSBoYXNodGFibGUtPnRhYl9lcV9mdW5jOworCisJLyogTmVlZCB0byBydW4gdGhl IGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8KKwlvbGRDb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7CisKKwloYXNoID0gVHVw bGVIYXNoVGFibGVIYXNoKGhhc2h0YWJsZS0+aGFzaHRhYiwgTlVMTCk7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIENo b29zZSBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIGJ1Y2tldHMgZm9yIHRoZSBpbml0aWFsIGhhc2gg dGFibGUgc2l6ZS4KKyAqLworc3RhdGljIGxvbmcKK2hhc2hfY2hvb3NlX251bV9idWNrZXRzKEFn Z1N0YXRlICphZ2dzdGF0ZSwgbG9uZyBuZ3JvdXBzLCBTaXplIG1lbW9yeSkKK3sKKwlsb25nCW1h eF9uYnVja2V0czsKKwlpbnQJCWxvZzJfbmdyb3VwczsKKwlsb25nCW5idWNrZXRzOworCisJaWYg KGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplID09IDAuMCkKKwkJYWdnc3RhdGUtPmhhc2hlbnRyeXNp emUgPSBoYXNoX2FnZ19lbnRyeV9zaXplKGFnZ3N0YXRlLT5udW10cmFucyk7CisKKwltYXhfbmJ1 Y2tldHMgPSBtZW1vcnkgLyBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZTsKKworCS8qCisJICogTG93 ZXN0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4gbmdyb3Vwcywgd2l0aG91dCBleGNlZWRpbmcK KwkgKiBtYXhfbmJ1Y2tldHMuCisJICovCisJZm9yIChsb2cyX25ncm91cHMgPSAxLCBuYnVja2V0 cyA9IDI7CisJCSBuYnVja2V0cyA8IG5ncm91cHMgJiYgbmJ1Y2tldHMgPCBtYXhfbmJ1Y2tldHM7 CisJCSBsb2cyX25ncm91cHMrKywgbmJ1Y2tldHMgPDw9IDEpOworCisJaWYgKG5idWNrZXRzID4g bWF4X25idWNrZXRzICYmIG5idWNrZXRzID4gMikKKwkJbmJ1Y2tldHMgPj49IDE7CisKKwlyZXR1 cm4gbmJ1Y2tldHM7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwYXJ0aXRp b25zIHRvIGNyZWF0ZSB3aGVuIHNwaWxsaW5nLgorICovCitzdGF0aWMgaW50CitoYXNoX2Nob29z ZV9udW1fc3BpbGxfcGFydGl0aW9ucyh1aW50NjQgaW5wdXRfdHVwbGVzLCBkb3VibGUgaGFzaGVu dHJ5c2l6ZSkKK3sKKwlTaXplCW1lbV9uZWVkZWQ7CisJaW50CQlwYXJ0aXRpb25fbGltaXQ7CisJ aW50CQlucGFydGl0aW9uczsKKworCS8qCisJICogQXZvaWQgY3JlYXRpbmcgc28gbWFueSBwYXJ0 aXRpb25zIHRoYXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgb2YgdGhlCisJICogb3BlbiBwYXJ0 aXRpb24gZmlsZXMgKGVzdGltYXRlZCBhdCBCTENLU1ogZm9yIGJ1ZmZlcmluZykgYXJlIGdyZWF0 ZXIKKwkgKiB0aGFuIDEvNCBvZiB3b3JrX21lbS4KKwkgKi8KKwlwYXJ0aXRpb25fbGltaXQgPSAo d29ya19tZW0gKiAxMDI0TCAqIDAuMjUpIC8gQkxDS1NaOworCisJLyogcGVzc2ltaXN0aWNhbGx5 IGVzdGltYXRlIHRoYXQgZWFjaCBpbnB1dCB0dXBsZSBjcmVhdGVzIGEgbmV3IGdyb3VwICovCisJ bWVtX25lZWRlZCA9IEhBU0hfUEFSVElUSU9OX0ZBQ1RPUiAqIGlucHV0X3R1cGxlcyAqIGhhc2hl bnRyeXNpemU7CisKKwkvKiBtYWtlIGVub3VnaCBwYXJ0aXRpb25zIHNvIHRoYXQgZWFjaCBvbmUg aXMgbGlrZWx5IHRvIGZpdCBpbiBtZW1vcnkgKi8KKwlucGFydGl0aW9ucyA9IDEgKyAobWVtX25l ZWRlZCAvICh3b3JrX21lbSAqIDEwMjRMKSk7CisKKwlpZiAobnBhcnRpdGlvbnMgPiBwYXJ0aXRp b25fbGltaXQpCisJCW5wYXJ0aXRpb25zID0gcGFydGl0aW9uX2xpbWl0OworCisJaWYgKG5wYXJ0 aXRpb25zIDwgSEFTSF9NSU5fUEFSVElUSU9OUykKKwkJbnBhcnRpdGlvbnMgPSBIQVNIX01JTl9Q QVJUSVRJT05TOworCWlmIChucGFydGl0aW9ucyA+IEhBU0hfTUFYX1BBUlRJVElPTlMpCisJCW5w YXJ0aXRpb25zID0gSEFTSF9NQVhfUEFSVElUSU9OUzsKKworCXJldHVybiBucGFydGl0aW9uczsK K30KKworLyoKKyAqIEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVw bGUgZ3JvdXAgY29udGFpbmluZyB0aGUgY3VycmVudAorICogdHVwbGUgKGFscmVhZHkgc2V0IGlu IHRtcGNvbnRleHQncyBvdXRlcnR1cGxlIHNsb3QpLCBpbiB0aGUgY3VycmVudCBncm91cGluZwor ICogc2V0ICh3aGljaCB0aGUgY2FsbGVyIG11c3QgaGF2ZSBzZWxlY3RlZCAtIG5vdGUgdGhhdCBp bml0aWFsaXplX2FnZ3JlZ2F0ZQorICogZGVwZW5kcyBvbiB0aGlzKS4KKyAqCisgKiBXaGVuIGNh bGxlZCwgQ3VycmVudE1lbW9yeUNvbnRleHQgc2hvdWxkIGJlIHRoZSBwZXItcXVlcnkgY29udGV4 dC4KKyAqCisgKiBJZiB0aGUgaGFzaCB0YWJsZSBpcyBhdCB0aGUgbWVtb3J5IGxpbWl0LCB0aGVu IG9ubHkgZmluZCBleGlzdGluZyBoYXNodGFibGUKKyAqIGVudHJpZXM7IGRvbid0IGNyZWF0ZSBu ZXcgb25lcy4gSWYgYSB0dXBsZSdzIGdyb3VwIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQKKyAqIGlu IHRoZSBoYXNoIHRhYmxlIGZvciB0aGUgY3VycmVudCBncm91cGluZyBzZXQsIHJldHVybiBOVUxM IGFuZCB0aGUgY2FsbGVyCisgKiB3aWxsIHNwaWxsIGl0IHRvIGRpc2suCisgKi8KK3N0YXRpYyBB Z2dTdGF0ZVBlckdyb3VwCitsb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUsIHVp bnQzMiBoYXNoKQoreworCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRlLT5wZXJo YXNoW2FnZ3N0YXRlLT5jdXJyZW50X3NldF07CisJVHVwbGVUYWJsZVNsb3QgKmhhc2hzbG90ID0g cGVyaGFzaC0+aGFzaHNsb3Q7CisJVHVwbGVIYXNoRW50cnlEYXRhICplbnRyeTsKKwlib29sCQlp c25ldyA9IGZhbHNlOworCWJvb2wJICAgKnBfaXNuZXc7CisKKwkvKiBpZiBoYXNoIHRhYmxlIG1l bW9yeSBsaW1pdCBpcyBleGNlZWRlZCwgZG9uJ3QgY3JlYXRlIG5ldyBlbnRyaWVzICovCisJcF9p c25ldyA9IChhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCA+IGFnZ3N0YXRlLT5oYXNoX21lbV9s aW1pdCkgPworCQlOVUxMIDogJmlzbmV3OwogCiAJLyogZmluZCBvciBjcmVhdGUgdGhlIGhhc2h0 YWJsZSBlbnRyeSB1c2luZyB0aGUgZmlsdGVyZWQgdHVwbGUgKi8KLQllbnRyeSA9IExvb2t1cFR1 cGxlSGFzaEVudHJ5KHBlcmhhc2gtPmhhc2h0YWJsZSwgaGFzaHNsb3QsICZpc25ldyk7CisJZW50 cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeUhhc2gocGVyaGFzaC0+aGFzaHRhYmxlLCBoYXNoc2xv dCwgcF9pc25ldywKKwkJCQkJCQkJCSBoYXNoKTsKKworCWlmIChlbnRyeSA9PSBOVUxMKQorCQly ZXR1cm4gTlVMTDsKIAogCWlmIChpc25ldykKIAl7Ci0JCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3Jv dXA7Ci0JCWludAkJCXRyYW5zbm87CisJCUFnZ1N0YXRlUGVyR3JvdXAJcGVyZ3JvdXA7CisJCWlu dAkJCQkJdHJhbnNubzsKKworCQlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQrKzsKKwor CQlhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCA9IE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQo CisJCQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwgdHJ1ZSk7 CisKKwkJaWYgKGFnZ3N0YXRlLT5oYXNoX21lbV9jdXJyZW50ID4gYWdnc3RhdGUtPmhhc2hfbWVt X3BlYWspCisJCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fcGVhayA9IGFnZ3N0YXRlLT5oYXNoX21lbV9j dXJyZW50OwogCiAJCXBlcmdyb3VwID0gKEFnZ1N0YXRlUGVyR3JvdXApCiAJCQlNZW1vcnlDb250 ZXh0QWxsb2MocGVyaGFzaC0+aGFzaHRhYmxlLT50YWJsZWN4dCwKQEAgLTE1MTEsNyArMTc5Nyw3 IEBAIGxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJfQogCX0KIAotCXJl dHVybiBlbnRyeTsKKwlyZXR1cm4gZW50cnktPmFkZGl0aW9uYWw7CiB9CiAKIC8qCkBAIC0xNTE5 LDE4ICsxODA1LDY0IEBAIGxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSkKICAq IHJldHVybmluZyBhbiBhcnJheSBvZiBwZXJncm91cCBwb2ludGVycyBzdWl0YWJsZSBmb3IgYWR2 YW5jZV9hZ2dyZWdhdGVzLgogICoKICAqIEJlIGF3YXJlIHRoYXQgbG9va3VwX2hhc2hfZW50cnkg Y2FuIHJlc2V0IHRoZSB0bXBjb250ZXh0LgorICoKKyAqIFNvbWUgZW50cmllcyBtYXkgYmUgbGVm dCBOVUxMIGlmIHdlIGFyZSBhdCB0aGUgbWVtb3J5IGxpbWl0LiBUaGUgc2FtZSB0dXBsZQorICog d2lsbCBiZWxvbmcgdG8gZGlmZmVyZW50IGdyb3VwcyBmb3IgZWFjaCBzZXQsIHNvIG1heSBtYXRj aCBhIGdyb3VwIGFscmVhZHkKKyAqIGluIG1lbW9yeSBmb3Igb25lIHNldCBhbmQgbWF0Y2ggYSBn cm91cCBub3QgaW4gbWVtb3J5IGZvciBhbm90aGVyIHNldC4gSWYKKyAqIGF0IHRoZSBtZW1vcnkg bGltaXQgYW5kIGEgdHVwbGUgZG9lc24ndCBtYXRjaCBhIGdyb3VwIGluIG1lbW9yeSBmb3IgYQor ICogcGFydGljdWxhciBzZXQsIGl0IHdpbGwgYmUgc3BpbGxlZC4KKyAqCisgKiBOQjogSXQncyBw b3NzaWJsZSB0byBzcGlsbCB0aGUgc2FtZSB0dXBsZSBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZ3Jv dXBpbmcKKyAqIHNldHMuIFRoaXMgbWF5IHNlZW0gd2FzdGVmdWwsIGJ1dCBpdCdzIGFjdHVhbGx5 IGEgdHJhZGUtb2ZmOiBpZiB3ZSBzcGlsbAorICogdGhlIHR1cGxlIG11bHRpcGxlIHRpbWVzIGZv ciBtdWx0aXBsZSBncm91cGluZyBzZXRzLCBpdCBjYW4gYmUgcGFydGl0aW9uZWQKKyAqIGZvciBl YWNoIGdyb3VwaW5nIHNldCwgbWFraW5nIHRoZSByZWZpbGxpbmcgb2YgdGhlIGhhc2ggdGFibGUg dmVyeQorICogZWZmaWNpZW50LgogICovCiBzdGF0aWMgdm9pZAogbG9va3VwX2hhc2hfZW50cmll cyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0JaW50CQkJbnVtSGFzaGVzID0gYWdnc3RhdGUtPm51 bV9oYXNoZXM7CiAJQWdnU3RhdGVQZXJHcm91cCAqcGVyZ3JvdXAgPSBhZ2dzdGF0ZS0+aGFzaF9w ZXJncm91cDsKIAlpbnQJCQlzZXRubzsKIAotCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IG51bUhh c2hlczsgc2V0bm8rKykKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hh c2hlczsgc2V0bm8rKykKIAl7CisJCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRl LT5wZXJoYXNoW3NldG5vXTsKKwkJdWludDMyCQkJaGFzaDsKKwogCQlzZWxlY3RfY3VycmVudF9z ZXQoYWdnc3RhdGUsIHNldG5vLCB0cnVlKTsKLQkJcGVyZ3JvdXBbc2V0bm9dID0gbG9va3VwX2hh c2hfZW50cnkoYWdnc3RhdGUpLT5hZGRpdGlvbmFsOworCQlwcmVwYXJlX2hhc2hfc2xvdChhZ2dz dGF0ZSk7CisJCWhhc2ggPSBjYWxjdWxhdGVfaGFzaChhZ2dzdGF0ZSk7CisJCXBlcmdyb3VwW3Nl dG5vXSA9IGxvb2t1cF9oYXNoX2VudHJ5KGFnZ3N0YXRlLCBoYXNoKTsKKworCQkvKiBjaGVjayB0 byBzZWUgaWYgd2UgbmVlZCB0byBzcGlsbCB0aGUgdHVwbGUgZm9yIHRoaXMgZ3JvdXBpbmcgc2V0 ICovCisJCWlmIChwZXJncm91cFtzZXRub10gPT0gTlVMTCkKKwkJeworCQkJSGFzaEFnZ1NwaWxs ICpzcGlsbDsKKwkJCVR1cGxlVGFibGVTbG90ICpzbG90ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQt PmVjeHRfb3V0ZXJ0dXBsZTsKKworCQkJLyogdXBkYXRlIGhhc2hlbnRyeXNpemUgZXN0aW1hdGUg YmFzZWQgb24gY29udGVudHMgKi8KKwkJCUFzc2VydChhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1 cnJlbnQgPiAwKTsKKwkJCWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplID0gKGRvdWJsZSlhZ2dzdGF0 ZS0+aGFzaF9tZW1fY3VycmVudCAvCisJCQkJCShkb3VibGUpYWdnc3RhdGUtPmhhc2hfbmdyb3Vw c19jdXJyZW50OworCisJCQlpZiAoYWdnc3RhdGUtPmhhc2hfc3BpbGxzID09IE5VTEwpCisJCQkJ YWdnc3RhdGUtPmhhc2hfc3BpbGxzID0gcGFsbG9jMCgKKwkJCQkJc2l6ZW9mKEhhc2hBZ2dTcGls bCkgKiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7CisKKwkJCWlmICghYWdnc3RhdGUtPmhhc2hfc3Bp bGxlZCkKKwkJCXsKKwkJCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbGVkID0gdHJ1ZTsKKwkJCQloYXNo X3JlY29tcGlsZV9leHByZXNzaW9ucyhhZ2dzdGF0ZSk7CisJCQl9CisKKwkJCXNwaWxsID0gJmFn Z3N0YXRlLT5oYXNoX3NwaWxsc1tzZXRub107CisKKwkJCWlmIChzcGlsbC0+cGFydGl0aW9ucyA9 PSBOVUxMKQorCQkJCWhhc2hfc3BpbGxfaW5pdChzcGlsbCwgMCwgcGVyaGFzaC0+YWdnbm9kZS0+ bnVtR3JvdXBzLAorCQkJCQkJCQlhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSk7CisKKwkJCWFnZ3N0 YXRlLT5oYXNoX2Rpc2tfdXNlZCArPSBoYXNoX3NwaWxsX3R1cGxlKHNwaWxsLCAwLCBzbG90LCBo YXNoKTsKKwkJfQogCX0KIH0KIApAQCAtMTg1Myw2ICsyMTg1LDEyIEBAIGFnZ19yZXRyaWV2ZV9k aXJlY3QoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQlpZiAoVHVwSXNOdWxsKG91dGVyc2xvdCkp CiAJCQkJCXsKIAkJCQkJCS8qIG5vIG1vcmUgb3V0ZXItcGxhbiB0dXBsZXMgYXZhaWxhYmxlICov CisKKwkJCQkJCS8qIGlmIHdlIGJ1aWx0IGhhc2ggdGFibGVzLCBmaW5hbGl6ZSBhbnkgc3BpbGxz ICovCisJCQkJCQlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCAmJgorCQkJ CQkJCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID09IDEpCisJCQkJCQkJaGFzaF9maW5pc2hfaW5p dGlhbF9zcGlsbHMoYWdnc3RhdGUpOworCiAJCQkJCQlpZiAoaGFzR3JvdXBpbmdTZXRzKQogCQkJ CQkJewogCQkJCQkJCWFnZ3N0YXRlLT5pbnB1dF9kb25lID0gdHJ1ZTsKQEAgLTE5NTUsNiArMjI5 Myw5IEBAIGFnZ19maWxsX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQlSZXNldEV4 cHJDb250ZXh0KGFnZ3N0YXRlLT50bXBjb250ZXh0KTsKIAl9CiAKKwkvKiBmaW5hbGl6ZSBzcGls bHMsIGlmIGFueSAqLworCWhhc2hfZmluaXNoX2luaXRpYWxfc3BpbGxzKGFnZ3N0YXRlKTsKKwog CWFnZ3N0YXRlLT50YWJsZV9maWxsZWQgPSB0cnVlOwogCS8qIEluaXRpYWxpemUgdG8gd2FsayB0 aGUgZmlyc3QgaGFzaCB0YWJsZSAqLwogCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgMCwg dHJ1ZSk7CkBAIC0xOTYyLDExICsyMzAzLDE2MSBAQCBhZ2dfZmlsbF9oYXNoX3RhYmxlKEFnZ1N0 YXRlICphZ2dzdGF0ZSkKIAkJCQkJCSAgICZhZ2dzdGF0ZS0+cGVyaGFzaFswXS5oYXNoaXRlcik7 CiB9CiAKKy8qCisgKiBJZiBhbnkgZGF0YSB3YXMgc3BpbGxlZCBkdXJpbmcgaGFzaCBhZ2dyZWdh dGlvbiwgcmVzZXQgdGhlIGhhc2ggdGFibGUgYW5kCisgKiByZXByb2Nlc3Mgb25lIGJhdGNoIG9m IHNwaWxsZWQgZGF0YS4gQWZ0ZXIgcmVwcm9jZXNzaW5nIGEgYmF0Y2gsIHRoZSBoYXNoCisgKiB0 YWJsZSB3aWxsIGFnYWluIGNvbnRhaW4gZGF0YSwgcmVhZHkgdG8gYmUgY29uc3VtZWQgYnkKKyAq IGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeSgpLgorICoKKyAqIFNob3VsZCBvbmx5 IGJlIGNhbGxlZCBhZnRlciBhbGwgaW4gbWVtb3J5IGhhc2ggdGFibGUgZW50cmllcyBoYXZlIGJl ZW4KKyAqIGNvbnN1bWVkLgorICoKKyAqIFJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGV4aGF1 c3RlZCBhbmQgdGhlcmUncyBubyBtb3JlIHdvcmsgdG8gYmUgZG9uZTsKKyAqIG90aGVyd2lzZSBy ZXR1cm4gdHJ1ZS4KKyAqLworc3RhdGljIGJvb2wKK2FnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dT dGF0ZSAqYWdnc3RhdGUpCit7CisJSGFzaEFnZ0JhdGNoCSpiYXRjaDsKKworCWlmIChhZ2dzdGF0 ZS0+aGFzaF9iYXRjaGVzID09IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBFYWNo IHNwaWxsIGZpbGUgY29udGFpbnMgc3BpbGxlZCBkYXRhIGZvciBvbmx5IGEgc2luZ2xlIGdyb3Vw aW5nCisJICogc2V0LiBXZSB3YW50IHRvIGlnbm9yZSBhbGwgb3RoZXJzLCB3aGljaCBpcyBkb25l IGJ5IHNldHRpbmcgdGhlIG90aGVyCisJICogcGVyZ3JvdXBzIHRvIE5VTEwuCisJICovCisJbWVt c2V0KGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBzLCAwLAorCQkgICBzaXplb2YoQWdnU3RhdGVQZXJH cm91cCkgKgorCQkgICAoYWdnc3RhdGUtPm1heHNldHMgKyBhZ2dzdGF0ZS0+bnVtX2hhc2hlcykp OworCisJYmF0Y2ggPSBsaW5pdGlhbChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzKTsKKwlhZ2dzdGF0 ZS0+aGFzaF9iYXRjaGVzID0gbGlzdF9kZWxldGVfZmlyc3QoYWdnc3RhdGUtPmhhc2hfYmF0Y2hl cyk7CisKKwkvKgorCSAqIEZyZWUgbWVtb3J5IGFuZCByZWJ1aWxkIGEgc2luZ2xlIGhhc2ggdGFi bGUgZm9yIHRoaXMgYmF0Y2gncyBncm91cGluZworCSAqIHNldC4KKwkgKi8KKwlSZVNjYW5FeHBy Q29udGV4dChhZ2dzdGF0ZS0+aGFzaGNvbnRleHQpOworCWJ1aWxkX2hhc2hfdGFibGUoYWdnc3Rh dGUsIGJhdGNoLT5zZXRubywgYmF0Y2gtPmlucHV0X2dyb3Vwcyk7CisKKwlBc3NlcnQoYWdnc3Rh dGUtPmN1cnJlbnRfcGhhc2UgPT0gMCk7CisKKwlpZiAoYWdnc3RhdGUtPnBoYXNlLT5hZ2dzdHJh dGVneSA9PSBBR0dfTUlYRUQpCisJeworCQlhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9IDE7CisJ CWFnZ3N0YXRlLT5waGFzZSA9ICZhZ2dzdGF0ZS0+cGhhc2VzW2FnZ3N0YXRlLT5jdXJyZW50X3Bo YXNlXTsKKwl9CisKKwkvKgorCSAqIFRoZSBmaXJzdCBwYXNzIChhZ2dfZmlsbF9oYXNoX3RhYmxl KSByZWFkcyB3aGF0ZXZlciBraW5kIG9mIHNsb3QgY29tZXMKKwkgKiBmcm9tIHRoZSBvdXRlciBw bGFuLCBhbmQgY29uc2lkZXJzIHRoZSBzbG90IGZpeGVkLiBCdXQgc3BpbGxlZCB0dXBsZXMKKwkg KiBhcmUgYWx3YXlzIE1pbmltYWxUdXBsZXMsIHNvIGlmIHRoYXQncyBkaWZmZXJlbnQgZnJvbSB0 aGUgb3V0ZXIgcGxhbiB3ZQorCSAqIG5lZWQgdG8gY2hhbmdlIGl0IGFuZCByZWNvbXBpbGUgdGhl IGFnZ3JlZ2F0ZSBleHByZXNzaW9ucy4KKwkgKi8KKwlpZiAoYWdnc3RhdGUtPnNzLnBzLm91dGVy b3BzICE9ICZUVFNPcHNNaW5pbWFsVHVwbGUpCisJeworCQlhZ2dzdGF0ZS0+c3MucHMub3V0ZXJv cHMgPSAmVFRTT3BzTWluaW1hbFR1cGxlOworCQloYXNoX3JlY29tcGlsZV9leHByZXNzaW9ucyhh Z2dzdGF0ZSk7CisJfQorCisJZm9yICg7OykgeworCQlUdXBsZVRhYmxlU2xvdAkqc2xvdCA9IGFn Z3N0YXRlLT5oYXNoX3NwaWxsX3Nsb3Q7CisJCU1pbmltYWxUdXBsZQkgdHVwbGU7CisJCXVpbnQz MgkJCSBoYXNoOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJdHVwbGUgPSBoYXNo X3JlYWRfc3BpbGxlZChiYXRjaC0+aW5wdXRfZmlsZSwgJmhhc2gpOworCQlpZiAodHVwbGUgPT0g TlVMTCkKKwkJCWJyZWFrOworCisJCUV4ZWNTdG9yZU1pbmltYWxUdXBsZSh0dXBsZSwgc2xvdCwg dHJ1ZSk7CisJCWFnZ3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90Owor CisJCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgYmF0Y2gtPnNldG5vLCB0cnVlKTsKKwkJ cHJlcGFyZV9oYXNoX3Nsb3QoYWdnc3RhdGUpOworCQlhZ2dzdGF0ZS0+aGFzaF9wZXJncm91cFti YXRjaC0+c2V0bm9dID0gbG9va3VwX2hhc2hfZW50cnkoYWdnc3RhdGUsIGhhc2gpOworCisJCS8q IGlmIHRoZXJlJ3Mgbm8gbWVtb3J5IGZvciBhIG5ldyBncm91cCwgc3BpbGwgKi8KKwkJaWYgKGFn Z3N0YXRlLT5oYXNoX3Blcmdyb3VwW2JhdGNoLT5zZXRub10gPT0gTlVMTCkKKwkJeworCQkJLyog dXBkYXRlIGhhc2hlbnRyeXNpemUgZXN0aW1hdGUgYmFzZWQgb24gY29udGVudHMgKi8KKwkJCUFz c2VydChhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPiAwKTsKKwkJCWFnZ3N0YXRlLT5o YXNoZW50cnlzaXplID0gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCAvCisJCQkJ CShkb3VibGUpYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50OworCisJCQlpZiAoYmF0Y2gt PnNwaWxsLnBhcnRpdGlvbnMgPT0gTlVMTCkKKwkJCQloYXNoX3NwaWxsX2luaXQoJmJhdGNoLT5z cGlsbCwgYmF0Y2gtPmlucHV0X2JpdHMsCisJCQkJCQkJCWJhdGNoLT5pbnB1dF9ncm91cHMsIGFn Z3N0YXRlLT5oYXNoZW50cnlzaXplKTsKKworCQkJYWdnc3RhdGUtPmhhc2hfZGlza191c2VkICs9 IGhhc2hfc3BpbGxfdHVwbGUoCisJCQkJJmJhdGNoLT5zcGlsbCwgYmF0Y2gtPmlucHV0X2JpdHMs IHNsb3QsIGhhc2gpOworCQl9CisKKwkJLyogQWR2YW5jZSB0aGUgYWdncmVnYXRlcyAob3IgY29t YmluZSBmdW5jdGlvbnMpICovCisJCWFkdmFuY2VfYWdncmVnYXRlcyhhZ2dzdGF0ZSk7CisKKwkJ LyoKKwkJICogUmVzZXQgcGVyLWlucHV0LXR1cGxlIGNvbnRleHQgYWZ0ZXIgZWFjaCB0dXBsZSwg YnV0IG5vdGUgdGhhdCB0aGUKKwkJICogaGFzaCBsb29rdXBzIGRvIHRoaXMgdG9vCisJCSAqLwor CQlSZXNldEV4cHJDb250ZXh0KGFnZ3N0YXRlLT50bXBjb250ZXh0KTsKKwl9CisKKwlCdWZGaWxl Q2xvc2UoYmF0Y2gtPmlucHV0X2ZpbGUpOworCisJYWdnc3RhdGUtPmN1cnJlbnRfcGhhc2UgPSAw OworCWFnZ3N0YXRlLT5waGFzZSA9ICZhZ2dzdGF0ZS0+cGhhc2VzW2FnZ3N0YXRlLT5jdXJyZW50 X3BoYXNlXTsKKworCWhhc2hfc3BpbGxfZmluaXNoKGFnZ3N0YXRlLCAmYmF0Y2gtPnNwaWxsLCBi YXRjaC0+c2V0bm8sCisJCQkJCSAgYmF0Y2gtPmlucHV0X2JpdHMpOworCisJcGZyZWUoYmF0Y2gp OworCisJLyogSW5pdGlhbGl6ZSB0byB3YWxrIHRoZSBmaXJzdCBoYXNoIHRhYmxlICovCisJc2Vs ZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCAwLCB0cnVlKTsKKwlSZXNldFR1cGxlSGFzaEl0ZXJh dG9yKGFnZ3N0YXRlLT5wZXJoYXNoWzBdLmhhc2h0YWJsZSwKKwkJCQkJCSAgICZhZ2dzdGF0ZS0+ cGVyaGFzaFswXS5oYXNoaXRlcik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEV4ZWNB Z2cgZm9yIGhhc2hlZCBjYXNlOiByZXRyaWV2aW5nIGdyb3VwcyBmcm9tIGhhc2ggdGFibGUKKyAq CisgKiBBZnRlciBleGhhdXN0aW5nIGluLW1lbW9yeSB0dXBsZXMsIGFsc28gdHJ5IHJlZmlsbGlu ZyB0aGUgaGFzaCB0YWJsZSB1c2luZworICogcHJldmlvdXNseS1zcGlsbGVkIHR1cGxlcy4gT25s eSByZXR1cm5zIE5VTEwgYWZ0ZXIgYWxsIGluLW1lbW9yeSBhbmQKKyAqIHNwaWxsZWQgdHVwbGVz IGFyZSBleGhhdXN0ZWQuCiAgKi8KIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCiBhZ2dfcmV0cmll dmVfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJVHVwbGVUYWJsZVNsb3QgKnJl c3VsdCA9IE5VTEw7CisKKwl3aGlsZSAocmVzdWx0ID09IE5VTEwpCisJeworCQlyZXN1bHQgPSBh Z2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoYWdnc3RhdGUpOworCQlpZiAocmVzdWx0 ID09IE5VTEwpCisJCXsKKwkJCWlmICghYWdnX3JlZmlsbF9oYXNoX3RhYmxlKGFnZ3N0YXRlKSkK KwkJCXsKKwkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQor CQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHJpZXZlIHRoZSBncm91 cHMgZnJvbSB0aGUgaW4tbWVtb3J5IGhhc2ggdGFibGVzIHdpdGhvdXQgY29uc2lkZXJpbmcgYW55 CisgKiBzcGlsbGVkIHR1cGxlcy4KKyAqLworc3RhdGljIFR1cGxlVGFibGVTbG90ICoKK2FnZ19y ZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7CiAJRXhw ckNvbnRleHQgKmVjb250ZXh0OwogCUFnZ1N0YXRlUGVyQWdnIHBlcmFnZzsKQEAgLTE5OTUsNyAr MjQ4Niw3IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkg KiBXZSBsb29wIHJldHJpZXZpbmcgZ3JvdXBzIHVudGlsIHdlIGZpbmQgb25lIHNhdGlzZnlpbmcK IAkgKiBhZ2dzdGF0ZS0+c3MucHMucXVhbAogCSAqLwotCXdoaWxlICghYWdnc3RhdGUtPmFnZ19k b25lKQorCWZvciAoOzspCiAJewogCQlUdXBsZVRhYmxlU2xvdCAqaGFzaHNsb3QgPSBwZXJoYXNo LT5oYXNoc2xvdDsKIAkJaW50CQkJaTsKQEAgLTIwMjYsOCArMjUxNyw2IEBAIGFnZ19yZXRyaWV2 ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJ CQkvKiBObyBtb3JlIGhhc2h0YWJsZXMsIHNvIGRvbmUgKi8KLQkJCQlhZ2dzdGF0ZS0+YWdnX2Rv bmUgPSB0cnVlOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CkBAIC0yMDg0LDYgKzI1NzMs MjgzIEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAlyZXR1 cm4gTlVMTDsKIH0KIAorLyoKKyAqIGhhc2hfc3BpbGxfaW5pdAorICoKKyAqIENhbGxlZCBhZnRl ciB3ZSBkZXRlcm1pbmVkIHRoYXQgc3BpbGxpbmcgaXMgbmVjZXNzYXJ5LiBDaG9vc2VzIHRoZSBu dW1iZXIKKyAqIG9mIHBhcnRpdGlvbnMgdG8gY3JlYXRlLCBhbmQgaW5pdGlhbGl6ZXMgdGhlbS4K KyAqLworc3RhdGljIHZvaWQKK2hhc2hfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBp bnQgaW5wdXRfYml0cywgdWludDY0IGlucHV0X3R1cGxlcywKKwkJCQlkb3VibGUgaGFzaGVudHJ5 c2l6ZSkKK3sKKwlpbnQgICAgIG5wYXJ0aXRpb25zOworCWludCAgICAgcGFydGl0aW9uX2JpdHM7 CisKKwlucGFydGl0aW9ucyA9IGhhc2hfY2hvb3NlX251bV9zcGlsbF9wYXJ0aXRpb25zKGlucHV0 X3R1cGxlcywKKwkJCQkJCQkJCQkJCSAgIGhhc2hlbnRyeXNpemUpOworCXBhcnRpdGlvbl9iaXRz ID0gbXlfbG9nMihucGFydGl0aW9ucyk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBl eGhhdXN0IHRoZSBoYXNoIGJpdHMKKwkgICBUT0RPOiBiZSBjb25zaXN0ZW50IHdpdGggaGFzaGpv aW4gYmF0Y2hpbmcgKi8KKwlpZiAocGFydGl0aW9uX2JpdHMgKyBpbnB1dF9iaXRzID49IDMyKQor CQlwYXJ0aXRpb25fYml0cyA9IDMyIC0gaW5wdXRfYml0czsKKworCS8qIG51bWJlciBvZiBwYXJ0 aXRpb25zIHdpbGwgYmUgYSBwb3dlciBvZiB0d28gKi8KKwlucGFydGl0aW9ucyA9IDFMIDw8IHBh cnRpdGlvbl9iaXRzOworCisJc3BpbGwtPnBhcnRpdGlvbl9iaXRzID0gcGFydGl0aW9uX2JpdHM7 CisJc3BpbGwtPm5fcGFydGl0aW9ucyA9IG5wYXJ0aXRpb25zOworCXNwaWxsLT5wYXJ0aXRpb25z ID0gcGFsbG9jMChzaXplb2YoQnVmRmlsZSAqKSAqIG5wYXJ0aXRpb25zKTsKKwlzcGlsbC0+bnR1 cGxlcyA9IHBhbGxvYzAoc2l6ZW9mKGludDY0KSAqIG5wYXJ0aXRpb25zKTsKK30KKworLyoKKyAq IGhhc2hfc3BpbGxfdHVwbGUKKyAqCisgKiBOb3QgZW5vdWdoIG1lbW9yeSB0byBhZGQgdHVwbGUg YXMgbmV3IGVudHJ5IGluIGhhc2ggdGFibGUuIFNhdmUgZm9yIGxhdGVyCisgKiBpbiB0aGUgYXBw cm9wcmlhdGUgcGFydGl0aW9uLgorICovCitzdGF0aWMgU2l6ZQoraGFzaF9zcGlsbF90dXBsZShI YXNoQWdnU3BpbGwgKnNwaWxsLCBpbnQgaW5wdXRfYml0cywgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CisJCQkJIHVpbnQzMiBoYXNoKQoreworCWludAkJCQkJIHBhcnRpdGlvbjsKKwlNaW5pbWFsVHVw bGUJCSB0dXBsZTsKKwlCdWZGaWxlCQkJCSpmaWxlOworCWludAkJCQkJIHdyaXR0ZW47CisJaW50 CQkJCQkgdG90YWxfd3JpdHRlbiA9IDA7CisJYm9vbAkJCQkgc2hvdWxkRnJlZTsKKworCUFzc2Vy dChzcGlsbC0+cGFydGl0aW9ucyAhPSBOVUxMKTsKKworCS8qVE9ETzogcHJvamVjdCBuZWVkZWQg YXR0cmlidXRlcyBvbmx5ICovCisJdHVwbGUgPSBFeGVjRmV0Y2hTbG90TWluaW1hbFR1cGxlKHNs b3QsICZzaG91bGRGcmVlKTsKKworCWlmIChzcGlsbC0+cGFydGl0aW9uX2JpdHMgPT0gMCkKKwkJ cGFydGl0aW9uID0gMDsKKwllbHNlCisJCXBhcnRpdGlvbiA9IChoYXNoIDw8IGlucHV0X2JpdHMp ID4+CisJCQkoMzIgLSBzcGlsbC0+cGFydGl0aW9uX2JpdHMpOworCisJc3BpbGwtPm50dXBsZXNb cGFydGl0aW9uXSsrOworCisJaWYgKHNwaWxsLT5wYXJ0aXRpb25zW3BhcnRpdGlvbl0gPT0gTlVM TCkKKwkJc3BpbGwtPnBhcnRpdGlvbnNbcGFydGl0aW9uXSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKGZh bHNlKTsKKwlmaWxlID0gc3BpbGwtPnBhcnRpdGlvbnNbcGFydGl0aW9uXTsKKworCXdyaXR0ZW4g PSBCdWZGaWxlV3JpdGUoZmlsZSwgKHZvaWQgKikgJmhhc2gsIHNpemVvZih1aW50MzIpKTsKKwlp ZiAod3JpdHRlbiAhPSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8g SGFzaEFnZyB0ZW1wb3JhcnkgZmlsZTogJW0iKSkpOworCXRvdGFsX3dyaXR0ZW4gKz0gd3JpdHRl bjsKKworCXdyaXR0ZW4gPSBCdWZGaWxlV3JpdGUoZmlsZSwgKHZvaWQgKikgdHVwbGUsIHR1cGxl LT50X2xlbik7CisJaWYgKHdyaXR0ZW4gIT0gdHVwbGUtPnRfbGVuKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCB3cml0ZSB0byBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAlbSIpKSk7CisJdG90YWxfd3JpdHRl biArPSB3cml0dGVuOworCisJaWYgKHNob3VsZEZyZWUpCisJCXBmcmVlKHR1cGxlKTsKKworCXJl dHVybiB0b3RhbF93cml0dGVuOworfQorCisvKgorICogcmVhZF9zcGlsbGVkX3R1cGxlCisgKiAJ CXJlYWQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIGJhdGNoIGZpbGUuICBSZXR1cm4gTlVMTCBpZiBu byBtb3JlLgorICovCitzdGF0aWMgTWluaW1hbFR1cGxlCitoYXNoX3JlYWRfc3BpbGxlZChCdWZG aWxlICpmaWxlLCB1aW50MzIgKmhhc2hwKQoreworCU1pbmltYWxUdXBsZQl0dXBsZTsKKwl1aW50 MzIJCQl0X2xlbjsKKwlzaXplX3QJCQlucmVhZDsKKwl1aW50MzIJCQloYXNoOworCisJbnJlYWQg PSBCdWZGaWxlUmVhZChmaWxlLCAmaGFzaCwgc2l6ZW9mKHVpbnQzMikpOworCWlmIChucmVhZCA9 PSAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobnJlYWQgIT0gc2l6ZW9mKHVpbnQzMikpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1z ZygiY291bGQgbm90IHJlYWQgZnJvbSBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAlbSIpKSk7CisJ aWYgKGhhc2hwICE9IE5VTEwpCisJCSpoYXNocCA9IGhhc2g7CisKKwlucmVhZCA9IEJ1ZkZpbGVS ZWFkKGZpbGUsICZ0X2xlbiwgc2l6ZW9mKHRfbGVuKSk7CisJaWYgKG5yZWFkICE9IHNpemVvZih1 aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gSGFzaEFnZyB0ZW1wb3JhcnkgZmls ZTogJW0iKSkpOworCisJdHVwbGUgPSAoTWluaW1hbFR1cGxlKSBwYWxsb2ModF9sZW4pOworCXR1 cGxlLT50X2xlbiA9IHRfbGVuOworCisJbnJlYWQgPSBCdWZGaWxlUmVhZChmaWxlLCAodm9pZCAq KSgoY2hhciAqKXR1cGxlICsgc2l6ZW9mKHVpbnQzMikpLAorCQkJCQkJdF9sZW4gLSBzaXplb2Yo dWludDMyKSk7CisJaWYgKG5yZWFkICE9IHRfbGVuIC0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygi Y291bGQgbm90IHJlYWQgZnJvbSBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAlbSIpKSk7CisKKwly ZXR1cm4gdHVwbGU7Cit9CisKKy8qCisgKiBuZXdfaGFzaGFnZ19iYXRjaAorICoKKyAqIENvbnN0 cnVjdCBhIEhhc2hBZ2dCYXRjaCBpdGVtLCB3aGljaCByZXByZXNlbnRzIG9uZSBpdGVyYXRpb24g b2YgSGFzaEFnZyB0bworICogYmUgZG9uZS4gU2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgYWdncmVn YXRlJ3MgbWVtb3J5IGNvbnRleHQuCisgKi8KK3N0YXRpYyBIYXNoQWdnQmF0Y2ggKgoraGFzaF9i YXRjaF9uZXcoQnVmRmlsZSAqaW5wdXRfZmlsZSwgaW50IHNldG5vLCBpbnQ2NCBpbnB1dF9ncm91 cHMsCisJCQkgICBpbnQgaW5wdXRfYml0cykKK3sKKwlIYXNoQWdnQmF0Y2ggKmJhdGNoID0gcGFs bG9jMChzaXplb2YoSGFzaEFnZ0JhdGNoKSk7CisKKwliYXRjaC0+aW5wdXRfZmlsZSA9IGlucHV0 X2ZpbGU7CisJYmF0Y2gtPmlucHV0X2JpdHMgPSBpbnB1dF9iaXRzOworCWJhdGNoLT5pbnB1dF9n cm91cHMgPSBpbnB1dF9ncm91cHM7CisJYmF0Y2gtPnNldG5vID0gc2V0bm87CisKKwkvKiBiYXRj aC0+c3BpbGwgd2lsbCBiZSBzZXQgb25seSBhZnRlciBzcGlsbGluZyB0aGlzIGJhdGNoICovCisK KwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBoYXNoX2ZpbmlzaF9pbml0aWFsX3NwaWxscwor ICoKKyAqIEFmdGVyIGEgSGFzaEFnZ0JhdGNoIGhhcyBiZWVuIHByb2Nlc3NlZCwgaXQgbWF5IGhh dmUgc3BpbGxlZCB0dXBsZXMgdG8KKyAqIGRpc2suIElmIHNvLCB0dXJuIHRoZSBzcGlsbGVkIHBh cnRpdGlvbnMgaW50byBuZXcgYmF0Y2hlcyB0aGF0IG11c3QgbGF0ZXIKKyAqIGJlIGV4ZWN1dGVk LgorICovCitzdGF0aWMgdm9pZAoraGFzaF9maW5pc2hfaW5pdGlhbF9zcGlsbHMoQWdnU3RhdGUg KmFnZ3N0YXRlKQoreworCWludCBzZXRubzsKKworCWlmIChhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMg PT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgYWdnc3RhdGUt Pm51bV9oYXNoZXM7IHNldG5vKyspCisJCWhhc2hfc3BpbGxfZmluaXNoKGFnZ3N0YXRlLCAmYWdn c3RhdGUtPmhhc2hfc3BpbGxzW3NldG5vXSwgc2V0bm8sIDApOworCisJcGZyZWUoYWdnc3RhdGUt Pmhhc2hfc3BpbGxzKTsKKwlhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgPSBOVUxMOworfQorCisvKgor ICogaGFzaF9zcGlsbF9maW5pc2gKKyAqCisgKgorICovCitzdGF0aWMgdm9pZAoraGFzaF9zcGls bF9maW5pc2goQWdnU3RhdGUgKmFnZ3N0YXRlLCBIYXNoQWdnU3BpbGwgKnNwaWxsLCBpbnQgc2V0 bm8sIGludCBpbnB1dF9iaXRzKQoreworCWludCBpOworCisJaWYgKHNwaWxsLT5uX3BhcnRpdGlv bnMgPT0gMCkKKwkJcmV0dXJuOwkvKiBkaWRuJ3Qgc3BpbGwgKi8KKworCWZvciAoaSA9IDA7IGkg PCBzcGlsbC0+bl9wYXJ0aXRpb25zOyBpKyspCisJeworCQlCdWZGaWxlICAgICAgICAgKmZpbGUg PSBzcGlsbC0+cGFydGl0aW9uc1tpXTsKKwkJTWVtb3J5Q29udGV4dCAgICBvbGRDb250ZXh0Owor CQlIYXNoQWdnQmF0Y2ggICAgKm5ld19iYXRjaDsKKwkJaW50NjQgICAgICAgICAgICBpbnB1dF9u Z3JvdXBzOworCisJCS8qIHBhcnRpdGlvbiBpcyBlbXB0eSAqLworCQlpZiAoZmlsZSA9PSBOVUxM KQorCQkJY29udGludWU7CisKKwkJLyogcmV3aW5kIGZpbGUgZm9yIHJlYWRpbmcgKi8KKwkJaWYg KEJ1ZkZpbGVTZWVrKGZpbGUsIDAsIDBMLCBTRUVLX1NFVCkpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90 IHJld2luZCBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAlbSIpKSk7CisKKwkJLyoKKwkJICogRXN0 aW1hdGUgdGhlIG51bWJlciBvZiBpbnB1dCBncm91cHMgZm9yIHRoaXMgbmV3IHdvcmsgaXRlbSBh cyB0aGUKKwkJICogdG90YWwgbnVtYmVyIG9mIHR1cGxlcyBpbiBpdHMgaW5wdXQgZmlsZS4gQWx0 aG91Z2ggdGhhdCdzIGEgd29yc3QKKwkJICogY2FzZSwgaXQncyBub3QgYmFkIGhlcmUgZm9yIHR3 byByZWFzb25zOiAoMSkgb3ZlcmVzdGltYXRpbmcgaXMKKwkJICogYmV0dGVyIHRoYW4gdW5kZXJl c3RpbWF0aW5nOyBhbmQgKDIpIHdlJ3ZlIGFscmVhZHkgc2Nhbm5lZCB0aGUKKwkJICogcmVsYXRp b24gb25jZSwgc28gaXQncyBsaWtlbHkgdGhhdCB3ZSd2ZSBhbHJlYWR5IGZpbmFsaXplZCBtYW55 IG9mCisJCSAqIHRoZSBjb21tb24gdmFsdWVzLgorCQkgKi8KKwkJaW5wdXRfbmdyb3VwcyA9IHNw aWxsLT5udHVwbGVzW2ldOworCisJCW9sZENvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o YWdnc3RhdGUtPnNzLnBzLnN0YXRlLT5lc19xdWVyeV9jeHQpOworCQluZXdfYmF0Y2ggPSBoYXNo X2JhdGNoX25ldyhmaWxlLCBzZXRubywgaW5wdXRfbmdyb3VwcywKKwkJCQkJCQkJICAgc3BpbGwt PnBhcnRpdGlvbl9iaXRzICsgaW5wdXRfYml0cyk7CisJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMg PSBsYXBwZW5kKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMsIG5ld19iYXRjaCk7CisJCWFnZ3N0YXRl LT5oYXNoX2JhdGNoZXNfdXNlZCsrOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4 dCk7CisJfQorCisJcGZyZWUoc3BpbGwtPm50dXBsZXMpOworCXBmcmVlKHNwaWxsLT5wYXJ0aXRp b25zKTsKK30KKworLyoKKyAqIENsZWFyIGEgSGFzaEFnZ1NwaWxsLCBmcmVlIGl0cyBtZW1vcnks IGFuZCBjbG9zZSBpdHMgZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoX3Jlc2V0X3NwaWxs KEhhc2hBZ2dTcGlsbCAqc3BpbGwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNwaWxs LT5uX3BhcnRpdGlvbnM7IGkrKykKKwl7CisJCUJ1ZkZpbGUgICAgICAgICAqZmlsZSA9IHNwaWxs LT5wYXJ0aXRpb25zW2ldOworCisJCWlmIChmaWxlICE9IE5VTEwpCisJCQlCdWZGaWxlQ2xvc2Uo ZmlsZSk7CisJfQorCWlmIChzcGlsbC0+bnR1cGxlcyAhPSBOVUxMKQorCQlwZnJlZShzcGlsbC0+ bnR1cGxlcyk7CisJaWYgKHNwaWxsLT5wYXJ0aXRpb25zICE9IE5VTEwpCisJCXBmcmVlKHNwaWxs LT5wYXJ0aXRpb25zKTsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlc2V0IGFsbCBhY3RpdmUgSGFz aEFnZ1NwaWxscy4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfcmVzZXRfc3BpbGxzKEFnZ1N0YXRl ICphZ2dzdGF0ZSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisKKwlpZiAoYWdnc3RhdGUtPmhhc2hfc3Bp bGxzICE9IE5VTEwpCisJeworCQlpbnQgc2V0bm87CisKKwkJZm9yIChzZXRubyA9IDA7IHNldG5v IDwgYWdnc3RhdGUtPm51bV9oYXNoZXM7IHNldG5vKyspCisJCQloYXNoX3Jlc2V0X3NwaWxsKCZh Z2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dKTsKKworCQlwZnJlZShhZ2dzdGF0ZS0+aGFzaF9z cGlsbHMpOworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgPSBOVUxMOworCX0KKworCWZvcmVhY2go bGMsIGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMpCisJeworCQlIYXNoQWdnQmF0Y2ggKmJhdGNoID0g KEhhc2hBZ2dCYXRjaCopIGxmaXJzdChsYyk7CisJCWlmIChiYXRjaC0+aW5wdXRfZmlsZSAhPSBO VUxMKQorCQl7CisJCQlCdWZGaWxlQ2xvc2UoYmF0Y2gtPmlucHV0X2ZpbGUpOworCQkJYmF0Y2gt PmlucHV0X2ZpbGUgPSBOVUxMOworCQl9CisJCWhhc2hfcmVzZXRfc3BpbGwoJmJhdGNoLT5zcGls bCk7CisJCXBmcmVlKGJhdGNoKTsKKwl9CisJbGlzdF9mcmVlKGFnZ3N0YXRlLT5oYXNoX2JhdGNo ZXMpOworCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMgPSBOSUw7Cit9CisKKwogLyogLS0tLS0tLS0t LS0tLS0tLS0KICAqIEV4ZWNJbml0QWdnCiAgKgpAQCAtMjI2OCw2ICszMDM0LDEwIEBAIEV4ZWNJ bml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQlhZ2dzdGF0 ZS0+c3MucHMub3V0ZXJvcHNmaXhlZCA9IGZhbHNlOwogCX0KIAorCWlmICh1c2VfaGFzaGluZykK KwkJYWdnc3RhdGUtPmhhc2hfc3BpbGxfc2xvdCA9IEV4ZWNJbml0RXh0cmFUdXBsZVNsb3QoZXN0 YXRlLCBzY2FuRGVzYywKKwkJCQkJCQkJCQkJCQkJICAgJlRUU09wc01pbmltYWxUdXBsZSk7CisK IAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUsIHNsb3QgYW5kIHByb2plY3Rpb24uCiAJ ICovCkBAIC0yNDk3LDcgKzMyNjcsNyBAQCBFeGVjSW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlhZ2dzdGF0ZS0+aGFzaF9wZXJncm91cCA9IHBlcmdyb3Vw czsKIAogCQlmaW5kX2hhc2hfY29sdW1ucyhhZ2dzdGF0ZSk7Ci0JCWJ1aWxkX2hhc2hfdGFibGUo YWdnc3RhdGUpOworCQlidWlsZF9oYXNoX3RhYmxlKGFnZ3N0YXRlLCAtMSwgMCk7CiAJCWFnZ3N0 YXRlLT50YWJsZV9maWxsZWQgPSBmYWxzZTsKIAl9CiAKQEAgLTI5MDMsNyArMzY3Myw3IEBAIEV4 ZWNJbml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCWVsc2UK IAkJCUFzc2VydChmYWxzZSk7CiAKLQkJcGhhc2UtPmV2YWx0cmFucyA9IEV4ZWNCdWlsZEFnZ1Ry YW5zKGFnZ3N0YXRlLCBwaGFzZSwgZG9zb3J0LCBkb2hhc2gpOworCQlwaGFzZS0+ZXZhbHRyYW5z ID0gRXhlY0J1aWxkQWdnVHJhbnMoYWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRvaGFzaCwgZmFs c2UpOwogCiAJfQogCkBAIC0zMzk4LDYgKzQxNjgsOCBAQCBFeGVjRW5kQWdnKEFnZ1N0YXRlICpu b2RlKQogCWlmIChub2RlLT5zb3J0X291dCkKIAkJdHVwbGVzb3J0X2VuZChub2RlLT5zb3J0X291 dCk7CiAKKwloYXNoX3Jlc2V0X3NwaWxscyhub2RlKTsKKwogCWZvciAodHJhbnNubyA9IDA7IHRy YW5zbm8gPCBub2RlLT5udW10cmFuczsgdHJhbnNubysrKQogCXsKIAkJQWdnU3RhdGVQZXJUcmFu cyBwZXJ0cmFucyA9ICZub2RlLT5wZXJ0cmFuc1t0cmFuc25vXTsKQEAgLTM0NTMsMTIgKzQyMjUs MTMgQEAgRXhlY1JlU2NhbkFnZyhBZ2dTdGF0ZSAqbm9kZSkKIAkJCXJldHVybjsKIAogCQkvKgot CQkgKiBJZiB3ZSBkbyBoYXZlIHRoZSBoYXNoIHRhYmxlLCBhbmQgdGhlIHN1YnBsYW4gZG9lcyBu b3QgaGF2ZSBhbnkKLQkJICogcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBub25lIG9mIG91ciBvd24g cGFyYW1ldGVyIGNoYW5nZXMgYWZmZWN0Ci0JCSAqIGlucHV0IGV4cHJlc3Npb25zIG9mIHRoZSBh Z2dyZWdhdGVkIGZ1bmN0aW9ucywgdGhlbiB3ZSBjYW4ganVzdAotCQkgKiByZXNjYW4gdGhlIGV4 aXN0aW5nIGhhc2ggdGFibGU7IG5vIG5lZWQgdG8gYnVpbGQgaXQgYWdhaW4uCisJCSAqIElmIHdl IGRvIGhhdmUgdGhlIGhhc2ggdGFibGUsIGFuZCBpdCBuZXZlciBzcGlsbGVkLCBhbmQgdGhlIHN1 YnBsYW4KKwkJICogZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBub25l IG9mIG91ciBvd24gcGFyYW1ldGVyCisJCSAqIGNoYW5nZXMgYWZmZWN0IGlucHV0IGV4cHJlc3Np b25zIG9mIHRoZSBhZ2dyZWdhdGVkIGZ1bmN0aW9ucywgdGhlbgorCQkgKiB3ZSBjYW4ganVzdCBy ZXNjYW4gdGhlIGV4aXN0aW5nIGhhc2ggdGFibGU7IG5vIG5lZWQgdG8gYnVpbGQgaXQKKwkJICog YWdhaW4uCiAJCSAqLwotCQlpZiAob3V0ZXJQbGFuLT5jaGdQYXJhbSA9PSBOVUxMICYmCisJCWlm IChvdXRlclBsYW4tPmNoZ1BhcmFtID09IE5VTEwgJiYgIW5vZGUtPmhhc2hfc3BpbGxlZCAmJgog CQkJIWJtc19vdmVybGFwKG5vZGUtPnNzLnBzLmNoZ1BhcmFtLCBhZ2dub2RlLT5hZ2dQYXJhbXMp KQogCQl7CiAJCQlSZXNldFR1cGxlSGFzaEl0ZXJhdG9yKG5vZGUtPnBlcmhhc2hbMF0uaGFzaHRh YmxlLApAQCAtMzUxNSw5ICs0Mjg4LDIwIEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUp CiAJICovCiAJaWYgKG5vZGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19IQVNIRUQgfHwgbm9kZS0+YWdn c3RyYXRlZ3kgPT0gQUdHX01JWEVEKQogCXsKKwkJaGFzaF9yZXNldF9zcGlsbHMobm9kZSk7CisK KwkJbm9kZS0+aGFzaF9zcGlsbGVkID0gZmFsc2U7CisJCW5vZGUtPmhhc2hfbWVtX2N1cnJlbnQg PSAwOworCQlub2RlLT5oYXNoX25ncm91cHNfY3VycmVudCA9IDA7CisKKwkJLyogcmVzZXQgc3Rh dHMgKi8KKwkJbm9kZS0+aGFzaF9tZW1fcGVhayA9IDA7CisJCW5vZGUtPmhhc2hfZGlza191c2Vk ID0gMDsKKwkJbm9kZS0+aGFzaF9iYXRjaGVzX3VzZWQgPSAwOworCiAJCVJlU2NhbkV4cHJDb250 ZXh0KG5vZGUtPmhhc2hjb250ZXh0KTsKIAkJLyogUmVidWlsZCBhbiBlbXB0eSBoYXNoIHRhYmxl ICovCi0JCWJ1aWxkX2hhc2hfdGFibGUobm9kZSk7CisJCWJ1aWxkX2hhc2hfdGFibGUobm9kZSwg LTEsIDApOwogCQlub2RlLT50YWJsZV9maWxsZWQgPSBmYWxzZTsKIAkJLyogaXRlcmF0b3Igd2ls bCBiZSByZXNldCB3aGVuIHRoZSB0YWJsZSBpcyBmaWxsZWQgKi8KIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jCmluZGV4IGE5ZDM2MjEwMGE4Li5mZDI5Y2U1ZDEyYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTIwODMsNiArMjA4Myw3IEBAIGxsdm1fY29tcGls ZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJfQogCiAJCQljYXNlIEVFT1BfQUdHX0lOSVRf VFJBTlM6CisJCQljYXNlIEVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRDoKIAkJCQl7CiAJCQkJ CUFnZ1N0YXRlICAgKmFnZ3N0YXRlOwogCQkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOwpA QCAtMjA5Myw2ICsyMDk0LDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkK IAkJCQkJTExWTVZhbHVlUmVmIHZfYWxscGVyZ3JvdXBzcDsKIAogCQkJCQlMTFZNVmFsdWVSZWYg dl9wZXJncm91cHA7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwX2FsbGFnZ3M7CiAKIAkJ CQkJTExWTVZhbHVlUmVmIHZfc2V0b2ZmLAogCQkJCQkJCQl2X3RyYW5zbm87CkBAIC0yMTIwLDEx ICsyMTIyLDMyIEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQkJ CQkJICAiYWdnc3RhdGUuYWxsX3Blcmdyb3VwcyIpOwogCQkJCQl2X3NldG9mZiA9IGxfaW50MzJf Y29uc3Qob3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0gbF9p bnQzMl9jb25zdChvcC0+ZC5hZ2dfaW5pdF90cmFucy50cmFuc25vKTsKLQkJCQkJdl9wZXJncm91 cHAgPQotCQkJCQkJTExWTUJ1aWxkR0VQKGIsCi0JCQkJCQkJCQkgbF9sb2FkX2dlcDEoYiwgdl9h bGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpLAotCQkJCQkJCQkJICZ2X3RyYW5zbm8sIDEsICIi KTsKKwkJCQkJdl9wZXJncm91cF9hbGxhZ2dzID0gbF9sb2FkX2dlcDEoYiwgdl9hbGxwZXJncm91 cHNwLCB2X3NldG9mZiwgIiIpOwogCisJCQkJCS8qCisJCQkJCSAqIFdoZW4gbm8gdHVwbGVzIGF0 IGFsbCBoYXZlIHNwaWxsZWQsIHdlIGF2b2lkIGFkZGluZyB0aGlzCisJCQkJCSAqIGV4dHJhIGJy YW5jaC4gQnV0IGFmdGVyIHNvbWUgdHVwbGVzIGhhdmUgc3BpbGxlZCwgdGhpcworCQkJCQkgKiBi cmFuY2ggaXMgbmVjZXNzYXJ5LCBzbyB3ZSByZWNvbXBpbGUgdGhlIGV4cHJlc3Npb24KKwkJCQkJ ICogdXNpbmcgYSBuZXcgb3Bjb2RlLgorCQkJCQkgKi8KKwkJCQkJaWYgKG9wY29kZSA9PSBFRU9Q X0FHR19JTklUX1RSQU5TX1NQSUxMRUQpCisJCQkJCXsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVm IGJfY2hlY2tfbm90cmFuc3ZhbHVlID0gbF9iYl9iZWZvcmVfdigKKwkJCQkJCQlvcGJsb2Nrc1tp ICsgMV0sICJvcC4lZC5jaGVja19ub3RyYW5zdmFsdWUiLCBpKTsKKworCQkJCQkJTExWTUJ1aWxk Q29uZEJyKAorCQkJCQkJCWIsCisJCQkJCQkJTExWTUJ1aWxkSUNtcChiLCBMTFZNSW50RVEsCisJ CQkJCQkJCQkJICBMTFZNQnVpbGRQdHJUb0ludCgKKwkJCQkJCQkJCQkJICBiLCB2X3Blcmdyb3Vw X2FsbGFnZ3MsIFR5cGVTaXplVCwgIiIpLAorCQkJCQkJCQkJCSAgbF9zaXpldF9jb25zdCgwKSwg IiIpLAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwKKwkJCQkJCQliX2NoZWNrX25vdHJhbnN2YWx1 ZSk7CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2NoZWNrX25vdHJhbnN2 YWx1ZSk7CisJCQkJCX0KKworCQkJCQl2X3Blcmdyb3VwcCA9IExMVk1CdWlsZEdFUChiLCB2X3Bl cmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIiKTsKIAkJCQkJdl9ub3RyYW5zdmFsdWUg PQogCQkJCQkJbF9sb2FkX3N0cnVjdF9nZXAoYiwgdl9wZXJncm91cHAsCiAJCQkJCQkJCQkJICBG SUVMRE5PX0FHR1NUQVRFUEVSR1JPVVBEQVRBX05PVFJBTlNWQUxVRSwKQEAgLTIxODEsNiArMjIw NCw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJfQogCiAJCQlj YXNlIEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDSzoKKwkJCWNhc2UgRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLX1NQSUxMRUQ6CiAJCQkJewogCQkJCQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsK IAkJCQkJTExWTVZhbHVlUmVmIHZfc2V0b2ZmLApAQCAtMjE5MSw2ICsyMjE1LDcgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAogCQkJCQlMTFZNVmFsdWVSZWYgdl90cmFu c251bGw7CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwcDsKKwkJCQkJTExWTVZhbHVlUmVm IHZfcGVyZ3JvdXBfYWxsYWdnczsKIAogCQkJCQlpbnQJCQlqdW1wbnVsbCA9IG9wLT5kLmFnZ19z dHJpY3RfdHJhbnNfY2hlY2suanVtcG51bGw7CiAKQEAgLTIyMTAsMTEgKzIyMzUsMzIgQEAgbGx2 bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCWxfaW50MzJfY29uc3Qob3At PmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmYpOwogCQkJCQl2X3RyYW5zbm8gPQogCQkJ CQkJbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnRyYW5zbm8pOwot CQkJCQl2X3Blcmdyb3VwcCA9Ci0JCQkJCQlMTFZNQnVpbGRHRVAoYiwKLQkJCQkJCQkJCSBsX2xv YWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIiksCi0JCQkJCQkJCQkgJnZf dHJhbnNubywgMSwgIiIpOworCQkJCQl2X3Blcmdyb3VwX2FsbGFnZ3MgPSBsX2xvYWRfZ2VwMShi LCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIik7CisKKwkJCQkJLyoKKwkJCQkJICogV2hl biBubyB0dXBsZXMgYXQgYWxsIGhhdmUgc3BpbGxlZCwgd2UgYXZvaWQgYWRkaW5nIHRoaXMKKwkJ CQkJICogZXh0cmEgYnJhbmNoLiBCdXQgYWZ0ZXIgc29tZSB0dXBsZXMgaGF2ZSBzcGlsbGVkLCB0 aGlzCisJCQkJCSAqIGJyYW5jaCBpcyBuZWNlc3NhcnksIHNvIHdlIHJlY29tcGlsZSB0aGUgZXhw cmVzc2lvbgorCQkJCQkgKiB1c2luZyBhIG5ldyBvcGNvZGUuCisJCQkJCSAqLworCQkJCQlpZiAo b3Bjb2RlID09IEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDS19TUElMTEVEKQorCQkJCQl7CisJ CQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBiX2NoZWNrX3RyYW5zbnVsbCA9IGxfYmJfYmVmb3JlX3Yo CisJCQkJCQkJb3BibG9ja3NbaSArIDFdLCAib3AuJWQuY2hlY2tfdHJhbnNudWxsIiwgaSk7CisK KwkJCQkJCUxMVk1CdWlsZENvbmRCcigKKwkJCQkJCQliLAorCQkJCQkJCUxMVk1CdWlsZElDbXAo YiwgTExWTUludEVRLAorCQkJCQkJCQkJCSAgTExWTUJ1aWxkUHRyVG9JbnQoYiwgdl9wZXJncm91 cF9hbGxhZ2dzLAorCQkJCQkJCQkJCQkJCQkJVHlwZVNpemVULCAiIiksCisJCQkJCQkJCQkJICBs X3NpemV0X2NvbnN0KDApLCAiIiksCisJCQkJCQkJb3BibG9ja3NbanVtcG51bGxdLAorCQkJCQkJ CWJfY2hlY2tfdHJhbnNudWxsKTsKKworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIs IGJfY2hlY2tfdHJhbnNudWxsKTsKKwkJCQkJfQogCisJCQkJCXZfcGVyZ3JvdXBwID0gTExWTUJ1 aWxkR0VQKGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgJnZfdHJhbnNubywgMSwgIiIpOwogCQkJCQl2 X3RyYW5zbnVsbCA9CiAJCQkJCQlsX2xvYWRfc3RydWN0X2dlcChiLCB2X3Blcmdyb3VwcCwKIAkJ CQkJCQkJCQkgIEZJRUxETk9fQUdHU1RBVEVQRVJHUk9VUERBVEFfVFJBTlNWQUxVRUlTTlVMTCwK QEAgLTIyMzAsNyArMjI3Niw5IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUp CiAJCQkJfQogCiAJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMOgorCQkJY2FzZSBF RU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTF9TUElMTEVEOgogCQkJY2FzZSBFRU9QX0FHR19QTEFJ Tl9UUkFOUzoKKwkJCWNhc2UgRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRDoKIAkJCQl7CiAJ CQkJCUFnZ1N0YXRlICAgKmFnZ3N0YXRlOwogCQkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5z OwpAQCAtMjI1Niw2ICsyMzA0LDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0 ZSkKIAkJCQkJTExWTVZhbHVlUmVmIHZfcGVydHJhbnNwOwogCiAJCQkJCUxMVk1WYWx1ZVJlZiB2 X3Blcmdyb3VwcDsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcGVyZ3JvdXBfYWxsYWdnczsKIAogCQkJ CQlMTFZNVmFsdWVSZWYgdl9yZXR2YWw7CiAKQEAgLTIyODMsMTAgKzIzMzIsMzMgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCQkJCQkgICJhZ2dzdGF0ZS5hbGxf cGVyZ3JvdXBzIik7CiAJCQkJCXZfc2V0b2ZmID0gbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfdHJh bnMuc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0gbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfdHJh bnMudHJhbnNubyk7Ci0JCQkJCXZfcGVyZ3JvdXBwID0KLQkJCQkJCUxMVk1CdWlsZEdFUChiLAot CQkJCQkJCQkJIGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKSwK LQkJCQkJCQkJCSAmdl90cmFuc25vLCAxLCAiIik7CisJCQkJCXZfcGVyZ3JvdXBfYWxsYWdncyA9 IGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKTsKKworCQkJCQkv KgorCQkJCQkgKiBXaGVuIG5vIHR1cGxlcyBhdCBhbGwgaGF2ZSBzcGlsbGVkLCB3ZSBhdm9pZCBh ZGRpbmcgdGhpcworCQkJCQkgKiBleHRyYSBicmFuY2guIEJ1dCBhZnRlciBzb21lIHR1cGxlcyBo YXZlIHNwaWxsZWQsIHRoaXMKKwkJCQkJICogYnJhbmNoIGlzIG5lY2Vzc2FyeSwgc28gd2UgcmVj b21waWxlIHRoZSBleHByZXNzaW9uCisJCQkJCSAqIHVzaW5nIGEgbmV3IG9wY29kZS4KKwkJCQkJ ICovCisJCQkJCWlmIChvcGNvZGUgPT0gRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExF RCB8fAorCQkJCQkJb3Bjb2RlID09IEVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQpCisJCQkJ CXsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfYWR2YW5jZV90cmFuc3ZhbCA9IGxfYmJfYmVm b3JlX3YoCisJCQkJCQkJb3BibG9ja3NbaSArIDFdLCAib3AuJWQuYWR2YW5jZV90cmFuc3ZhbCIs IGkpOworCisJCQkJCQlMTFZNQnVpbGRDb25kQnIoCisJCQkJCQkJYiwKKwkJCQkJCQlMTFZNQnVp bGRJQ21wKGIsIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkgIExMVk1CdWlsZFB0clRvSW50KGIsIHZf cGVyZ3JvdXBfYWxsYWdncywKKwkJCQkJCQkJCQkJCQkJCVR5cGVTaXplVCwgIiIpLAorCQkJCQkJ CQkJCSAgbF9zaXpldF9jb25zdCgwKSwgIiIpLAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwKKwkJ CQkJCQliX2FkdmFuY2VfdHJhbnN2YWwpOworCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRF bmQoYiwgYl9hZHZhbmNlX3RyYW5zdmFsKTsKKwkJCQkJfQorCisJCQkJCXZfcGVyZ3JvdXBwID0g TExWTUJ1aWxkR0VQKGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgJnZfdHJhbnNubywgMSwgIiIpOwog CiAJCQkJCXZfZmNpbmZvID0gbF9wdHJfY29uc3QoZmNpbmZvLAogCQkJCQkJCQkJCSAgIGxfcHRy KFN0cnVjdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYwppbmRleCBjNWY2NTkzNDg1OS4uM2YwZDI4OTk2MzUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTI4LDYgKzEyOCw3IEBAIGJvb2wJCWVuYWJsZV9iaXRt YXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9zb3J0ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK2Jvb2wJCWVuYWJs ZV9oYXNoYWdnX3NwaWxsID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9uZXN0bG9vcCA9IHRydWU7CiBi b29sCQllbmFibGVfbWF0ZXJpYWwgPSB0cnVlOwogYm9vbAkJZW5hYmxlX21lcmdlam9pbiA9IHRy dWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggN2ZlMTFiNTlhMDIuLjUx MWY4ODYxYThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC00MjU1LDYg KzQyNTUsOSBAQCBjb25zaWRlcl9ncm91cGluZ3NldHNfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCSAqIGdkLT5yb2xsdXBzIGlzIGVtcHR5IGlmIHdlIGhhdmUgb25seSB1bnNvcnRhYmxlIGNv bHVtbnMgdG8gd29yawogCQkgKiB3aXRoLiAgT3ZlcnJpZGUgd29ya19tZW0gaW4gdGhhdCBjYXNl OyBvdGhlcndpc2UsIHdlJ2xsIHJlbHkgb24gdGhlCiAJCSAqIHNvcnRlZC1pbnB1dCBjYXNlIHRv IGdlbmVyYXRlIHVzYWJsZSBtaXhlZCBwYXRocy4KKwkJICoKKwkJICogVE9ETzogdGhpbmsgbW9y ZSBhYm91dCBob3cgdG8gcGxhbiBncm91cGluZyBzZXRzIHdoZW4gc3BpbGxpbmcgaGFzaAorCQkg KiB0YWJsZXMgaXMgYW4gb3B0aW9uCiAJCSAqLwogCQlpZiAoaGFzaHNpemUgPiB3b3JrX21lbSAq IDEwMjRMICYmIGdkLT5yb2xsdXBzKQogCQkJcmV0dXJuOwkJCQkvKiBub3BlLCB3b24ndCBmaXQg Ki8KQEAgLTY1MjcsNyArNjUzMCw4IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCSAqIHdlcmUgdW5hYmxlIHRv IHNvcnQgYWJvdmUsIHRoZW4gd2UnZCBiZXR0ZXIgZ2VuZXJhdGUgYSBQYXRoLCBzbwogCQkJICog dGhhdCB3ZSBhdCBsZWFzdCBoYXZlIG9uZS4KIAkJCSAqLwotCQkJaWYgKGhhc2hhZ2d0YWJsZXNp emUgPCB3b3JrX21lbSAqIDEwMjRMIHx8CisJCQlpZiAoZW5hYmxlX2hhc2hhZ2dfc3BpbGwgfHwK KwkJCQloYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCB8fAogCQkJCWdyb3VwZWRf cmVsLT5wYXRobGlzdCA9PSBOSUwpCiAJCQl7CiAJCQkJLyoKQEAgLTY1NjAsNyArNjU2NCw4IEBA IGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmlucHV0X3JlbCwKIAkJCQkJCQkJCQkJCQkJICBhZ2dfZmluYWxfY29zdHMsCiAJCQkJCQkJCQkJ CQkJCSAgZE51bUdyb3Vwcyk7CiAKLQkJCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0g KiAxMDI0TCkKKwkJCWlmIChlbmFibGVfaGFzaGFnZ19zcGlsbCB8fAorCQkJCWhhc2hhZ2d0YWJs ZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKQogCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0 aCAqKQogCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJCSBncm91cGVkX3Jl bCwKQEAgLTY4MjksNyArNjgzNCw3IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBs YW5uZXJJbmZvICpyb290LAogCQkgKiBUZW50YXRpdmVseSBwcm9kdWNlIGEgcGFydGlhbCBIYXNo QWdnIFBhdGgsIGRlcGVuZGluZyBvbiBpZiBpdAogCQkgKiBsb29rcyBhcyBpZiB0aGUgaGFzaCB0 YWJsZSB3aWxsIGZpdCBpbiB3b3JrX21lbS4KIAkJICovCi0JCWlmIChoYXNoYWdndGFibGVzaXpl IDwgd29ya19tZW0gKiAxMDI0TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8IGhh c2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKSAmJgogCQkJY2hlYXBlc3RfdG90YWxf cGF0aCAhPSBOVUxMKQogCQl7CiAJCQlhZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQ YXRoICopCkBAIC02ODU2LDcgKzY4NjEsNyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsUGFydGlhbEdyb3Vw cyk7CiAKIAkJLyogRG8gdGhlIHNhbWUgZm9yIHBhcnRpYWwgcGF0aHMuICovCi0JCWlmIChoYXNo YWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdn X3NwaWxsIHx8IGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKSAmJgogCQkJY2hl YXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCiAJCXsKIAkJCWFkZF9wYXJ0aWFsX3BhdGgocGFy dGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRl eCAzYmY5NmRlMjU2ZC4uYjBjYjFkN2U2YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBA IC0xMjAsNiArMTIwLDcgQEAgYm9vbAkJZW5hYmxlRnN5bmMgPSB0cnVlOwogYm9vbAkJYWxsb3dT eXN0ZW1UYWJsZU1vZHMgPSBmYWxzZTsKIGludAkJCXdvcmtfbWVtID0gMTAyNDsKIGludAkJCW1h aW50ZW5hbmNlX3dvcmtfbWVtID0gMTYzODQ7Citib29sCQloYXNoYWdnX21lbV9vdmVyZmxvdyA9 IGZhbHNlOwogaW50CQkJbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPSAyOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggYmE3NGJmOWY3ZGMuLmQyYjY2YTdmNDZhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMKQEAgLTk1Nyw2ICs5NTcsMjYgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfYm9v bCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAorCXsKKwkJeyJlbmFibGVfaGFzaGFnZ19zcGlsbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5J TkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9m IGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFucyB0aGF0IGFyZSBleHBlY3RlZCB0byBleGNlZWQgd29y a19tZW0uIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9oYXNo YWdnX3NwaWxsLAorCQl0cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwl7CisJCXsiaGFz aGFnZ19tZW1fb3ZlcmZsb3ciLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJ CWdldHRleHRfbm9vcCgiRW5hYmxlcyBoYXNoZWQgYWdncmVnYXRpb24gdG8gb3ZlcmZsb3cgd29y a19tZW0gYXQgZXhlY3V0aW9uIHRpbWUuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJ fSwKKwkJJmhhc2hhZ2dfbWVtX292ZXJmbG93LAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVM TAorCX0sCiAJewogCQl7ImVuYWJsZV9tYXRlcmlhbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5J TkdfTUVUSE9ELAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9m IG1hdGVyaWFsaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IGQyMWRiZWFk MGEyLi5lNTBhN2FkNjcxMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0yMjYsOSArMjI2 LDEzIEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJRUVPUF9BR0dfU1RSSUNUX0lOUFVUX0NI RUNLX0FSR1MsCiAJRUVPUF9BR0dfU1RSSUNUX0lOUFVUX0NIRUNLX05VTExTLAogCUVFT1BfQUdH X0lOSVRfVFJBTlMsCisJRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVELAogCUVFT1BfQUdHX1NU UklDVF9UUkFOU19DSEVDSywKKwlFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCwK IAlFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTCwKKwlFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZB TF9TUElMTEVELAogCUVFT1BfQUdHX1BMQUlOX1RSQU5TLAorCUVFT1BfQUdHX1BMQUlOX1RSQU5T X1NQSUxMRUQsCiAJRUVPUF9BR0dfT1JERVJFRF9UUkFOU19EQVRVTSwKIAlFRU9QX0FHR19PUkRF UkVEX1RSQU5TX1RVUExFLAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj dXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA2Mjk4YzdjOGNh ZC4uZThkODhmMmNlMjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMTQwLDExICsxNDAs MTcgQEAgZXh0ZXJuIFR1cGxlSGFzaFRhYmxlIEJ1aWxkVHVwbGVIYXNoVGFibGVFeHQoUGxhblN0 YXRlICpwYXJlbnQsCiBleHRlcm4gVHVwbGVIYXNoRW50cnkgTG9va3VwVHVwbGVIYXNoRW50cnko VHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLAogCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpz bG90LAogCQkJCQkJCQkJCSAgIGJvb2wgKmlzbmV3KTsKK2V4dGVybiBUdXBsZUhhc2hFbnRyeSBM b29rdXBUdXBsZUhhc2hFbnRyeUhhc2goVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLAorCQkJCQkJ CQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJICAgYm9vbCAqaXNuZXcs IHVpbnQzMiBoYXNoKTsKIGV4dGVybiBUdXBsZUhhc2hFbnRyeSBGaW5kVHVwbGVIYXNoRW50cnko VHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLAogCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKIAkJCQkJCQkJCQkgRXhwclN0YXRlICplcWNvbXAsCiAJCQkJCQkJCQkJIEZtZ3JJbmZvICpo YXNoZnVuY3Rpb25zKTsKK2V4dGVybiB1aW50MzIgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0 dXBsZWhhc2hfaGFzaCAqdGIsCisJCQkJCQkJCSBjb25zdCBNaW5pbWFsVHVwbGUgdHVwbGUpOwog ZXh0ZXJuIHZvaWQgUmVzZXRUdXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUp OworZXh0ZXJuIHZvaWQgRGVzdHJveVR1cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRhYmxlIGhhc2h0 YWJsZSk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNKdW5rLmMK QEAgLTI1MCw3ICsyNTYsNyBAQCBleHRlcm4gRXhwclN0YXRlICpFeGVjSW5pdFF1YWwoTGlzdCAq cXVhbCwgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRDaGVj ayhMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCk7CiBleHRlcm4gTGlzdCAqRXhlY0luaXRF eHByTGlzdChMaXN0ICpub2RlcywgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIEV4cHJTdGF0 ZSAqRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBzdHJ1Y3QgQWdnU3RhdGVQ ZXJQaGFzZURhdGEgKnBoYXNlLAotCQkJCQkJCQkJYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoKTsK KwkJCQkJCQkJCWJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCwgYm9vbCBzcGlsbGVkKTsKIGV4dGVy biBFeHByU3RhdGUgKkV4ZWNCdWlsZEdyb3VwaW5nRXF1YWwoVHVwbGVEZXNjIGxkZXNjLCBUdXBs ZURlc2MgcmRlc2MsCiAJCQkJCQkJCQkJIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICpsb3BzLCBj b25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqcm9wcywKIAkJCQkJCQkJCQkgaW50IG51bUNvbHMsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCmluZGV4IGJjNmUwM2ZiYzdlLi4zMjE3NTllYWQ1MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI0NCw2ICsy NDQsNyBAQCBleHRlcm4gYm9vbCBlbmFibGVGc3luYzsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGFsbG93U3lzdGVtVGFibGVNb2RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCB3b3JrX21lbTsK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWFpbnRlbmFuY2Vfd29ya19tZW07CitleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBoYXNoYWdnX21lbV9vdmVyZmxvdzsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnM7CiAKIGV4dGVybiBpbnQJVmFjdXVt Q29zdFBhZ2VIaXQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDZlYjY0NzI5MGJlLi5iOTgwM2Ey OGJkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTIwNzAsMTMgKzIwNzAsMjcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQWdnU3RhdGUKIAlIZWFwVHVwbGUJZ3JwX2ZpcnN0VHVwbGU7IC8qIGNvcHkgb2Yg Zmlyc3QgdHVwbGUgb2YgY3VycmVudCBncm91cCAqLwogCS8qIHRoZXNlIGZpZWxkcyBhcmUgdXNl ZCBpbiBBR0dfSEFTSEVEIGFuZCBBR0dfTUlYRUQgbW9kZXM6ICovCiAJYm9vbAkJdGFibGVfZmls bGVkOwkvKiBoYXNoIHRhYmxlIGZpbGxlZCB5ZXQ/ICovCi0JaW50CQkJbnVtX2hhc2hlczsKKwlp bnQJCQludW1faGFzaGVzOwkJLyogbnVtYmVyIG9mIGhhc2ggdGFibGVzIGFjdGl2ZSBhdCBvbmNl ICovCisJYm9vbAkJaGFzaF9zcGlsbGVkOwkvKiBhbnkgaGFzaCB0YWJsZSBldmVyIHNwaWxsZWQ/ ICovCisJZG91YmxlCQloYXNoZW50cnlzaXplOwkvKiBlc3RpbWF0ZSByZXZpc2VkIGR1cmluZyBl eGVjdXRpb24gKi8KKwlzdHJ1Y3QgSGFzaEFnZ1NwaWxsICpoYXNoX3NwaWxsczsgLyogSGFzaEFn Z1NwaWxsIGZvciBlYWNoIGhhc2ggdGFibGUsCisJCQkJCQkJCQkJIGV4aXN0cyBvbmx5IGR1cmlu ZyBmaXJzdCBwYXNzIGlmIHNwaWxsZWQgKi8KKwlUdXBsZVRhYmxlU2xvdCAqaGFzaF9zcGlsbF9z bG90OyAvKiBzbG90IGZvciByZWFkaW5nIGZyb20gc3BpbGwgZmlsZXMgKi8KKwlTaXplCQloYXNo X21lbV9saW1pdDsJLyogbGltaXQgYmVmb3JlIHNwaWxsaW5nIGhhc2ggdGFibGUgKi8KKwlTaXpl CQloYXNoX21lbV9wZWFrOwkvKiBwZWFrIGhhc2ggdGFibGUgbWVtb3J5IHVzYWdlICovCisJdWlu dDY0CQloYXNoX25ncm91cHNfY3VycmVudDsJLyogbnVtYmVyIG9mIHR1cGxlcyBjdXJyZW50bHkg aW4KKwkJCQkJCQkJCQkgICBtZW1vcnkgaW4gYWxsIGhhc2ggdGFibGVzICovCisJU2l6ZQkJaGFz aF9tZW1fY3VycmVudDsgLyogY3VycmVudCBoYXNoIHRhYmxlIG1lbW9yeSB1c2FnZSAqLworCXVp bnQ2NAkJaGFzaF9kaXNrX3VzZWQ7IC8qIGJ5dGVzIG9mIGRpc2sgc3BhY2UgdXNlZCAqLworCWlu dAkJCWhhc2hfYmF0Y2hlc191c2VkOwkvKiBiYXRjaGVzIHVzZWQgZHVyaW5nIGVudGlyZSBleGVj dXRpb24gKi8KKwlMaXN0CSAgICpoYXNoX2JhdGNoZXM7CS8qIGhhc2ggYmF0Y2hlcyByZW1haW5p bmcgdG8gYmUgcHJvY2Vzc2VkICovCisKIAlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaDsJLyogYXJy YXkgb2YgcGVyLWhhc2h0YWJsZSBkYXRhICovCiAJQWdnU3RhdGVQZXJHcm91cCAqaGFzaF9wZXJn cm91cDsJLyogZ3JvdXBpbmcgc2V0IGluZGV4ZWQgYXJyYXkgb2YKIAkJCQkJCQkJCQkgKiBwZXIt Z3JvdXAgcG9pbnRlcnMgKi8KIAogCS8qIHN1cHBvcnQgZm9yIGV2YWx1YXRpb24gb2YgYWdnIGlu cHV0IGV4cHJlc3Npb25zOiAqLwotI2RlZmluZSBGSUVMRE5PX0FHR1NUQVRFX0FMTF9QRVJHUk9V UFMgMzQKKyNkZWZpbmUgRklFTEROT19BR0dTVEFURV9BTExfUEVSR1JPVVBTIDQ1CiAJQWdnU3Rh dGVQZXJHcm91cCAqYWxsX3Blcmdyb3VwczsJLyogYXJyYXkgb2YgZmlyc3QgLT5wZXJncm91cHMs IHRoYW4KIAkJCQkJCQkJCQkgKiAtPmhhc2hfcGVyZ3JvdXAgKi8KIAlQcm9qZWN0aW9uSW5mbyAq Y29tYmluZWRwcm9qOwkvKiBwcm9qZWN0aW9uIG1hY2hpbmVyeSAqLwpAQCAtMjI0OCw3ICsyMjYy LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaEluc3RydW1lbnRhdGlvbgogCWludAkJCW5idWNrZXRz X29yaWdpbmFsOwkvKiBwbGFubmVkIG51bWJlciBvZiBidWNrZXRzICovCiAJaW50CQkJbmJhdGNo OwkJCS8qIG51bWJlciBvZiBiYXRjaGVzIGF0IGVuZCBvZiBleGVjdXRpb24gKi8KIAlpbnQJCQlu YmF0Y2hfb3JpZ2luYWw7CS8qIHBsYW5uZWQgbnVtYmVyIG9mIGJhdGNoZXMgKi8KLQlzaXplX3QJ CXNwYWNlX3BlYWs7CQkvKiBzcGVhayBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgKi8KKwlzaXplX3QJ CXNwYWNlX3BlYWs7CQkvKiBwZWFrIG1lbW9yeSB1c2FnZSBpbiBieXRlcyAqLwogfSBIYXNoSW5z dHJ1bWVudGF0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRl eCBiM2QwYjRmNmZiYy4uYjcyZTJkMDgyOTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTQsNiAr NTQsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX3NvcnQ7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaGFzaGFnZzsK K2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9oYXNoYWdnX3NwaWxsOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX25lc3Rsb29wOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX21hdGVyaWFsOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX21lcmdlam9p bjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CmluZGV4IDBiMDk3Zjk2 NTIwLi5hOWRkY2NlM2QzYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMu b3V0CkBAIC0yMzMxLDMgKzIzMzEsOTUgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIG9uZWsKICg4IHJvd3MpCiAKKy0tCistLSBDb21wYXJlIHJl c3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCist LSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdv cmtfbWVtIGxvdy4KKy0tCitzZXQgd29ya19tZW09JzY0a0InOworLS0gUHJvZHVjZSByZXN1bHRz IHdpdGggc29ydGluZy4KK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNlOworc2V0IGppdF9hYm92 ZV9jb3N0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwg c3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3Nl cmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6 ICgoZyAlIDEwMDAwMCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICgoZyAlIDEw MDAwMCkpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZwor KDUgcm93cykKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8xIGFzCitzZWxlY3QgZyUxMDAwMDAg YXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworc2V0IGppdF9h Ym92ZV9jb3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzIgYXMKK3NlbGVj dCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6OmludDQpIGFzIGMyLCBjb3VudCgqKSBhcyBj MworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKK2Ny ZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBh cnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworLS0gUHJvZHVjZSByZXN1bHRz IHdpdGggaGFzaCBhZ2dyZWdhdGlvbgorc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBl bmFibGVfc29ydCA9IGZhbHNlOworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBj b3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3Jv dXAgYnkgZyUxMDAwMDA7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dy ZWdhdGUKKyAgIEdyb3VwIEtleTogKGcgJSAxMDAwMDApCisgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworKDMgcm93cykKKworY3JlYXRlIHRhYmxlIGFnZ19oYXNoXzEg YXMKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgq KSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkg ZyUxMDAwMDA7CitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBh Z2dfaGFzaF8yIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIHN1bSg3OjppbnQ0KSBh cyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZwor ICBncm91cCBieSBnLzI7CitjcmVhdGUgdGFibGUgYWdnX2hhc2hfMyBhcworc2VsZWN0IChnLzIp OjpudW1lcmljIGFzIGMxLCBhcnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFz IGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOwor c2V0IGVuYWJsZV9zb3J0ID0gdHJ1ZTsKK3NldCB3b3JrX21lbSB0byBkZWZhdWx0OworLS0gQ29t cGFyZSBncm91cCBhZ2dyZWdhdGlvbiByZXN1bHRzIHRvIGhhc2ggYWdncmVnYXRpb24gcmVzdWx0 cworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3Jv dXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMSBleGNlcHQgc2Vs ZWN0ICogZnJvbSBhZ2dfaGFzaF8xKTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0tLS0rLS0tLQor KDAgcm93cykKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJv bSBhZ2dfZ3JvdXBfMikKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMiBl eGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yKTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0t LS0rLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMyBleGNlcHQgc2Vs ZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMykKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2df Z3JvdXBfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8zKTsKKyBjMSB8IGMyIHwgYzMg CistLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMTsKK2Ry b3AgdGFibGUgYWdnX2dyb3VwXzI7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8zOworZHJvcCB0YWJs ZSBhZ2dfaGFzaF8xOworZHJvcCB0YWJsZSBhZ2dfaGFzaF8yOworZHJvcCB0YWJsZSBhZ2dfaGFz aF8zOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncm91cGluZ3NldHMu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncm91cGluZ3NldHMub3V0CmluZGV4IGMx ZjgwMmM4OGE3Li43NjdmNjBhOTZjNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ncm91cGluZ3NldHMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3Jv dXBpbmdzZXRzLm91dApAQCAtMTYzMyw0ICsxNjMzLDEyNyBAQCBzZWxlY3Qgdnx8J2EnLCBjYXNl IHdoZW4gZ3JvdXBpbmcodnx8J2EnKSA9IDEgdGhlbiAxIGVsc2UgMCBlbmQsIGNvdW50KCopCiAg ICAgICAgICAgfCAgICAxIHwgICAgIDIKICg0IHJvd3MpCiAKKy0tCistLSBDb21wYXJlIHJlc3Vs dHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBh Z2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtf bWVtIGxvdy4KKy0tCitTRVQgd29ya19tZW09JzY0a0InOworLS0gUHJvZHVjZSByZXN1bHRzIHdp dGggc29ydGluZy4KK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNlOworc2V0IGppdF9hYm92ZV9j b3N0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBz dW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcl MTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcx MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6ICgoZy5n ICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgIEdyb3VwIEtleTogKChn LmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSkKKyAgIEdyb3VwIEtleTogKChnLmcgJSAxMDAwKSkK KyAgIEdyb3VwIEtleTogKCkKKyAgIFNvcnQgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEw KSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgR3Jv dXAgS2V5OiAoKGcuZyAlIDEwMCkpCisgICBTb3J0IEtleTogKChnLmcgJSAxMCkpLCAoKGcuZyAl IDEwMDApKQorICAgICBHcm91cCBLZXk6ICgoZy5nICUgMTApKSwgKChnLmcgJSAxMDAwKSkKKyAg ICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtl eTogKChnLmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgICAgICAg LT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygxNCByb3dzKQorCitjcmVh dGUgdGFibGUgZ3NfZ3JvdXBfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpu dW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFz IGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKK3Nl dCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzIgYXMK K3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgo Zzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcvMjAgYXMgZzEwMDAsIGcvMjAwIGFzIGcxMDAsIGcv MjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dy b3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKK2NyZWF0ZSB0YWJsZSBnc19ncm91cF8zIGFz CitzZWxlY3QgZzEwMCwgZzEwLCBhcnJheV9hZ2coZykgYXMgYSwgY291bnQoKikgYXMgYywgbWF4 KGc6OnRleHQpIGFzIG0gZnJvbQorICAoc2VsZWN0IGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBn MTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGdy b3VwaW5nIHNldHMgKGcxMDAsZzEwKTsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdn cmVnYXRpb24uCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOworc2V0IGVuYWJsZV9zb3J0ID0g ZmFsc2U7CitzZXQgd29ya19tZW09JzY0a0InOworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJp YyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAw MCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6ICgoZy5nICUgMTAwMCkpLCAo KGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgIEdyb3VwIEtleTogKChnLmcgJSAxMDAwKSks ICgoZy5nICUgMTAwKSkKKyAgIEdyb3VwIEtleTogKChnLmcgJSAxMDAwKSkKKyAgIEdyb3VwIEtl eTogKCkKKyAgIFNvcnQgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgR3Jv dXAgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcu ZyAlIDEwMCkpCisgICBTb3J0IEtleTogKChnLmcgJSAxMCkpLCAoKGcuZyAlIDEwMDApKQorICAg ICBHcm91cCBLZXk6ICgoZy5nICUgMTApKSwgKChnLmcgJSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5 OiAoKGcuZyAlIDEwKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogKChnLmcgJSAx MDAwKSksICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgICAgICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygxNCByb3dzKQorCitjcmVhdGUgdGFibGUgZ3Nf aGFzaF8xIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3Vu dCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAw IGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5 OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworc2V0IGppdF9hYm92ZV9j b3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUgdGFibGUgZ3NfaGFzaF8yIGFzCitzZWxlY3QgZzEwMDAs IGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20K KyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBn CisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChn MTAwMCxnMTAwLGcxMCk7CitjcmVhdGUgdGFibGUgZ3NfaGFzaF8zIGFzCitzZWxlY3QgZzEwMCwg ZzEwLCBhcnJheV9hZ2coZykgYXMgYSwgY291bnQoKikgYXMgYywgbWF4KGc6OnRleHQpIGFzIG0g ZnJvbQorICAoc2VsZWN0IGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAgIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGcx MDAsZzEwKTsKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQgd29ya19tZW0gdG8gZGVmYXVs dDsKKy0tIENvbXBhcmUgcmVzdWx0cworKHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8xIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzEpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gZ3Nf Z3JvdXBfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19oYXNoXzEpOworIGcxMDAwIHwgZzEwMCB8 IGcxMCB8IHN1bSB8IGNvdW50IHwgbWF4IAorLS0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0rLS0t LS0tLSstLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8yIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gZ3Nf Z3JvdXBfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19oYXNoXzIpOworIGcxMDAwIHwgZzEwMCB8 IGcxMCB8IHN1bSB8IGNvdW50IHwgbWF4IAorLS0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0rLS0t LS0tLSstLS0tLQorKDAgcm93cykKKworKHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZy b20gZ3NfaGFzaF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9t IGdzX2dyb3VwXzMpCisgICAgdW5pb24gYWxsCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxj LG0gZnJvbSBnc19ncm91cF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMs bSBmcm9tIGdzX2hhc2hfMyk7CisgZzEwMCB8IGcxMCB8IHVubmVzdCB8IGMgfCBtIAorLS0tLS0t Ky0tLS0tKy0tLS0tLS0tKy0tLSstLS0KKygwIHJvd3MpCisKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBf MTsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMjsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMzsKK2Ryb3Ag dGFibGUgZ3NfaGFzaF8xOworZHJvcCB0YWJsZSBnc19oYXNoXzI7Citkcm9wIHRhYmxlIGdzX2hh c2hfMzsKIC0tIGVuZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxl Y3RfZGlzdGluY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGlu Y3Qub3V0CmluZGV4IGYzNjk2YzZkMWRlLi4xMWM2ZjUwZmJmYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dApAQCAtMTQ4LDYgKzE0OCw2OCBAQCBT RUxFQ1QgY291bnQoKikgRlJPTQogICAgICA0CiAoMSByb3cpCiAKKy0tCistLSBDb21wYXJlIHJl c3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCist LSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdv cmtfbWVtIGxvdy4KKy0tCitTRVQgd29ya19tZW09JzY0a0InOworLS0gUHJvZHVjZSByZXN1bHRz IHdpdGggc29ydGluZy4KK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxTRTsKK1NFVCBqaXRfYWJvdmVf Y29zdD0wOworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFVuaXF1ZQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAo KGcgJSAxMDAwKSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nlcmll cyBnCisoNCByb3dzKQorCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMSBBUworU0VMRUNU IERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQgaml0 X2Fib3ZlX2Nvc3QgVE8gREVGQVVMVDsKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8yIEFT CitTRUxFQ1QgRElTVElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5 OTk5KSBnOworU0VUIGVuYWJsZV9oYXNoYWdnPVRSVUU7CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0 aCBoYXNoIGFnZ3JlZ2F0aW9uLgorU0VUIGVuYWJsZV9zb3J0PUZBTFNFOworU0VUIGppdF9hYm92 ZV9jb3N0PTA7CitFWFBMQUlOIChjb3N0cyBvZmYpCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoZyAlIDEwMDApCisgICAtPiAgRnVu Y3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDMgcm93cykKKworQ1JFQVRFIFRBQkxF IGRpc3RpbmN0X2hhc2hfMSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRl X3NlcmllcygwLDk5OTkpIGc7CitTRVQgaml0X2Fib3ZlX2Nvc3QgVE8gREVGQVVMVDsKK0NSRUFU RSBUQUJMRSBkaXN0aW5jdF9oYXNoXzIgQVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4 dCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQgZW5hYmxlX3NvcnQ9VFJVRTsK K1NFVCB3b3JrX21lbSBUTyBERUZBVUxUOworLS0gQ29tcGFyZSByZXN1bHRzCisoU0VMRUNUICog RlJPTSBkaXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBf MSkKKyAgVU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xIEVYQ0VQVCBT RUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCiso MCByb3dzKQorCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAq IEZST00gZGlzdGluY3RfZ3JvdXBfMSkKKyAgVU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0 aW5jdF9ncm91cF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hf MTsKK0RST1AgVEFCTEUgZGlzdGluY3RfaGFzaF8yOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91 cF8xOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8yOwogLS0KIC0tIEFsc28sIHNvbWUgdGVz dHMgb2YgSVMgRElTVElOQ1QgRlJPTSwgd2hpY2ggZG9lc24ndCBxdWl0ZSBkZXNlcnZlIGl0cwog LS0gdmVyeSBvd24gcmVncmVzc2lvbiBmaWxlLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dAppbmRleCBhMWM5MGViOTA1Ny4uYzQwYmY2YzE2ZWIgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC03NSw2ICs3NSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf Yml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX2hhc2hhZ2cgICAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVf aGFzaGFnZ19zcGlsbCAgICAgICAgICAgfCBvbgogIGVuYWJsZV9oYXNoam9pbiAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVf aW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgpAQCAtODksNyArOTAsNyBAQCBzZWxlY3QgbmFt ZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAg ZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAg ICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0o MTcgcm93cykKKygxOCByb3dzKQogCiAtLSBUZXN0IHRoYXQgdGhlIHBnX3RpbWV6b25lX25hbWVz IGFuZCBwZ190aW1lem9uZV9hYmJyZXZzIHZpZXdzIGFyZQogLS0gbW9yZS1vci1sZXNzIHdvcmtp bmcuICBXZSBjYW4ndCB0ZXN0IHRoZWlyIGNvbnRlbnRzIGluIGFueSBncmVhdCBkZXRhaWwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKaW5kZXggMTdmYjI1NmFlYzUuLmJjZDMzNmM1ODEy IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbApAQCAtMTAxNywzICsxMDE3LDkxIEBA IHNlbGVjdCB2fHwnYScsIGNhc2Ugd2hlbiB2fHwnYScgPSAnYWEnIHRoZW4gMSBlbHNlIDAgZW5k LCBjb3VudCgqKQogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3QgMSBmcm9tIHRlbmsxCiAg ICB3aGVyZSAoaHVuZHJlZCwgdGhvdXNhbmQpIGluIChzZWxlY3QgdHdvdGhvdXNhbmQsIHR3b3Ro b3VzYW5kIGZyb20gb25layk7CisKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFu cyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9y Y2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisK K3NldCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcu CisKK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAw OworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpu dW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwg MTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2dyb3Vw XzEgYXMKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3Vu dCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAg YnkgZyUxMDAwMDA7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUg dGFibGUgYWdnX2dyb3VwXzIgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6 OmludDQpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAx OTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8zIGFzCitz ZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwg Y291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91 cCBieSBnLzI7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24KKwor c2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNlOworCitz ZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUx MDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitj cmVhdGUgdGFibGUgYWdnX2hhc2hfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6 bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAs IDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKKworc2V0IGppdF9hYm92ZV9jb3N0IHRv IGRlZmF1bHQ7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8yIGFzCitzZWxlY3QgKGcvMik6Om51 bWVyaWMgYXMgYzEsIHN1bSg3OjppbnQ0KSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CisKK2NyZWF0ZSB0YWJs ZSBhZ2dfaGFzaF8zIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CisKK3NldCBlbmFibGVfc29ydCA9IHRydWU7Citz ZXQgd29ya19tZW0gdG8gZGVmYXVsdDsKKworLS0gQ29tcGFyZSBncm91cCBhZ2dyZWdhdGlvbiBy ZXN1bHRzIHRvIGhhc2ggYWdncmVnYXRpb24gcmVzdWx0cworCisoc2VsZWN0ICogZnJvbSBhZ2df aGFzaF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8xKQorICB1bmlvbiBhbGwKKyhz ZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEp OworCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19n cm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIpOworCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8zIGV4 Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8zKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBm cm9tIGFnZ19ncm91cF8zIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzMpOworCitkcm9w IHRhYmxlIGFnZ19ncm91cF8xOworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMjsKK2Ryb3AgdGFibGUg YWdnX2dyb3VwXzM7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzE7Citkcm9wIHRhYmxlIGFnZ19oYXNo XzI7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9ncm91cGluZ3NldHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRz LnNxbAppbmRleCA5NWFjM2ZiNTJmNi4uYmY4YmNlNmVkMzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2dyb3VwaW5nc2V0cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Z3JvdXBpbmdzZXRzLnNxbApAQCAtNDQxLDQgKzQ0MSwxMDMgQEAgc2VsZWN0IHZ8fCdhJywgY2Fz ZSB3aGVuIGdyb3VwaW5nKHZ8fCdhJykgPSAxIHRoZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQog ICBmcm9tIHVubmVzdChhcnJheVsxLDFdLCBhcnJheVsnYScsJ2InXSkgdShpLHYpCiAgZ3JvdXAg Ynkgcm9sbHVwKGksIHZ8fCdhJykgb3JkZXIgYnkgMSwzOwogCistLQorLS0gQ29tcGFyZSByZXN1 bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcgaGFzaAorLS0g YWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0dGluZyB3b3Jr X21lbSBsb3cuCistLQorCitTRVQgd29ya19tZW09JzY0a0InOworCistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBzb3J0aW5nLgorCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKKworc2V0IGpp dF9hYm92ZV9jb3N0ID0gMDsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBn MTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisg IChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZwor ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcx MDAwLGcxMDAsZzEwKTsKKworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAw MCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJv bQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAs IGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJl IChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitj cmVhdGUgdGFibGUgZ3NfZ3JvdXBfMiBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShn OjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBh cyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOwor CitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdn KGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVj dCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3Nlcmll cygwLDE5OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CisKKy0t IFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24uCisKK3NldCBlbmFibGVfaGFz aGFnZyA9IHRydWU7CitzZXQgZW5hYmxlX3NvcnQgPSBmYWxzZTsKK3NldCB3b3JrX21lbT0nNjRr Qic7CisKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6 dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUx MCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91 cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzEgYXMK K3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgo Zzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwg ZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitn cm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBk ZWZhdWx0OworCitjcmVhdGUgdGFibGUgZ3NfaGFzaF8yIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAs IGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNl bGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxn MTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzMgYXMKK3NlbGVjdCBnMTAwLCBnMTAs IGFycmF5X2FnZyhnKSBhcyBhLCBjb3VudCgqKSBhcyBjLCBtYXgoZzo6dGV4dCkgYXMgbSBmcm9t CisgIChzZWxlY3QgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoZzEwMCxn MTApOworCitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7 CisKKy0tIENvbXBhcmUgcmVzdWx0cworCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzEgZXhjZXB0 IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBn c19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSk7CisKKyhzZWxlY3QgKiBm cm9tIGdzX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFz aF8yKTsKKworKHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfaGFzaF8zIGV4 Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2dyb3VwXzMpCisg ICAgdW5pb24gYWxsCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91 cF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hf Myk7CisKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMjsKK2Ry b3AgdGFibGUgZ3NfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8xOworZHJvcCB0YWJsZSBn c19oYXNoXzI7Citkcm9wIHRhYmxlIGdzX2hhc2hfMzsKKwogLS0gZW5kCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAppbmRleCBhNjA1ZTg2NDQ5ZS4uMzMxMDI3NDRlYmYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbApAQCAtNDUsNiArNDUs NjggQEAgU0VMRUNUIGNvdW50KCopIEZST00KIFNFTEVDVCBjb3VudCgqKSBGUk9NCiAgIChTRUxF Q1QgRElTVElOQ1QgdHdvLCBmb3VyLCB0d28gRlJPTSB0ZW5rMSkgc3M7CiAKKy0tCistLSBDb21w YXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBo YXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0 aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisKK1NFVCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1 Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCisKK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxTRTsKKwor U0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNU SU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFC TEUgZGlzdGluY3RfZ3JvdXBfMSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygwLDk5OTkpIGc7CisKK1NFVCBqaXRfYWJvdmVfY29zdCBUTyBERUZBVUxUOwor CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEw MDApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGVuYWJsZV9o YXNoYWdnPVRSVUU7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24u CisKK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKKworU0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VY UExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfaGFzaF8xIEFTCitTRUxF Q1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VU IGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9oYXNo XzIgQVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmll cygwLDk5OTkpIGc7CisKK1NFVCBlbmFibGVfc29ydD1UUlVFOworCitTRVQgd29ya19tZW0gVE8g REVGQVVMVDsKKworLS0gQ29tcGFyZSByZXN1bHRzCisKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0 X2hhc2hfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xKQorICBVTklPTiBB TEwKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEgRVhDRVBUIFNFTEVDVCAqIEZST00g ZGlzdGluY3RfaGFzaF8xKTsKKworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQ VCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAq IEZST00gZGlzdGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNo XzEpOworCitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMTsKK0RST1AgVEFCTEUgZGlzdGluY3Rf aGFzaF8yOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8xOworRFJPUCBUQUJMRSBkaXN0aW5j dF9ncm91cF8yOworCiAtLQogLS0gQWxzbywgc29tZSB0ZXN0cyBvZiBJUyBESVNUSU5DVCBGUk9N LCB3aGljaCBkb2Vzbid0IHF1aXRlIGRlc2VydmUgaXRzCiAtLSB2ZXJ5IG93biByZWdyZXNzaW9u IGZpbGUuCg== --=-TizX62B2or/6dj6b90vT--