Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tSlKR-001KJp-GY for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Dec 2024 23:07:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tSlKP-005l6R-KU for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Dec 2024 23:07:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tSlKO-005l6I-Gw for pgsql-hackers@lists.postgresql.org; Tue, 31 Dec 2024 23:07:08 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tSlKK-001TOL-09 for pgsql-hackers@postgresql.org; Tue, 31 Dec 2024 23:07:07 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 486C51C0002 for ; Tue, 31 Dec 2024 23:07:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1735686420; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=exwIL3OE5jH02/Z5CLuy3W01R07bx7ib5bOjciJt5nc=; b=EL+bivdzdIlaMbwzOVkboZym1eurSGivEUfO4RWKYO58RAWxsxiKCanZ8O616gLkaHIRAi 20abQeRB41M4cVh6Lz2j8kqr315y7aI8TD4cjm26QwhZZozMTCAvSs+vIFFfjg6R34ceAp RbCUyTfo2WPTlO4MOyMKYUN5b1y5upTbWmOOPdlHYvTkDdWVk7erQx+C50J3JTO+jT8XeI bSO4/bzJvqqGWxqe+gXkDMX7N5aeFp+DNqc9Ei8wCVd4GjqI1l22N8RV/Ir9YgYP6Kc8dE sWGot2UNVF24Fo5x0oJd7gk3E+3WeYIAIYwzSD8RBys5A+wDt+2p+3sjbKyx6g== Content-Type: multipart/mixed; boundary="------------j6Xx7r3m02HLS8n0tsdtFunI" Message-ID: <7bed6c08-72a0-4ab9-a79c-e01fcdd0940f@vondra.me> Date: Wed, 1 Jan 2025 00:06:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: Adjusting hash join memory limit to handle batch explosion X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------j6Xx7r3m02HLS8n0tsdtFunI Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I've been once again reminded of the batch explosion issue in hashjoin, due to how it enforces the memory limit. This resurfaces every now and then, when a used gets strange OOM issues - see for example these threads from ~2019 for an example, and even some patches: [1] [2] [3] Let me restart the discussion, resubmit some of the older patches, and present a plan for what to do about this ... Just to remind the basic details, a brief summary - the hashjoin does not account for the spill files when enforcing the memory limit. The hash table gets full, it decides to double the number of batches which cuts the hash table size in half. But with enough batches the doubling can actually make the situation much worse - the new batches simply use more memory than was saved. This can happen for various reasons. A simple example is that we under estimate the size of the input relation, so the hash needs to be built on many more tuples. This is bad, but usually not disastrous. It's much worse when there's a batch that is not "divisible", i.e. adding more batches does not split it roughly in half. This can happen due to hash collisions (in the part that determines the batch), duplicate values that didn't make it into MCV (and thus the skew optimization does not kick in). This is fairly rare, but when it happens it can easily lead to batch explosion, i.e. rapidly increasing the number of batches. We add batches, but the batch does not split, so we promptly hit the limit again, triggering another increase. It often stops only when we exhaust the 32-bit hash space, ending with 100s of thousands of batches. Attached is a SQL script that reproduces something like this. It builds a table with values with hashes that have 0s in the upper bits. And then the hash join just spirals into a batch explosion. Note: The script is a bit dumb and needs a lot of temp space (~50GB) when generating the values with duplicate hashes. In 2019 I shared a bunch of patches [4] improving this, but then I got distracted and the discussion stalled because there were proposals to fix this by introducing a special hash join "mode" to address these issues [5], but we never got past a prototype and there's a lot of outstanding questions. So I decided to revisit the three patches from 2019. Attached are rebased and cleaned up versions. A couple comments on each one: 1) v20241231-adjust-limit-0001-Account-for-batch-files-in-ha.patch I believe this is the way to go, for now. The basic idea is to keep the overall behavior, but "relax" the memory limit as the number of batches increases to minimize the total memory use. This may seem a bit weird, but as the number of batches grows there's no way to not violate the limit. And the current code simply ignores this and allocates arbitrary amounts of memory. 2) v20241231-single-spill-0001-Hash-join-with-a-single-spill.patch The basic idea is that we keep only a small "slice" of batches in memory, and data for later batches are spilled into a single file. This means that even if the number of batches increases, the memory use does not change. Which means the memory limit is enforced very strictly. The problem is this performs *terribly* because it shuffles data many times, always just to the next slice. So if we happen to have 128 batches in memory and the number explodes to ~128k batches, we end up reading/writing each tuple ~500x. 3) v20241231-multi-spill-0001-Hash-join-with-a-multiple-spil.patch This is an improvement of the "single spill", except that we keep one spill file per slice, which greatly reduces the amount of temporary traffic. The trouble is this means we can no longer enforce the memory limit that strictly, because the number of files does grow with the number of batches, although not 1:1. But with a slice of 128 batches we get only 1 file per 128 batches, which is a nice reduction. This means that ultimately it's either (1) or (3), and the more I've been looking into this the more I prefer (1), for a couple reasons: * It's much simpler (it doesn't really change anything on the basic behavior, doesn't introduce any new files or anything like that. * There doesn't seem to be major difference in total memory consumption between the two approaches. Both allow allocating more memory. * It actually helps with the "indivisible batch" case - it relaxes the limit, so there's a chance the batch eventually fits and we stop adding more and more batches. With spill files that's not the case - we still keep the original limit, and we end up with the batch explosion (but then we handle it much more efficiently). Unless there are some objections, my plan is to get (1) cleaned up and try to get it in for 18, possibly in the January CF. It's not a particularly complex patch, and it already passes check-world (it only affected three plans in join_hash, and those make sense I think). One thing I'm not sure about yet is whether this needs to tweak the hashjoin costing to also consider the files when deciding how many batches to use. Maybe it should? regards [1] https://www.postgresql.org/message-id/20190504003414.bulcbnge3rhwhcsh%40development [2] https://www.postgresql.org/message-id/20230228190643.1e368315%40karst [3] https://www.postgresql.org/message-id/bc138e9f-c89e-9147-5395-61d51a757b3b%40gusw.net [4] https://www.postgresql.org/message-id/20190428141901.5dsbge2ka3rxmpk6%40development [5] https://www.postgresql.org/message-id/CAAKRu_YsWm7gc_b2nBGWFPE6wuhdOLfc1LBZ786DUzaCPUDXCA@mail.gmail.com -- Tomas Vondra --------------j6Xx7r3m02HLS8n0tsdtFunI Content-Type: text/x-patch; charset=UTF-8; name="v20241231-adjust-limit-0001-Account-for-batch-files-in-ha.patch" Content-Disposition: attachment; filename*0="v20241231-adjust-limit-0001-Account-for-batch-files-in-ha.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlZGNhYWMwNzA1MTkzYWNlYTMzYzQ0MjNiZjBkNTkxMjgyMTlhNDZmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNzowOTo0MCArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMjMxLWFkanVzdC1saW1pdF0gQWNjb3VudCBmb3IgYmF0Y2ggZmlsZXMgaW4gaGFz aCBqb2luCiBzcGlsbGluZwoKSGFzaCBqb2lucyB0cnkgdG8gbGltaXQgdGhlIGFtb3VudCBv ZiBtZW1vcnkgdXNlZCBieSB0aGUgSGFzaCBub2RlIGJ5Cm9ubHkga2VlcGluZyBhIHNpbmds ZSBiYXRjaCBpbiBtZW1vcnkgYW5kIHNwaWxsaW5nIGZ1dHVyZSBiYXRjaGVzIHRvCmRpc2su IFVuZm9ydHVuYXRlbHksIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhY2NvdW50IGZv ciB0aGUgZmlsZXMKdXNlZCBmb3Igc3BpbGxpbmcsIHdoaWNoIGNhbiBsZWFkIHRvIGlzc3Vl cyB3aXRoIG1hbnkgYmF0Y2hlcy4gRWFjaCBmaWxlCmtlZXBzIGEgQkxDS1NaIGJ1ZmZlciBp biBtZW1vcnksIGFuZCB3ZSBuZWVkIDIqbmJhdGNoZXMgb2YgdGhvc2UgZmlsZXMsCnNvIHdp dGggbWFueSBiYXRjaGVzIHRoaXMgbWF5IHVzZSBzdWJzdGF0aWFsIGFtb3VudHMgb2YgbWVt b3J5LgoKVGhlIGhhc2ggam9pbiBjb2RlIGhvd2V2ZXIgYXNzdW1lcyBhZGRpbmcgYmF0Y2hl cyBpcyB2aXJ0dWFsbHkgZnJlZSAoaW4KdGVybXMgb2YgbWVtb3J5IG5lZWRlZCksIGlnbm9y aW5nIHRoaXMgaXNzdWUuIEl0IGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mCmJhdGNoZXMsIHBv c3NpYmx5IGtlZXBpbmcgdGhlIGN1cnJlbnQgYmF0Y2ggd2l0aGluIHRoZSBsaW1pdCwgYnV0 IGVuZHMKdXAgdXNpbmcgbXVjaCBtb3JlIG1lbW9yeSBmb3IgdGhlIGZpbGVzLgoKVGhpcyBj YW4gYmUgcGFydGljdWxhcmx5IHBhaW5mdWwgd2l0aCBhZHZlcnNhcnkgZGF0YSBzZXRzLCB3 aXRoIGEgYmF0Y2gKdGhhdCBjYW4ndCBiZSBzcGxpdC4gVGhpcyBtYXkgaGFwcGVuIGR1ZSB0 byBoYXNoIGNvbGxpc2lvbnMgKG92ZXJsYXBzIGluCnRoZSBwYXJ0IHVzZWQgdG8gY2FsY3Vs YXRlICJiYXRjaCIpLCBvciBhIHZhbHVlIHdpdGggbWFueSBkdXBsaWNpdGllcwp0aGF0IGhv d2V2ZXIgZGlkbid0IG1ha2UgaXQgdG8gdGhlIE1DViBsaXN0IChhbmQgdGh1cyB0aGUgc2tl dyB0YWJsZQpjYW4ndCBoZWxwKS4gSW4gdGhlc2UgY2FzZXMgdGhlIGhhc2ggY2FuIGdldCBp bnRvIGEgY3ljbGUgb2YgaW5jcmVhc2luZwp0aGUgbnVtYmVyIG9mIGJhdGNoZXMsIG9mdGVu IHJlYWNoaW5nIDI1Nmsgb3IgNTEyayBiYXRjaGVzIGJlZm9yZQpleGhhdXN0aW5nIGF2YWls YWJsZSBoYXNoIHNwYWNlICgzMi1iaXRzKS4KCklmIHRoaXMgaGFwcGVucywgdGhlcmUncyBu b3QgbXVjaCBwb2ludCBpbiBlbmZvcmNpbmcgdGhlIG9yaWdpbmFsIG1lbW9yeQpsaW1pdC4g VGhhdCdzIHNpbXBseSBub3QgZmVhc2libGUgLSBlc3BlY2lhbGx5IGluIHRoZSBjYXNlIG9m IGEgc2luZ2xlCmJhdGNoIGV4Y2VlZGluZyB0aGUgYWxsb3dlZCBzcGFjZS4KCkluc3RlYWQs IHRoZSBiZXN0IHdlIGNhbiBkbyBpcyByZWxheGluZyB0aGUgbGltaXQsIGFuZCBmb2N1c2lu ZyBvbiB1c2luZwphcyBsaXR0bGUgdG90YWwgbWVtb3J5IGFzIHBvc3NpYmxlLiBCeSBhbGxv d2luZyB0aGUgYmF0Y2hlcyB0byBiZQpsYXJnZXIsIHdlIHJlZHVjZSB0aGUgbnVtYmVyIG9m IGJhdGNoIGZpbGVzLiBUaGUgYWRqdXN0bWVudCBmb3JtdWxhIGlzCmJhc2VkIG9uIHRoZSBv YnNlcnZhdGlvbiB0aGF0IGRvdWJsaW5nIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyBkb3VibGVz IHRoZQphbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IgdGhlIGZpbGVzLCB3aGlsZSBjdXR0 aW5nIHRoZSBiYXRjaCBzaXplIGluCmhhbGYuIFRoaXMgZGVmaW5lcyB0aGUgImJyZWFrIGV2 ZW4iIHBvaW50IGZvciB0aGUgbmV4dCBiYXRjaCBpbmNyZWFzZS4KLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSGFzaC5jICAgICAgICAgfCAxNTMgKysrKysrKysrKysrKysrKysr KysrLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQgfCAgIDQg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwgICAgICB8ICAgNCArLQog MyBmaWxlcyBjaGFuZ2VkLCAxNDIgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMKaW5kZXggM2UyMmQ1MGUzYTQuLjY4MGQyODk3NzM4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMKQEAgLTU0LDYgKzU0LDkgQEAgc3RhdGlj IHZvaWQgRXhlY0hhc2hTa2V3VGFibGVJbnNlcnQoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUs CiAJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVlLAogCQkJCQkJCQkJaW50IGJ1Y2tldE51bWJl cik7CiBzdGF0aWMgdm9pZCBFeGVjSGFzaFJlbW92ZU5leHRTa2V3QnVja2V0KEhhc2hKb2lu VGFibGUgaGFzaHRhYmxlKTsKK3N0YXRpYyB2b2lkIEV4ZWNIYXNoVXBkYXRlU3BhY2VQZWFr KEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKK3N0YXRpYyBib29sIEV4ZWNIYXNoRXhjZWVk ZWRNZW1vcnlMaW1pdChIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSk7CitzdGF0aWMgdm9pZCBF eGVjSGFzaEFkanVzdE1lbW9yeUxpbWl0KEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKIAog c3RhdGljIHZvaWQgKmRlbnNlX2FsbG9jKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLCBTaXpl IHNpemUpOwogc3RhdGljIEhhc2hKb2luVHVwbGUgRXhlY1BhcmFsbGVsSGFzaFR1cGxlQWxs b2MoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsCkBAIC0xOTksMTAgKzIwMiw4IEBAIE11bHRp RXhlY1ByaXZhdGVIYXNoKEhhc2hTdGF0ZSAqbm9kZSkKIAlpZiAoaGFzaHRhYmxlLT5uYnVj a2V0cyAhPSBoYXNodGFibGUtPm5idWNrZXRzX29wdGltYWwpCiAJCUV4ZWNIYXNoSW5jcmVh c2VOdW1CdWNrZXRzKGhhc2h0YWJsZSk7CiAKLQkvKiBBY2NvdW50IGZvciB0aGUgYnVja2V0 cyBpbiBzcGFjZVVzZWQgKHJlcG9ydGVkIGluIEVYUExBSU4gQU5BTFlaRSkgKi8KLQloYXNo dGFibGUtPnNwYWNlVXNlZCArPSBoYXNodGFibGUtPm5idWNrZXRzICogc2l6ZW9mKEhhc2hK b2luVHVwbGUpOwotCWlmIChoYXNodGFibGUtPnNwYWNlVXNlZCA+IGhhc2h0YWJsZS0+c3Bh Y2VQZWFrKQotCQloYXNodGFibGUtPnNwYWNlUGVhayA9IGhhc2h0YWJsZS0+c3BhY2VVc2Vk OworCS8qIHVwZGF0ZSBpbmZvIGFib3V0IHBlYWsgbWVtb3J5IHVzYWdlICovCisJRXhlY0hh c2hVcGRhdGVTcGFjZVBlYWsoaGFzaHRhYmxlKTsKIAogCWhhc2h0YWJsZS0+cGFydGlhbFR1 cGxlcyA9IGhhc2h0YWJsZS0+dG90YWxUdXBsZXM7CiB9CkBAIC0xMDM2LDYgKzEwMzcsOSBA QCBFeGVjSGFzaEluY3JlYXNlTnVtQmF0Y2hlcyhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSkK IAkJICAgaGFzaHRhYmxlLCBuZnJlZWQsIG5pbm1lbW9yeSwgaGFzaHRhYmxlLT5zcGFjZVVz ZWQpOwogI2VuZGlmCiAKKwkvKiBhZGp1c3QgdGhlIG1lbW9yeSBsaW1pdCBmb3IgdGhlIG5l dyBuYmF0Y2hlcyBldGMuICovCisJRXhlY0hhc2hBZGp1c3RNZW1vcnlMaW1pdChoYXNodGFi bGUpOworCiAJLyoKIAkgKiBJZiB3ZSBkdW1wZWQgb3V0IGVpdGhlciBhbGwgb3Igbm9uZSBv ZiB0aGUgdHVwbGVzIGluIHRoZSB0YWJsZSwgZGlzYWJsZQogCSAqIGZ1cnRoZXIgZXhwYW5z aW9uIG9mIG5iYXRjaC4gIFRoaXMgc2l0dWF0aW9uIGltcGxpZXMgdGhhdCB3ZSBoYXZlCkBA IC0xNjczLDExICsxNjc3LDEyIEBAIEV4ZWNIYXNoVGFibGVJbnNlcnQoSGFzaEpvaW5UYWJs ZSBoYXNodGFibGUsCiAKIAkJLyogQWNjb3VudCBmb3Igc3BhY2UgdXNlZCwgYW5kIGJhY2sg b2ZmIGlmIHdlJ3ZlIHVzZWQgdG9vIG11Y2ggKi8KIAkJaGFzaHRhYmxlLT5zcGFjZVVzZWQg Kz0gaGFzaFR1cGxlU2l6ZTsKLQkJaWYgKGhhc2h0YWJsZS0+c3BhY2VVc2VkID4gaGFzaHRh YmxlLT5zcGFjZVBlYWspCi0JCQloYXNodGFibGUtPnNwYWNlUGVhayA9IGhhc2h0YWJsZS0+ c3BhY2VVc2VkOwotCQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgKwotCQkJaGFzaHRhYmxl LT5uYnVja2V0c19vcHRpbWFsICogc2l6ZW9mKEhhc2hKb2luVHVwbGUpCi0JCQk+IGhhc2h0 YWJsZS0+c3BhY2VBbGxvd2VkKQorCisJCS8qIHVwZGF0ZSBpbmZvIGFib3V0IHBlYWsgbWVt b3J5IHVzYWdlICovCisJCUV4ZWNIYXNoVXBkYXRlU3BhY2VQZWFrKGhhc2h0YWJsZSk7CisK KwkJLyogU2hvdWxkIHdlIGFkZCBtb3JlIGJhdGNoZXMsIHRvIGVuZm9yY2UgbWVtb3J5IGxp bWl0PyAqLworCQlpZiAoRXhlY0hhc2hFeGNlZWRlZE1lbW9yeUxpbWl0KGhhc2h0YWJsZSkp CiAJCQlFeGVjSGFzaEluY3JlYXNlTnVtQmF0Y2hlcyhoYXNodGFibGUpOwogCX0KIAllbHNl CkBAIC0xODQzLDYgKzE4NDgsMTIwIEBAIEV4ZWNIYXNoR2V0QnVja2V0QW5kQmF0Y2goSGFz aEpvaW5UYWJsZSBoYXNodGFibGUsCiAJfQogfQogCisvKgorICogRXhlY0hhc2hVcGRhdGVT cGFjZVBlYWsKKyAqCQlVcGRhdGUgaW5mb3JtYXRpb24gYWJvdXQgcGVhayBtZW1vcnkgdXNh Z2UuCisgKgorICogVGhpcyBjb25zaWRlcnMgdHVwbGVzIGFkZGVkIHRvIHRoZSBoYXNoIHRh YmxlLCBidWNrZXRzIG9mIHRoZSBoYXNoIHRhYmxlCisgKiBpdHNlbGYsIGFuZCBhbHNvIHRo ZSBidWZmZXJlciBiYXRjaCBmaWxlcyBvbiBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2lk ZS4KKyAqIEVhY2ggZmlsZSBoYXMgYSBCTENLU1ogYnVmZmVyLCBzbyB3aXRoIGVub3VnaCBi YXRjaGVzIHRoaXMgbWF5IGFjdHVhbGx5CisgKiByZXByZXNlbnQgbW9zdCBvZiB0aGUgbWVt b3J5IHVzZWQgYnkgdGhlIGhhc2ggam9pbiBub2RlLgorICovCitzdGF0aWMgdm9pZAorRXhl Y0hhc2hVcGRhdGVTcGFjZVBlYWsoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpCit7CisJU2l6 ZQlzcGFjZVVzZWQgPSBoYXNodGFibGUtPnNwYWNlVXNlZDsKKworCS8qIGJ1Y2tldHMgb2Yg dGhlIGhhc2ggdGFibGUgKi8KKwlzcGFjZVVzZWQgKz0gaGFzaHRhYmxlLT5uYnVja2V0cyAq IHNpemVvZihIYXNoSm9pblR1cGxlKTsKKworCS8qIGJ1ZmZlcmVkIGJhdGNoIGZpbGVzIChp bm5lciArIG91dGVyKSwgZWFjaCBoYXMgYSBCTENLU1ogYnVmZmVyICovCisJc3BhY2VVc2Vk ICs9IGhhc2h0YWJsZS0+bmJhdGNoICogc2l6ZW9mKFBHQWxpZ25lZEJsb2NrKSAqIDI7CisK KwkvKiBpZiB3ZSBleGNlZWRlZCB0aGUgY3VycmVudCBwZWFrLCByZW1lbWJlciB0aGUgbmV3 IG9uZSAqLworCWlmIChzcGFjZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVhaykKKwkJaGFz aHRhYmxlLT5zcGFjZVBlYWsgPSBzcGFjZVVzZWQ7Cit9CisKKy8qCisgKiBFeGVjSGFzaE1l bW9yeUxpbWl0RXhjZWVkZWQKKyAqCQlDaGVjayBpZiB0aGUgYW1vdW50IG9mIG1lbW9yeSB1 c2VkIGV4Y2VlZHMgc3BhY2VBbGxvd2VkLgorICoKKyAqIENoZWNrIGlmIHRoZSB0b3RhbCBh bW91bnQgb2Ygc3BhY2UgdXNlZCBieSB0aGUgaGFzaCBqb2luIGV4Y2VlZHMgdGhlCisgKiBj dXJyZW50IHZhbHVlIG9mIHNwYWNlQWxsb3dlZCwgYW5kIHdlIHNob3VsZCB0cnkgdG8gaW5j cmVhc2UgdGhlIG51bWJlcgorICogb2YgYmF0Y2hlcy4KKyAqCisgKiBXZSBuZWVkIHRvIGNv bnNpZGVyIGJvdGggdGhlIGRhdGEgYWRkZWQgdG8gdGhlIGhhc2ggYW5kIHRoZSBoYXNodGFi bGUKKyAqIGl0c2VsZiAoaS5lLiBidWNrZXRzKSwgYnV0IGFsc28gdGhlIGZpbGVzIHVzZWQg Zm9yIGZ1dHVyZSBiYXRjaGVzLgorICogRWFjaCBiYXRjaCBuZWVkcyBhIGZpbGUgZm9yIGlu bmVyL291dGVyIHNpZGUsIHNvIHdlIG5lZWQgKDIqbmJhdGNoKQorICogZmlsZXMgaW4gdG90 YWwsIGFuZCBlYWNoIEJ1ZkZpbGUgaGFzIGEgQkxDS1NaIGJ1ZmZlci4gSWYgd2UgaWdub3Jl ZAorICogdGhlIGZpbGVzIGFuZCBzaW1wbHkgZG91YmxlZCB0aGUgbnVtYmVyIG9mIGJhdGNo ZXMsIHdlIGNvdWxkIGVhc2lseQorICogaW5jcmVhc2UgdGhlIHRvdGFsIGFtb3VudCBvZiBt ZW1vcnkgYmVjYXVzZSB3aGlsZSB3ZSBleHBlY3QgdG8gY3V0IHRoZQorICogYmF0Y2ggc2l6 ZSBpbiBoYWxmIHRvLCBkb3VibGluZyB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgYWxzbyBkb3Vi bGVzIHRoZQorICogYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgQnVmRmlsZS4KKyAq CisgKiBUaGF0IG1lYW5zIGRvdWJsaW5nIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyBpcyBwb2lu dGxlc3Mgd2hlbgorICoKKyAqCQkoc3BhY2VVc2VkIC8gMikgPCAyICogKG5iYXRjaGVzICog c2l6ZW9mKEJ1ZkZpbGUpKQorICoKKyAqIGJlY2F1c2UgaXQgd291bGQgcmVzdWx0IGluIGFs bG9jYXRpbmcgbW9yZSBtZW1vcnkgdGhhbiBpdCBzYXZlcy4KKyAqCisgKiBUaGlzIGlzIGEg dGVtcG9yYXJ5IGRlY2lzaW9uIC0gd2UgY2FuJ3Qgc3RvcCBhZGRpbmcgYmF0Y2hlcyBlbnRp cmVseSwKKyAqIGp1c3QgdW50aWwgdGhlIGhhc2ggdGFibGUgZ3Jvd3MgZW5vdWdoIHRvIG1h a2UgaXQgYSB3aW4gYWdhaW4uCisgKi8KK3N0YXRpYyBib29sCitFeGVjSGFzaEV4Y2VlZGVk TWVtb3J5TGltaXQoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpCit7CisJcmV0dXJuIChoYXNo dGFibGUtPnNwYWNlVXNlZCArCisJCQloYXNodGFibGUtPm5idWNrZXRzX29wdGltYWwgKiBz aXplb2YoSGFzaEpvaW5UdXBsZSkgKworCQkJaGFzaHRhYmxlLT5uYmF0Y2ggKiBzaXplb2Yo UEdBbGlnbmVkQmxvY2spICogMgorCQkJPiBoYXNodGFibGUtPnNwYWNlQWxsb3dlZCk7Cit9 CisKKy8qCisgKiBFeGVjSGFzaEFkanVzdE1lbW9yeUxpbWl0CisgKgkJQWRqdXN0IHRoZSBt ZW1vcnkgbGltaXQgYWZ0ZXIgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGJhdGNoZXMuCisg KgorICogV2UgY2FuJ3Qga2VlcCB0aGUgc2FtZSBzcGFjZUFsbG93ZWQgdmFsdWUsIGJlY2F1 c2UgYXMgd2Uga2VlcCBhZGRpbmcKKyAqIGJhdGNoZXMgd2UncmUgZ3VhcmFudGVlZCB0byBl eGNlZWQgdGhlIG9sZGVyIHZhbHVlcyBzaW1wbHkgdGhhbmtzIHRvCisgKiB0aGUgQnVmRmls ZSBhbGxvY2F0aW9ucy4KKyAqCisgKiBJbnN0ZWFkLCB3ZSBjb25zaWRlciB0aGUgImJyZWFr IGV2ZW4iIHRocmVzaG9sZCBmb3IgdGhlIGN1cnJlbnQgbnVtYmVyCisgKiBvZiBiYXRjaGVz LCBhZGQgYSBiaXQgb2Ygc2xhY2sgKHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGludG8gYSBjeWNs ZSBvZgorICogaW5jcmVtZW50aW5nIG51bWJlciBvZiBiYXRjaGVzKSwgYW5kIGNhbGN1bGF0 ZSB0aGUgbmV3IGxpbWl0IGZyb20gdGhhdC4KKyAqCisgKiBGb3Igd2VsbCBlc3RpbWF0ZWQg Y2FzZXMgdGhpcyBzaG91bGQgZG8gbm90aGluZywgYXMgdGhlIGJhdGNoZXMgYXJlCisgKiBl eHBlY3RlZCB0byBhY2NvdW50IG9ubHkgZm9yIGEgc21hbGwgZnJhY3Rpb24gb2Ygd29ya19t ZW0uIEJ1dCBpZiB3ZQorICogc2lnbmlmaWNhbnRseSB1bmRlcmVzdGltYXRlIHRoZSBudW1i ZXIgb2YgYmF0Y2hlcywgb3IgaWYgb25lIGJhdGNoCisgKiBoYXBwZW5zIHRvIGJlIHZlcnkg bGFyZ2UsIHRoaXMgd2lsbCByZWxheCB0aGUgbGltaXQgYSBiaXQuCisgKgorICogVGhpcyBt ZWFucyB3ZSB3b24ndCBlbmZvcmNlIHRoZSB3b3JrX21lbSBsaW1pdCBzdHJpY3RseSAtIGJ1 dCB3aXRob3V0CisgKiBhZGp1c3RpbmcgdGhlIGxpbWl0IHRoYXQgd291bGRuJ3QgYmUgdGhl IGNhc2UgZWl0aGVyLCB3ZSdkIGp1c3QgdXNlCisgKiBhIGxvdCBvZiBtZW1vcnkgZm9yIHRo ZSBCdWZGaWxlcyB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoYXQuIFRoaXMKKyAqIHdheSB3 ZSBkbyBvdXIgYmVzdCB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkLgor ICovCitzdGF0aWMgdm9pZAorRXhlY0hhc2hBZGp1c3RNZW1vcnlMaW1pdChIYXNoSm9pblRh YmxlIGhhc2h0YWJsZSkKK3sKKwlTaXplCW5ld1NwYWNlQWxsb3dlZDsKKworCS8qCisJICog VGhlIG5leHQgdGltZSBpbmNyZWFzaW5nIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyAiYnJlYWtz IGV2ZW4iIGlzIHdoZW4KKwkgKgorCSAqIChzcGFjZVVzZWQgLyAyKSA9PSAoMiAqIG5iYXRj aGVzICogQkxDS1NaKQorCSAqCisJICogd2hpY2ggbWVhbnMKKwkgKgorCSAqIHNwYWNlVXNl ZCA9PSAoNCAqIG5iYXRjaGVzICogQkxDS1NaKQorCSAqCisJICogSG93ZXZlciwgdGhpcyBp cyBhICJicmVhayBldmVuIiB0aHJlc2hvbGQsIHdoZW4gd2Ugc2hyaW5rIHRoZSBoYXNoCisJ ICogdGFibGUganVzdCBlbm91Z2ggdG8gY29tcGVuc2F0ZSB0aGUgbmV3IGJhdGNoZXMsIGFu ZCB3ZSdkIGhpdCB0aGUKKwkgKiBuZXcgdGhyZXNob2xkIGFsbW9zdCBpbW1lZGlhdGVseSBh Z2Fpbi4gSW4gcHJhY3RpY2Ugd2Ugd2FudCB0byBmcmVlCisJICogbW9yZSBtZW1vcnkgdG8g YWxsb3cgbmV3IGRhdGEgYmVmb3JlIGhhdmluZyB0byBpbmNyZWFzZSB0aGUgbnVtYmVyCisJ ICogb2YgYmF0Y2hlcyBhZ2Fpbi4gU28gd2UgYWxsb3cgMjUlIG1vcmUgc3BhY2UuCisJICov CisJbmV3U3BhY2VBbGxvd2VkCisJCT0gMS4yNSAqICg0ICogaGFzaHRhYmxlLT5uYmF0Y2gg KiBzaXplb2YoUEdBbGlnbmVkQmxvY2spKTsKKworCS8qIGJ1dCBhbHNvIGFjY291bnQgZm9y IHRoZSBidWNrZXRzLCBhbmQgdGhlIGN1cnJlbnQgYmF0Y2ggZmlsZXMgKi8KKwluZXdTcGFj ZUFsbG93ZWQgKz0gaGFzaHRhYmxlLT5uYnVja2V0c19vcHRpbWFsICogc2l6ZW9mKEhhc2hK b2luVHVwbGUpOworCW5ld1NwYWNlQWxsb3dlZCArPSAoMiAqIGhhc2h0YWJsZS0+bmJhdGNo ICogc2l6ZW9mKFBHQWxpZ25lZEJsb2NrKSk7CisKKwkvKiBzaG91bGRuJ3QgZ28gZG93biwg YnV0IHVzZSBNYXgoKSB0byBtYWtlIHN1cmUgKi8KKwloYXNodGFibGUtPnNwYWNlQWxsb3dl ZCA9IE1heChoYXNodGFibGUtPnNwYWNlQWxsb3dlZCwKKwkJCQkJCQkJICBuZXdTcGFjZUFs bG93ZWQpOworfQorCiAvKgogICogRXhlY1NjYW5IYXNoQnVja2V0CiAgKgkJc2NhbiBhIGhh c2ggYnVja2V0IGZvciBtYXRjaGVzIHRvIHRoZSBjdXJyZW50IG91dGVyIHR1cGxlCkBAIC0y MzQ5LDggKzI0NjgsOSBAQCBFeGVjSGFzaEJ1aWxkU2tld0hhc2goSGFzaFN0YXRlICpoYXNo c3RhdGUsIEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLAogCQkJKyBtY3ZzVG9Vc2UgKiBzaXpl b2YoaW50KTsKIAkJaGFzaHRhYmxlLT5zcGFjZVVzZWRTa2V3ICs9IG5idWNrZXRzICogc2l6 ZW9mKEhhc2hTa2V3QnVja2V0ICopCiAJCQkrIG1jdnNUb1VzZSAqIHNpemVvZihpbnQpOwot CQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVhaykKLQkJ CWhhc2h0YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVzZWQ7CisKKwkJLyog cmVmcmVzaCBpbmZvIGFib3V0IHBlYWsgbWVtb3J5IHVzYWdlICovCisJCUV4ZWNIYXNoVXBk YXRlU3BhY2VQZWFrKGhhc2h0YWJsZSk7CiAKIAkJLyoKIAkJICogQ3JlYXRlIGEgc2tldyBi dWNrZXQgZm9yIGVhY2ggTUNWIGhhc2ggdmFsdWUuCkBAIC0yMzk5LDggKzI1MTksOSBAQCBF eGVjSGFzaEJ1aWxkU2tld0hhc2goSGFzaFN0YXRlICpoYXNoc3RhdGUsIEhhc2hKb2luVGFi bGUgaGFzaHRhYmxlLAogCQkJaGFzaHRhYmxlLT5uU2tld0J1Y2tldHMrKzsKIAkJCWhhc2h0 YWJsZS0+c3BhY2VVc2VkICs9IFNLRVdfQlVDS0VUX09WRVJIRUFEOwogCQkJaGFzaHRhYmxl LT5zcGFjZVVzZWRTa2V3ICs9IFNLRVdfQlVDS0VUX09WRVJIRUFEOwotCQkJaWYgKGhhc2h0 YWJsZS0+c3BhY2VVc2VkID4gaGFzaHRhYmxlLT5zcGFjZVBlYWspCi0JCQkJaGFzaHRhYmxl LT5zcGFjZVBlYWsgPSBoYXNodGFibGUtPnNwYWNlVXNlZDsKKworCQkJLyogcmVmcmVzaCBp bmZvIGFib3V0IHBlYWsgbWVtb3J5IHVzYWdlICovCisJCQlFeGVjSGFzaFVwZGF0ZVNwYWNl UGVhayhoYXNodGFibGUpOwogCQl9CiAKIAkJZnJlZV9hdHRzdGF0c3Nsb3QoJnNzbG90KTsK QEAgLTI0ODksOCArMjYxMCwxMCBAQCBFeGVjSGFzaFNrZXdUYWJsZUluc2VydChIYXNoSm9p blRhYmxlIGhhc2h0YWJsZSwKIAkvKiBBY2NvdW50IGZvciBzcGFjZSB1c2VkLCBhbmQgYmFj ayBvZmYgaWYgd2UndmUgdXNlZCB0b28gbXVjaCAqLwogCWhhc2h0YWJsZS0+c3BhY2VVc2Vk ICs9IGhhc2hUdXBsZVNpemU7CiAJaGFzaHRhYmxlLT5zcGFjZVVzZWRTa2V3ICs9IGhhc2hU dXBsZVNpemU7Ci0JaWYgKGhhc2h0YWJsZS0+c3BhY2VVc2VkID4gaGFzaHRhYmxlLT5zcGFj ZVBlYWspCi0JCWhhc2h0YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVzZWQ7 CisKKwkvKiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayBtZW1vcnkgdXNhZ2UgKi8KKwlFeGVj SGFzaFVwZGF0ZVNwYWNlUGVhayhoYXNodGFibGUpOworCiAJd2hpbGUgKGhhc2h0YWJsZS0+ c3BhY2VVc2VkU2tldyA+IGhhc2h0YWJsZS0+c3BhY2VBbGxvd2VkU2tldykKIAkJRXhlY0hh c2hSZW1vdmVOZXh0U2tld0J1Y2tldChoYXNodGFibGUpOwogCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pvaW5faGFzaC5vdXQKaW5kZXggNGZjMzRhMGU3MmEuLjhkNTQ4MjJlYjhj IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0CkBAIC0xOTgs NyArMTk4LDcgQEAgcm9sbGJhY2sgdG8gc2V0dGluZ3M7CiAtLSBub24tcGFyYWxsZWwKIHNh dmVwb2ludCBzZXR0aW5nczsKIHNldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKLXNldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwg d29ya19tZW0gPSAnNTEya0InOwogc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAx LjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBs ZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCByb2xs YmFjayB0byBzZXR0aW5nczsKIC0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtb2JsaXZpb3Vz IGhhc2ggam9pbgogc2F2ZXBvaW50IHNldHRpbmdzOwogc2V0IGxvY2FsIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwotc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtC JzsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc1MTJrQic7CiBzZXQgbG9jYWwgaGFzaF9tZW1f bXVsdGlwbGllciA9IDEuMDsKIHNldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9m ZjsKIGV4cGxhaW4gKGNvc3RzIG9mZikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pvaW5faGFzaC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3Fs CmluZGV4IDZiMDY4OGFiMGE2Li5jYTg3NTg5MDBhYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9q b2luX2hhc2guc3FsCkBAIC0xNDUsNyArMTQ1LDcgQEAgcm9sbGJhY2sgdG8gc2V0dGluZ3M7 CiAtLSBub24tcGFyYWxsZWwKIHNhdmVwb2ludCBzZXR0aW5nczsKIHNldCBsb2NhbCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKLXNldCBsb2NhbCB3b3JrX21lbSA9 ICcxMjhrQic7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNTEya0InOwogc2V0IGxvY2FsIGhh c2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVj dCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKQEAg LTE2MCw3ICsxNjAsNyBAQCByb2xsYmFjayB0byBzZXR0aW5nczsKIC0tIHBhcmFsbGVsIHdp dGggcGFyYWxsZWwtb2JsaXZpb3VzIGhhc2ggam9pbgogc2F2ZXBvaW50IHNldHRpbmdzOwog c2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwotc2V0IGxv Y2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc1MTJrQic7 CiBzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKIHNldCBsb2NhbCBlbmFi bGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKIGV4cGxhaW4gKGNvc3RzIG9mZikKLS0gCjIuNDcu MQoK --------------j6Xx7r3m02HLS8n0tsdtFunI Content-Type: text/x-patch; charset=UTF-8; name="v20241231-multi-spill-0001-Hash-join-with-a-multiple-spil.patch" Content-Disposition: attachment; filename*0="v20241231-multi-spill-0001-Hash-join-with-a-multiple-spil.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMzBmY2E0ZTU2MTMyZGQ1MTZiOGFiYTIzZWQzNmM0NzMxMWIzM2Y1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNzowODoxNyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMjMxLW11bHRpLXNwaWxsXSBIYXNoIGpvaW4gd2l0aCBhIG11bHRpcGxlIHNwaWxs IGZpbGVzCgpXZSBjYW4ndCB1c2UgYXJiaXRyYXJ5IG51bWJlciBvZiBiYXRjaGVzIGluIHRo ZSBoYXNoIGpvaW4sIGJlY2F1c2UgdGhhdApjYW4gdXNlIHN1YnN0YW50aWFsIG1lbW9yeSB1 c2UsIGlnbm9yZWQgYnkgdGhlIG1lbW9yeSBsaW1pdC4gSW5zdGVhZCwKZGVjaWRlIGhvdyBt YW55IGJhdGNoZXMgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LCBhbmQgb3BlbiBmaWxlcyBvbmx5 IGZvcgp0aGlzICJzbGljZSIgb2YgYmF0Y2hlcy4gRm9yIGZ1dHVyZSBiYXRjaGVzIHdlIGtl ZXAgb24gc3BpbGwgZmlsZSBwZXIKc2xpY2UuCgpUaGVuIHVzZSB0aGVzZSBzcGlsbCBmaWxl cyBhZnRlciAic3dpdGNoaW5nIiB0byB0aGUgZmlyc3QgYmF0Y2ggaW4gZWFjaApvZiB0aG9z ZSBub24taW4tbWVtb3J5IHNsaWNlcy4KCk5COiBDb21wYXJlZCB0byB0aGUgInNpbmdsZS1z cGlsbCIgcGF0Y2gsIHRoaXMgaXMgbGVzcyBzdHJpY3QsIGFzIHdlCm5lZWQgb25lIHNwaWxs IGZpbGUgcGVyIHNsaWNlLCBhbmQgdGhlIG51bWJlciBvZiBzbGljZXMgbWF5IGdyb3cgZHVy aW5nCmV4ZWN1dGlvbi4gSXQncyBiZXR0ZXIgdGhhbiB0aGUgY3VycmVudCBiZWhhdmlvciwg YmVjYXVzZSBldmVuIHdpdGgKbW9kZXN0IHdvcmtfbWVtIHZhbHVlcyB3ZSBjYW4gZml0IDMy LTEyOCBiYXRjaGVzIGludG8gbWVtb3J5LCB0aHVzCnRodXMgcmVkdWNpbmcgdGhlIG51bWJl ciBvZiBmaWxlcyB0byAxLzMyeCAtIDEvMTI4eC4gQnV0IHdpdGggbWFueQpiYXRjaGVzIChh cyB3aXRoIGJhdGNoIGV4cGxvc2lvbikgdGhpcyBjYW4gc3RpbGwgdXNlIHN1YnN0YW50aWFs CmFtb3VudHMgb2YgbWVtb3J5IChjZXJ0YWlubHkgbW9yZSB0aGFuIHdvcmtfbWVtKS4KClVs dGltYXRlbHksIGl0IGJlaGF2ZXMgc2ltaWxhcmx5IHRvIHRoZSAiYWRqdXN0bWVudCIgcGF0 Y2gsIGJ1dCB3aXRoCm1vcmUgY29tcGxleGl0eS4gQW5kIGl0IGNhbid0IGhhbmRsZSB0aGUg Im92ZXJzaXplZCBiYXRjaCIgcmVhbGx5IHdlbGwsCmJlY2F1c2UgdGhlIGxpbWl0IGlzIG5v dCBhZGp1c3RlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAg IHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jICAgICAgIHwgMjU2 ICsrKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl SGFzaGpvaW4uYyAgIHwgIDc1ICsrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jIHwgICAyICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2hhc2hqb2luLmgg ICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUhhc2guaCAgICAgICB8 ICAgOCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgIHwgICAxICsK IDcgZmlsZXMgY2hhbmdlZCwgMzAwIGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBhMjAxZWQzMDgyNC4uYWEzZmJlZGEzZGQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM0NjYsMTkgKzM0NjYsMjMgQEAgc2hv d19oYXNoX2luZm8oSGFzaFN0YXRlICpoYXNoc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJ CQkJCQkJCSAgIGhpbnN0cnVtZW50Lm5iYXRjaCwgZXMpOwogCQkJRXhwbGFpblByb3BlcnR5 SW50ZWdlcigiT3JpZ2luYWwgSGFzaCBCYXRjaGVzIiwgTlVMTCwKIAkJCQkJCQkJICAgaGlu c3RydW1lbnQubmJhdGNoX29yaWdpbmFsLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlJbnRl Z2VyKCJJbi1NZW1vcnkgSGFzaCBCYXRjaGVzIiwgTlVMTCwKKwkJCQkJCQkJICAgaGluc3Ry dW1lbnQubmJhdGNoX29yaWdpbmFsLCBlcyk7CiAJCQlFeHBsYWluUHJvcGVydHlVSW50ZWdl cigiUGVhayBNZW1vcnkgVXNhZ2UiLCAia0IiLAogCQkJCQkJCQkJc3BhY2VQZWFrS2IsIGVz KTsKIAkJfQogCQllbHNlIGlmIChoaW5zdHJ1bWVudC5uYmF0Y2hfb3JpZ2luYWwgIT0gaGlu c3RydW1lbnQubmJhdGNoIHx8CisJCQkJIGhpbnN0cnVtZW50Lm5iYXRjaF9pbm1lbW9yeSAh PSBoaW5zdHJ1bWVudC5uYmF0Y2ggfHwKIAkJCQkgaGluc3RydW1lbnQubmJ1Y2tldHNfb3Jp Z2luYWwgIT0gaGluc3RydW1lbnQubmJ1Y2tldHMpCiAJCXsKIAkJCUV4cGxhaW5JbmRlbnRU ZXh0KGVzKTsKIAkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKLQkJCQkJCQkgIkJ1Y2tl dHM6ICVkIChvcmlnaW5hbGx5ICVkKSAgQmF0Y2hlczogJWQgKG9yaWdpbmFsbHkgJWQpICBN ZW1vcnkgVXNhZ2U6ICIgVUlOVDY0X0ZPUk1BVCAia0JcbiIsCisJCQkJCQkJICJCdWNrZXRz OiAlZCAob3JpZ2luYWxseSAlZCkgIEJhdGNoZXM6ICVkIChvcmlnaW5hbGx5ICVkLCBpbi1t ZW1vcnkgJWQpICBNZW1vcnkgVXNhZ2U6ICIgVUlOVDY0X0ZPUk1BVCAia0JcbiIsCiAJCQkJ CQkJIGhpbnN0cnVtZW50Lm5idWNrZXRzLAogCQkJCQkJCSBoaW5zdHJ1bWVudC5uYnVja2V0 c19vcmlnaW5hbCwKIAkJCQkJCQkgaGluc3RydW1lbnQubmJhdGNoLAogCQkJCQkJCSBoaW5z dHJ1bWVudC5uYmF0Y2hfb3JpZ2luYWwsCisJCQkJCQkJIGhpbnN0cnVtZW50Lm5iYXRjaF9p bm1lbW9yeSwKIAkJCQkJCQkgc3BhY2VQZWFrS2IpOwogCQl9CiAJCWVsc2UKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSGFzaC5jCmluZGV4IDNlMjJkNTBlM2E0Li5lOWQ0ODI1NzdhYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSGFzaC5jCkBAIC04MCw2ICs4MCw3IEBAIHN0YXRpYyBib29sIEV4 ZWNQYXJhbGxlbEhhc2hUdXBsZVByZWFsbG9jKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLAog c3RhdGljIHZvaWQgRXhlY1BhcmFsbGVsSGFzaE1lcmdlQ291bnRlcnMoSGFzaEpvaW5UYWJs ZSBoYXNodGFibGUpOwogc3RhdGljIHZvaWQgRXhlY1BhcmFsbGVsSGFzaENsb3NlQmF0Y2hB Y2Nlc3NvcnMoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpOwogCitzdGF0aWMgdm9pZCBFeGVj SGFzaFVwZGF0ZVNwYWNlUGVhayhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSk7CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqCQlFeGVjSGFzaApAQCAtMTk5LDEwICsyMDAsOCBAQCBNdWx0aUV4ZWNQ cml2YXRlSGFzaChIYXNoU3RhdGUgKm5vZGUpCiAJaWYgKGhhc2h0YWJsZS0+bmJ1Y2tldHMg IT0gaGFzaHRhYmxlLT5uYnVja2V0c19vcHRpbWFsKQogCQlFeGVjSGFzaEluY3JlYXNlTnVt QnVja2V0cyhoYXNodGFibGUpOwogCi0JLyogQWNjb3VudCBmb3IgdGhlIGJ1Y2tldHMgaW4g c3BhY2VVc2VkIChyZXBvcnRlZCBpbiBFWFBMQUlOIEFOQUxZWkUpICovCi0JaGFzaHRhYmxl LT5zcGFjZVVzZWQgKz0gaGFzaHRhYmxlLT5uYnVja2V0cyAqIHNpemVvZihIYXNoSm9pblR1 cGxlKTsKLQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVh aykKLQkJaGFzaHRhYmxlLT5zcGFjZVBlYWsgPSBoYXNodGFibGUtPnNwYWNlVXNlZDsKKwkv KiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayB1c2VkIG1lbW9yeSAqLworCUV4ZWNIYXNoVXBk YXRlU3BhY2VQZWFrKGhhc2h0YWJsZSk7CiAKIAloYXNodGFibGUtPnBhcnRpYWxUdXBsZXMg PSBoYXNodGFibGUtPnRvdGFsVHVwbGVzOwogfQpAQCAtNDUxLDYgKzQ1MCw3IEBAIEV4ZWNI YXNoVGFibGVDcmVhdGUoSGFzaFN0YXRlICpzdGF0ZSkKIAlzaXplX3QJCXNwYWNlX2FsbG93 ZWQ7CiAJaW50CQkJbmJ1Y2tldHM7CiAJaW50CQkJbmJhdGNoOworCWludAkJCW5iYXRjaF9p bm1lbW9yeTsKIAlkb3VibGUJCXJvd3M7CiAJaW50CQkJbnVtX3NrZXdfbWN2czsKIAlpbnQJ CQlsb2cyX25idWNrZXRzOwpAQCAtNDc3LDcgKzQ3Nyw4IEBAIEV4ZWNIYXNoVGFibGVDcmVh dGUoSGFzaFN0YXRlICpzdGF0ZSkKIAkJCQkJCQlzdGF0ZS0+cGFyYWxsZWxfc3RhdGUgIT0g TlVMTCA/CiAJCQkJCQkJc3RhdGUtPnBhcmFsbGVsX3N0YXRlLT5ucGFydGljaXBhbnRzIC0g MSA6IDAsCiAJCQkJCQkJJnNwYWNlX2FsbG93ZWQsCi0JCQkJCQkJJm5idWNrZXRzLCAmbmJh dGNoLCAmbnVtX3NrZXdfbWN2cyk7CisJCQkJCQkJJm5idWNrZXRzLCAmbmJhdGNoLCAmbmJh dGNoX2lubWVtb3J5LAorCQkJCQkJCSZudW1fc2tld19tY3ZzKTsKIAogCS8qIG5idWNrZXRz IG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAJbG9nMl9uYnVja2V0cyA9IG15X2xvZzIobmJ1 Y2tldHMpOwpAQCAtNTAzLDYgKzUwNCw3IEBAIEV4ZWNIYXNoVGFibGVDcmVhdGUoSGFzaFN0 YXRlICpzdGF0ZSkKIAloYXNodGFibGUtPm5Ta2V3QnVja2V0cyA9IDA7CiAJaGFzaHRhYmxl LT5za2V3QnVja2V0TnVtcyA9IE5VTEw7CiAJaGFzaHRhYmxlLT5uYmF0Y2ggPSBuYmF0Y2g7 CisJaGFzaHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnkgPSBuYmF0Y2hfaW5tZW1vcnk7CiAJaGFz aHRhYmxlLT5jdXJiYXRjaCA9IDA7CiAJaGFzaHRhYmxlLT5uYmF0Y2hfb3JpZ2luYWwgPSBu YmF0Y2g7CiAJaGFzaHRhYmxlLT5uYmF0Y2hfb3V0c3RhcnQgPSBuYmF0Y2g7CkBAIC01MTIs NiArNTE0LDggQEAgRXhlY0hhc2hUYWJsZUNyZWF0ZShIYXNoU3RhdGUgKnN0YXRlKQogCWhh c2h0YWJsZS0+c2tld1R1cGxlcyA9IDA7CiAJaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSA9 IE5VTEw7CiAJaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IE5VTEw7CisJaGFzaHRhYmxl LT5pbm5lck92ZXJmbG93RmlsZXMgPSBOVUxMOworCWhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxv d0ZpbGVzID0gTlVMTDsKIAloYXNodGFibGUtPnNwYWNlVXNlZCA9IDA7CiAJaGFzaHRhYmxl LT5zcGFjZVBlYWsgPSAwOwogCWhhc2h0YWJsZS0+c3BhY2VBbGxvd2VkID0gc3BhY2VfYWxs b3dlZDsKQEAgLTU1Miw2ICs1NTYsNyBAQCBFeGVjSGFzaFRhYmxlQ3JlYXRlKEhhc2hTdGF0 ZSAqc3RhdGUpCiAJaWYgKG5iYXRjaCA+IDEgJiYgaGFzaHRhYmxlLT5wYXJhbGxlbF9zdGF0 ZSA9PSBOVUxMKQogCXsKIAkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWludAljbnQgPSBN aW4obmJhdGNoLCBuYmF0Y2hfaW5tZW1vcnkpOwogCiAJCS8qCiAJCSAqIGFsbG9jYXRlIGFu ZCBpbml0aWFsaXplIHRoZSBmaWxlIGFycmF5cyBpbiBoYXNoQ3h0IChub3QgbmVlZGVkIGZv cgpAQCAtNTU5LDggKzU2NCwxOSBAQCBFeGVjSGFzaFRhYmxlQ3JlYXRlKEhhc2hTdGF0ZSAq c3RhdGUpCiAJCSAqLwogCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRh YmxlLT5zcGlsbEN4dCk7CiAKLQkJaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSA9IHBhbGxv YzBfYXJyYXkoQnVmRmlsZSAqLCBuYmF0Y2gpOwotCQloYXNodGFibGUtPm91dGVyQmF0Y2hG aWxlID0gcGFsbG9jMF9hcnJheShCdWZGaWxlICosIG5iYXRjaCk7CisJCWhhc2h0YWJsZS0+ aW5uZXJCYXRjaEZpbGUgPSBwYWxsb2MwX2FycmF5KEJ1ZkZpbGUgKiwgY250KTsKKwkJaGFz aHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IHBhbGxvYzBfYXJyYXkoQnVmRmlsZSAqLCBjbnQp OworCisJCS8qIGFsc28gYWxsb2NhdGUgZmlsZXMgZm9yIG92ZXJmbG93IGJhdGNoZXMgKi8K KwkJaWYgKG5iYXRjaCA+IG5iYXRjaF9pbm1lbW9yeSkKKwkJeworCQkJaW50IG5zbGljZXMg PSAobmJhdGNoIC8gbmJhdGNoX2lubWVtb3J5KTsKKworCQkJQXNzZXJ0KG5zbGljZXMgJSAy ID09IDApOworCisJCQloYXNodGFibGUtPmlubmVyT3ZlcmZsb3dGaWxlcyA9IHBhbGxvYzBf YXJyYXkoQnVmRmlsZSAqLCBuc2xpY2VzICsgMSk7CisJCQloYXNodGFibGUtPm91dGVyT3Zl cmZsb3dGaWxlcyA9IHBhbGxvYzBfYXJyYXkoQnVmRmlsZSAqLCBuc2xpY2VzICsgMSk7CisJ CX0KIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIApAQCAtNjYxLDYgKzY3 Nyw3IEBAIEV4ZWNDaG9vc2VIYXNoVGFibGVTaXplKGRvdWJsZSBudHVwbGVzLCBpbnQgdHVw d2lkdGgsIGJvb2wgdXNlc2tldywKIAkJCQkJCXNpemVfdCAqc3BhY2VfYWxsb3dlZCwKIAkJ CQkJCWludCAqbnVtYnVja2V0cywKIAkJCQkJCWludCAqbnVtYmF0Y2hlcywKKwkJCQkJCWlu dCAqbnVtYmF0Y2hlc19pbm1lbW9yeSwKIAkJCQkJCWludCAqbnVtX3NrZXdfbWN2cykKIHsK IAlpbnQJCQl0dXBzaXplOwpAQCAtNjY5LDYgKzY4Niw3IEBAIEV4ZWNDaG9vc2VIYXNoVGFi bGVTaXplKGRvdWJsZSBudHVwbGVzLCBpbnQgdHVwd2lkdGgsIGJvb2wgdXNlc2tldywKIAlz aXplX3QJCWJ1Y2tldF9ieXRlczsKIAlzaXplX3QJCW1heF9wb2ludGVyczsKIAlpbnQJCQlu YmF0Y2ggPSAxOworCWludAkJCW5iYXRjaF9pbm1lbW9yeSA9IDE7CiAJaW50CQkJbmJ1Y2tl dHM7CiAJZG91YmxlCQlkYnVja2V0czsKIApAQCAtODExLDYgKzgyOSw3IEBAIEV4ZWNDaG9v c2VIYXNoVGFibGVTaXplKGRvdWJsZSBudHVwbGVzLCBpbnQgdHVwd2lkdGgsIGJvb2wgdXNl c2tldywKIAkJCQkJCQkJCXNwYWNlX2FsbG93ZWQsCiAJCQkJCQkJCQludW1idWNrZXRzLAog CQkJCQkJCQkJbnVtYmF0Y2hlcywKKwkJCQkJCQkJCW51bWJhdGNoZXNfaW5tZW1vcnksCiAJ CQkJCQkJCQludW1fc2tld19tY3ZzKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtODQ4LDExICs4 NjcsMjQgQEAgRXhlY0Nob29zZUhhc2hUYWJsZVNpemUoZG91YmxlIG50dXBsZXMsIGludCB0 dXB3aWR0aCwgYm9vbCB1c2Vza2V3LAogCQluYmF0Y2ggPSBwZ19uZXh0cG93ZXIyXzMyKE1h eCgyLCBtaW5iYXRjaCkpOwogCX0KIAorCS8qCisJICogU2VlIGhvdyBtYW55IGJhdGNoZXMg d2UgY2FuIGZpdCBpbnRvIG1lbW9yeSAoZHJpdmVuIG1vc3RseSBieSBzaXplCisJICogb2Yg QnVmRmlsZSwgd2l0aCBQR0FsaWduZWRCbG9jayBiZWluZyB0aGUgbGFyZ2VzdCBwYXJ0IG9m IHRoYXQpLgorCSAqIFdlIG5lZWQgb25lIEJ1ZkZpbGUgZm9yIGlubmVyIGFuZCBvdXRlciBz aWRlLCBzbyB3ZSBjb3VudCBpdCB0d2ljZQorCSAqIGZvciBlYWNoIGJhdGNoLCBhbmQgd2Ug c3RvcCBvbmNlIHdlIGV4Y2VlZCAod29ya19tZW0vMikuCisJICovCisJd2hpbGUgKChuYmF0 Y2hfaW5tZW1vcnkgKiAyKSAqIHNpemVvZihQR0FsaWduZWRCbG9jaykgKiAyCisJCQk8PSAo d29ya19tZW0gKiAxMDI0TCAvIDIpKQorCQluYmF0Y2hfaW5tZW1vcnkgKj0gMjsKKworCS8v IG5iYXRjaF9pbm1lbW9yeSA9IG5iYXRjaDsKKwogCUFzc2VydChuYnVja2V0cyA+IDApOwog CUFzc2VydChuYmF0Y2ggPiAwKTsKIAogCSpudW1idWNrZXRzID0gbmJ1Y2tldHM7CiAJKm51 bWJhdGNoZXMgPSBuYmF0Y2g7CisJKm51bWJhdGNoZXNfaW5tZW1vcnkgPSBuYmF0Y2hfaW5t ZW1vcnk7CiB9CiAKIApAQCAtODc0LDEzICs5MDYsMjcgQEAgRXhlY0hhc2hUYWJsZURlc3Ry b3koSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpCiAJICovCiAJaWYgKGhhc2h0YWJsZS0+aW5u ZXJCYXRjaEZpbGUgIT0gTlVMTCkKIAl7Ci0JCWZvciAoaSA9IDE7IGkgPCBoYXNodGFibGUt Pm5iYXRjaDsgaSsrKQorCQlpbnQgbiA9IE1pbihoYXNodGFibGUtPm5iYXRjaCwgaGFzaHRh YmxlLT5uYmF0Y2hfaW5tZW1vcnkpOworCisJCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspCiAJ CXsKIAkJCWlmIChoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2ldKQogCQkJCUJ1ZkZpbGVD bG9zZShoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2ldKTsKIAkJCWlmIChoYXNodGFibGUt Pm91dGVyQmF0Y2hGaWxlW2ldKQogCQkJCUJ1ZkZpbGVDbG9zZShoYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlW2ldKTsKIAkJfQorCisJCS8qIG51bWJlciBvZiBiYXRjaCBzbGljZXMgKi8K KwkJbiA9IChoYXNodGFibGUtPm5iYXRjaCAvIGhhc2h0YWJsZS0+bmJhdGNoX2lubWVtb3J5 KSArIDE7CisKKwkJZm9yIChpID0gMTsgaSA8IG47IGkrKykKKwkJeworCQkJaWYgKGhhc2h0 YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGVzW2ldKQorCQkJCUJ1ZkZpbGVDbG9zZShoYXNodGFi bGUtPmlubmVyT3ZlcmZsb3dGaWxlc1tpXSk7CisKKwkJCWlmIChoYXNodGFibGUtPm91dGVy T3ZlcmZsb3dGaWxlc1tpXSkKKwkJCQlCdWZGaWxlQ2xvc2UoaGFzaHRhYmxlLT5vdXRlck92 ZXJmbG93RmlsZXNbaV0pOworCQl9CiAJfQogCiAJLyogUmVsZWFzZSB3b3JraW5nIG1lbW9y eSAoYmF0Y2hDeHQgaXMgYSBjaGlsZCwgc28gaXQgZ29lcyBhd2F5IHRvbykgKi8KQEAgLTky MywxMSArOTY5LDE0IEBAIEV4ZWNIYXNoSW5jcmVhc2VOdW1CYXRjaGVzKEhhc2hKb2luVGFi bGUgaGFzaHRhYmxlKQogCiAJaWYgKGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUgPT0gTlVM TCkKIAl7CisJCS8qIFhYWCBuYmF0Y2g9MSwgbm8gbmVlZCB0byBkZWFsIHdpdGggbmJhdGNo X2lubWVtb3J5IGhlcmUgKi8KKwkJaW50IG5iYXRjaF90bXAgPSBNaW4obmJhdGNoLCBoYXNo dGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7CisKIAkJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRhYmxlLT5zcGlsbEN4dCk7CiAKIAkJLyogd2Ug aGFkIG5vIGZpbGUgYXJyYXlzIGJlZm9yZSAqLwotCQloYXNodGFibGUtPmlubmVyQmF0Y2hG aWxlID0gcGFsbG9jMF9hcnJheShCdWZGaWxlICosIG5iYXRjaCk7Ci0JCWhhc2h0YWJsZS0+ b3V0ZXJCYXRjaEZpbGUgPSBwYWxsb2MwX2FycmF5KEJ1ZkZpbGUgKiwgbmJhdGNoKTsKKwkJ aGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSA9IHBhbGxvYzBfYXJyYXkoQnVmRmlsZSAqLCBu YmF0Y2hfdG1wKTsKKwkJaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IHBhbGxvYzBfYXJy YXkoQnVmRmlsZSAqLCBuYmF0Y2hfdG1wKTsKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKIApAQCAtOTM2LDkgKzk4NSwzNSBAQCBFeGVjSGFzaEluY3JlYXNlTnVtQmF0 Y2hlcyhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSkKIAl9CiAJZWxzZQogCXsKKwkJaW50IG5i YXRjaF90bXAgPSBNaW4obmJhdGNoLCBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7CisJ CWludAlvbGRuYmF0Y2hfdG1wID0gTWluKG9sZG5iYXRjaCwgaGFzaHRhYmxlLT5uYmF0Y2hf aW5tZW1vcnkpOworCiAJCS8qIGVubGFyZ2UgYXJyYXlzIGFuZCB6ZXJvIG91dCBhZGRlZCBl bnRyaWVzICovCi0JCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUgPSByZXBhbGxvYzBfYXJy YXkoaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSwgQnVmRmlsZSAqLCBvbGRuYmF0Y2gsIG5i YXRjaCk7Ci0JCWhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGUgPSByZXBhbGxvYzBfYXJyYXko aGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSwgQnVmRmlsZSAqLCBvbGRuYmF0Y2gsIG5iYXRj aCk7CisJCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUgPSByZXBhbGxvYzBfYXJyYXkoaGFz aHRhYmxlLT5pbm5lckJhdGNoRmlsZSwgQnVmRmlsZSAqLCBvbGRuYmF0Y2hfdG1wLCBuYmF0 Y2hfdG1wKTsKKwkJaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IHJlcGFsbG9jMF9hcnJh eShoYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlLCBCdWZGaWxlICosIG9sZG5iYXRjaF90bXAs IG5iYXRjaF90bXApOworCisJCWlmIChuYmF0Y2ggPiBoYXNodGFibGUtPm5iYXRjaF9pbm1l bW9yeSkKKwkJeworCQkJaW50IG5zbGljZXMgPSAobmJhdGNoIC8gaGFzaHRhYmxlLT5uYmF0 Y2hfaW5tZW1vcnkpOworCQkJaW50IG9sZG5zbGljZXMgPSAob2xkbmJhdGNoIC8gaGFzaHRh YmxlLT5uYmF0Y2hfaW5tZW1vcnkpOworCisJCQlBc3NlcnQobnNsaWNlcyA+IDEpOworCQkJ QXNzZXJ0KG5zbGljZXMgJSAyID09IDApOworCQkJQXNzZXJ0KChvbGRuc2xpY2VzID09IDEp IHx8IChvbGRuc2xpY2VzICUgMiA9PSAwKSk7CisJCQlBc3NlcnQob2xkbnNsaWNlcyA8PSBu c2xpY2VzKTsKKworCQkJaWYgKGhhc2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGVzID09IE5V TEwpCisJCQl7CisJCQkJaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZXMgPSBwYWxsb2Mw X2FycmF5KEJ1ZkZpbGUgKiwgbnNsaWNlcyArIDEpOworCQkJCWhhc2h0YWJsZS0+b3V0ZXJP dmVyZmxvd0ZpbGVzID0gcGFsbG9jMF9hcnJheShCdWZGaWxlICosIG5zbGljZXMgKyAxKTsK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQloYXNodGFibGUtPmlubmVyT3ZlcmZsb3dGaWxl cyA9IHJlcGFsbG9jMF9hcnJheShoYXNodGFibGUtPmlubmVyT3ZlcmZsb3dGaWxlcywgQnVm RmlsZSAqLCBvbGRuc2xpY2VzICsgMSwgbnNsaWNlcyArIDEpOworCQkJCWhhc2h0YWJsZS0+ b3V0ZXJPdmVyZmxvd0ZpbGVzID0gcmVwYWxsb2MwX2FycmF5KGhhc2h0YWJsZS0+b3V0ZXJP dmVyZmxvd0ZpbGVzLCBCdWZGaWxlICosIG9sZG5zbGljZXMgKyAxLCBuc2xpY2VzICsgMSk7 CisJCQl9CisJCX0KKwogCX0KIAogCWhhc2h0YWJsZS0+bmJhdGNoID0gbmJhdGNoOwpAQCAt MTAwOCwxMSArMTA4MywxOCBAQCBFeGVjSGFzaEluY3JlYXNlTnVtQmF0Y2hlcyhIYXNoSm9p blRhYmxlIGhhc2h0YWJsZSkKIAkJCX0KIAkJCWVsc2UKIAkJCXsKKwkJCQlCdWZGaWxlICoq YmF0Y2hGaWxlOworCiAJCQkJLyogZHVtcCBpdCBvdXQgKi8KIAkJCQlBc3NlcnQoYmF0Y2hu byA+IGN1cmJhdGNoKTsKKworCQkJCWJhdGNoRmlsZSA9IEV4ZWNIYXNoR2V0QmF0Y2hGaWxl KGhhc2h0YWJsZSwgYmF0Y2hubywKKwkJCQkJCQkJCQkJCSBoYXNodGFibGUtPmlubmVyQmF0 Y2hGaWxlLAorCQkJCQkJCQkJCQkJIGhhc2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGVzKTsK KwogCQkJCUV4ZWNIYXNoSm9pblNhdmVUdXBsZShISlRVUExFX01JTlRVUExFKGhhc2hUdXBs ZSksCiAJCQkJCQkJCQkgIGhhc2hUdXBsZS0+aGFzaHZhbHVlLAotCQkJCQkJCQkJICAmaGFz aHRhYmxlLT5pbm5lckJhdGNoRmlsZVtiYXRjaG5vXSwKKwkJCQkJCQkJCSAgYmF0Y2hGaWxl LAogCQkJCQkJCQkJICBoYXNodGFibGUpOwogCiAJCQkJaGFzaHRhYmxlLT5zcGFjZVVzZWQg LT0gaGFzaFR1cGxlU2l6ZTsKQEAgLTE2NzMsMjIgKzE3NTUsMzMgQEAgRXhlY0hhc2hUYWJs ZUluc2VydChIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSwKIAogCQkvKiBBY2NvdW50IGZvciBz cGFjZSB1c2VkLCBhbmQgYmFjayBvZmYgaWYgd2UndmUgdXNlZCB0b28gbXVjaCAqLwogCQlo YXNodGFibGUtPnNwYWNlVXNlZCArPSBoYXNoVHVwbGVTaXplOwotCQlpZiAoaGFzaHRhYmxl LT5zcGFjZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVhaykKLQkJCWhhc2h0YWJsZS0+c3Bh Y2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVzZWQ7CisKKwkJLyogcmVmcmVzaCBpbmZvIGFi b3V0IHBlYWsgdXNlZCBtZW1vcnkgKi8KKwkJRXhlY0hhc2hVcGRhdGVTcGFjZVBlYWsoaGFz aHRhYmxlKTsKKworCQkvKiBDb25zaWRlciBpbmNyZWFzaW5nIG51bWJlciBvZiBiYXRjaGVz IGlmIHdlIGZpbGxlZCB3b3JrX21lbS4gKi8KIAkJaWYgKGhhc2h0YWJsZS0+c3BhY2VVc2Vk ICsKLQkJCWhhc2h0YWJsZS0+bmJ1Y2tldHNfb3B0aW1hbCAqIHNpemVvZihIYXNoSm9pblR1 cGxlKQorCQkJaGFzaHRhYmxlLT5uYnVja2V0c19vcHRpbWFsICogc2l6ZW9mKEhhc2hKb2lu VHVwbGUpICsKKwkJCU1pbihoYXNodGFibGUtPm5iYXRjaCwgaGFzaHRhYmxlLT5uYmF0Y2hf aW5tZW1vcnkpICogc2l6ZW9mKFBHQWxpZ25lZEJsb2NrKSAqIDIJLyogaW5uZXIgKyBvdXRl ciAqLwogCQkJPiBoYXNodGFibGUtPnNwYWNlQWxsb3dlZCkKIAkJCUV4ZWNIYXNoSW5jcmVh c2VOdW1CYXRjaGVzKGhhc2h0YWJsZSk7CiAJfQogCWVsc2UKIAl7CisJCUJ1ZkZpbGUgKipi YXRjaEZpbGU7CisKIAkJLyoKIAkJICogcHV0IHRoZSB0dXBsZSBpbnRvIGEgdGVtcCBmaWxl IGZvciBsYXRlciBiYXRjaGVzCiAJCSAqLwogCQlBc3NlcnQoYmF0Y2hubyA+IGhhc2h0YWJs ZS0+Y3VyYmF0Y2gpOworCisJCWJhdGNoRmlsZSA9IEV4ZWNIYXNoR2V0QmF0Y2hGaWxlKGhh c2h0YWJsZSwgYmF0Y2hubywKKwkJCQkJCQkJCQkgaGFzaHRhYmxlLT5pbm5lckJhdGNoRmls ZSwKKwkJCQkJCQkJCQkgaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZXMpOworCiAJCUV4 ZWNIYXNoSm9pblNhdmVUdXBsZSh0dXBsZSwKIAkJCQkJCQkgIGhhc2h2YWx1ZSwKLQkJCQkJ CQkgICZoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2JhdGNobm9dLAorCQkJCQkJCSAgYmF0 Y2hGaWxlLAogCQkJCQkJCSAgaGFzaHRhYmxlKTsKIAl9CiAKQEAgLTE4NDMsNiArMTkzNiwx MDggQEAgRXhlY0hhc2hHZXRCdWNrZXRBbmRCYXRjaChIYXNoSm9pblRhYmxlIGhhc2h0YWJs ZSwKIAl9CiB9CiAKK2ludAorRXhlY0hhc2hHZXRCYXRjaEluZGV4KEhhc2hKb2luVGFibGUg aGFzaHRhYmxlLCBpbnQgYmF0Y2hubykKK3sKKwlpbnQJc2xpY2UsCisJCWN1cnNsaWNlOwor CisJaWYgKGhhc2h0YWJsZS0+bmJhdGNoIDwgaGFzaHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnkp CisJCXJldHVybiBiYXRjaG5vOworCisJc2xpY2UgPSBiYXRjaG5vIC8gaGFzaHRhYmxlLT5u YmF0Y2hfaW5tZW1vcnk7CisJY3Vyc2xpY2UgPSBoYXNodGFibGUtPmN1cmJhdGNoIC8gaGFz aHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnk7CisKKwkvKiBzbGljZXMgY2FuJ3QgZ28gYmFja3dh cmRzICovCisJQXNzZXJ0KHNsaWNlID49IGN1cnNsaWNlKTsKKworCS8qIG92ZXJmbG93IHNs aWNlICovCisJaWYgKHNsaWNlID4gY3Vyc2xpY2UpCisJCXJldHVybiAtMTsKKworCS8qIGN1 cnJlbnQgc2xpY2UsIGNvbXB1dGUgaW5kZXggaW4gdGhlIGN1cnJlbnQgYXJyYXkgKi8KKwly ZXR1cm4gKGJhdGNobm8gJSBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7Cit9CisKK0J1 ZkZpbGUgKioKK0V4ZWNIYXNoR2V0QmF0Y2hGaWxlKEhhc2hKb2luVGFibGUgaGFzaHRhYmxl LCBpbnQgYmF0Y2hubywKKwkJCQkJIEJ1ZkZpbGUgKipiYXRjaEZpbGVzLCBCdWZGaWxlICoq b3ZlcmZsb3dGaWxlcykKK3sKKwlpbnQJCWlkeCA9IEV4ZWNIYXNoR2V0QmF0Y2hJbmRleCho YXNodGFibGUsIGJhdGNobm8pOworCisJLyogZ2V0IHRoZSByaWdodCBvdmVyZmxvdyBmaWxl ICovCisJaWYgKGlkeCA9PSAtMSkKKwl7CisJCWludCBzbGljZSA9IChiYXRjaG5vIC8gaGFz aHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnkpOworCisJCXJldHVybiAmb3ZlcmZsb3dGaWxlc1tz bGljZV07CisJfQorCisJLyogYmF0Y2ggZmlsZSBpbiB0aGUgY3VycmVudCBzbGljZSAqLwor CXJldHVybiAmYmF0Y2hGaWxlc1tpZHhdOworfQorCit2b2lkCitFeGVjSGFzaFN3aXRjaFRv TmV4dEJhdGNoU2xpY2UoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpCit7CisJaW50CXNsaWNl ID0gKGhhc2h0YWJsZS0+Y3VyYmF0Y2ggLyBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7 CisKKwltZW1zZXQoaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSwgMCwKKwkJICAgaGFzaHRh YmxlLT5uYmF0Y2hfaW5tZW1vcnkgKiBzaXplb2YoQnVmRmlsZSAqKSk7CisKKwloYXNodGFi bGUtPmlubmVyQmF0Y2hGaWxlWzBdID0gaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZXNb c2xpY2VdOworCWhhc2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGVzW3NsaWNlXSA9IE5VTEw7 CisKKwltZW1zZXQoaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSwgMCwKKwkJICAgaGFzaHRh YmxlLT5uYmF0Y2hfaW5tZW1vcnkgKiBzaXplb2YoQnVmRmlsZSAqKSk7CisKKwloYXNodGFi bGUtPm91dGVyQmF0Y2hGaWxlWzBdID0gaGFzaHRhYmxlLT5vdXRlck92ZXJmbG93RmlsZXNb c2xpY2VdOworCWhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxvd0ZpbGVzW3NsaWNlXSA9IE5VTEw7 Cit9CisKK2ludAorRXhlY0hhc2hTd2l0Y2hUb05leHRCYXRjaChIYXNoSm9pblRhYmxlIGhh c2h0YWJsZSkKK3sKKwlpbnQJCWJhdGNoaWR4OworCisJaGFzaHRhYmxlLT5jdXJiYXRjaCsr OworCisJLyogc2VlIGlmIHdlIHNraXBwZWQgdG8gdGhlIG5leHQgYmF0Y2ggc2xpY2UgKi8K KwliYXRjaGlkeCA9IEV4ZWNIYXNoR2V0QmF0Y2hJbmRleChoYXNodGFibGUsIGhhc2h0YWJs ZS0+Y3VyYmF0Y2gpOworCisJLyogQ2FuJ3QgYmUgLTEsIGN1cnJlbnQgYmF0Y2ggaXMgaW4g dGhlIGN1cnJlbnQgc2xpY2UgYnkgZGVmaW5pdGlvbi4gKi8KKwlBc3NlcnQoYmF0Y2hpZHgg Pj0gMCAmJiBiYXRjaGlkeCA8IGhhc2h0YWJsZS0+bmJhdGNoX2lubWVtb3J5KTsKKworCS8q CisJICogSWYgd2Ugc2tpcHBlZCB0byB0aGUgbmV4dCBzbGljZSBvZiBiYXRjaGVzLCByZXNl dCB0aGUgYXJyYXkgb2YgZmlsZXMKKwkgKiBhbmQgdXNlIHRoZSBvdmVyZmxvdyBmaWxlIGFz IHRoZSBmaXJzdCBiYXRjaC4KKwkgKi8KKwlpZiAoYmF0Y2hpZHggPT0gMCkKKwkJRXhlY0hh c2hTd2l0Y2hUb05leHRCYXRjaFNsaWNlKGhhc2h0YWJsZSk7CisKKwlyZXR1cm4gaGFzaHRh YmxlLT5jdXJiYXRjaDsKK30KKworc3RhdGljIHZvaWQKK0V4ZWNIYXNoVXBkYXRlU3BhY2VQ ZWFrKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKQoreworCVNpemUJc3BhY2VVc2VkID0gaGFz aHRhYmxlLT5zcGFjZVVzZWQ7CisKKwkvKiBBY2NvdW50IGZvciB0aGUgYnVja2V0cyBpbiBz cGFjZVVzZWQgKHJlcG9ydGVkIGluIEVYUExBSU4gQU5BTFlaRSkgKi8KKwlzcGFjZVVzZWQg Kz0gaGFzaHRhYmxlLT5uYnVja2V0cyAqIHNpemVvZihIYXNoSm9pblR1cGxlKTsKKworCS8q IEFjY291bnQgZm9yIG1lbW9yeSB1c2VkIGZvciBiYXRjaCBmaWxlcyAoaW5uZXIgKyBvdXRl cikgKi8KKwlzcGFjZVVzZWQgKz0gTWluKGhhc2h0YWJsZS0+bmJhdGNoLCBoYXNodGFibGUt Pm5iYXRjaF9pbm1lbW9yeSkgKgorCQkJCSBzaXplb2YoUEdBbGlnbmVkQmxvY2spICogMjsK KworCS8qIEFjY291bnQgZm9yIHNsaWNlIGZpbGVzIChpbm5lciArIG91dGVyKSAqLworCXNw YWNlVXNlZCArPSAoaGFzaHRhYmxlLT5uYmF0Y2ggLyBoYXNodGFibGUtPm5iYXRjaF9pbm1l bW9yeSkgKgorCQkJCSBzaXplb2YoUEdBbGlnbmVkQmxvY2spICogMjsKKworCWlmIChzcGFj ZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVhaykKKwkJaGFzaHRhYmxlLT5zcGFjZVBlYWsg PSBzcGFjZVVzZWQ7Cit9CisKIC8qCiAgKiBFeGVjU2Nhbkhhc2hCdWNrZXQKICAqCQlzY2Fu IGEgaGFzaCBidWNrZXQgZm9yIG1hdGNoZXMgdG8gdGhlIGN1cnJlbnQgb3V0ZXIgdHVwbGUK QEAgLTIzNDksOCArMjU0NCw5IEBAIEV4ZWNIYXNoQnVpbGRTa2V3SGFzaChIYXNoU3RhdGUg Kmhhc2hzdGF0ZSwgSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsCiAJCQkrIG1jdnNUb1VzZSAq IHNpemVvZihpbnQpOwogCQloYXNodGFibGUtPnNwYWNlVXNlZFNrZXcgKz0gbmJ1Y2tldHMg KiBzaXplb2YoSGFzaFNrZXdCdWNrZXQgKikKIAkJCSsgbWN2c1RvVXNlICogc2l6ZW9mKGlu dCk7Ci0JCWlmIChoYXNodGFibGUtPnNwYWNlVXNlZCA+IGhhc2h0YWJsZS0+c3BhY2VQZWFr KQotCQkJaGFzaHRhYmxlLT5zcGFjZVBlYWsgPSBoYXNodGFibGUtPnNwYWNlVXNlZDsKKwor CQkvKiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayB1c2VkIG1lbW9yeSAqLworCQlFeGVjSGFz aFVwZGF0ZVNwYWNlUGVhayhoYXNodGFibGUpOwogCiAJCS8qCiAJCSAqIENyZWF0ZSBhIHNr ZXcgYnVja2V0IGZvciBlYWNoIE1DViBoYXNoIHZhbHVlLgpAQCAtMjM5OSw4ICsyNTk1LDkg QEAgRXhlY0hhc2hCdWlsZFNrZXdIYXNoKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBIYXNoSm9p blRhYmxlIGhhc2h0YWJsZSwKIAkJCWhhc2h0YWJsZS0+blNrZXdCdWNrZXRzKys7CiAJCQlo YXNodGFibGUtPnNwYWNlVXNlZCArPSBTS0VXX0JVQ0tFVF9PVkVSSEVBRDsKIAkJCWhhc2h0 YWJsZS0+c3BhY2VVc2VkU2tldyArPSBTS0VXX0JVQ0tFVF9PVkVSSEVBRDsKLQkJCWlmICho YXNodGFibGUtPnNwYWNlVXNlZCA+IGhhc2h0YWJsZS0+c3BhY2VQZWFrKQotCQkJCWhhc2h0 YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVzZWQ7CisKKwkJCS8qIHJlZnJl c2ggaW5mbyBhYm91dCBwZWFrIHVzZWQgbWVtb3J5ICovCisJCQlFeGVjSGFzaFVwZGF0ZVNw YWNlUGVhayhoYXNodGFibGUpOwogCQl9CiAKIAkJZnJlZV9hdHRzdGF0c3Nsb3QoJnNzbG90 KTsKQEAgLTI0ODksOCArMjY4NiwxMCBAQCBFeGVjSGFzaFNrZXdUYWJsZUluc2VydChIYXNo Sm9pblRhYmxlIGhhc2h0YWJsZSwKIAkvKiBBY2NvdW50IGZvciBzcGFjZSB1c2VkLCBhbmQg YmFjayBvZmYgaWYgd2UndmUgdXNlZCB0b28gbXVjaCAqLwogCWhhc2h0YWJsZS0+c3BhY2VV c2VkICs9IGhhc2hUdXBsZVNpemU7CiAJaGFzaHRhYmxlLT5zcGFjZVVzZWRTa2V3ICs9IGhh c2hUdXBsZVNpemU7Ci0JaWYgKGhhc2h0YWJsZS0+c3BhY2VVc2VkID4gaGFzaHRhYmxlLT5z cGFjZVBlYWspCi0JCWhhc2h0YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVz ZWQ7CisKKwkvKiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayB1c2VkIG1lbW9yeSAqLworCUV4 ZWNIYXNoVXBkYXRlU3BhY2VQZWFrKGhhc2h0YWJsZSk7CisKIAl3aGlsZSAoaGFzaHRhYmxl LT5zcGFjZVVzZWRTa2V3ID4gaGFzaHRhYmxlLT5zcGFjZUFsbG93ZWRTa2V3KQogCQlFeGVj SGFzaFJlbW92ZU5leHRTa2V3QnVja2V0KGhhc2h0YWJsZSk7CiAKQEAgLTI1NjksMTAgKzI3 NjgsMTcgQEAgRXhlY0hhc2hSZW1vdmVOZXh0U2tld0J1Y2tldChIYXNoSm9pblRhYmxlIGhh c2h0YWJsZSkKIAkJfQogCQllbHNlCiAJCXsKKwkJCUJ1ZkZpbGUgKipiYXRjaEZpbGU7CisK IAkJCS8qIFB1dCB0aGUgdHVwbGUgaW50byBhIHRlbXAgZmlsZSBmb3IgbGF0ZXIgYmF0Y2hl cyAqLwogCQkJQXNzZXJ0KGJhdGNobm8gPiBoYXNodGFibGUtPmN1cmJhdGNoKTsKKworCQkJ YmF0Y2hGaWxlID0gRXhlY0hhc2hHZXRCYXRjaEZpbGUoaGFzaHRhYmxlLCBiYXRjaG5vLAor CQkJCQkJCQkJCQkgaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSwKKwkJCQkJCQkJCQkJIGhh c2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGVzKTsKKwogCQkJRXhlY0hhc2hKb2luU2F2ZVR1 cGxlKHR1cGxlLCBoYXNodmFsdWUsCi0JCQkJCQkJCSAgJmhhc2h0YWJsZS0+aW5uZXJCYXRj aEZpbGVbYmF0Y2hub10sCisJCQkJCQkJCSAgYmF0Y2hGaWxlLAogCQkJCQkJCQkgIGhhc2h0 YWJsZSk7CiAJCQlwZnJlZShoYXNoVHVwbGUpOwogCQkJaGFzaHRhYmxlLT5zcGFjZVVzZWQg LT0gdHVwbGVTaXplOwpAQCAtMjc1MCw2ICsyOTU2LDggQEAgRXhlY0hhc2hBY2N1bUluc3Ry dW1lbnRhdGlvbihIYXNoSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCSBo YXNodGFibGUtPm5iYXRjaCk7CiAJaW5zdHJ1bWVudC0+bmJhdGNoX29yaWdpbmFsID0gTWF4 KGluc3RydW1lbnQtPm5iYXRjaF9vcmlnaW5hbCwKIAkJCQkJCQkJCSAgaGFzaHRhYmxlLT5u YmF0Y2hfb3JpZ2luYWwpOworCWluc3RydW1lbnQtPm5iYXRjaF9pbm1lbW9yeSA9IE1pbiho YXNodGFibGUtPm5iYXRjaCwKKwkJCQkJCQkJCSAgaGFzaHRhYmxlLT5uYmF0Y2hfaW5tZW1v cnkpOwogCWluc3RydW1lbnQtPnNwYWNlX3BlYWsgPSBNYXgoaW5zdHJ1bWVudC0+c3BhY2Vf cGVhaywKIAkJCQkJCQkJIGhhc2h0YWJsZS0+c3BhY2VQZWFrKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUhhc2hqb2luLmMKaW5kZXggZWEwMDQ1YmMwZjMuLjU4MGI1ZGE5M2JkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaGpvaW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaGpvaW4uYwpAQCAtNDgxLDEwICs0ODEsMTUg QEAgRXhlY0hhc2hKb2luSW1wbChQbGFuU3RhdGUgKnBzdGF0ZSwgYm9vbCBwYXJhbGxlbCkK IAkJCQlpZiAoYmF0Y2hubyAhPSBoYXNodGFibGUtPmN1cmJhdGNoICYmCiAJCQkJCW5vZGUt PmhqX0N1clNrZXdCdWNrZXRObyA9PSBJTlZBTElEX1NLRVdfQlVDS0VUX05PKQogCQkJCXsK KwkJCQkJQnVmRmlsZQkgICoqYmF0Y2hGaWxlOwogCQkJCQlib29sCQlzaG91bGRGcmVlOwog CQkJCQlNaW5pbWFsVHVwbGUgbWludHVwbGUgPSBFeGVjRmV0Y2hTbG90TWluaW1hbFR1cGxl KG91dGVyVHVwbGVTbG90LAogCQkJCQkJCQkJCQkJCQkJCQkgICZzaG91bGRGcmVlKTsKIAor CQkJCQliYXRjaEZpbGUgPSBFeGVjSGFzaEdldEJhdGNoRmlsZShoYXNodGFibGUsIGJhdGNo bm8sCisJCQkJCQkJCQkJCQkJIGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGUsCisJCQkJCQkJ CQkJCQkJIGhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxvd0ZpbGVzKTsKKwogCQkJCQkvKgogCQkJ CQkgKiBOZWVkIHRvIHBvc3Rwb25lIHRoaXMgb3V0ZXIgdHVwbGUgdG8gYSBsYXRlciBiYXRj aC4KIAkJCQkJICogU2F2ZSBpdCBpbiB0aGUgY29ycmVzcG9uZGluZyBvdXRlci1iYXRjaCBm aWxlLgpAQCAtNDkyLDcgKzQ5Nyw3IEBAIEV4ZWNIYXNoSm9pbkltcGwoUGxhblN0YXRlICpw c3RhdGUsIGJvb2wgcGFyYWxsZWwpCiAJCQkJCUFzc2VydChwYXJhbGxlbF9zdGF0ZSA9PSBO VUxMKTsKIAkJCQkJQXNzZXJ0KGJhdGNobm8gPiBoYXNodGFibGUtPmN1cmJhdGNoKTsKIAkJ CQkJRXhlY0hhc2hKb2luU2F2ZVR1cGxlKG1pbnR1cGxlLCBoYXNodmFsdWUsCi0JCQkJCQkJ CQkJICAmaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRjaG5vXSwKKwkJCQkJCQkJCQkg IGJhdGNoRmlsZSwKIAkJCQkJCQkJCQkgIGhhc2h0YWJsZSk7CiAKIAkJCQkJaWYgKHNob3Vs ZEZyZWUpCkBAIC0xMDMwLDE3ICsxMDM1LDE5IEBAIEV4ZWNIYXNoSm9pbk91dGVyR2V0VHVw bGUoUGxhblN0YXRlICpvdXRlck5vZGUsCiAJfQogCWVsc2UgaWYgKGN1cmJhdGNoIDwgaGFz aHRhYmxlLT5uYmF0Y2gpCiAJewotCQlCdWZGaWxlICAgICpmaWxlID0gaGFzaHRhYmxlLT5v dXRlckJhdGNoRmlsZVtjdXJiYXRjaF07CisJCUJ1ZkZpbGUgICAgKipmaWxlID0gRXhlY0hh c2hHZXRCYXRjaEZpbGUoaGFzaHRhYmxlLCBjdXJiYXRjaCwKKwkJCQkJCQkJCQkJCSBoYXNo dGFibGUtPm91dGVyQmF0Y2hGaWxlLAorCQkJCQkJCQkJCQkJIGhhc2h0YWJsZS0+b3V0ZXJP dmVyZmxvd0ZpbGVzKTsKIAogCQkvKgogCQkgKiBJbiBvdXRlci1qb2luIGNhc2VzLCB3ZSBj b3VsZCBnZXQgaGVyZSBldmVuIHRob3VnaCB0aGUgYmF0Y2ggZmlsZQogCQkgKiBpcyBlbXB0 eS4KIAkJICovCi0JCWlmIChmaWxlID09IE5VTEwpCisJCWlmICgqZmlsZSA9PSBOVUxMKQog CQkJcmV0dXJuIE5VTEw7CiAKIAkJc2xvdCA9IEV4ZWNIYXNoSm9pbkdldFNhdmVkVHVwbGUo aGpzdGF0ZSwKLQkJCQkJCQkJCQkgZmlsZSwKKwkJCQkJCQkJCQkgKmZpbGUsCiAJCQkJCQkJ CQkJIGhhc2h2YWx1ZSwKIAkJCQkJCQkJCQkgaGpzdGF0ZS0+aGpfT3V0ZXJUdXBsZVNsb3Qp OwogCQlpZiAoIVR1cElzTnVsbChzbG90KSkKQEAgLTExMzUsOSArMTE0MiwxOCBAQCBFeGVj SGFzaEpvaW5OZXdCYXRjaChIYXNoSm9pblN0YXRlICpoanN0YXRlKQogCUJ1ZkZpbGUgICAg KmlubmVyRmlsZTsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAl1aW50MzIJCWhhc2h2YWx1 ZTsKKwlpbnQJCQliYXRjaGlkeDsKKwlpbnQJCQljdXJiYXRjaF9vbGQ7CiAKIAluYmF0Y2gg PSBoYXNodGFibGUtPm5iYXRjaDsKIAljdXJiYXRjaCA9IGhhc2h0YWJsZS0+Y3VyYmF0Y2g7 CisJY3VyYmF0Y2hfb2xkID0gY3VyYmF0Y2g7CisKKwkvKiBpbmRleCBvZiB0aGUgb2xkIGJh dGNoICovCisJYmF0Y2hpZHggPSBFeGVjSGFzaEdldEJhdGNoSW5kZXgoaGFzaHRhYmxlLCBj dXJiYXRjaCk7CisKKwkvKiBoYXMgdG8gYmUgaW4gdGhlIGN1cnJlbnQgc2xpY2Ugb2YgYmF0 Y2hlcyAqLworCUFzc2VydChiYXRjaGlkeCA+PSAwICYmIGJhdGNoaWR4IDwgaGFzaHRhYmxl LT5uYmF0Y2hfaW5tZW1vcnkpOwogCiAJaWYgKGN1cmJhdGNoID4gMCkKIAl7CkBAIC0xMTQ1 LDkgKzExNjEsOSBAQCBFeGVjSGFzaEpvaW5OZXdCYXRjaChIYXNoSm9pblN0YXRlICpoanN0 YXRlKQogCQkgKiBXZSBubyBsb25nZXIgbmVlZCB0aGUgcHJldmlvdXMgb3V0ZXIgYmF0Y2gg ZmlsZTsgY2xvc2UgaXQgcmlnaHQKIAkJICogYXdheSB0byBmcmVlIGRpc2sgc3BhY2UuCiAJ CSAqLwotCQlpZiAoaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0pCi0JCQlC dWZGaWxlQ2xvc2UoaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0pOwotCQlo YXNodGFibGUtPm91dGVyQmF0Y2hGaWxlW2N1cmJhdGNoXSA9IE5VTEw7CisJCWlmIChoYXNo dGFibGUtPm91dGVyQmF0Y2hGaWxlW2JhdGNoaWR4XSkKKwkJCUJ1ZkZpbGVDbG9zZShoYXNo dGFibGUtPm91dGVyQmF0Y2hGaWxlW2JhdGNoaWR4XSk7CisJCWhhc2h0YWJsZS0+b3V0ZXJC YXRjaEZpbGVbYmF0Y2hpZHhdID0gTlVMTDsKIAl9CiAJZWxzZQkJCQkJCS8qIHdlIGp1c3Qg ZmluaXNoZWQgdGhlIGZpcnN0IGJhdGNoICovCiAJewpAQCAtMTE4Miw0NSArMTE5OCw1MCBA QCBFeGVjSGFzaEpvaW5OZXdCYXRjaChIYXNoSm9pblN0YXRlICpoanN0YXRlKQogCSAqIHNj YW4sIHdlIGhhdmUgdG8gcmVzY2FuIG91dGVyIGJhdGNoZXMgaW4gY2FzZSB0aGV5IGNvbnRh aW4gdHVwbGVzIHRoYXQKIAkgKiBuZWVkIHRvIGJlIHJlYXNzaWduZWQuCiAJICovCi0JY3Vy YmF0Y2grKzsKKwljdXJiYXRjaCA9IEV4ZWNIYXNoU3dpdGNoVG9OZXh0QmF0Y2goaGFzaHRh YmxlKTsKKwliYXRjaGlkeCA9IEV4ZWNIYXNoR2V0QmF0Y2hJbmRleChoYXNodGFibGUsIGN1 cmJhdGNoKTsKKwogCXdoaWxlIChjdXJiYXRjaCA8IG5iYXRjaCAmJgotCQkgICAoaGFzaHRh YmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0gPT0gTlVMTCB8fAotCQkJaGFzaHRhYmxl LT5pbm5lckJhdGNoRmlsZVtjdXJiYXRjaF0gPT0gTlVMTCkpCisJCSAgIChoYXNodGFibGUt Pm91dGVyQmF0Y2hGaWxlW2JhdGNoaWR4XSA9PSBOVUxMIHx8CisJCQloYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSA9PSBOVUxMKSkKIAl7Ci0JCWlmIChoYXNodGFibGUt Pm91dGVyQmF0Y2hGaWxlW2N1cmJhdGNoXSAmJgorCQlpZiAoaGFzaHRhYmxlLT5vdXRlckJh dGNoRmlsZVtiYXRjaGlkeF0gJiYKIAkJCUhKX0ZJTExfT1VURVIoaGpzdGF0ZSkpCiAJCQli cmVhazsJCQkJLyogbXVzdCBwcm9jZXNzIGR1ZSB0byBydWxlIDEgKi8KLQkJaWYgKGhhc2h0 YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdICYmCisJCWlmIChoYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSAmJgogCQkJSEpfRklMTF9JTk5FUihoanN0YXRlKSkK IAkJCWJyZWFrOwkJCQkvKiBtdXN0IHByb2Nlc3MgZHVlIHRvIHJ1bGUgMSAqLwotCQlpZiAo aGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZVtjdXJiYXRjaF0gJiYKKwkJaWYgKGhhc2h0YWJs ZS0+aW5uZXJCYXRjaEZpbGVbYmF0Y2hpZHhdICYmCiAJCQluYmF0Y2ggIT0gaGFzaHRhYmxl LT5uYmF0Y2hfb3JpZ2luYWwpCiAJCQlicmVhazsJCQkJLyogbXVzdCBwcm9jZXNzIGR1ZSB0 byBydWxlIDIgKi8KLQkJaWYgKGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hd ICYmCisJCWlmIChoYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlW2JhdGNoaWR4XSAmJgogCQkJ bmJhdGNoICE9IGhhc2h0YWJsZS0+bmJhdGNoX291dHN0YXJ0KQogCQkJYnJlYWs7CQkJCS8q IG11c3QgcHJvY2VzcyBkdWUgdG8gcnVsZSAzICovCiAJCS8qIFdlIGNhbiBpZ25vcmUgdGhp cyBiYXRjaC4gKi8KIAkJLyogUmVsZWFzZSBhc3NvY2lhdGVkIHRlbXAgZmlsZXMgcmlnaHQg YXdheS4gKi8KLQkJaWYgKGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKQot CQkJQnVmRmlsZUNsb3NlKGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKTsK LQkJaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZVtjdXJiYXRjaF0gPSBOVUxMOwotCQlpZiAo aGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0pCi0JCQlCdWZGaWxlQ2xvc2Uo aGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0pOwotCQloYXNodGFibGUtPm91 dGVyQmF0Y2hGaWxlW2N1cmJhdGNoXSA9IE5VTEw7Ci0JCWN1cmJhdGNoKys7CisJCWlmICho YXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSkKKwkJCUJ1ZkZpbGVDbG9zZSho YXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSk7CisJCWhhc2h0YWJsZS0+aW5u ZXJCYXRjaEZpbGVbYmF0Y2hpZHhdID0gTlVMTDsKKwkJaWYgKGhhc2h0YWJsZS0+b3V0ZXJC YXRjaEZpbGVbYmF0Y2hpZHhdKQorCQkJQnVmRmlsZUNsb3NlKGhhc2h0YWJsZS0+b3V0ZXJC YXRjaEZpbGVbYmF0Y2hpZHhdKTsKKwkJaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRj aGlkeF0gPSBOVUxMOworCisJCWN1cmJhdGNoID0gRXhlY0hhc2hTd2l0Y2hUb05leHRCYXRj aChoYXNodGFibGUpOworCQliYXRjaGlkeCA9IEV4ZWNIYXNoR2V0QmF0Y2hJbmRleChoYXNo dGFibGUsIGN1cmJhdGNoKTsKIAl9CiAKIAlpZiAoY3VyYmF0Y2ggPj0gbmJhdGNoKQorCXsK KwkJaGFzaHRhYmxlLT5jdXJiYXRjaCA9IGN1cmJhdGNoX29sZDsKIAkJcmV0dXJuIGZhbHNl OwkJCS8qIG5vIG1vcmUgYmF0Y2hlcyAqLwotCi0JaGFzaHRhYmxlLT5jdXJiYXRjaCA9IGN1 cmJhdGNoOworCX0KIAogCS8qCiAJICogUmVsb2FkIHRoZSBoYXNoIHRhYmxlIHdpdGggdGhl IG5ldyBpbm5lciBiYXRjaCAod2hpY2ggY291bGQgYmUgZW1wdHkpCiAJICovCiAJRXhlY0hh c2hUYWJsZVJlc2V0KGhhc2h0YWJsZSk7CiAKLQlpbm5lckZpbGUgPSBoYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlW2N1cmJhdGNoXTsKKwlpbm5lckZpbGUgPSBoYXNodGFibGUtPmlubmVy QmF0Y2hGaWxlW2JhdGNoaWR4XTsKIAogCWlmIChpbm5lckZpbGUgIT0gTlVMTCkKIAl7CkBA IC0xMjQ2LDE1ICsxMjY3LDE1IEBAIEV4ZWNIYXNoSm9pbk5ld0JhdGNoKEhhc2hKb2luU3Rh dGUgKmhqc3RhdGUpCiAJCSAqIG5lZWRlZAogCQkgKi8KIAkJQnVmRmlsZUNsb3NlKGlubmVy RmlsZSk7Ci0JCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdID0gTlVMTDsK KwkJaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZVtiYXRjaGlkeF0gPSBOVUxMOwogCX0KIAog CS8qCiAJICogUmV3aW5kIG91dGVyIGJhdGNoIGZpbGUgKGlmIHByZXNlbnQpLCBzbyB0aGF0 IHdlIGNhbiBzdGFydCByZWFkaW5nIGl0LgogCSAqLwotCWlmIChoYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlW2N1cmJhdGNoXSAhPSBOVUxMKQorCWlmIChoYXNodGFibGUtPm91dGVyQmF0 Y2hGaWxlW2JhdGNoaWR4XSAhPSBOVUxMKQogCXsKLQkJaWYgKEJ1ZkZpbGVTZWVrKGhhc2h0 YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdLCAwLCAwLCBTRUVLX1NFVCkpCisJCWlm IChCdWZGaWxlU2VlayhoYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlW2JhdGNoaWR4XSwgMCwg MCwgU0VFS19TRVQpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZXdpbmQgaGFzaC1qb2lu IHRlbXBvcmFyeSBmaWxlIikpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCmluZGV4IGMzNjY4N2FhNGRmLi42ZjQwNjAwZDEwYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC00MTczLDYgKzQxNzMsNyBAQCBpbml0aWFsX2Nv c3RfaGFzaGpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3NwYWNlICp3b3Jr c3BhY2UsCiAJaW50CQkJbnVtX2hhc2hjbGF1c2VzID0gbGlzdF9sZW5ndGgoaGFzaGNsYXVz ZXMpOwogCWludAkJCW51bWJ1Y2tldHM7CiAJaW50CQkJbnVtYmF0Y2hlczsKKwlpbnQJCQlu dW1iYXRjaGVzX2lubWVtb3J5OwogCWludAkJCW51bV9za2V3X21jdnM7CiAJc2l6ZV90CQlz cGFjZV9hbGxvd2VkOwkvKiB1bnVzZWQgKi8KIApAQCAtNDIyNyw2ICs0MjI4LDcgQEAgaW5p dGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFj ZSAqd29ya3NwYWNlLAogCQkJCQkJCSZzcGFjZV9hbGxvd2VkLAogCQkJCQkJCSZudW1idWNr ZXRzLAogCQkJCQkJCSZudW1iYXRjaGVzLAorCQkJCQkJCSZudW1iYXRjaGVzX2lubWVtb3J5 LAogCQkJCQkJCSZudW1fc2tld19tY3ZzKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9leGVjdXRvci9oYXNoam9pbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaGFzaGpv aW4uaAppbmRleCAyZDhlZDg2ODhjZC4uNzZjOTgzZGJkNGQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2hhc2hqb2luLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv aGFzaGpvaW4uaApAQCAtMzIwLDYgKzMyMCw3IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hKb2lu VGFibGVEYXRhCiAJaW50CQkgICAqc2tld0J1Y2tldE51bXM7IC8qIGFycmF5IGluZGV4ZXMg b2YgYWN0aXZlIHNrZXcgYnVja2V0cyAqLwogCiAJaW50CQkJbmJhdGNoOwkJCS8qIG51bWJl ciBvZiBiYXRjaGVzICovCisJaW50CQkJbmJhdGNoX2lubWVtb3J5OwkvKiBtYXggbnVtYmVy IG9mIGluLW1lbW9yeSBiYXRjaGVzICovCiAJaW50CQkJY3VyYmF0Y2g7CQkvKiBjdXJyZW50 IGJhdGNoICM7IDAgZHVyaW5nIDFzdCBwYXNzICovCiAKIAlpbnQJCQluYmF0Y2hfb3JpZ2lu YWw7CS8qIG5iYXRjaCB3aGVuIHdlIHN0YXJ0ZWQgaW5uZXIgc2NhbiAqLwpAQCAtMzMxLDYg KzMzMiw5IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hKb2luVGFibGVEYXRhCiAJZG91YmxlCQlw YXJ0aWFsVHVwbGVzOwkvKiAjIHR1cGxlcyBvYnRhaW5lZCBmcm9tIGlubmVyIHBsYW4gYnkg bWUgKi8KIAlkb3VibGUJCXNrZXdUdXBsZXM7CQkvKiAjIHR1cGxlcyBpbnNlcnRlZCBpbnRv IHNrZXcgdHVwbGVzICovCiAKKwlCdWZGaWxlCSAgKippbm5lck92ZXJmbG93RmlsZXM7CS8q IHRlbXAgZmlsZSBmb3IgaW5uZXIgb3ZlcmZsb3cgYmF0Y2hlcyAqLworCUJ1ZkZpbGUJICAq Km91dGVyT3ZlcmZsb3dGaWxlczsJLyogdGVtcCBmaWxlIGZvciBvdXRlciBvdmVyZmxvdyBi YXRjaGVzICovCisKIAkvKgogCSAqIFRoZXNlIGFycmF5cyBhcmUgYWxsb2NhdGVkIGZvciB0 aGUgbGlmZSBvZiB0aGUgaGFzaCBqb2luLCBidXQgb25seSBpZgogCSAqIG5iYXRjaCA+IDEu ICBBIGZpbGUgaXMgb3BlbmVkIG9ubHkgd2hlbiB3ZSBmaXJzdCB3cml0ZSBhIHR1cGxlIGlu dG8gaXQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVIYXNoLmggYi9z cmMvaW5jbHVkZS9leGVjdXRvci9ub2RlSGFzaC5oCmluZGV4IGU0ZWI3YmM2MzU5Li5lZjFk MmJlYzE1YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUhhc2guaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlSGFzaC5oCkBAIC0xNiw2ICsxNiw3IEBA CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJub2Rlcy9leGVj bm9kZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKIAogc3RydWN0IFNoYXJl ZEhhc2hKb2luQmF0Y2g7CiAKQEAgLTQ2LDYgKzQ3LDEyIEBAIGV4dGVybiB2b2lkIEV4ZWNI YXNoR2V0QnVja2V0QW5kQmF0Y2goSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsCiAJCQkJCQkJ CQkgIHVpbnQzMiBoYXNodmFsdWUsCiAJCQkJCQkJCQkgIGludCAqYnVja2V0bm8sCiAJCQkJ CQkJCQkgIGludCAqYmF0Y2hubyk7CitleHRlcm4gaW50IEV4ZWNIYXNoR2V0QmF0Y2hJbmRl eChIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSwgaW50IGJhdGNobm8pOworZXh0ZXJuIEJ1ZkZp bGUgKipFeGVjSGFzaEdldEJhdGNoRmlsZShIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSwgaW50 IGJhdGNobm8sCisJCQkJCQkJCQkgIEJ1ZkZpbGUgKipiYXRjaEZpbGVzLAorCQkJCQkJCQkJ ICBCdWZGaWxlICoqb3ZlcmZsb3dGaWxlcyk7CitleHRlcm4gdm9pZCBFeGVjSGFzaFN3aXRj aFRvTmV4dEJhdGNoU2xpY2UoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpOworZXh0ZXJuIGlu dCBFeGVjSGFzaFN3aXRjaFRvTmV4dEJhdGNoKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsK IGV4dGVybiBib29sIEV4ZWNTY2FuSGFzaEJ1Y2tldChIYXNoSm9pblN0YXRlICpoanN0YXRl LCBFeHByQ29udGV4dCAqZWNvbnRleHQpOwogZXh0ZXJuIGJvb2wgRXhlY1BhcmFsbGVsU2Nh bkhhc2hCdWNrZXQoSGFzaEpvaW5TdGF0ZSAqaGpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250 ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNQcmVwSGFzaFRhYmxlRm9yVW5tYXRjaGVkKEhhc2hK b2luU3RhdGUgKmhqc3RhdGUpOwpAQCAtNjIsNiArNjksNyBAQCBleHRlcm4gdm9pZCBFeGVj Q2hvb3NlSGFzaFRhYmxlU2l6ZShkb3VibGUgbnR1cGxlcywgaW50IHR1cHdpZHRoLCBib29s IHVzZXNrZXcsCiAJCQkJCQkJCQlzaXplX3QgKnNwYWNlX2FsbG93ZWQsCiAJCQkJCQkJCQlp bnQgKm51bWJ1Y2tldHMsCiAJCQkJCQkJCQlpbnQgKm51bWJhdGNoZXMsCisJCQkJCQkJCQlp bnQgKm51bWJhdGNoZXNfaW5tZW1vcnksCiAJCQkJCQkJCQlpbnQgKm51bV9za2V3X21jdnMp OwogZXh0ZXJuIGludAlFeGVjSGFzaEdldFNrZXdCdWNrZXQoSGFzaEpvaW5UYWJsZSBoYXNo dGFibGUsIHVpbnQzMiBoYXNodmFsdWUpOwogZXh0ZXJuIHZvaWQgRXhlY0hhc2hFc3RpbWF0 ZShIYXNoU3RhdGUgKm5vZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCmluZGV4IDE1OTBiNjQzOTIwLi5lYjhlYWVhODlhYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTI3NTUsNiArMjc1NSw3IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hJ bnN0cnVtZW50YXRpb24KIAlpbnQJCQluYnVja2V0c19vcmlnaW5hbDsJLyogcGxhbm5lZCBu dW1iZXIgb2YgYnVja2V0cyAqLwogCWludAkJCW5iYXRjaDsJCQkvKiBudW1iZXIgb2YgYmF0 Y2hlcyBhdCBlbmQgb2YgZXhlY3V0aW9uICovCiAJaW50CQkJbmJhdGNoX29yaWdpbmFsOwkv KiBwbGFubmVkIG51bWJlciBvZiBiYXRjaGVzICovCisJaW50CQkJbmJhdGNoX2lubWVtb3J5 OwkvKiBudW1iZXIgb2YgYmF0Y2hlcyBrZXB0IGluIG1lbW9yeSAqLwogCVNpemUJCXNwYWNl X3BlYWs7CQkvKiBwZWFrIG1lbW9yeSB1c2FnZSBpbiBieXRlcyAqLwogfSBIYXNoSW5zdHJ1 bWVudGF0aW9uOwogCi0tIAoyLjQ3LjEKCg== --------------j6Xx7r3m02HLS8n0tsdtFunI Content-Type: text/x-patch; charset=UTF-8; name="v20241231-single-spill-0001-Hash-join-with-a-single-spill.patch" Content-Disposition: attachment; filename*0="v20241231-single-spill-0001-Hash-join-with-a-single-spill.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NTE0MjgzN2VhZjQzOTY1MmZkOTFlMTY1ZjNkNGMzNjA3ZWE5OTg3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNzozNDo1OSArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQxMjMxLXNpbmdsZS1zcGlsbF0gSGFzaCBqb2luIHdpdGggYSBzaW5nbGUgc3BpbGwg ZmlsZQoKV2UgY2FuJ3QgdXNlIGFyYml0cmFyeSBudW1iZXIgb2YgYmF0Y2hlcyBpbiB0aGUg aGFzaCBqb2luLCBiZWNhdXNlIHRoYXQKY2FuIHVzZSBzdWJzdGFudGlhbCBtZW1vcnkgdXNl LCBpZ25vcmVkIGJ5IHRoZSBtZW1vcnkgbGltaXQuIEluc3RlYWQsCmRlY2lkZSBob3cgbWFu eSBiYXRjaGVzIHdlIGNhbiBrZWVwIGluIG1lbW9yeSwgYW5kIG9wZW4gZmlsZXMgb25seSBm b3IKdGhvc2UgYmF0Y2hlcywgYW5kIG9uZSAib3ZlcmZsb3ciIGZpbGUgZm9yIGFsbCBmdXR1 cmUgYmF0Y2hlcy4KClRoZW4gdXNlIHRoaXMgc3BpbGwgZmlsZSBhZnRlciAic3dpdGNoaW5n IiB0byB0aGUgZmlyc3QgYmF0Y2ggdGhhdCBpcwpub3QgaW4gbWVtb3J5LgoKTkI6IFRoaXMg YWxsb3dzIGVuZm9yY2luZyB0aGUgbWVtb3J5IGxpbWl0IHZlcnkgc3RyaWN0bHksIGJ1dCBp dCdzIHZlcnkKaW5lZmZpY2llbnQgYW5kIGNhdXNlcyBhIGxvdCBvZiB0ZW1wb3JhcnkgZmls ZSB0cmFmZmljLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAg fCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMgICAgICAgfCAyMDYg KysrKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVI YXNoam9pbi5jICAgfCAgNzYgKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyB8ICAgMiArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9oYXNoam9pbi5o ICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVIYXNoLmggICAgICAg fCAgIDcgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICB8ICAgMSAr CiA3IGZpbGVzIGNoYW5nZWQsIDI1MCBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYTIwMWVkMzA4MjQuLmFhM2ZiZWRhM2Rk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0zNDY2LDE5ICszNDY2LDIzIEBAIHNo b3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQog CQkJCQkJCQkgICBoaW5zdHJ1bWVudC5uYmF0Y2gsIGVzKTsKIAkJCUV4cGxhaW5Qcm9wZXJ0 eUludGVnZXIoIk9yaWdpbmFsIEhhc2ggQmF0Y2hlcyIsIE5VTEwsCiAJCQkJCQkJCSAgIGhp bnN0cnVtZW50Lm5iYXRjaF9vcmlnaW5hbCwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5SW50 ZWdlcigiSW4tTWVtb3J5IEhhc2ggQmF0Y2hlcyIsIE5VTEwsCisJCQkJCQkJCSAgIGhpbnN0 cnVtZW50Lm5iYXRjaF9vcmlnaW5hbCwgZXMpOwogCQkJRXhwbGFpblByb3BlcnR5VUludGVn ZXIoIlBlYWsgTWVtb3J5IFVzYWdlIiwgImtCIiwKIAkJCQkJCQkJCXNwYWNlUGVha0tiLCBl cyk7CiAJCX0KIAkJZWxzZSBpZiAoaGluc3RydW1lbnQubmJhdGNoX29yaWdpbmFsICE9IGhp bnN0cnVtZW50Lm5iYXRjaCB8fAorCQkJCSBoaW5zdHJ1bWVudC5uYmF0Y2hfaW5tZW1vcnkg IT0gaGluc3RydW1lbnQubmJhdGNoIHx8CiAJCQkJIGhpbnN0cnVtZW50Lm5idWNrZXRzX29y aWdpbmFsICE9IGhpbnN0cnVtZW50Lm5idWNrZXRzKQogCQl7CiAJCQlFeHBsYWluSW5kZW50 VGV4dChlcyk7CiAJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsCi0JCQkJCQkJICJCdWNr ZXRzOiAlZCAob3JpZ2luYWxseSAlZCkgIEJhdGNoZXM6ICVkIChvcmlnaW5hbGx5ICVkKSAg TWVtb3J5IFVzYWdlOiAiIFVJTlQ2NF9GT1JNQVQgImtCXG4iLAorCQkJCQkJCSAiQnVja2V0 czogJWQgKG9yaWdpbmFsbHkgJWQpICBCYXRjaGVzOiAlZCAob3JpZ2luYWxseSAlZCwgaW4t bWVtb3J5ICVkKSAgTWVtb3J5IFVzYWdlOiAiIFVJTlQ2NF9GT1JNQVQgImtCXG4iLAogCQkJ CQkJCSBoaW5zdHJ1bWVudC5uYnVja2V0cywKIAkJCQkJCQkgaGluc3RydW1lbnQubmJ1Y2tl dHNfb3JpZ2luYWwsCiAJCQkJCQkJIGhpbnN0cnVtZW50Lm5iYXRjaCwKIAkJCQkJCQkgaGlu c3RydW1lbnQubmJhdGNoX29yaWdpbmFsLAorCQkJCQkJCSBoaW5zdHJ1bWVudC5uYmF0Y2hf aW5tZW1vcnksCiAJCQkJCQkJIHNwYWNlUGVha0tiKTsKIAkJfQogCQllbHNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUhhc2guYwppbmRleCAzZTIyZDUwZTNhNC4uNTgwNjJhOGIyNTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUhhc2guYwpAQCAtODAsNiArODAsNyBAQCBzdGF0aWMgYm9vbCBF eGVjUGFyYWxsZWxIYXNoVHVwbGVQcmVhbGxvYyhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSwK IHN0YXRpYyB2b2lkIEV4ZWNQYXJhbGxlbEhhc2hNZXJnZUNvdW50ZXJzKEhhc2hKb2luVGFi bGUgaGFzaHRhYmxlKTsKIHN0YXRpYyB2b2lkIEV4ZWNQYXJhbGxlbEhhc2hDbG9zZUJhdGNo QWNjZXNzb3JzKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKIAorc3RhdGljIHZvaWQgRXhl Y0hhc2hVcGRhdGVTcGFjZVBlYWsoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUpOwogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKgkJRXhlY0hhc2gKQEAgLTE5OSwxMCArMjAwLDggQEAgTXVsdGlFeGVj UHJpdmF0ZUhhc2goSGFzaFN0YXRlICpub2RlKQogCWlmIChoYXNodGFibGUtPm5idWNrZXRz ICE9IGhhc2h0YWJsZS0+bmJ1Y2tldHNfb3B0aW1hbCkKIAkJRXhlY0hhc2hJbmNyZWFzZU51 bUJ1Y2tldHMoaGFzaHRhYmxlKTsKIAotCS8qIEFjY291bnQgZm9yIHRoZSBidWNrZXRzIGlu IHNwYWNlVXNlZCAocmVwb3J0ZWQgaW4gRVhQTEFJTiBBTkFMWVpFKSAqLwotCWhhc2h0YWJs ZS0+c3BhY2VVc2VkICs9IGhhc2h0YWJsZS0+bmJ1Y2tldHMgKiBzaXplb2YoSGFzaEpvaW5U dXBsZSk7Ci0JaWYgKGhhc2h0YWJsZS0+c3BhY2VVc2VkID4gaGFzaHRhYmxlLT5zcGFjZVBl YWspCi0JCWhhc2h0YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFjZVVzZWQ7CisJ LyogcmVmcmVzaCBpbmZvIGFib3V0IHBlYWsgdXNlZCBtZW1vcnkgKi8KKwlFeGVjSGFzaFVw ZGF0ZVNwYWNlUGVhayhoYXNodGFibGUpOwogCiAJaGFzaHRhYmxlLT5wYXJ0aWFsVHVwbGVz ID0gaGFzaHRhYmxlLT50b3RhbFR1cGxlczsKIH0KQEAgLTQ1MSw2ICs0NTAsNyBAQCBFeGVj SGFzaFRhYmxlQ3JlYXRlKEhhc2hTdGF0ZSAqc3RhdGUpCiAJc2l6ZV90CQlzcGFjZV9hbGxv d2VkOwogCWludAkJCW5idWNrZXRzOwogCWludAkJCW5iYXRjaDsKKwlpbnQJCQluYmF0Y2hf aW5tZW1vcnk7CiAJZG91YmxlCQlyb3dzOwogCWludAkJCW51bV9za2V3X21jdnM7CiAJaW50 CQkJbG9nMl9uYnVja2V0czsKQEAgLTQ3Nyw3ICs0NzcsOCBAQCBFeGVjSGFzaFRhYmxlQ3Jl YXRlKEhhc2hTdGF0ZSAqc3RhdGUpCiAJCQkJCQkJc3RhdGUtPnBhcmFsbGVsX3N0YXRlICE9 IE5VTEwgPwogCQkJCQkJCXN0YXRlLT5wYXJhbGxlbF9zdGF0ZS0+bnBhcnRpY2lwYW50cyAt IDEgOiAwLAogCQkJCQkJCSZzcGFjZV9hbGxvd2VkLAotCQkJCQkJCSZuYnVja2V0cywgJm5i YXRjaCwgJm51bV9za2V3X21jdnMpOworCQkJCQkJCSZuYnVja2V0cywgJm5iYXRjaCwgJm5i YXRjaF9pbm1lbW9yeSwKKwkJCQkJCQkmbnVtX3NrZXdfbWN2cyk7CiAKIAkvKiBuYnVja2V0 cyBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwogCWxvZzJfbmJ1Y2tldHMgPSBteV9sb2cyKG5i dWNrZXRzKTsKQEAgLTUwMyw2ICs1MDQsNyBAQCBFeGVjSGFzaFRhYmxlQ3JlYXRlKEhhc2hT dGF0ZSAqc3RhdGUpCiAJaGFzaHRhYmxlLT5uU2tld0J1Y2tldHMgPSAwOwogCWhhc2h0YWJs ZS0+c2tld0J1Y2tldE51bXMgPSBOVUxMOwogCWhhc2h0YWJsZS0+bmJhdGNoID0gbmJhdGNo OworCWhhc2h0YWJsZS0+bmJhdGNoX2lubWVtb3J5ID0gbmJhdGNoX2lubWVtb3J5OwogCWhh c2h0YWJsZS0+Y3VyYmF0Y2ggPSAwOwogCWhhc2h0YWJsZS0+bmJhdGNoX29yaWdpbmFsID0g bmJhdGNoOwogCWhhc2h0YWJsZS0+bmJhdGNoX291dHN0YXJ0ID0gbmJhdGNoOwpAQCAtNTEy LDYgKzUxNCw4IEBAIEV4ZWNIYXNoVGFibGVDcmVhdGUoSGFzaFN0YXRlICpzdGF0ZSkKIAlo YXNodGFibGUtPnNrZXdUdXBsZXMgPSAwOwogCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUg PSBOVUxMOwogCWhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGUgPSBOVUxMOworCWhhc2h0YWJs ZS0+aW5uZXJPdmVyZmxvd0ZpbGUgPSBOVUxMOworCWhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxv d0ZpbGUgPSBOVUxMOwogCWhhc2h0YWJsZS0+c3BhY2VVc2VkID0gMDsKIAloYXNodGFibGUt PnNwYWNlUGVhayA9IDA7CiAJaGFzaHRhYmxlLT5zcGFjZUFsbG93ZWQgPSBzcGFjZV9hbGxv d2VkOwpAQCAtNTUzLDE0ICs1NTcsMTYgQEAgRXhlY0hhc2hUYWJsZUNyZWF0ZShIYXNoU3Rh dGUgKnN0YXRlKQogCXsKIAkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAKKwkJaW50CWNudCA9 IE1pbihuYmF0Y2gsIG5iYXRjaF9pbm1lbW9yeSk7CisKIAkJLyoKIAkJICogYWxsb2NhdGUg YW5kIGluaXRpYWxpemUgdGhlIGZpbGUgYXJyYXlzIGluIGhhc2hDeHQgKG5vdCBuZWVkZWQg Zm9yCiAJCSAqIHBhcmFsbGVsIGNhc2Ugd2hpY2ggdXNlcyBzaGFyZWQgdHVwbGVzdG9yZXMg aW5zdGVhZCBvZiByYXcgZmlsZXMpCiAJCSAqLwogCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oaGFzaHRhYmxlLT5zcGlsbEN4dCk7CiAKLQkJaGFzaHRhYmxlLT5pbm5lckJh dGNoRmlsZSA9IHBhbGxvYzBfYXJyYXkoQnVmRmlsZSAqLCBuYmF0Y2gpOwotCQloYXNodGFi bGUtPm91dGVyQmF0Y2hGaWxlID0gcGFsbG9jMF9hcnJheShCdWZGaWxlICosIG5iYXRjaCk7 CisJCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUgPSBwYWxsb2MwX2FycmF5KEJ1ZkZpbGUg KiwgY250KTsKKwkJaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IHBhbGxvYzBfYXJyYXko QnVmRmlsZSAqLCBjbnQpOwogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwog CkBAIC02NjEsNiArNjY3LDcgQEAgRXhlY0Nob29zZUhhc2hUYWJsZVNpemUoZG91YmxlIG50 dXBsZXMsIGludCB0dXB3aWR0aCwgYm9vbCB1c2Vza2V3LAogCQkJCQkJc2l6ZV90ICpzcGFj ZV9hbGxvd2VkLAogCQkJCQkJaW50ICpudW1idWNrZXRzLAogCQkJCQkJaW50ICpudW1iYXRj aGVzLAorCQkJCQkJaW50ICpudW1iYXRjaGVzX2lubWVtb3J5LAogCQkJCQkJaW50ICpudW1f c2tld19tY3ZzKQogewogCWludAkJCXR1cHNpemU7CkBAIC02NjksNiArNjc2LDcgQEAgRXhl Y0Nob29zZUhhc2hUYWJsZVNpemUoZG91YmxlIG50dXBsZXMsIGludCB0dXB3aWR0aCwgYm9v bCB1c2Vza2V3LAogCXNpemVfdAkJYnVja2V0X2J5dGVzOwogCXNpemVfdAkJbWF4X3BvaW50 ZXJzOwogCWludAkJCW5iYXRjaCA9IDE7CisJaW50CQkJbmJhdGNoX2lubWVtb3J5ID0gMTsK IAlpbnQJCQluYnVja2V0czsKIAlkb3VibGUJCWRidWNrZXRzOwogCkBAIC04MTEsNiArODE5 LDcgQEAgRXhlY0Nob29zZUhhc2hUYWJsZVNpemUoZG91YmxlIG50dXBsZXMsIGludCB0dXB3 aWR0aCwgYm9vbCB1c2Vza2V3LAogCQkJCQkJCQkJc3BhY2VfYWxsb3dlZCwKIAkJCQkJCQkJ CW51bWJ1Y2tldHMsCiAJCQkJCQkJCQludW1iYXRjaGVzLAorCQkJCQkJCQkJbnVtYmF0Y2hl c19pbm1lbW9yeSwKIAkJCQkJCQkJCW51bV9za2V3X21jdnMpOwogCQkJcmV0dXJuOwogCQl9 CkBAIC04NDgsMTEgKzg1NywyMiBAQCBFeGVjQ2hvb3NlSGFzaFRhYmxlU2l6ZShkb3VibGUg bnR1cGxlcywgaW50IHR1cHdpZHRoLCBib29sIHVzZXNrZXcsCiAJCW5iYXRjaCA9IHBnX25l eHRwb3dlcjJfMzIoTWF4KDIsIG1pbmJhdGNoKSk7CiAJfQogCisJLyoKKwkgKiBTZWUgaG93 IG1hbnkgYmF0Y2hlcyB3ZSBjYW4gZml0IGludG8gbWVtb3J5IChkcml2ZW4gbW9zdGx5IGJ5 IHNpemUKKwkgKiBvZiBCdWZGaWxlLCB3aXRoIFBHQWxpZ25lZEJsb2NrIGJlaW5nIHRoZSBs YXJnZXN0IHBhcnQgb2YgdGhhdCkuCisJICogV2UgbmVlZCBvbmUgQnVmRmlsZSBmb3IgaW5u ZXIgYW5kIG91dGVyIHNpZGUsIHNvIHdlIGNvdW50IGl0IHR3aWNlCisJICogZm9yIGVhY2gg YmF0Y2gsIGFuZCB3ZSBzdG9wIG9uY2Ugd2UgZXhjZWVkICh3b3JrX21lbS8yKS4KKwkgKi8K Kwl3aGlsZSAoKG5iYXRjaF9pbm1lbW9yeSAqIDIpICogc2l6ZW9mKFBHQWxpZ25lZEJsb2Nr KSAqIDIKKwkJCTw9ICh3b3JrX21lbSAqIDEwMjRMIC8gMikpCisJCW5iYXRjaF9pbm1lbW9y eSAqPSAyOworCiAJQXNzZXJ0KG5idWNrZXRzID4gMCk7CiAJQXNzZXJ0KG5iYXRjaCA+IDAp OwogCiAJKm51bWJ1Y2tldHMgPSBuYnVja2V0czsKIAkqbnVtYmF0Y2hlcyA9IG5iYXRjaDsK KwkqbnVtYmF0Y2hlc19pbm1lbW9yeSA9IG5iYXRjaF9pbm1lbW9yeTsKIH0KIAogCkBAIC04 NzQsMTMgKzg5NCwyMSBAQCBFeGVjSGFzaFRhYmxlRGVzdHJveShIYXNoSm9pblRhYmxlIGhh c2h0YWJsZSkKIAkgKi8KIAlpZiAoaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSAhPSBOVUxM KQogCXsKLQkJZm9yIChpID0gMTsgaSA8IGhhc2h0YWJsZS0+bmJhdGNoOyBpKyspCisJCWlu dCBuYmF0Y2ggPSBNaW4oaGFzaHRhYmxlLT5uYmF0Y2gsIGhhc2h0YWJsZS0+bmJhdGNoX2lu bWVtb3J5KTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbmJhdGNoOyBpKyspCiAJCXsKIAkJCWlm IChoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2ldKQogCQkJCUJ1ZkZpbGVDbG9zZShoYXNo dGFibGUtPmlubmVyQmF0Y2hGaWxlW2ldKTsKIAkJCWlmIChoYXNodGFibGUtPm91dGVyQmF0 Y2hGaWxlW2ldKQogCQkJCUJ1ZkZpbGVDbG9zZShoYXNodGFibGUtPm91dGVyQmF0Y2hGaWxl W2ldKTsKIAkJfQorCisJCWlmIChoYXNodGFibGUtPmlubmVyT3ZlcmZsb3dGaWxlKQorCQkJ QnVmRmlsZUNsb3NlKGhhc2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGUpOworCisJCWlmICho YXNodGFibGUtPm91dGVyT3ZlcmZsb3dGaWxlKQorCQkJQnVmRmlsZUNsb3NlKGhhc2h0YWJs ZS0+b3V0ZXJPdmVyZmxvd0ZpbGUpOwogCX0KIAogCS8qIFJlbGVhc2Ugd29ya2luZyBtZW1v cnkgKGJhdGNoQ3h0IGlzIGEgY2hpbGQsIHNvIGl0IGdvZXMgYXdheSB0b28pICovCkBAIC05 MjMsMTEgKzk1MSwxMyBAQCBFeGVjSGFzaEluY3JlYXNlTnVtQmF0Y2hlcyhIYXNoSm9pblRh YmxlIGhhc2h0YWJsZSkKIAogCWlmIChoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlID09IE5V TEwpCiAJeworCQlpbnQgbmJhdGNoX3RtcCA9IE1pbihuYmF0Y2gsIGhhc2h0YWJsZS0+bmJh dGNoX2lubWVtb3J5KTsKKwogCQlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhoYXNodGFibGUtPnNwaWxsQ3h0KTsKIAogCQkvKiB3ZSBoYWQgbm8gZmls ZSBhcnJheXMgYmVmb3JlICovCi0JCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUgPSBwYWxs b2MwX2FycmF5KEJ1ZkZpbGUgKiwgbmJhdGNoKTsKLQkJaGFzaHRhYmxlLT5vdXRlckJhdGNo RmlsZSA9IHBhbGxvYzBfYXJyYXkoQnVmRmlsZSAqLCBuYmF0Y2gpOworCQloYXNodGFibGUt PmlubmVyQmF0Y2hGaWxlID0gcGFsbG9jMF9hcnJheShCdWZGaWxlICosIG5iYXRjaF90bXAp OworCQloYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlID0gcGFsbG9jMF9hcnJheShCdWZGaWxl ICosIG5iYXRjaF90bXApOwogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwog CkBAIC05MzYsOSArOTY2LDEyIEBAIEV4ZWNIYXNoSW5jcmVhc2VOdW1CYXRjaGVzKEhhc2hK b2luVGFibGUgaGFzaHRhYmxlKQogCX0KIAllbHNlCiAJeworCQlpbnQgbmJhdGNoX3RtcCA9 IE1pbihuYmF0Y2gsIGhhc2h0YWJsZS0+bmJhdGNoX2lubWVtb3J5KTsKKwkJaW50IG9sZG5i YXRjaF90bXAgPSBNaW4ob2xkbmJhdGNoLCBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7 CisKIAkJLyogZW5sYXJnZSBhcnJheXMgYW5kIHplcm8gb3V0IGFkZGVkIGVudHJpZXMgKi8K LQkJaGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSA9IHJlcGFsbG9jMF9hcnJheShoYXNodGFi bGUtPmlubmVyQmF0Y2hGaWxlLCBCdWZGaWxlICosIG9sZG5iYXRjaCwgbmJhdGNoKTsKLQkJ aGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZSA9IHJlcGFsbG9jMF9hcnJheShoYXNodGFibGUt Pm91dGVyQmF0Y2hGaWxlLCBCdWZGaWxlICosIG9sZG5iYXRjaCwgbmJhdGNoKTsKKwkJaGFz aHRhYmxlLT5pbm5lckJhdGNoRmlsZSA9IHJlcGFsbG9jMF9hcnJheShoYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlLCBCdWZGaWxlICosIG9sZG5iYXRjaF90bXAsIG5iYXRjaF90bXApOwor CQloYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlID0gcmVwYWxsb2MwX2FycmF5KGhhc2h0YWJs ZS0+b3V0ZXJCYXRjaEZpbGUsIEJ1ZkZpbGUgKiwgb2xkbmJhdGNoX3RtcCwgbmJhdGNoX3Rt cCk7CiAJfQogCiAJaGFzaHRhYmxlLT5uYmF0Y2ggPSBuYmF0Y2g7CkBAIC0xMDA4LDExICsx MDQxLDE4IEBAIEV4ZWNIYXNoSW5jcmVhc2VOdW1CYXRjaGVzKEhhc2hKb2luVGFibGUgaGFz aHRhYmxlKQogCQkJfQogCQkJZWxzZQogCQkJeworCQkJCUJ1ZkZpbGUgKipiYXRjaEZpbGU7 CisKIAkJCQkvKiBkdW1wIGl0IG91dCAqLwogCQkJCUFzc2VydChiYXRjaG5vID4gY3VyYmF0 Y2gpOworCisJCQkJYmF0Y2hGaWxlID0gRXhlY0hhc2hHZXRCYXRjaEZpbGUoaGFzaHRhYmxl LCBiYXRjaG5vLAorCQkJCQkJCQkJCQkJIGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUsCisJ CQkJCQkJCQkJCQkgJmhhc2h0YWJsZS0+aW5uZXJPdmVyZmxvd0ZpbGUpOworCiAJCQkJRXhl Y0hhc2hKb2luU2F2ZVR1cGxlKEhKVFVQTEVfTUlOVFVQTEUoaGFzaFR1cGxlKSwKIAkJCQkJ CQkJCSAgaGFzaFR1cGxlLT5oYXNodmFsdWUsCi0JCQkJCQkJCQkgICZoYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlW2JhdGNobm9dLAorCQkJCQkJCQkJICBiYXRjaEZpbGUsCiAJCQkJCQkJ CQkgIGhhc2h0YWJsZSk7CiAKIAkJCQloYXNodGFibGUtPnNwYWNlVXNlZCAtPSBoYXNoVHVw bGVTaXplOwpAQCAtMTY3MywyMiArMTcxMywzMyBAQCBFeGVjSGFzaFRhYmxlSW5zZXJ0KEhh c2hKb2luVGFibGUgaGFzaHRhYmxlLAogCiAJCS8qIEFjY291bnQgZm9yIHNwYWNlIHVzZWQs IGFuZCBiYWNrIG9mZiBpZiB3ZSd2ZSB1c2VkIHRvbyBtdWNoICovCiAJCWhhc2h0YWJsZS0+ c3BhY2VVc2VkICs9IGhhc2hUdXBsZVNpemU7Ci0JCWlmIChoYXNodGFibGUtPnNwYWNlVXNl ZCA+IGhhc2h0YWJsZS0+c3BhY2VQZWFrKQotCQkJaGFzaHRhYmxlLT5zcGFjZVBlYWsgPSBo YXNodGFibGUtPnNwYWNlVXNlZDsKKworCQkvKiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayB1 c2VkIG1lbW9yeSAqLworCQlFeGVjSGFzaFVwZGF0ZVNwYWNlUGVhayhoYXNodGFibGUpOwor CisJCS8qIENvbnNpZGVyIGluY3JlYXNpbmcgbnVtYmVyIG9mIGJhdGNoZXMgaWYgd2UgZmls bGVkIHdvcmtfbWVtLiAqLwogCQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgKwotCQkJaGFz aHRhYmxlLT5uYnVja2V0c19vcHRpbWFsICogc2l6ZW9mKEhhc2hKb2luVHVwbGUpCisJCQlo YXNodGFibGUtPm5idWNrZXRzX29wdGltYWwgKiBzaXplb2YoSGFzaEpvaW5UdXBsZSkgKwor CQkJTWluKGhhc2h0YWJsZS0+bmJhdGNoLCBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSkg KiBzaXplb2YoUEdBbGlnbmVkQmxvY2spICogMgkvKiBpbm5lciArIG91dGVyICovCiAJCQk+ IGhhc2h0YWJsZS0+c3BhY2VBbGxvd2VkKQogCQkJRXhlY0hhc2hJbmNyZWFzZU51bUJhdGNo ZXMoaGFzaHRhYmxlKTsKIAl9CiAJZWxzZQogCXsKKwkJQnVmRmlsZSAqKmJhdGNoRmlsZTsK KwogCQkvKgogCQkgKiBwdXQgdGhlIHR1cGxlIGludG8gYSB0ZW1wIGZpbGUgZm9yIGxhdGVy IGJhdGNoZXMKIAkJICovCiAJCUFzc2VydChiYXRjaG5vID4gaGFzaHRhYmxlLT5jdXJiYXRj aCk7CisKKwkJYmF0Y2hGaWxlID0gRXhlY0hhc2hHZXRCYXRjaEZpbGUoaGFzaHRhYmxlLCBi YXRjaG5vLAorCQkJCQkJCQkJCSBoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlLAorCQkJCQkJ CQkJCSAmaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZSk7CisKIAkJRXhlY0hhc2hKb2lu U2F2ZVR1cGxlKHR1cGxlLAogCQkJCQkJCSAgaGFzaHZhbHVlLAotCQkJCQkJCSAgJmhhc2h0 YWJsZS0+aW5uZXJCYXRjaEZpbGVbYmF0Y2hub10sCisJCQkJCQkJICBiYXRjaEZpbGUsCiAJ CQkJCQkJICBoYXNodGFibGUpOwogCX0KIApAQCAtMTg0Myw2ICsxODk0LDEwMCBAQCBFeGVj SGFzaEdldEJ1Y2tldEFuZEJhdGNoKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLAogCX0KIH0K IAoraW50CitFeGVjSGFzaEdldEJhdGNoSW5kZXgoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUs IGludCBiYXRjaG5vKQoreworCWludAlzbGljZSwKKwkJY3Vyc2xpY2U7CisKKwlpZiAoaGFz aHRhYmxlLT5uYmF0Y2ggPD0gaGFzaHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnkpCisJCXJldHVy biBiYXRjaG5vOworCisJc2xpY2UgPSBiYXRjaG5vIC8gaGFzaHRhYmxlLT5uYmF0Y2hfaW5t ZW1vcnk7CisJY3Vyc2xpY2UgPSBoYXNodGFibGUtPmN1cmJhdGNoIC8gaGFzaHRhYmxlLT5u YmF0Y2hfaW5tZW1vcnk7CisKKwkvKiBzbGljZXMgY2FuJ3QgZ28gYmFja3dhcmRzICovCisJ QXNzZXJ0KHNsaWNlID49IGN1cnNsaWNlKTsKKworCS8qIG92ZXJmbG93IHNsaWNlICovCisJ aWYgKHNsaWNlID4gY3Vyc2xpY2UpCisJCXJldHVybiAtMTsKKworCS8qIGN1cnJlbnQgc2xp Y2UsIGNvbXB1dGUgaW5kZXggaW4gdGhlIGN1cnJlbnQgYXJyYXkgKi8KKwlyZXR1cm4gKGJh dGNobm8gJSBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSk7Cit9CisKK0J1ZkZpbGUgKioK K0V4ZWNIYXNoR2V0QmF0Y2hGaWxlKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLCBpbnQgYmF0 Y2hubywKKwkJCQkJIEJ1ZkZpbGUgKipiYXRjaEZpbGVzLCBCdWZGaWxlICoqb3ZlcmZsb3dG aWxlKQoreworCWludAkJaWR4ID0gRXhlY0hhc2hHZXRCYXRjaEluZGV4KGhhc2h0YWJsZSwg YmF0Y2hubyk7CisKKwlpZiAoaWR4ID09IC0xKQorCQlyZXR1cm4gb3ZlcmZsb3dGaWxlOwor CisJcmV0dXJuICZiYXRjaEZpbGVzW2lkeF07Cit9CisKK3ZvaWQKK0V4ZWNIYXNoU3dpdGNo VG9OZXh0QmF0Y2hTbGljZShIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSkKK3sKKwltZW1zZXQo aGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZSwgMCwKKwkJICAgaGFzaHRhYmxlLT5uYmF0Y2hf aW5tZW1vcnkgKiBzaXplb2YoQnVmRmlsZSAqKSk7CisKKwloYXNodGFibGUtPmlubmVyQmF0 Y2hGaWxlWzBdID0gaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZTsKKwloYXNodGFibGUt PmlubmVyT3ZlcmZsb3dGaWxlID0gTlVMTDsKKworCW1lbXNldChoYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlLCAwLAorCQkgICBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9yeSAqIHNpemVv ZihCdWZGaWxlICopKTsKKworCWhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbMF0gPSBoYXNo dGFibGUtPm91dGVyT3ZlcmZsb3dGaWxlOworCWhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxvd0Zp bGUgPSBOVUxMOworfQorCitpbnQKK0V4ZWNIYXNoU3dpdGNoVG9OZXh0QmF0Y2goSGFzaEpv aW5UYWJsZSBoYXNodGFibGUpCit7CisJaW50CQliYXRjaGlkeDsKKworCWhhc2h0YWJsZS0+ Y3VyYmF0Y2grKzsKKworCS8qIHNlZSBpZiB3ZSBza2lwcGVkIHRvIHRoZSBuZXh0IGJhdGNo IHNsaWNlICovCisJYmF0Y2hpZHggPSBFeGVjSGFzaEdldEJhdGNoSW5kZXgoaGFzaHRhYmxl LCBoYXNodGFibGUtPmN1cmJhdGNoKTsKKworCS8qIENhbid0IGJlIC0xLCBjdXJyZW50IGJh dGNoIGlzIGluIHRoZSBjdXJyZW50IHNsaWNlIGJ5IGRlZmluaXRpb24uICovCisJQXNzZXJ0 KGJhdGNoaWR4ID49IDAgJiYgYmF0Y2hpZHggPCBoYXNodGFibGUtPm5iYXRjaF9pbm1lbW9y eSk7CisKKwkvKgorCSAqIElmIHdlIHNraXBwZWQgdG8gdGhlIG5leHQgc2xpY2Ugb2YgYmF0 Y2hlcywgcmVzZXQgdGhlIGFycmF5IG9mIGZpbGVzCisJICogYW5kIHVzZSB0aGUgb3ZlcmZs b3cgZmlsZSBhcyB0aGUgZmlyc3QgYmF0Y2guCisJICovCisJaWYgKGJhdGNoaWR4ID09IDAp CisJCUV4ZWNIYXNoU3dpdGNoVG9OZXh0QmF0Y2hTbGljZShoYXNodGFibGUpOworCisJcmV0 dXJuIGhhc2h0YWJsZS0+Y3VyYmF0Y2g7Cit9CisKK3N0YXRpYyB2b2lkCitFeGVjSGFzaFVw ZGF0ZVNwYWNlUGVhayhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSkKK3sKKwlTaXplCXNwYWNl VXNlZCA9IGhhc2h0YWJsZS0+c3BhY2VVc2VkOworCisJLyogQWNjb3VudCBmb3IgdGhlIGJ1 Y2tldHMgaW4gc3BhY2VVc2VkIChyZXBvcnRlZCBpbiBFWFBMQUlOIEFOQUxZWkUpICovCisJ c3BhY2VVc2VkICs9IGhhc2h0YWJsZS0+bmJ1Y2tldHMgKiBzaXplb2YoSGFzaEpvaW5UdXBs ZSk7CisKKwkvKiBBY2NvdW50IGZvciBtZW1vcnkgdXNlZCBmb3IgYmF0Y2ggZmlsZXMgKGlu bmVyICsgb3V0ZXIpICovCisJc3BhY2VVc2VkICs9IE1pbihoYXNodGFibGUtPm5iYXRjaCwg aGFzaHRhYmxlLT5uYmF0Y2hfaW5tZW1vcnkpICoKKwkJCQkgc2l6ZW9mKFBHQWxpZ25lZEJs b2NrKSAqIDI7CisKKwkvKiBBY2NvdW50IGZvciBzbGljZSBmaWxlcyAoaW5uZXIgKyBvdXRl cikgKi8KKwlzcGFjZVVzZWQgKz0gKGhhc2h0YWJsZS0+bmJhdGNoIC8gaGFzaHRhYmxlLT5u YmF0Y2hfaW5tZW1vcnkpICoKKwkJCQkgc2l6ZW9mKFBHQWxpZ25lZEJsb2NrKSAqIDI7CisK KwlpZiAoc3BhY2VVc2VkID4gaGFzaHRhYmxlLT5zcGFjZVBlYWspCisJCWhhc2h0YWJsZS0+ c3BhY2VQZWFrID0gc3BhY2VVc2VkOworfQorCiAvKgogICogRXhlY1NjYW5IYXNoQnVja2V0 CiAgKgkJc2NhbiBhIGhhc2ggYnVja2V0IGZvciBtYXRjaGVzIHRvIHRoZSBjdXJyZW50IG91 dGVyIHR1cGxlCkBAIC0yMzQ5LDggKzI0OTQsOSBAQCBFeGVjSGFzaEJ1aWxkU2tld0hhc2go SGFzaFN0YXRlICpoYXNoc3RhdGUsIEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLAogCQkJKyBt Y3ZzVG9Vc2UgKiBzaXplb2YoaW50KTsKIAkJaGFzaHRhYmxlLT5zcGFjZVVzZWRTa2V3ICs9 IG5idWNrZXRzICogc2l6ZW9mKEhhc2hTa2V3QnVja2V0ICopCiAJCQkrIG1jdnNUb1VzZSAq IHNpemVvZihpbnQpOwotCQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgPiBoYXNodGFibGUt PnNwYWNlUGVhaykKLQkJCWhhc2h0YWJsZS0+c3BhY2VQZWFrID0gaGFzaHRhYmxlLT5zcGFj ZVVzZWQ7CisKKwkJLyogcmVmcmVzaCBpbmZvIGFib3V0IHBlYWsgdXNlZCBtZW1vcnkgKi8K KwkJRXhlY0hhc2hVcGRhdGVTcGFjZVBlYWsoaGFzaHRhYmxlKTsKIAogCQkvKgogCQkgKiBD cmVhdGUgYSBza2V3IGJ1Y2tldCBmb3IgZWFjaCBNQ1YgaGFzaCB2YWx1ZS4KQEAgLTIzOTks OCArMjU0NSw5IEBAIEV4ZWNIYXNoQnVpbGRTa2V3SGFzaChIYXNoU3RhdGUgKmhhc2hzdGF0 ZSwgSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsCiAJCQloYXNodGFibGUtPm5Ta2V3QnVja2V0 cysrOwogCQkJaGFzaHRhYmxlLT5zcGFjZVVzZWQgKz0gU0tFV19CVUNLRVRfT1ZFUkhFQUQ7 CiAJCQloYXNodGFibGUtPnNwYWNlVXNlZFNrZXcgKz0gU0tFV19CVUNLRVRfT1ZFUkhFQUQ7 Ci0JCQlpZiAoaGFzaHRhYmxlLT5zcGFjZVVzZWQgPiBoYXNodGFibGUtPnNwYWNlUGVhaykK LQkJCQloYXNodGFibGUtPnNwYWNlUGVhayA9IGhhc2h0YWJsZS0+c3BhY2VVc2VkOworCisJ CQkvKiByZWZyZXNoIGluZm8gYWJvdXQgcGVhayB1c2VkIG1lbW9yeSAqLworCQkJRXhlY0hh c2hVcGRhdGVTcGFjZVBlYWsoaGFzaHRhYmxlKTsKIAkJfQogCiAJCWZyZWVfYXR0c3RhdHNz bG90KCZzc2xvdCk7CkBAIC0yNDg5LDggKzI2MzYsMTAgQEAgRXhlY0hhc2hTa2V3VGFibGVJ bnNlcnQoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsCiAJLyogQWNjb3VudCBmb3Igc3BhY2Ug dXNlZCwgYW5kIGJhY2sgb2ZmIGlmIHdlJ3ZlIHVzZWQgdG9vIG11Y2ggKi8KIAloYXNodGFi bGUtPnNwYWNlVXNlZCArPSBoYXNoVHVwbGVTaXplOwogCWhhc2h0YWJsZS0+c3BhY2VVc2Vk U2tldyArPSBoYXNoVHVwbGVTaXplOwotCWlmIChoYXNodGFibGUtPnNwYWNlVXNlZCA+IGhh c2h0YWJsZS0+c3BhY2VQZWFrKQotCQloYXNodGFibGUtPnNwYWNlUGVhayA9IGhhc2h0YWJs ZS0+c3BhY2VVc2VkOworCisJLyogcmVmcmVzaCBpbmZvIGFib3V0IHBlYWsgdXNlZCBtZW1v cnkgKi8KKwlFeGVjSGFzaFVwZGF0ZVNwYWNlUGVhayhoYXNodGFibGUpOworCiAJd2hpbGUg KGhhc2h0YWJsZS0+c3BhY2VVc2VkU2tldyA+IGhhc2h0YWJsZS0+c3BhY2VBbGxvd2VkU2tl dykKIAkJRXhlY0hhc2hSZW1vdmVOZXh0U2tld0J1Y2tldChoYXNodGFibGUpOwogCkBAIC0y NTY5LDEwICsyNzE4LDE3IEBAIEV4ZWNIYXNoUmVtb3ZlTmV4dFNrZXdCdWNrZXQoSGFzaEpv aW5UYWJsZSBoYXNodGFibGUpCiAJCX0KIAkJZWxzZQogCQl7CisJCQlCdWZGaWxlICoqYmF0 Y2hGaWxlOworCiAJCQkvKiBQdXQgdGhlIHR1cGxlIGludG8gYSB0ZW1wIGZpbGUgZm9yIGxh dGVyIGJhdGNoZXMgKi8KIAkJCUFzc2VydChiYXRjaG5vID4gaGFzaHRhYmxlLT5jdXJiYXRj aCk7CisKKwkJCWJhdGNoRmlsZSA9IEV4ZWNIYXNoR2V0QmF0Y2hGaWxlKGhhc2h0YWJsZSwg YmF0Y2hubywKKwkJCQkJCQkJCQkJIGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGUsCisJCQkJ CQkJCQkJCSAmaGFzaHRhYmxlLT5pbm5lck92ZXJmbG93RmlsZSk7CisKIAkJCUV4ZWNIYXNo Sm9pblNhdmVUdXBsZSh0dXBsZSwgaGFzaHZhbHVlLAotCQkJCQkJCQkgICZoYXNodGFibGUt PmlubmVyQmF0Y2hGaWxlW2JhdGNobm9dLAorCQkJCQkJCQkgIGJhdGNoRmlsZSwKIAkJCQkJ CQkJICBoYXNodGFibGUpOwogCQkJcGZyZWUoaGFzaFR1cGxlKTsKIAkJCWhhc2h0YWJsZS0+ c3BhY2VVc2VkIC09IHR1cGxlU2l6ZTsKQEAgLTI3NTAsNiArMjkwNiw4IEBAIEV4ZWNIYXNo QWNjdW1JbnN0cnVtZW50YXRpb24oSGFzaEluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwK IAkJCQkJCQkgaGFzaHRhYmxlLT5uYmF0Y2gpOwogCWluc3RydW1lbnQtPm5iYXRjaF9vcmln aW5hbCA9IE1heChpbnN0cnVtZW50LT5uYmF0Y2hfb3JpZ2luYWwsCiAJCQkJCQkJCQkgIGhh c2h0YWJsZS0+bmJhdGNoX29yaWdpbmFsKTsKKwlpbnN0cnVtZW50LT5uYmF0Y2hfaW5tZW1v cnkgPSBNaW4oaGFzaHRhYmxlLT5uYmF0Y2gsCisJCQkJCQkJCQkgIGhhc2h0YWJsZS0+bmJh dGNoX2lubWVtb3J5KTsKIAlpbnN0cnVtZW50LT5zcGFjZV9wZWFrID0gTWF4KGluc3RydW1l bnQtPnNwYWNlX3BlYWssCiAJCQkJCQkJCSBoYXNodGFibGUtPnNwYWNlUGVhayk7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaGpvaW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jCmluZGV4IGVhMDA0NWJjMGYzLi4yZjVk OTQ2NTNlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2lu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKQEAgLTQ4MSw2 ICs0ODEsNyBAQCBFeGVjSGFzaEpvaW5JbXBsKFBsYW5TdGF0ZSAqcHN0YXRlLCBib29sIHBh cmFsbGVsKQogCQkJCWlmIChiYXRjaG5vICE9IGhhc2h0YWJsZS0+Y3VyYmF0Y2ggJiYKIAkJ CQkJbm9kZS0+aGpfQ3VyU2tld0J1Y2tldE5vID09IElOVkFMSURfU0tFV19CVUNLRVRfTk8p CiAJCQkJeworCQkJCQlCdWZGaWxlCSAgKipiYXRjaEZpbGU7CiAJCQkJCWJvb2wJCXNob3Vs ZEZyZWU7CiAJCQkJCU1pbmltYWxUdXBsZSBtaW50dXBsZSA9IEV4ZWNGZXRjaFNsb3RNaW5p bWFsVHVwbGUob3V0ZXJUdXBsZVNsb3QsCiAJCQkJCQkJCQkJCQkJCQkJCSAgJnNob3VsZEZy ZWUpOwpAQCAtNDkxLDggKzQ5MiwxMyBAQCBFeGVjSGFzaEpvaW5JbXBsKFBsYW5TdGF0ZSAq cHN0YXRlLCBib29sIHBhcmFsbGVsKQogCQkJCQkgKi8KIAkJCQkJQXNzZXJ0KHBhcmFsbGVs X3N0YXRlID09IE5VTEwpOwogCQkJCQlBc3NlcnQoYmF0Y2hubyA+IGhhc2h0YWJsZS0+Y3Vy YmF0Y2gpOworCisJCQkJCWJhdGNoRmlsZSA9IEV4ZWNIYXNoR2V0QmF0Y2hGaWxlKGhhc2h0 YWJsZSwgYmF0Y2hubywKKwkJCQkJCQkJCQkJCQkgaGFzaHRhYmxlLT5vdXRlckJhdGNoRmls ZSwKKwkJCQkJCQkJCQkJCQkgJmhhc2h0YWJsZS0+b3V0ZXJPdmVyZmxvd0ZpbGUpOworCiAJ CQkJCUV4ZWNIYXNoSm9pblNhdmVUdXBsZShtaW50dXBsZSwgaGFzaHZhbHVlLAotCQkJCQkJ CQkJCSAgJmhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbYmF0Y2hub10sCisJCQkJCQkJCQkJ ICBiYXRjaEZpbGUsCiAJCQkJCQkJCQkJICBoYXNodGFibGUpOwogCiAJCQkJCWlmIChzaG91 bGRGcmVlKQpAQCAtMTAzMCwxNyArMTAzNiwxOSBAQCBFeGVjSGFzaEpvaW5PdXRlckdldFR1 cGxlKFBsYW5TdGF0ZSAqb3V0ZXJOb2RlLAogCX0KIAllbHNlIGlmIChjdXJiYXRjaCA8IGhh c2h0YWJsZS0+bmJhdGNoKQogCXsKLQkJQnVmRmlsZSAgICAqZmlsZSA9IGhhc2h0YWJsZS0+ b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdOworCQlCdWZGaWxlICAgICoqZmlsZSA9IEV4ZWNI YXNoR2V0QmF0Y2hGaWxlKGhhc2h0YWJsZSwgY3VyYmF0Y2gsCisJCQkJCQkJCQkJCQkgaGFz aHRhYmxlLT5vdXRlckJhdGNoRmlsZSwKKwkJCQkJCQkJCQkJCSAmaGFzaHRhYmxlLT5vdXRl ck92ZXJmbG93RmlsZSk7CiAKIAkJLyoKIAkJICogSW4gb3V0ZXItam9pbiBjYXNlcywgd2Ug Y291bGQgZ2V0IGhlcmUgZXZlbiB0aG91Z2ggdGhlIGJhdGNoIGZpbGUKIAkJICogaXMgZW1w dHkuCiAJCSAqLwotCQlpZiAoZmlsZSA9PSBOVUxMKQorCQlpZiAoKmZpbGUgPT0gTlVMTCkK IAkJCXJldHVybiBOVUxMOwogCiAJCXNsb3QgPSBFeGVjSGFzaEpvaW5HZXRTYXZlZFR1cGxl KGhqc3RhdGUsCi0JCQkJCQkJCQkJIGZpbGUsCisJCQkJCQkJCQkJICpmaWxlLAogCQkJCQkJ CQkJCSBoYXNodmFsdWUsCiAJCQkJCQkJCQkJIGhqc3RhdGUtPmhqX091dGVyVHVwbGVTbG90 KTsKIAkJaWYgKCFUdXBJc051bGwoc2xvdCkpCkBAIC0xMTM1LDkgKzExNDMsMTggQEAgRXhl Y0hhc2hKb2luTmV3QmF0Y2goSGFzaEpvaW5TdGF0ZSAqaGpzdGF0ZSkKIAlCdWZGaWxlICAg ICppbm5lckZpbGU7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAJdWludDMyCQloYXNodmFs dWU7CisJaW50CQkJYmF0Y2hpZHg7CisJaW50CQkJY3VyYmF0Y2hfb2xkOwogCiAJbmJhdGNo ID0gaGFzaHRhYmxlLT5uYmF0Y2g7CiAJY3VyYmF0Y2ggPSBoYXNodGFibGUtPmN1cmJhdGNo OworCWN1cmJhdGNoX29sZCA9IGN1cmJhdGNoOworCisJLyogaW5kZXggb2YgdGhlIG9sZCBi YXRjaCAqLworCWJhdGNoaWR4ID0gRXhlY0hhc2hHZXRCYXRjaEluZGV4KGhhc2h0YWJsZSwg Y3VyYmF0Y2gpOworCisJLyogaGFzIHRvIGJlIGluIHRoZSBjdXJyZW50IHNsaWNlIG9mIGJh dGNoZXMgKi8KKwlBc3NlcnQoYmF0Y2hpZHggPj0gMCAmJiBiYXRjaGlkeCA8IGhhc2h0YWJs ZS0+bmJhdGNoX2lubWVtb3J5KTsKIAogCWlmIChjdXJiYXRjaCA+IDApCiAJewpAQCAtMTE0 NSw5ICsxMTYyLDkgQEAgRXhlY0hhc2hKb2luTmV3QmF0Y2goSGFzaEpvaW5TdGF0ZSAqaGpz dGF0ZSkKIAkJICogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHByZXZpb3VzIG91dGVyIGJhdGNo IGZpbGU7IGNsb3NlIGl0IHJpZ2h0CiAJCSAqIGF3YXkgdG8gZnJlZSBkaXNrIHNwYWNlLgog CQkgKi8KLQkJaWYgKGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKQotCQkJ QnVmRmlsZUNsb3NlKGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKTsKLQkJ aGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0gPSBOVUxMOworCQlpZiAoaGFz aHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRjaGlkeF0pCisJCQlCdWZGaWxlQ2xvc2UoaGFz aHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRjaGlkeF0pOworCQloYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlW2JhdGNoaWR4XSA9IE5VTEw7CiAJfQogCWVsc2UJCQkJCQkvKiB3ZSBqdXN0 IGZpbmlzaGVkIHRoZSBmaXJzdCBiYXRjaCAqLwogCXsKQEAgLTExODIsNDUgKzExOTksNTAg QEAgRXhlY0hhc2hKb2luTmV3QmF0Y2goSGFzaEpvaW5TdGF0ZSAqaGpzdGF0ZSkKIAkgKiBz Y2FuLCB3ZSBoYXZlIHRvIHJlc2NhbiBvdXRlciBiYXRjaGVzIGluIGNhc2UgdGhleSBjb250 YWluIHR1cGxlcyB0aGF0CiAJICogbmVlZCB0byBiZSByZWFzc2lnbmVkLgogCSAqLwotCWN1 cmJhdGNoKys7CisJY3VyYmF0Y2ggPSBFeGVjSGFzaFN3aXRjaFRvTmV4dEJhdGNoKGhhc2h0 YWJsZSk7CisJYmF0Y2hpZHggPSBFeGVjSGFzaEdldEJhdGNoSW5kZXgoaGFzaHRhYmxlLCBj dXJiYXRjaCk7CisKIAl3aGlsZSAoY3VyYmF0Y2ggPCBuYmF0Y2ggJiYKLQkJICAgKGhhc2h0 YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdID09IE5VTEwgfHwKLQkJCWhhc2h0YWJs ZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdID09IE5VTEwpKQorCQkgICAoaGFzaHRhYmxl LT5vdXRlckJhdGNoRmlsZVtiYXRjaGlkeF0gPT0gTlVMTCB8fAorCQkJaGFzaHRhYmxlLT5p bm5lckJhdGNoRmlsZVtiYXRjaGlkeF0gPT0gTlVMTCkpCiAJewotCQlpZiAoaGFzaHRhYmxl LT5vdXRlckJhdGNoRmlsZVtjdXJiYXRjaF0gJiYKKwkJaWYgKGhhc2h0YWJsZS0+b3V0ZXJC YXRjaEZpbGVbYmF0Y2hpZHhdICYmCiAJCQlISl9GSUxMX09VVEVSKGhqc3RhdGUpKQogCQkJ YnJlYWs7CQkJCS8qIG11c3QgcHJvY2VzcyBkdWUgdG8gcnVsZSAxICovCi0JCWlmIChoYXNo dGFibGUtPmlubmVyQmF0Y2hGaWxlW2N1cmJhdGNoXSAmJgorCQlpZiAoaGFzaHRhYmxlLT5p bm5lckJhdGNoRmlsZVtiYXRjaGlkeF0gJiYKIAkJCUhKX0ZJTExfSU5ORVIoaGpzdGF0ZSkp CiAJCQlicmVhazsJCQkJLyogbXVzdCBwcm9jZXNzIGR1ZSB0byBydWxlIDEgKi8KLQkJaWYg KGhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdICYmCisJCWlmIChoYXNodGFi bGUtPmlubmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSAmJgogCQkJbmJhdGNoICE9IGhhc2h0YWJs ZS0+bmJhdGNoX29yaWdpbmFsKQogCQkJYnJlYWs7CQkJCS8qIG11c3QgcHJvY2VzcyBkdWUg dG8gcnVsZSAyICovCi0JCWlmIChoYXNodGFibGUtPm91dGVyQmF0Y2hGaWxlW2N1cmJhdGNo XSAmJgorCQlpZiAoaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRjaGlkeF0gJiYKIAkJ CW5iYXRjaCAhPSBoYXNodGFibGUtPm5iYXRjaF9vdXRzdGFydCkKIAkJCWJyZWFrOwkJCQkv KiBtdXN0IHByb2Nlc3MgZHVlIHRvIHJ1bGUgMyAqLwogCQkvKiBXZSBjYW4gaWdub3JlIHRo aXMgYmF0Y2guICovCiAJCS8qIFJlbGVhc2UgYXNzb2NpYXRlZCB0ZW1wIGZpbGVzIHJpZ2h0 IGF3YXkuICovCi0JCWlmIChoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2N1cmJhdGNoXSkK LQkJCUJ1ZkZpbGVDbG9zZShoYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2N1cmJhdGNoXSk7 Ci0JCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbY3VyYmF0Y2hdID0gTlVMTDsKLQkJaWYg KGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKQotCQkJQnVmRmlsZUNsb3Nl KGhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbY3VyYmF0Y2hdKTsKLQkJaGFzaHRhYmxlLT5v dXRlckJhdGNoRmlsZVtjdXJiYXRjaF0gPSBOVUxMOwotCQljdXJiYXRjaCsrOworCQlpZiAo aGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZVtiYXRjaGlkeF0pCisJCQlCdWZGaWxlQ2xvc2Uo aGFzaHRhYmxlLT5pbm5lckJhdGNoRmlsZVtiYXRjaGlkeF0pOworCQloYXNodGFibGUtPmlu bmVyQmF0Y2hGaWxlW2JhdGNoaWR4XSA9IE5VTEw7CisJCWlmIChoYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlW2JhdGNoaWR4XSkKKwkJCUJ1ZkZpbGVDbG9zZShoYXNodGFibGUtPm91dGVy QmF0Y2hGaWxlW2JhdGNoaWR4XSk7CisJCWhhc2h0YWJsZS0+b3V0ZXJCYXRjaEZpbGVbYmF0 Y2hpZHhdID0gTlVMTDsKKworCQljdXJiYXRjaCA9IEV4ZWNIYXNoU3dpdGNoVG9OZXh0QmF0 Y2goaGFzaHRhYmxlKTsKKwkJYmF0Y2hpZHggPSBFeGVjSGFzaEdldEJhdGNoSW5kZXgoaGFz aHRhYmxlLCBjdXJiYXRjaCk7CiAJfQogCiAJaWYgKGN1cmJhdGNoID49IG5iYXRjaCkKKwl7 CisJCWhhc2h0YWJsZS0+Y3VyYmF0Y2ggPSBjdXJiYXRjaF9vbGQ7CiAJCXJldHVybiBmYWxz ZTsJCQkvKiBubyBtb3JlIGJhdGNoZXMgKi8KLQotCWhhc2h0YWJsZS0+Y3VyYmF0Y2ggPSBj dXJiYXRjaDsKKwl9CiAKIAkvKgogCSAqIFJlbG9hZCB0aGUgaGFzaCB0YWJsZSB3aXRoIHRo ZSBuZXcgaW5uZXIgYmF0Y2ggKHdoaWNoIGNvdWxkIGJlIGVtcHR5KQogCSAqLwogCUV4ZWNI YXNoVGFibGVSZXNldChoYXNodGFibGUpOwogCi0JaW5uZXJGaWxlID0gaGFzaHRhYmxlLT5p bm5lckJhdGNoRmlsZVtjdXJiYXRjaF07CisJaW5uZXJGaWxlID0gaGFzaHRhYmxlLT5pbm5l ckJhdGNoRmlsZVtiYXRjaGlkeF07CiAKIAlpZiAoaW5uZXJGaWxlICE9IE5VTEwpCiAJewpA QCAtMTI0NiwxNSArMTI2OCwxNSBAQCBFeGVjSGFzaEpvaW5OZXdCYXRjaChIYXNoSm9pblN0 YXRlICpoanN0YXRlKQogCQkgKiBuZWVkZWQKIAkJICovCiAJCUJ1ZkZpbGVDbG9zZShpbm5l ckZpbGUpOwotCQloYXNodGFibGUtPmlubmVyQmF0Y2hGaWxlW2N1cmJhdGNoXSA9IE5VTEw7 CisJCWhhc2h0YWJsZS0+aW5uZXJCYXRjaEZpbGVbYmF0Y2hpZHhdID0gTlVMTDsKIAl9CiAK IAkvKgogCSAqIFJld2luZCBvdXRlciBiYXRjaCBmaWxlIChpZiBwcmVzZW50KSwgc28gdGhh dCB3ZSBjYW4gc3RhcnQgcmVhZGluZyBpdC4KIAkgKi8KLQlpZiAoaGFzaHRhYmxlLT5vdXRl ckJhdGNoRmlsZVtjdXJiYXRjaF0gIT0gTlVMTCkKKwlpZiAoaGFzaHRhYmxlLT5vdXRlckJh dGNoRmlsZVtiYXRjaGlkeF0gIT0gTlVMTCkKIAl7Ci0JCWlmIChCdWZGaWxlU2VlayhoYXNo dGFibGUtPm91dGVyQmF0Y2hGaWxlW2N1cmJhdGNoXSwgMCwgMCwgU0VFS19TRVQpKQorCQlp ZiAoQnVmRmlsZVNlZWsoaGFzaHRhYmxlLT5vdXRlckJhdGNoRmlsZVtiYXRjaGlkeF0sIDAs IDAsIFNFRUtfU0VUKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmV3aW5kIGhhc2gtam9p biB0ZW1wb3JhcnkgZmlsZSIpKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYwppbmRleCBjMzY2ODdhYTRkZi4uNmY0MDYwMGQxMGIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtNDE3Myw2ICs0MTczLDcgQEAgaW5pdGlhbF9j b3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29y a3NwYWNlLAogCWludAkJCW51bV9oYXNoY2xhdXNlcyA9IGxpc3RfbGVuZ3RoKGhhc2hjbGF1 c2VzKTsKIAlpbnQJCQludW1idWNrZXRzOwogCWludAkJCW51bWJhdGNoZXM7CisJaW50CQkJ bnVtYmF0Y2hlc19pbm1lbW9yeTsKIAlpbnQJCQludW1fc2tld19tY3ZzOwogCXNpemVfdAkJ c3BhY2VfYWxsb3dlZDsJLyogdW51c2VkICovCiAKQEAgLTQyMjcsNiArNDIyOCw3IEBAIGlu aXRpYWxfY29zdF9oYXNoam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3Bh Y2UgKndvcmtzcGFjZSwKIAkJCQkJCQkmc3BhY2VfYWxsb3dlZCwKIAkJCQkJCQkmbnVtYnVj a2V0cywKIAkJCQkJCQkmbnVtYmF0Y2hlcywKKwkJCQkJCQkmbnVtYmF0Y2hlc19pbm1lbW9y eSwKIAkJCQkJCQkmbnVtX3NrZXdfbWN2cyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvaGFzaGpvaW4uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2hhc2hq b2luLmgKaW5kZXggMmQ4ZWQ4Njg4Y2QuLmM2MTJhZTk4MTE3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9leGVjdXRvci9oYXNoam9pbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2hhc2hqb2luLmgKQEAgLTMyMCw2ICszMjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoSm9p blRhYmxlRGF0YQogCWludAkJICAgKnNrZXdCdWNrZXROdW1zOyAvKiBhcnJheSBpbmRleGVz IG9mIGFjdGl2ZSBza2V3IGJ1Y2tldHMgKi8KIAogCWludAkJCW5iYXRjaDsJCQkvKiBudW1i ZXIgb2YgYmF0Y2hlcyAqLworCWludAkJCW5iYXRjaF9pbm1lbW9yeTsJLyogbWF4IG51bWJl ciBvZiBpbi1tZW1vcnkgYmF0Y2hlcyAqLwogCWludAkJCWN1cmJhdGNoOwkJLyogY3VycmVu dCBiYXRjaCAjOyAwIGR1cmluZyAxc3QgcGFzcyAqLwogCiAJaW50CQkJbmJhdGNoX29yaWdp bmFsOwkvKiBuYmF0Y2ggd2hlbiB3ZSBzdGFydGVkIGlubmVyIHNjYW4gKi8KQEAgLTMzMSw2 ICszMzIsOSBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoSm9pblRhYmxlRGF0YQogCWRvdWJsZQkJ cGFydGlhbFR1cGxlczsJLyogIyB0dXBsZXMgb2J0YWluZWQgZnJvbSBpbm5lciBwbGFuIGJ5 IG1lICovCiAJZG91YmxlCQlza2V3VHVwbGVzOwkJLyogIyB0dXBsZXMgaW5zZXJ0ZWQgaW50 byBza2V3IHR1cGxlcyAqLwogCisJQnVmRmlsZQkgICAqaW5uZXJPdmVyZmxvd0ZpbGU7CS8q IHRlbXAgZmlsZSBmb3Igb3ZlcmZsb3cgYmF0Y2ggYmF0Y2ggKi8KKwlCdWZGaWxlCSAgICpv dXRlck92ZXJmbG93RmlsZTsJLyogdGVtcCBmaWxlIGZvciBvdmVyZmxvdyBiYXRjaCBiYXRj aCAqLworCiAJLyoKIAkgKiBUaGVzZSBhcnJheXMgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIGxp ZmUgb2YgdGhlIGhhc2ggam9pbiwgYnV0IG9ubHkgaWYKIAkgKiBuYmF0Y2ggPiAxLiAgQSBm aWxlIGlzIG9wZW5lZCBvbmx5IHdoZW4gd2UgZmlyc3Qgd3JpdGUgYSB0dXBsZSBpbnRvIGl0 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlSGFzaC5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3Ivbm9kZUhhc2guaAppbmRleCBlNGViN2JjNjM1OS4uZmM4MmVhNDNj M2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVIYXNoLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUhhc2guaApAQCAtMTYsNiArMTYsNyBAQAogCiAj aW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVz LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgiCiAKIHN0cnVjdCBTaGFyZWRIYXNo Sm9pbkJhdGNoOwogCkBAIC00Niw2ICs0NywxMSBAQCBleHRlcm4gdm9pZCBFeGVjSGFzaEdl dEJ1Y2tldEFuZEJhdGNoKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLAogCQkJCQkJCQkJICB1 aW50MzIgaGFzaHZhbHVlLAogCQkJCQkJCQkJICBpbnQgKmJ1Y2tldG5vLAogCQkJCQkJCQkJ ICBpbnQgKmJhdGNobm8pOworZXh0ZXJuIGludCBFeGVjSGFzaEdldEJhdGNoSW5kZXgoSGFz aEpvaW5UYWJsZSBoYXNodGFibGUsIGludCBiYXRjaG5vKTsKK2V4dGVybiBCdWZGaWxlICoq RXhlY0hhc2hHZXRCYXRjaEZpbGUoSGFzaEpvaW5UYWJsZSBoYXNodGFibGUsIGludCBiYXRj aG5vLAorCQkJCQkgQnVmRmlsZSAqKmZpbGVzLCBCdWZGaWxlICoqb3ZlcmZsb3cpOworZXh0 ZXJuIHZvaWQgRXhlY0hhc2hTd2l0Y2hUb05leHRCYXRjaFNsaWNlKEhhc2hKb2luVGFibGUg aGFzaHRhYmxlKTsKK2V4dGVybiBpbnQgRXhlY0hhc2hTd2l0Y2hUb05leHRCYXRjaChIYXNo Sm9pblRhYmxlIGhhc2h0YWJsZSk7CiBleHRlcm4gYm9vbCBFeGVjU2Nhbkhhc2hCdWNrZXQo SGFzaEpvaW5TdGF0ZSAqaGpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVy biBib29sIEV4ZWNQYXJhbGxlbFNjYW5IYXNoQnVja2V0KEhhc2hKb2luU3RhdGUgKmhqc3Rh dGUsIEV4cHJDb250ZXh0ICplY29udGV4dCk7CiBleHRlcm4gdm9pZCBFeGVjUHJlcEhhc2hU YWJsZUZvclVubWF0Y2hlZChIYXNoSm9pblN0YXRlICpoanN0YXRlKTsKQEAgLTYyLDYgKzY4 LDcgQEAgZXh0ZXJuIHZvaWQgRXhlY0Nob29zZUhhc2hUYWJsZVNpemUoZG91YmxlIG50dXBs ZXMsIGludCB0dXB3aWR0aCwgYm9vbCB1c2Vza2V3LAogCQkJCQkJCQkJc2l6ZV90ICpzcGFj ZV9hbGxvd2VkLAogCQkJCQkJCQkJaW50ICpudW1idWNrZXRzLAogCQkJCQkJCQkJaW50ICpu dW1iYXRjaGVzLAorCQkJCQkJCQkJaW50ICpudW1iYXRjaGVzX2lubWVtb3J5LAogCQkJCQkJ CQkJaW50ICpudW1fc2tld19tY3ZzKTsKIGV4dGVybiBpbnQJRXhlY0hhc2hHZXRTa2V3QnVj a2V0KEhhc2hKb2luVGFibGUgaGFzaHRhYmxlLCB1aW50MzIgaGFzaHZhbHVlKTsKIGV4dGVy biB2b2lkIEV4ZWNIYXNoRXN0aW1hdGUoSGFzaFN0YXRlICpub2RlLCBQYXJhbGxlbENvbnRl eHQgKnBjeHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxNTkwYjY0MzkyMC4uZWI4 ZWFlYTg5YWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0yNzU1LDYgKzI3NTUsNyBA QCB0eXBlZGVmIHN0cnVjdCBIYXNoSW5zdHJ1bWVudGF0aW9uCiAJaW50CQkJbmJ1Y2tldHNf b3JpZ2luYWw7CS8qIHBsYW5uZWQgbnVtYmVyIG9mIGJ1Y2tldHMgKi8KIAlpbnQJCQluYmF0 Y2g7CQkJLyogbnVtYmVyIG9mIGJhdGNoZXMgYXQgZW5kIG9mIGV4ZWN1dGlvbiAqLwogCWlu dAkJCW5iYXRjaF9vcmlnaW5hbDsJLyogcGxhbm5lZCBudW1iZXIgb2YgYmF0Y2hlcyAqLwor CWludAkJCW5iYXRjaF9pbm1lbW9yeTsJLyogbnVtYmVyIG9mIGJhdGNoZXMga2VwdCBpbiBt ZW1vcnkgKi8KIAlTaXplCQlzcGFjZV9wZWFrOwkJLyogcGVhayBtZW1vcnkgdXNhZ2UgaW4g Ynl0ZXMgKi8KIH0gSGFzaEluc3RydW1lbnRhdGlvbjsKIAotLSAKMi40Ny4xCgo= --------------j6Xx7r3m02HLS8n0tsdtFunI Content-Type: application/sql; name="hash.sql" Content-Disposition: attachment; filename="hash.sql" Content-Transfer-Encoding: base64 Y3JlYXRlIHRhYmxlIHQxIChpZCBpbnQsIHZhbCB0ZXh0KTsKd2l0aCB0IGFzIChzZWxlY3Qg YSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDAwMDApIHMoYSkpIGluc2VydCBpbnRv CnQxIHNlbGVjdCAgYSwgbWQ1KGE6OnRleHQpIGZyb20gdCB3aGVyZSBoYXNoaW50NChhKTo6 Yml0KDMyKSAmCjB4RkZGRkYwMDA6OmJpdCgzMikgPSAwOjpiaXQoMzIpOwppbnNlcnQgaW50 byB0MSBzZWxlY3QgaSwgbWQ1KGk6OnRleHQpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwMCkgcyhpKTsKCmluc2VydCBpbnRvIHQxIHNlbGVjdCAqIGZyb20gdDE7Cmluc2VydCBp bnRvIHQxIHNlbGVjdCAqIGZyb20gdDE7Cmluc2VydCBpbnRvIHQxIHNlbGVjdCAqIGZyb20g dDE7Cmluc2VydCBpbnRvIHQxIHNlbGVjdCAqIGZyb20gdDE7CgpjcmVhdGUgaW5kZXggb24g dDEodmFsKTsKY2x1c3RlciB0MSB1c2luZyB0MV92YWxfaWR4OwoKdmFjdXVtIGFuYWx5emU7 CgpzZXQgd29ya19tZW0gPSAnMU1CJzsKc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7 CgpleHBsYWluIGFuYWx5emUgc2VsZWN0IGEuKiwgYi4qIGZyb20gdDEgYSBqb2luIHQxIGIg b24gKGEuaWQgPSBiLmlkKTsK --------------j6Xx7r3m02HLS8n0tsdtFunI--