Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qBKXg-0005Mr-Mg for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jun 2023 19:28:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qBKXe-0005lj-Ic for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jun 2023 19:27:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qBKXe-0005jy-2J for pgsql-hackers@lists.postgresql.org; Mon, 19 Jun 2023 19:27:58 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qBKXY-003Tto-8v for pgsql-hackers@lists.postgresql.org; Mon, 19 Jun 2023 19:27:56 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4f86bc35f13so2500153e87.1 for ; Mon, 19 Jun 2023 12:27:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1687202870; x=1689794870; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=ZSpyG2f6SVe0Q9p8MliXkYmMcyNGI9U5I2ovOLqXf4Y=; b=JRHJqq1wPaoMVI+ZEpjSd85wuv2yD3yY+6W+oXFr7/wj5ZTNj9xSv/D4hoz2VUKdPQ fPtNzepZT3xjHQ+zWE6pruF2IinysR2slE0lkQGD6W+TBgbSAc78rIvPfgYB+ZBYz9RF azAQhF3KpC2KKNCRWndE8MrNnQ8NuSuJ3R8LId55S0AjsKt6swSGZNluhHY5hEqO3t4B t2tbXFWN7+muwmlEb/FSkruL3Inud4yqRRwOde7MczFJnXl6lWc2C+3k/M8BWexZX/LB HjP9x9Pro/HBXn8aFqrKbnLxmgtjCbM6L09Jh0XK4q08DM6M6TyjnFEgsUMUiNZqBK0s /zog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687202870; x=1689794870; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ZSpyG2f6SVe0Q9p8MliXkYmMcyNGI9U5I2ovOLqXf4Y=; b=i/RsnwE/fo8Jh4NV10GNWqF60rrkbwC0TtswXRBwLTdLKCH8ku2CQ1JRWbJXxU/+bC bp5V/q+D3oOvPmICul5EtgX3Nzom39Z3lPmgbjr348PSguuUUA6H3N7m3E+HDHQ3hIby LlhcdzHYFaL+SEh18Bw2xMCcveCyQYeJTgbKQmwwqlf6IKUjlIY/d7PZ8ngmve3ZpezY uHy3MPdm/5hb62+2+yEXHl1rZbBRGwG29h0mxlR8iBo3FruRBvZ6FlccO06grkXbwPrr JEzxv00aPW3YiSEwCAYI5XuYbsHs6N5r7MaJVn0DdcGXAgdQRyHMbFfB5ELPSAnw0DoA FIVw== X-Gm-Message-State: AC+VfDwJVd2uAOz8qwHaLyyN+rBbGBhm/GAIoegFXWb7Y+nwkQ3V5gGo 0sPg9arvEBvPZmHF+04hc1KtyQ== X-Google-Smtp-Source: ACHHUZ4FZW3udUhRBHPpUr45xbQckB5lcdK0cmevM6xxcW5O56eVoHfdNJH1nH2u8pSBujsjCCUjFA== X-Received: by 2002:a05:6512:3114:b0:4ed:bdac:7a49 with SMTP id n20-20020a056512311400b004edbdac7a49mr5056885lfb.54.1687202869548; Mon, 19 Jun 2023 12:27:49 -0700 (PDT) Received: from [10.137.0.17] (ip-86-49-228-220.bb.vodafone.cz. [86.49.228.220]) by smtp.gmail.com with ESMTPSA id r19-20020a05600c285300b003f605566610sm11524148wmb.13.2023.06.19.12.27.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Jun 2023 12:27:48 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------cTFulINgWkvXmj1LM3tLLV5J" Message-ID: <8c86c3a6-074e-6c88-3e7e-9452b6a37b9b@enterprisedb.com> Date: Mon, 19 Jun 2023 21:27:46 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.1 Subject: Re: index prefetching Content-Language: en-US From: Tomas Vondra To: Andres Freund Cc: PostgreSQL Hackers , Georgios References: <20230609000600.syqy447e6metnvyj@awork3.anarazel.de> <20230610203456.5gancfekm4pj4pbs@awork3.anarazel.de> <6030d836-e8b7-e7b9-2cbb-144309679d03@enterprisedb.com> In-Reply-To: <6030d836-e8b7-e7b9-2cbb-144309679d03@enterprisedb.com> 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. --------------cTFulINgWkvXmj1LM3tLLV5J Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I have results from the new extended round of prefetch tests. I've pushed everything to https://github.com/tvondra/index-prefetch-tests-2 There are scripts I used to run this (run-*.sh), raw results and various kinds of processed summaries (pdf, ods, ...) that I'll mention later. As before, this tests a number of query types: - point queries with btree and hash (equality) - ORDER BY queries with btree (inequality + order by) - SAOP queries with btree (column IN (values)) It's probably futile to go through details of all the tests - it's easier to go through the (hopefully fairly readable) shell scripts. But in principle, runs some simple queries while varying both the data set and workload: - data set may be random, sequential or cyclic (with different length) - the number of matches per value differs (i.e. equality condition may match 1, 10, 100, ..., 100k rows) - forces a particular scan type (indexscan, bitmapscan, seqscan) - each query is executed twice - first run (right after restarting DB and dropping caches) is uncached, second run should have data cached - the query is executed 5x with different parameters (so 10x in total) This is tested with three basic data sizes - fits into shared buffers, fits into RAM and exceeds RAM. The sizes are roughly 350MB, 3.5GB and 20GB (i5) / 40GB (xeon). Note: xeon has 64GB RAM, so technically the largest scale fits into RAM. But should not matter, thanks to drop-caches and restart. I also attempted to pin the backend to a particular core, in effort to eliminate scheduling-related noise. It's mostly what taskset does, but I did that from extension (https://github.com/tvondra/taskset) which allows me to do that as part of the SQL script. For the results, I'll talk about the v1 patch (as submitted here) fist. I'll use the PDF results in the "pdf" directory which generally show a pivot table by different test parameters, comparing the results by different parameters (prefetching on/off, master/patched). Feel free to do your own analysis from the raw CSV data, ofc. For example, this: https://github.com/tvondra/index-prefetch-tests-2/blob/master/pdf/patch-v1-point-queries-builds.pdf shows how the prefetching affects timing for point queries with different numbers of matches (1 to 100k). The numbers are timings for master and patched build. The last group is (patched/master), so the lower the number the better - 50% means patch makes the query 2x faster. There's also a heatmap, with green=good, red=bad, which makes it easier to cases that got slower/faster. The really interesting stuff starts on page 7 (in this PDF), because the first couple pages are "cached" (so it's more about measuring overhead when prefetching has no benefit). Right on page 7 you can see a couple cases with a mix of slower/faster cases, roughtly in the +/- 30% range. However, this is unrelated from the patch because those are results for bitmapheapscan. For indexscans (page 8), the results are invariably improved - the more matches the better (up to ~10x faster for 100k matches). Those were results for the "cyclic" data set. For random data set (pages 9-11) the results are pretty similar, but for "sequential" data (11-13) the prefetching is actually harmful - there are red clusters, with up to 500% slowdowns. I'm not going to explain the summary for SAOP queries (https://github.com/tvondra/index-prefetch-tests-2/blob/master/pdf/patch-v1-saop-queries-builds.pdf), the story is roughly the same, except that there are more tested query combinations (because we also vary the pattern in the IN() list - number of values etc.). So, the conclusion from this is - generally very good results for random and cyclic data sets, but pretty bad results for sequential. But even for the random/cyclic cases there are combinations (especially with many matches) where prefetching doesn't help or even hurts. The only way to deal with this is (I think) a cheap way to identify and skip inefficient prefetches, essentially by doing two things: a) remembering more recently prefetched blocks (say, 1000+) and not prefetching them over and over b) ability to identify sequential pattern, when readahead seems to do pretty good job already (although I heard some disagreement) I've been thinking about how to do this - doing (a) seem pretty hard, because on the one hand we want to remember a fair number of blocks and we want the check "did we prefetch X" to be very cheap. So a hash table seems nice. OTOH we want to expire "old" blocks and only keep the most recent ones, and hash table doesn't really support that. Perhaps there is a great data structure for this, not sure. But after thinking about this I realized we don't need a perfect accuracy - it's fine to have false positives/negatives - it's fine to forget we already prefetched block X and prefetch it again, or prefetch it again. It's not a matter of correctness, just a matter of efficiency - after all, we can't know if it's still in memory, we only know if we prefetched it fairly recently. This led me to a "hash table of LRU caches" thing. Imagine a tiny LRU cache that's small enough to be searched linearly (say, 8 blocks). And we have many of them (e.g. 128), so that in total we can remember 1024 block numbers. Now, every block number is mapped to a single LRU by hashing, as if we had a hash table index = hash(blockno) % 128 and we only use tha one LRU to track this block. It's tiny so we can search it linearly. To expire prefetched blocks, there's a counter incremented every time we prefetch a block, and we store it in the LRU with the block number. When checking the LRU we ignore old entries (with counter more than 1000 values back), and we also evict/replace the oldest entry if needed. This seems to work pretty well for the first requirement, but it doesn't allow identifying the sequential pattern cheaply. To do that, I added a tiny queue with a couple entries that can checked it the last couple entries are sequential. And this is what the attached 0002+0003 patches do. There are PDF with results for this build prefixed with "patch-v3" and the results are pretty good - the regressions are largely gone. It's even cleared in the PDFs comparing the impact of the two patches: https://github.com/tvondra/index-prefetch-tests-2/blob/master/pdf/comparison-point.pdf https://github.com/tvondra/index-prefetch-tests-2/blob/master/pdf/comparison-saop.pdf Which simply shows the "speedup heatmap" for the two patches, and the "v3" heatmap has much less red regression clusters. Note: The comparison-point.pdf summary has another group of columns illustrating if this scan type would be actually used, with "green" meaning "yes". This provides additional context, because e.g. for the "noisy bitmapscans" it's all white, i.e. without setting the GUcs the optimizer would pick something else (hence it's a non-issue). Let me know if the results are not clear enough (I tried to cover the important stuff, but I'm sure there's a lot of details I didn't cover), or if you think some other summary would be better. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------cTFulINgWkvXmj1LM3tLLV5J Content-Type: text/x-patch; charset=UTF-8; name="0003-ignore-seq-patterns-add-stats-v3.patch" Content-Disposition: attachment; filename="0003-ignore-seq-patterns-add-stats-v3.patch" Content-Transfer-Encoding: base64 RnJvbSBmYzg2OWFmNTU2NzhlZGEyOTA0NTE5MGY3MzVkYTk4YzRiNjgwOGQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxNSBKdW4gMjAyMyAxNDo0OTo1NiArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSBpZ25vcmUgc2VxIHBhdHRlcm5zLCBhZGQgc3RhdHMKCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyB8IDgwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICB8 IDE2ICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA5NiBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNTU3MjY3YWNlZDkuLjZhYjk3N2NhMjg0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTM3OCw2ICszNzgsMTYg QEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhzX3Rl bXBfc25hcCkKIAkJVW5yZWdpc3RlclNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KTsKIAor CS8qIElmIHByZWZldGNoaW5nIGVuYWJsZWQsIGxvZyBwcmVmZXRjaCBzdGF0cy4gKi8KKwlp ZiAoc2Nhbi0+eHNfcHJlZmV0Y2gpCisJeworCQlJbmRleFByZWZldGNoIHByZWZldGNoID0g c2Nhbi0+eHNfcHJlZmV0Y2g7CisKKwkJZWxvZyhMT0csICJpbmRleCBwcmVmZXRjaCBzdGF0 czogcmVxdWVzdHMgJWx1IHByZWZldGNoZXMgJWx1ICglZikiLAorCQkJIHByZWZldGNoLT5w cmVmZXRjaEFsbCwgcHJlZmV0Y2gtPnByZWZldGNoQ291bnQsCisJCQkgcHJlZmV0Y2gtPnBy ZWZldGNoQ291bnQgKiAxMDAuMCAvIHByZWZldGNoLT5wcmVmZXRjaEFsbCk7CisJfQorCiAJ LyogUmVsZWFzZSB0aGUgc2NhbiBkYXRhIHN0cnVjdHVyZSBpdHNlbGYgKi8KIAlJbmRleFNj YW5FbmQoc2Nhbik7CiB9CkBAIC0xMDI4LDYgKzEwMzgsNTcgQEAgaW5kZXhfb3BjbGFzc19v cHRpb25zKFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9w dGlvbnMsCiAJcmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9w dGlvbnMsIHZhbGlkYXRlKTsKIH0KIAorLyoKKyAqIEFkZCB0aGUgYmxvY2sgdG8gdGhlIHRp bnkgdG9wLWxldmVsIHF1ZXVlIChMUlUpLCBhbmQgY2hlY2sgaWYgdGhlIGJsb2NrCisgKiBp cyBpbiBhIHNlcXVlbnRpYWwgcGF0dGVybi4KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X3By ZWZldGNoX2lzX3NlcXVlbnRpYWwoSW5kZXhQcmVmZXRjaCBwcmVmZXRjaCwgQmxvY2tOdW1i ZXIgYmxvY2spCit7CisJYm9vbAlpc19zZXF1ZW50aWFsID0gdHJ1ZTsKKwlpbnQJCWlkeDsK KworCS8qIG5vIHJlcXVlc3RzICovCisJaWYgKHByZWZldGNoLT5xdWV1ZUluZGV4ID09IDAp CisJeworCQlpZHggPSAocHJlZmV0Y2gtPnF1ZXVlSW5kZXgrKykgJSBQUkVGRVRDSF9RVUVV RV9TSVpFOworCQlwcmVmZXRjaC0+cXVldWVJdGVtc1tpZHhdID0gYmxvY2s7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwkvKiBzYW1lIGFzIGltbWVkaWF0ZWx5IHByZWNlZGluZyBibG9j az8gKi8KKwlpZHggPSAocHJlZmV0Y2gtPnF1ZXVlSW5kZXggLSAxKSAlIFBSRUZFVENIX1FV RVVFX1NJWkU7CisJaWYgKHByZWZldGNoLT5xdWV1ZUl0ZW1zW2lkeF0gPT0gYmxvY2spCisJ CXJldHVybiB0cnVlOworCisJaWR4ID0gKHByZWZldGNoLT5xdWV1ZUluZGV4KyspICUgUFJF RkVUQ0hfUVVFVUVfU0laRTsKKwlwcmVmZXRjaC0+cXVldWVJdGVtc1tpZHhdID0gYmxvY2s7 CisKKwlmb3IgKGludCBpID0gMTsgaSA8IFBSRUZFVENIX1NFUV9QQVRURVJOX0JMT0NLUzsg aSsrKQorCXsKKwkJLyogbm90IGVub3VnaCByZXF1ZXN0cyAqLworCQlpZiAocHJlZmV0Y2gt PnF1ZXVlSW5kZXggPCBpKQorCQl7CisJCQlpc19zZXF1ZW50aWFsID0gZmFsc2U7CisJCQli cmVhazsKKwkJfQorCisJCS8qCisJCSAqIC0xLCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYWR2 YW5jZWQgdGhlIGluZGV4LCBzbyBpdCBwb2ludHMgdG8KKwkJICogdGhlIG5leHQgc2xvdCBh dCB0aGlzIHBvaW50CisJCSAqLworCQlpZHggPSAocHJlZmV0Y2gtPnF1ZXVlSW5kZXggLSBp IC0gMSkgJSBQUkVGRVRDSF9RVUVVRV9TSVpFOworCisJCWlmICgoYmxvY2sgLSBpKSAhPSBw cmVmZXRjaC0+cXVldWVJdGVtc1tpZHhdKQorCQl7CisJCQlpc19zZXF1ZW50aWFsID0gZmFs c2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBpc19zZXF1ZW50aWFsOworfQor CiAvKgogICogaW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlCiAgKgkJQWRkIGEgYmxvY2sgdG8g dGhlIGNhY2hlLCByZXR1cm4gdHJ1ZSBpZiBpdCB3YXMgcmVjZW50bHkgcHJlZmV0Y2hlZC4K QEAgLTEwODEsNiArMTE0MiwxOSBAQCBpbmRleF9wcmVmZXRjaF9hZGRfY2FjaGUoSW5kZXhQ cmVmZXRjaCBwcmVmZXRjaCwgQmxvY2tOdW1iZXIgYmxvY2spCiAJdWludDY0CQlvbGRlc3RS ZXF1ZXN0ID0gUEdfVUlOVDY0X01BWDsKIAlpbnQJCQlvbGRlc3RJbmRleCA9IC0xOwogCisJ LyoKKwkgKiBGaXJzdCBhZGQgdGhlIGJsb2NrIHRvIHRoZSAodGlueSkgdG9wLWxldmVsIExS VSBjYWNoZSBhbmQgc2VlIGlmIGl0J3MKKwkgKiBwYXJ0IG9mIGEgc2VxdWVudGlhbCBwYXR0 ZXJuLiBJbiB0aGlzIGNhc2Ugd2UganVzdCBpZ25vcmUgdGhlIGJsb2NrCisJICogYW5kIGRv bid0IHByZWZldGNoIGl0IC0gd2UgZXhwZWN0IHJlYWQtYWhlYWQgdG8gZG8gYSBiZXR0ZXIg am9iLgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGJsb2Nr IHRvIHRoZSBsYXRlciBjYWNoZSwgaW4gY2FzZQorCSAqIHdlIGhhcHBlbiB0byBhY2Nlc3Mg aXQgbGF0ZXI/IFRoYXQgbWlnaHQgaGVscCBpZiB3ZSBmaXJzdCBzY2FuIGEgbG90CisJICog b2YgdGhlIHRhYmxlIHNlcXVlbnRpYWxseSwgYW5kIHRoZW4gcmFuZG9tbHkuIE5vdCBzdXJl IHRoYXQncyB2ZXJ5CisJICogbGlrZWx5IHdpdGggaW5kZXggYWNjZXNzLCB0aG91Z2guCisJ ICovCisJaWYgKGluZGV4X3ByZWZldGNoX2lzX3NlcXVlbnRpYWwocHJlZmV0Y2gsIGJsb2Nr KSkKKwkJcmV0dXJuIHRydWU7CisKIAkvKiBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHByZWZl dGNoZWQgdGhpcyBibG9jayAobGluZWFyIHNlYXJjaCBvZiBMUlUpICovCiAJZm9yIChpbnQg aSA9IDA7IGkgPCBQUkVGRVRDSF9MUlVfU0laRTsgaSsrKQogCXsKQEAgLTEyMDYsNiArMTI4 MCw4IEBAIGluZGV4X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJaWYgKHByZWZldGNoLT5wcmVmZXRjaFRhcmdldCA8PSAwKQogCQlyZXR1cm47 CiAKKwlwcmVmZXRjaC0+cHJlZmV0Y2hBbGwrKzsKKwogCS8qCiAJICogWFhYIEkgdGhpbmsg d2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBkaXJlY3Rpb24gaGVyZSwgdGhhdCdzIGhh bmRsZWQKIAkgKiBieSBob3cgdGhlIEFNcyBidWlsZCB0aGUgY3VyUG9zIGV0Yy4gKHNlZSBu YnRzZWFyY2guYykKQEAgLTEyNTYsNiArMTMzMiw4IEBAIGluZGV4X3ByZWZldGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlpZiAoaW5kZXhfcHJlZmV0 Y2hfYWRkX2NhY2hlKHByZWZldGNoLCBibG9jaykpCiAJCQkJY29udGludWU7CiAKKwkJCXBy ZWZldGNoLT5wcmVmZXRjaENvdW50Kys7CisKIAkJCVByZWZldGNoQnVmZmVyKHNjYW4tPmhl YXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLCBibG9jayk7CiAJCQlwZ0J1ZmZlclVzYWdlLmJs a3NfcHJlZmV0Y2hlcysrOwogCQl9CkBAIC0xMzAwLDYgKzEzNzgsOCBAQCBpbmRleF9wcmVm ZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJaWYgKGlu ZGV4X3ByZWZldGNoX2FkZF9jYWNoZShwcmVmZXRjaCwgYmxvY2spKQogCQkJCWNvbnRpbnVl OwogCisJCQlwcmVmZXRjaC0+cHJlZmV0Y2hDb3VudCsrOworCiAJCQlQcmVmZXRjaEJ1ZmZl cihzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwgYmxvY2spOwogCQkJcGdCdWZm ZXJVc2FnZS5ibGtzX3ByZWZldGNoZXMrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCBj MDFjMzc5NTFjYS4uNTI2ZjI4MGE0NGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0yNzYsNiAr Mjc2LDEyIEBAIHR5cGVkZWYgc3RydWN0IFByZWZldGNoQ2FjaGVFbnRyeSB7CiAjZGVmaW5l CQlQUkVGRVRDSF9MUlVfQ09VTlQJCTEyOAogI2RlZmluZQkJUFJFRkVUQ0hfQ0FDSEVfU0la RQkJKFBSRUZFVENIX0xSVV9TSVpFICogUFJFRkVUQ0hfTFJVX0NPVU5UKQogCisvKgorICog VXNlZCB0byBkZXRlY3Qgc2VxdWVudGlhbCBwYXR0ZXJucyAoYW5kIGRpc2FibGUgcHJlZmV0 Y2hpbmcpLgorICovCisjZGVmaW5lCQlQUkVGRVRDSF9RVUVVRV9TSVpFCQkJCTgKKyNkZWZp bmUJCVBSRUZFVENIX1NFUV9QQVRURVJOX0JMT0NLUwkJNAorCiB0eXBlZGVmIHN0cnVjdCBJ bmRleFByZWZldGNoRGF0YQogewogCS8qCkBAIC0yOTEsNiArMjk3LDE2IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4UHJlZmV0Y2hEYXRhCiAJcHJlZmV0Y2hlcl9nZXRibG9ja19mdW5jdGlv bglnZXRfYmxvY2s7CiAJcHJlZmV0Y2hlcl9nZXRyYW5nZV9mdW5jdGlvbglnZXRfcmFuZ2U7 CiAKKwl1aW50NjQJCXByZWZldGNoQWxsOworCXVpbnQ2NAkJcHJlZmV0Y2hDb3VudDsKKwor CS8qCisJICogVGlueSBxdWV1ZSBvZiBtb3N0IHJlY2VudGx5IHByZWZldGNoZWQgYmxvY2tz LCB1c2VkIGZpcnN0IGZvciBjaGVhcAorCSAqIGNoZWNrcyBhbmQgYWxzbyB0byBpZGVudGlm eSAoYW5kIGlnbm9yZSkgc2VxdWVudGlhbCBwcmVmZXRjaGVzLgorCSAqLworCXVpbnQ2NAkJ cXVldWVJbmRleDsKKwlCbG9ja051bWJlcglxdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX1NJ WkVdOworCiAJLyoKIAkgKiBDYWNoZSBvZiByZWNlbnRseSBwcmVmZXRjaGVkIGJsb2Nrcywg b3JnYW5pemVkIGFzIGEgaGFzaCB0YWJsZSBvZgogCSAqIHNtYWxsIExSVSBjYWNoZXMuCi0t IAoyLjQwLjEKCg== --------------cTFulINgWkvXmj1LM3tLLV5J Content-Type: text/x-patch; charset=UTF-8; name="0002-more-elaborate-prefetch-cache-v3.patch" Content-Disposition: attachment; filename="0002-more-elaborate-prefetch-cache-v3.patch" Content-Transfer-Encoding: base64 RnJvbSAyZmRmYmNhYmIyNjJlMmZlYTM4ZjQwNDY1ZjYwNDQxYzVmMjU1MDk2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogV2VkLCAxNCBKdW4gMjAyMyAxNTowODo1NSArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBtb3JlIGVsYWJvcmF0ZSBwcmVmZXRjaCBjYWNoZQoKLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jICB8ICAgMyAtCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICB8ICAgMyAtCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jICB8IDE1NiArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICB8ICAgMyAtCiBzcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYyB8ICAgMyAtCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi93YWxzZW5kZXIuYyB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAg ICAgICAgICB8ICA0MSArKysrKystLQogNyBmaWxlcyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9u cygrKSwgNzAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMK aW5kZXggZmRmOTc4ZWFhYWQuLmVhYTg5ZWE2Yzk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3RzY2FuLmMKQEAgLTEyOCw5ICsxMjgsNiBAQCBnaXN0YmVnaW5zY2FuKFJlbGF0aW9u IHIsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZldGNoX21heGltdW0sIGlu dCBwcgogCQlwcmVmZXRjaGVyLT5wcmVmZXRjaE1heFRhcmdldCA9IHByZWZldGNoX21heGlt dW07CiAJCXByZWZldGNoZXItPnByZWZldGNoUmVzZXQgPSBwcmVmZXRjaF9yZXNldDsKIAot CQlwcmVmZXRjaGVyLT5jYWNoZUluZGV4ID0gMDsKLQkJbWVtc2V0KHByZWZldGNoZXItPmNh Y2hlQmxvY2tzLCAwLCBzaXplb2YoQmxvY2tOdW1iZXIpICogOCk7Ci0KIAkJLyogY2FsbGJh Y2tzICovCiAJCXByZWZldGNoZXItPmdldF9ibG9jayA9IGdpc3RfcHJlZmV0Y2hfZ2V0Ymxv Y2s7CiAJCXByZWZldGNoZXItPmdldF9yYW5nZSA9IGdpc3RfcHJlZmV0Y2hfZ2V0cmFuZ2U7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggMDFhMjUxMzJiY2UuLjY1NDZkNDU3ODk5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00MDEsOSArNDAxLDYgQEAgaGFzaGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHBy ZWZldGNoX21heGltdW0sIGludAogCQlwcmVmZXRjaGVyLT5wcmVmZXRjaE1heFRhcmdldCA9 IHByZWZldGNoX21heGltdW07CiAJCXByZWZldGNoZXItPnByZWZldGNoUmVzZXQgPSBwcmVm ZXRjaF9yZXNldDsKIAotCQlwcmVmZXRjaGVyLT5jYWNoZUluZGV4ID0gMDsKLQkJbWVtc2V0 KHByZWZldGNoZXItPmNhY2hlQmxvY2tzLCAwLCBzaXplb2YoQmxvY2tOdW1iZXIpICogOCk7 Ci0KIAkJLyogY2FsbGJhY2tzICovCiAJCXByZWZldGNoZXItPmdldF9ibG9jayA9IF9oYXNo X3ByZWZldGNoX2dldGJsb2NrOwogCQlwcmVmZXRjaGVyLT5nZXRfcmFuZ2UgPSBfaGFzaF9w cmVmZXRjaF9nZXRyYW5nZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4 IGFhOGExNDYyNGQ4Li41NTcyNjdhY2VkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhhbS5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbXByb2Mu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9k ZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZtZ3IuaCIKQEAgLTEwMjcsNyArMTAyOCwxMTAgQEAgaW5kZXhfb3BjbGFzc19vcHRpb25z KFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9wdGlvbnMs CiAJcmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9wdGlvbnMs IHZhbGlkYXRlKTsKIH0KIAorLyoKKyAqIGluZGV4X3ByZWZldGNoX2FkZF9jYWNoZQorICoJ CUFkZCBhIGJsb2NrIHRvIHRoZSBjYWNoZSwgcmV0dXJuIHRydWUgaWYgaXQgd2FzIHJlY2Vu dGx5IHByZWZldGNoZWQuCisgKgorICogV2hlbiBjaGVja2luZyBhIGJsb2NrLCB3ZSBuZWVk IHRvIGNoZWNrIGlmIGl0IHdhcyByZWNlbnRseSBwcmVmZXRjaGVkLAorICogd2hlcmUgcmVj ZW50bHkgbWVhbnMgd2l0aGluIFBSRUZFVENIX0NBQ0hFX1NJWkUgcmVxdWVzdHMuIFRoaXMg Y2hlY2sKKyAqIG5lZWRzIHRvIGJlIHZlcnkgY2hlYXAsIGV2ZW4gd2l0aCBmYWlybHkgbGFy Z2UgY2FjaGVzIChodW5kcmVkcyBvZgorICogZW50cmllcykuIFRoZSBjYWNoZSBkb2VzIG5v dCBuZWVkIHRvIGJlIHBlcmZlY3QsIHdlIGNhbiBhY2NlcHQgZmFsc2UKKyAqIHBvc2l0aXZl cy9uZWdhdGl2ZXMsIGFzIGxvbmcgYXMgdGhlIHJhdGUgaXMgcmVhc29uYWJseSBsb3cuIFdl IGFsc28KKyAqIG5lZWQgdG8gZXhwaXJlIGVudHJpZXMsIHNvIHRoYXQgb25seSAicmVjZW50 IiByZXF1ZXN0cyBhcmUgcmVtZW1iZXJlZC4KKyAqCisgKiBBIHF1ZXVlIHdvdWxkIGFsbG93 IGV4cGlyaW5nIHRoZSByZXF1ZXN0cywgYnV0IGNoZWNraW5nIGlmIGEgYmxvY2sgd2FzCisg KiBwcmVmZXRjaGVkIHdvdWxkIGJlIGV4cGVuc2l2ZSAobGluZWFyIHNlYXJjaCBmb3IgbG9u Z2VyIHF1ZXVlcykuIEFub3RoZXIKKyAqIG9wdGlvbiB3b3VsZCBiZSBhIGhhc2ggdGFibGUs IGJ1dCB0aGF0IGhhcyBpc3N1ZXMgd2l0aCBleHBpcmluZyBlbnRyaWVzCisgKiBjaGVhcGx5 ICh3aGljaCB1c3VhbGx5IGRlZ3JhZGVzIHRoZSBoYXNoIHRhYmxlKS4KKyAqCisgKiBTbyB3 ZSB1c2UgYSBjYWNoZSB0aGF0IGlzIG9yZ2FuaXplZCBhcyBtdWx0aXBsZSBzbWFsbCBMUlUg Y2FjaGVzLiBFYWNoCisgKiBibG9jayBpcyBtYXBwZWQgdG8gYSBwYXJ0aWN1bGFyIExSVSBi eSBoYXNoaW5nIChzbyBpdCdzIGEgYml0IGxpa2UgYQorICogaGFzaCB0YWJsZSksIGFuZCBl YWNoIExSVSBpcyB0aW55IChlLmcuIDggZW50cmllcykuIFRoZSBMUlUgb25seSBrZWVwcwor ICogdGhlIG1vc3QgcmVjZW50IHJlcXVlc3RzIChmb3IgdGhhdCBwYXJ0aWN1bGFyIExSVSku CisgKgorICogVGhpcyBhbGxvd3MgcXVpY2sgc2VhcmNoZXMgYW5kIGV4cGlyYXRpb24sIHdp dGggZmFsc2UgbmVnYXRpdmVzICh3aGVuCisgKiBhIHBhcnRpY3VsYXIgTFJVIGhhcyB0b28g bWFueSBjb2xsaXNpb25zKS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaW1hZ2luZSAxMjggTFJV IGNhY2hlcywgZWFjaCB3aXRoIDggZW50cmllcyAtIHRoYXQncyAxMDI0CisgKiBwcmVmZXRj aCByZXF1ZXN0IGluIHRvdGFsLgorICoKKyAqIFRoZSByZWNlbmN5IGlzIGRldGVybWluZWQg dXNpbmcgYSBwcmVmZXRjaCBjb3VudGVyLCBpbmNyZW1lbnRlZCBldmVyeQorICogdGltZSB3 ZSBlbmQgdXAgcHJlZmV0Y2hpbmcgYSBibG9jay4gVGhlIGNvdW50ZXIgaXMgdWludDY0LCBz byBpdCBzaG91bGQKKyAqIG5vdCB3cmFwICgxMjUgemViaWJ5dGVzLCB3b3VsZCB0YWtlIH40 IG1pbGxpb24geWVhcnMgYXQgMUdCL3MpLgorICoKKyAqIFRvIGNoZWNrIGlmIGEgYmxvY2sg d2FzIHByZWZldGNoZWQgcmVjZW50bHksIHdlIGNhbGN1bGF0ZSBoYXNoKGJsb2NrKSwKKyAq IGFuZCB0aGVuIGxpbmVhcmx5IHNlYXJjaCBpZiB0aGUgdGlueSBMUlUgaGFzIGVudHJ5IGZv ciB0aGUgc2FtZSBibG9jaworICogYW5kIHJlcXVlc3QgbGVzcyB0aGFuIFBSRUZFVENIX0NB Q0hFX1NJWkUgYWdvLgorICoKKyAqIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGVpdGhlciB1cGRh dGUgdGhlIGVudHJ5IChmb3IgdGhlIHNhbWUgYmxvY2spIGlmCisgKiBmb3VuZCwgb3IgcmVw bGFjZSB0aGUgb2xkZXN0L2VtcHR5IGVudHJ5LgorICoKKyAqIElmIHRoZSBibG9jayB3YXMg bm90IHJlY2VudGx5IHByZWZldGNoZWQgKGkuZS4gd2Ugd2FudCB0byBwcmVmZXRjaCBpdCks CisgKiB3ZSBpbmNyZW1lbnQgdGhlIGNvdW50ZXIuCisgKi8KK3N0YXRpYyBib29sCitpbmRl eF9wcmVmZXRjaF9hZGRfY2FjaGUoSW5kZXhQcmVmZXRjaCBwcmVmZXRjaCwgQmxvY2tOdW1i ZXIgYmxvY2spCit7CisJUHJlZmV0Y2hDYWNoZUVudHJ5ICplbnRyeTsKKworCS8qIGNhbGN1 bGF0ZSB3aGljaCBMUlUgdG8gdXNlICovCisJaW50CQkJbHJ1ID0gaGFzaF91aW50MzIoYmxv Y2spICUgUFJFRkVUQ0hfTFJVX0NPVU5UOwogCisJLyogZW50cnkgdG8gKG1heWJlKSB1c2Ug Zm9yIHRoaXMgYmxvY2sgcmVxdWVzdCAqLworCXVpbnQ2NAkJb2xkZXN0UmVxdWVzdCA9IFBH X1VJTlQ2NF9NQVg7CisJaW50CQkJb2xkZXN0SW5kZXggPSAtMTsKKworCS8qIHNlZSBpZiB3 ZSBhbHJlYWR5IGhhdmUgcHJlZmV0Y2hlZCB0aGlzIGJsb2NrIChsaW5lYXIgc2VhcmNoIG9m IExSVSkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFBSRUZFVENIX0xSVV9TSVpFOyBpKysp CisJeworCQllbnRyeSA9ICZwcmVmZXRjaC0+cHJlZmV0Y2hDYWNoZVtscnUgKiBQUkVGRVRD SF9MUlVfU0laRSArIGldOworCisJCS8qIElzIHRoaXMgdGhlIG9sZGVzdCBwcmVmZXRjaCBy ZXF1ZXN0IGluIHRoaXMgTFJVPyAqLworCQlpZiAoZW50cnktPnJlcXVlc3QgPCBvbGRlc3RS ZXF1ZXN0KQorCQl7CisJCQlvbGRlc3RSZXF1ZXN0ID0gZW50cnktPnJlcXVlc3Q7CisJCQlv bGRlc3RJbmRleCA9IGk7CisJCX0KKworCQkvKiBSZXF1ZXN0IG51bWJlcnMgYXJlIHBvc2l0 aXZlLCBzbyAwIG1lYW5zICJ1bnVzZWQiLiAqLworCQlpZiAoZW50cnktPnJlcXVlc3QgPT0g MCkKKwkJCWNvbnRpbnVlOworCisJCS8qIElzIHRoaXMgZW50cnkgZm9yIHRoZSBzYW1lIGJs b2NrIGFzIHRoZSBjdXJyZW50IHJlcXVlc3Q/ICovCisJCWlmIChlbnRyeS0+YmxvY2sgPT0g YmxvY2spCisJCXsKKwkJCWJvb2wJcHJlZmV0Y2hlZDsKKworCQkJLyoKKwkJCSAqIElzIHRo ZSBvbGQgcmVxdWVzdCBzdWZmaWNpZW50bHkgcmVjZW50PyBJZiB5ZXMsIHdlIHRyZWF0IHRo ZQorCQkJICogYmxvY2sgYXMgYWxyZWFkeSBwcmVmZXRjaGVkLgorCQkJICoKKwkJCSAqIFhY WCBXZSBkbyBhZGQgdGhlIGNhY2hlIHNpemUgdG8gdGhlIHJlcXVlc3QgaW4gb3JkZXIgbm90 IHRvCisJCQkgKiBoYXZlIGlzc3VlcyB3aXRoIHVpbnQ2NCB1bmRlcmZsb3dzLgorCQkJICov CisJCQlwcmVmZXRjaGVkID0gKGVudHJ5LT5yZXF1ZXN0ICsgUFJFRkVUQ0hfQ0FDSEVfU0la RSA+PSBwcmVmZXRjaC0+cHJlZmV0Y2hSZXFOdW1iZXIpOworCisJCQkvKiBVcGRhdGUgdGhl IHJlcXVlc3QgbnVtYmVyLiAqLworCQkJZW50cnktPnJlcXVlc3QgPSArK3ByZWZldGNoLT5w cmVmZXRjaFJlcU51bWJlcjsKKworCQkJcmV0dXJuIHByZWZldGNoZWQ7CisJCX0KKwl9CisK KwkvKgorCSAqIFdlIGRpZG4ndCBmaW5kIHRoZSBibG9jayBpbiB0aGUgTFJVLCBzbyBzdG9y ZSBpdCBlaXRoZXIgaW4gYW4gZW1wdHkKKwkgKiBlbnRyeSwgb3IgaW4gdGhlICJvbGRlc3Qi IHByZWZldGNoIHJlcXVlc3QgaW4gdGhpcyBMUlUuCisJICovCisJQXNzZXJ0KChvbGRlc3RJ bmRleCA+PSAwKSAmJiAob2xkZXN0SW5kZXggPCBQUkVGRVRDSF9MUlVfU0laRSkpOworCisJ ZW50cnkgPSAmcHJlZmV0Y2gtPnByZWZldGNoQ2FjaGVbbHJ1ICogUFJFRkVUQ0hfTFJVX1NJ WkUgKyBvbGRlc3RJbmRleF07CisKKwllbnRyeS0+YmxvY2sgPSBibG9jazsKKwllbnRyeS0+ cmVxdWVzdCA9ICsrcHJlZmV0Y2gtPnByZWZldGNoUmVxTnVtYmVyOworCisJLyogbm90IGlu IHRoZSBwcmVmZXRjaCBjYWNoZSAqLworCXJldHVybiBmYWxzZTsKK30KIAogLyoKICAqIERv IHByZWZldGNoaW5nLCBhbmQgZ3JhZHVhbGx5IGluY3JlYXNlIHRoZSBwcmVmZXRjaCBkaXN0 YW5jZS4KQEAgLTExMzgsNyArMTI0Miw2IEBAIGluZGV4X3ByZWZldGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAKIAkJZm9yIChpbnQgaSA9IHN0YXJ0SW5k ZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykKIAkJewotCQkJYm9vbAkJcmVjZW50bHlfcHJlZmV0 Y2hlZCA9IGZhbHNlOwogCQkJQmxvY2tOdW1iZXIJYmxvY2s7CiAKIAkJCWJsb2NrID0gcHJl ZmV0Y2gtPmdldF9ibG9jayhzY2FuLCBkaXIsIGkpOwpAQCAtMTE0OSwzNSArMTI1MiwxMiBA QCBpbmRleF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQkJICogVGhpcyBoYXBwZW5zIGUuZy4gZm9yIGNsdXN0ZXJlZCBvciBuYXR1cmFsbHkg Y29ycmVsYXRlZCBpbmRleGVzCiAJCQkgKiAoZmtleSB0byBhIHNlcXVlbmNlIElEKS4gSXQn cyBub3QgZXhwZW5zaXZlICh0aGUgYmxvY2sgaXMgaW4gcGFnZQogCQkJICogY2FjaGUgYWxy ZWFkeSwgc28gbm8gSS9PKSwgYnV0IGl0J3Mgbm90IGZyZWUgZWl0aGVyLgotCQkJICoKLQkJ CSAqIFhYWCBXZSBjYW4ndCBqdXN0IGNoZWNrIGJsb2NrcyBiZXR3ZWVuIHN0YXJ0SW5kZXgg YW5kIGVuZEluZGV4LAotCQkJICogYmVjYXVzZSBhdCBzb21lIHBvaW50IChhZnRlciB0aGUg cGVmZXRjaCB0YXJnZXQgZ2V0cyByYW1wZWQgdXApCi0JCQkgKiBpdCdzIGdvaW5nIHRvIGJl IGp1c3QgYSBzaW5nbGUgYmxvY2suCi0JCQkgKgotCQkJICogWFhYIFRoZSBzb2x1dGlvbiBo ZXJlIGlzIHByZXR0eSB0cml2aWFsIC0gd2UganVzdCBjaGVjayB0aGUKLQkJCSAqIGltbWVk aWF0ZWx5IHByZWNlZGluZyBibG9jay4gV2UgY291bGQgY2hlY2sgYSBsb25nZXIgaGlzdG9y eSwgb3IKLQkJCSAqIG1heWJlIG1haW50YWluIHNvbWUgImFscmVhZHkgcHJlZmV0Y2hlZCIg c3RydWN0IChzbWFsbCBMUlUgYXJyYXkKLQkJCSAqIG9mIGxhc3QgcHJlZmV0Y2hlZCBibG9j a3MgLSBzYXkgOCBibG9ja3Mgb3Igc28gLSB3b3VsZCB3b3JrIGZpbmUsCi0JCQkgKiBJIHRo aW5rKS4KIAkJCSAqLwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCi0JCQl7Ci0J CQkJLyogdGhlIGNhY2hlZCBibG9jayBtaWdodCBiZSBJbnZhbGlkQmxvY2tOdW1iZXIsIGJ1 dCB0aGF0J3MgZmluZSAqLwotCQkJCWlmIChwcmVmZXRjaC0+Y2FjaGVCbG9ja3Nbal0gPT0g YmxvY2spCi0JCQkJewotCQkJCQlyZWNlbnRseV9wcmVmZXRjaGVkID0gdHJ1ZTsKLQkJCQkJ YnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAocmVjZW50bHlfcHJlZmV0Y2hlZCkKKwkJ CWlmIChpbmRleF9wcmVmZXRjaF9hZGRfY2FjaGUocHJlZmV0Y2gsIGJsb2NrKSkKIAkJCQlj b250aW51ZTsKIAogCQkJUHJlZmV0Y2hCdWZmZXIoc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlO X0ZPUktOVU0sIGJsb2NrKTsKIAkJCXBnQnVmZmVyVXNhZ2UuYmxrc19wcmVmZXRjaGVzKys7 Ci0KLQkJCXByZWZldGNoLT5jYWNoZUJsb2Nrc1twcmVmZXRjaC0+Y2FjaGVJbmRleF0gPSBi bG9jazsKLQkJCXByZWZldGNoLT5jYWNoZUluZGV4ID0gKHByZWZldGNoLT5jYWNoZUluZGV4 ICsgMSkgJSA4OwogCQl9CiAKIAkJcHJlZmV0Y2gtPnByZWZldGNoSW5kZXggPSBlbmRJbmRl eDsKQEAgLTEyMDYsNyArMTI4Niw2IEBAIGluZGV4X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAKIAkJZm9yIChpbnQgaSA9IGVuZEluZGV4OyBp ID49IHN0YXJ0SW5kZXg7IGktLSkKIAkJewotCQkJYm9vbAkJcmVjZW50bHlfcHJlZmV0Y2hl ZCA9IGZhbHNlOwogCQkJQmxvY2tOdW1iZXIJYmxvY2s7CiAKIAkJCWJsb2NrID0gcHJlZmV0 Y2gtPmdldF9ibG9jayhzY2FuLCBkaXIsIGkpOwpAQCAtMTIxNywzNSArMTI5NiwxMiBAQCBp bmRleF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQkJICogVGhpcyBoYXBwZW5zIGUuZy4gZm9yIGNsdXN0ZXJlZCBvciBuYXR1cmFsbHkgY29y cmVsYXRlZCBpbmRleGVzCiAJCQkgKiAoZmtleSB0byBhIHNlcXVlbmNlIElEKS4gSXQncyBu b3QgZXhwZW5zaXZlICh0aGUgYmxvY2sgaXMgaW4gcGFnZQogCQkJICogY2FjaGUgYWxyZWFk eSwgc28gbm8gSS9PKSwgYnV0IGl0J3Mgbm90IGZyZWUgZWl0aGVyLgotCQkJICoKLQkJCSAq IFhYWCBXZSBjYW4ndCBqdXN0IGNoZWNrIGJsb2NrcyBiZXR3ZWVuIHN0YXJ0SW5kZXggYW5k IGVuZEluZGV4LAotCQkJICogYmVjYXVzZSBhdCBzb21lIHBvaW50IChhZnRlciB0aGUgcGVm ZXRjaCB0YXJnZXQgZ2V0cyByYW1wZWQgdXApCi0JCQkgKiBpdCdzIGdvaW5nIHRvIGJlIGp1 c3QgYSBzaW5nbGUgYmxvY2suCi0JCQkgKgotCQkJICogWFhYIFRoZSBzb2x1dGlvbiBoZXJl IGlzIHByZXR0eSB0cml2aWFsIC0gd2UganVzdCBjaGVjayB0aGUKLQkJCSAqIGltbWVkaWF0 ZWx5IHByZWNlZGluZyBibG9jay4gV2UgY291bGQgY2hlY2sgYSBsb25nZXIgaGlzdG9yeSwg b3IKLQkJCSAqIG1heWJlIG1haW50YWluIHNvbWUgImFscmVhZHkgcHJlZmV0Y2hlZCIgc3Ry dWN0IChzbWFsbCBMUlUgYXJyYXkKLQkJCSAqIG9mIGxhc3QgcHJlZmV0Y2hlZCBibG9ja3Mg LSBzYXkgOCBibG9ja3Mgb3Igc28gLSB3b3VsZCB3b3JrIGZpbmUsCi0JCQkgKiBJIHRoaW5r KS4KIAkJCSAqLwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCi0JCQl7Ci0JCQkJ LyogdGhlIGNhY2hlZCBibG9jayBtaWdodCBiZSBJbnZhbGlkQmxvY2tOdW1iZXIsIGJ1dCB0 aGF0J3MgZmluZSAqLwotCQkJCWlmIChwcmVmZXRjaC0+Y2FjaGVCbG9ja3Nbal0gPT0gYmxv Y2spCi0JCQkJewotCQkJCQlyZWNlbnRseV9wcmVmZXRjaGVkID0gdHJ1ZTsKLQkJCQkJYnJl YWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAocmVjZW50bHlfcHJlZmV0Y2hlZCkKKwkJCWlm IChpbmRleF9wcmVmZXRjaF9hZGRfY2FjaGUocHJlZmV0Y2gsIGJsb2NrKSkKIAkJCQljb250 aW51ZTsKIAogCQkJUHJlZmV0Y2hCdWZmZXIoc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZP UktOVU0sIGJsb2NrKTsKIAkJCXBnQnVmZmVyVXNhZ2UuYmxrc19wcmVmZXRjaGVzKys7Ci0K LQkJCXByZWZldGNoLT5jYWNoZUJsb2Nrc1twcmVmZXRjaC0+Y2FjaGVJbmRleF0gPSBibG9j azsKLQkJCXByZWZldGNoLT5jYWNoZUluZGV4ID0gKHByZWZldGNoLT5jYWNoZUluZGV4ICsg MSkgJSA4OwogCQl9CiAKIAkJcHJlZmV0Y2gtPnByZWZldGNoSW5kZXggPSBzdGFydEluZGV4 OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggYjFhMDJjYzliY2QuLjFh ZDU0OTBiOWFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTM4Nyw5 ICszODcsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5v cmRlcmJ5cywgaW50IHByZWZldGNoX21heGltdW0sIGludCBwcgogCQlwcmVmZXRjaGVyLT5w cmVmZXRjaE1heFRhcmdldCA9IHByZWZldGNoX21heGltdW07CiAJCXByZWZldGNoZXItPnBy ZWZldGNoUmVzZXQgPSBwcmVmZXRjaF9yZXNldDsKIAotCQlwcmVmZXRjaGVyLT5jYWNoZUlu ZGV4ID0gMDsKLQkJbWVtc2V0KHByZWZldGNoZXItPmNhY2hlQmxvY2tzLCAwLCBzaXplb2Yo QmxvY2tOdW1iZXIpICogOCk7Ci0KIAkJLyogY2FsbGJhY2tzICovCiAJCXByZWZldGNoZXIt PmdldF9ibG9jayA9IF9idF9wcmVmZXRjaF9nZXRibG9jazsKIAkJcHJlZmV0Y2hlci0+Z2V0 X3JhbmdlID0gX2J0X3ByZWZldGNoX2dldHJhbmdlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ3NjYW4uYwppbmRleCA3OTAxNTE5NGI3My4uYTFjNmJiN2IxMzkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jCkBAIC0zOTQsOSArMzk0LDYgQEAgc3BnYmVnaW5z Y2FuKFJlbGF0aW9uIHJlbCwgaW50IGtleXN6LCBpbnQgb3JkZXJieXN6LCBpbnQgcHJlZmV0 Y2hfbWF4aW11bSwgaW50IHAKIAkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBw cmVmZXRjaF9tYXhpbXVtOwogCQlwcmVmZXRjaGVyLT5wcmVmZXRjaFJlc2V0ID0gcHJlZmV0 Y2hfcmVzZXQ7CiAKLQkJcHJlZmV0Y2hlci0+Y2FjaGVJbmRleCA9IDA7Ci0JCW1lbXNldChw cmVmZXRjaGVyLT5jYWNoZUJsb2NrcywgMCwgc2l6ZW9mKEJsb2NrTnVtYmVyKSAqIDgpOwot CiAJCS8qIGNhbGxiYWNrcyAqLwogCQlwcmVmZXRjaGVyLT5nZXRfYmxvY2sgPSBzcGdpc3Rf cHJlZmV0Y2hfZ2V0YmxvY2s7CiAJCXByZWZldGNoZXItPmdldF9yYW5nZSA9IHNwZ2lzdF9w cmVmZXRjaF9nZXRyYW5nZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5k ZXggZDNhMTM2YjZmNTUuLmM3MjQ4ODc3ZjZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwpAQCAtMTEzMSw2ICsxMTMxLDggQEAgQ3JlYXRlUmVwbGljYXRpb25TbG90 KENyZWF0ZVJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQogCQkJbmVlZF9mdWxsX3NuYXBzaG90 ID0gdHJ1ZTsKIAkJfQogCisJCWVsb2coTE9HLCAic2xvdCA9ICVzICBuZWVkX2Z1bGxfc25h cHNob3QgPSAlZCIsIGNtZC0+c2xvdG5hbWUsIG5lZWRfZnVsbF9zbmFwc2hvdCk7CisKIAkJ Y3R4ID0gQ3JlYXRlSW5pdERlY29kaW5nQ29udGV4dChjbWQtPnBsdWdpbiwgTklMLCBuZWVk X2Z1bGxfc25hcHNob3QsCiAJCQkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIsCiAJCQkJCQkJ CQkJWExfUk9VVElORSgucGFnZV9yZWFkID0gbG9naWNhbF9yZWFkX3hsb2dfcGFnZSwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKaW5kZXggNmE1MDBjNWFhMWYuLmMwMWMzNzk1MWNhIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaApAQCAtMjUwLDYgKzI1MCwzMiBAQCB0eXBlZGVmIEJsb2NrTnVtYmVyICgqcHJl ZmV0Y2hlcl9nZXRibG9ja19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsCiAJ CQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCQkJCSBp bnQgaW5kZXgpOwogCisvKgorICogQ2FjaGUgb2YgcmVjZW50bHkgcHJlZmV0Y2hlZCBibG9j a3MsIG9yZ2FuaXplZCBhcyBhIGhhc2ggdGFibGUgb2YKKyAqIHNtYWxsIExSVSBjYWNoZXMu IERvZXNuJ3QgbmVlZCB0byBiZSBwZXJmZWN0bHkgYWNjdXJhdGUsIGJ1dCB3ZQorICogYWlt IHRvIG1ha2UgZmFsc2UgcG9zaXRpdmVzL25lZ2F0aXZlcyByZWFzb25hYmx5IGxvdy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgUHJlZmV0Y2hDYWNoZUVudHJ5IHsKKwlCbG9ja051bWJlcgkJ YmxvY2s7CisJdWludDY0CQkJcmVxdWVzdDsKK30gUHJlZmV0Y2hDYWNoZUVudHJ5OworCisv KgorICogU2l6ZSBvZiB0aGUgY2FjaGUgb2YgcmVjZW50bHkgcHJlZmV0Y2hlZCBibG9ja3Mg LSBzaG91bGRuJ3QgYmUgdG9vCisgKiBzbWFsbCBvciB0b28gbGFyZ2UuIDEwMjQgc2VlbXMg YWJvdXQgcmlnaHQsIGl0IGNvdmVycyB+OE1CIG9mIGRhdGEuCisgKiBJdCdzIHNvbWV3aGF0 IGFyYml0cmFyeSwgdGhlcmUncyBubyBwYXJ0aWN1bGFyIGZvcm11bGEgc2F5aW5nIGl0Cisg KiBzaG91bGQgbm90IGJlIGhpZ2hlci9sb3dlci4KKyAqCisgKiBUaGUgY2FjaGUgaXMgc3Ry dWN0dXJlZCBhcyBhbiBhcnJheSBvZiBzbWFsbCBMUlUgY2FjaGVzLCBzbyB0aGUgdG90YWwK KyAqIHNpemUgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiBMUlUgc2l6ZS4gVGhlIExSVSBz aG91bGQgYmUgdGlueSB0bworICoga2VlcCBsaW5lYXIgc2VhcmNoIGNoZWFwIGVub3VnaC4K KyAqCisgKiBYWFggTWF5YmUgd2UgY291bGQgY29uc2lkZXIgZWZmZWN0aXZlX2NhY2hlX3Np emUgb3Igc29tZXRoaW5nPworICovCisjZGVmaW5lCQlQUkVGRVRDSF9MUlVfU0laRQkJOAor I2RlZmluZQkJUFJFRkVUQ0hfTFJVX0NPVU5UCQkxMjgKKyNkZWZpbmUJCVBSRUZFVENIX0NB Q0hFX1NJWkUJCShQUkVGRVRDSF9MUlVfU0laRSAqIFBSRUZFVENIX0xSVV9DT1VOVCkKKwog dHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaERhdGEKIHsKIAkvKgpAQCAtMjYyLDE3ICsy ODgsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaERhdGEKIAlpbnQJCQlwcmVm ZXRjaE1heFRhcmdldDsJLyogbWF4aW11bSBwcmVmZXRjaGluZyBkaXN0YW5jZSAqLwogCWlu dAkJCXByZWZldGNoUmVzZXQ7CS8qIHJlc2V0IHRvIHRoaXMgZGlzdGFuY2Ugb24gcmVzY2Fu ICovCiAKLQkvKgotCSAqIGEgc21hbGwgTFJVIGNhY2hlIG9mIHJlY2VudGx5IHByZWZldGNo ZWQgYmxvY2tzCi0JICoKLQkgKiBYWFggbmVlZHMgdG8gYmUgdGlueSwgdG8gbWFrZSB0aGUg KGZyZXF1ZW50KSBzZWFyY2hlcyB2ZXJ5IGNoZWFwCi0JICovCi0JQmxvY2tOdW1iZXIJY2Fj aGVCbG9ja3NbOF07Ci0JaW50CQkJY2FjaGVJbmRleDsKLQogCXByZWZldGNoZXJfZ2V0Ymxv Y2tfZnVuY3Rpb24JZ2V0X2Jsb2NrOwogCXByZWZldGNoZXJfZ2V0cmFuZ2VfZnVuY3Rpb24J Z2V0X3JhbmdlOwogCisJLyoKKwkgKiBDYWNoZSBvZiByZWNlbnRseSBwcmVmZXRjaGVkIGJs b2Nrcywgb3JnYW5pemVkIGFzIGEgaGFzaCB0YWJsZSBvZgorCSAqIHNtYWxsIExSVSBjYWNo ZXMuCisJICovCisJdWludDY0CQkJCXByZWZldGNoUmVxTnVtYmVyOworCVByZWZldGNoQ2Fj aGVFbnRyeQlwcmVmZXRjaENhY2hlW1BSRUZFVENIX0NBQ0hFX1NJWkVdOworCiB9IEluZGV4 UHJlZmV0Y2hEYXRhOwogCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwotLSAKMi40MC4x Cgo= --------------cTFulINgWkvXmj1LM3tLLV5J Content-Type: text/x-patch; charset=UTF-8; name="0001-index-prefetch-poc-v1.patch" Content-Disposition: attachment; filename="0001-index-prefetch-poc-v1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmxvb20uaCBiL2NvbnRyaWIvYmxvb20vYmxv b20uaAppbmRleCBlZmRmOTQxNWQxNS4uOWIzNjI1ZDgzM2IgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYmxvb20vYmxvb20uaAorKysgYi9jb250cmliL2Jsb29tL2Jsb29tLmgKQEAgLTE5Myw3 ICsxOTMsNyBAQCBleHRlcm4gYm9vbCBibGluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0g KnZhbHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgSW5kZXhVbmlxdWVDaGVjayBjaGVja1Vu aXF1ZSwKIAkJCQkJIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCSBzdHJ1Y3QgSW5kZXhJ bmZvICppbmRleEluZm8pOwotZXh0ZXJuIEluZGV4U2NhbkRlc2MgYmxiZWdpbnNjYW4oUmVs YXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiBJbmRleFNjYW5E ZXNjIGJsYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywg aW50IHByZWZldGNoLCBpbnQgcHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIGludDY0IGJsZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZv aWQgYmxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmxzY2FuLmMgYi9jb250cmliL2Jsb29tL2Jsc2Nh bi5jCmluZGV4IDZjYzdkMDcxNjRhLi4wYzZkYTFiNjM1YiAxMDA2NDQKLS0tIGEvY29udHJp Yi9ibG9vbS9ibHNjYW4uYworKysgYi9jb250cmliL2Jsb29tL2Jsc2Nhbi5jCkBAIC0yNSw3 ICsyNSw3IEBACiAgKiBCZWdpbiBzY2FuIG9mIGJsb29tIGluZGV4LgogICovCiBJbmRleFNj YW5EZXNjCi1ibGJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpCitibGJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMs IGludCBwcmVmZXRjaF90YXJnZXQsIGludCBwcmVmZXRjaF9yZXNldCkKIHsKIAlJbmRleFNj YW5EZXNjIHNjYW47CiAJQmxvb21TY2FuT3BhcXVlIHNvOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJp bi5jCmluZGV4IDNjNmE5NTZlYWEzLi41YjI5OGMwMmNjZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW4uYwpAQCAtMzI0LDcgKzMyNCw3IEBAIGJyaW5pbnNlcnQoUmVsYXRpb24gaWR4UmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKICAqIGhvbGRpbmcgbG9jayBvbiBpbmRl eCwgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHJlY29tcHV0ZSBpdCBkdXJpbmcgYnJpbnJlc2Nh bi4KICAqLwogSW5kZXhTY2FuRGVzYwotYnJpbmJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpCiticmluYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBu a2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZldGNoX21heGltdW0sIGludCBwcmVmZXRj aF9yZXNldCkKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47CiAJQnJpbk9wYXF1ZSAqb3BhcXVl OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5zY2FuLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbnNjYW4uYwppbmRleCBhZTdiMGU5YmI4Ny4uMzA4N2E5 ODZiYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luc2Nhbi5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luc2Nhbi5jCkBAIC0yMiw3ICsyMiw3IEBA CiAKIAogSW5kZXhTY2FuRGVzYwotZ2luYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKQorZ2luYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzLCBpbnQgcHJlZmV0Y2hfbWF4aW11bSwgaW50IHByZWZldGNo X3Jlc2V0KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAlHaW5TY2FuT3BhcXVlIHNvOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jCmluZGV4IGUyYzliNWYwNjljLi43Yjc5MTI4 ZjJjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYwpAQCAtNDkzLDEyICs0OTMs MTYgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0g KnBhZ2VJdGVtLAogCiAJCQlpZiAoR2lzdFBhZ2VJc0xlYWYocGFnZSkpCiAJCQl7CisJCQkJ QmxvY2tOdW1iZXIJCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXQtPnRf dGlkKTsKKwogCQkJCS8qIENyZWF0aW5nIGhlYXAtdHVwbGUgR0lTVFNlYXJjaEl0ZW0gKi8K IAkJCQlpdGVtLT5ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKIAkJCQlpdGVtLT5kYXRh LmhlYXAuaGVhcFB0ciA9IGl0LT50X3RpZDsKIAkJCQlpdGVtLT5kYXRhLmhlYXAucmVjaGVj ayA9IHJlY2hlY2s7CiAJCQkJaXRlbS0+ZGF0YS5oZWFwLnJlY2hlY2tEaXN0YW5jZXMgPSBy ZWNoZWNrX2Rpc3RhbmNlczsKIAorCQkJCVByZWZldGNoQnVmZmVyKHNjYW4tPmhlYXBSZWxh dGlvbiwgTUFJTl9GT1JLTlVNLCBibG9jayk7CisKIAkJCQkvKgogCQkJCSAqIEluIGFuIGlu ZGV4LW9ubHkgc2NhbiwgYWxzbyBmZXRjaCB0aGUgZGF0YSBmcm9tIHRoZSB0dXBsZS4KIAkJ CQkgKi8KQEAgLTUyOSw2ICs1MzMsOCBAQCBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJfQogCiAJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOworCisJc28tPmRpZFJlc2V0ID0gdHJ1ZTsKIH0KIAogLyoKQEAgLTY3 OSw2ICs2ODUsOCBAQCBnaXN0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAogCQkJCXNvLT5jdXJQYWdlRGF0YSsrOwogCisJCQkJaW5kZXhfcHJl ZmV0Y2goc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCiAJCQkJcmV0dXJuIHRydWU7 CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2Fu LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCmluZGV4IDAwNDAwNTgz YzBiLi5mZGY5NzhlYWFhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCkBA IC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIAorc3RhdGljIHZvaWQgZ2lzdF9wcmVmZXRjaF9nZXRyYW5nZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgKnN0YXJ0LCBpbnQg KmVuZCwgYm9vbCAqcmVzZXQpOworc3RhdGljIEJsb2NrTnVtYmVyIGdpc3RfcHJlZmV0Y2hf Z2V0YmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgaW50IGlu ZGV4KTsKIAogLyoKICAqIFBhaXJpbmcgaGVhcCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0 aGUgR0lTVFNlYXJjaEl0ZW0gcXVldWUKQEAgLTcxLDcgKzczLDcgQEAgcGFpcmluZ2hlYXBf R0lTVFNlYXJjaEl0ZW1fY21wKGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmEsIGNvbnN0IHBh aXJpbmdoZWFwX25vZGUKICAqLwogCiBJbmRleFNjYW5EZXNjCi1naXN0YmVnaW5zY2FuKFJl bGF0aW9uIHIsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKK2dpc3RiZWdpbnNjYW4oUmVs YXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBpbnQgcHJlZmV0Y2hfbWF4aW11 bSwgaW50IHByZWZldGNoX3Jlc2V0KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAlHSVNU U1RBVEUgICpnaXN0c3RhdGU7CkBAIC0xMTEsNiArMTEzLDMxIEBAIGdpc3RiZWdpbnNjYW4o UmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5jdXJCbGtubyA9 IEludmFsaWRCbG9ja051bWJlcjsKIAlzby0+Y3VyUGFnZUxTTiA9IEludmFsaWRYTG9nUmVj UHRyOwogCisJLyoKKwkgKiBYWFggbWF5YmUgc2hvdWxkIGhhcHBlbiBpbiBSZWxhdGlvbkdl dEluZGV4U2Nhbj8gQnV0IHdlIG5lZWQgdG8gZGVmaW5lCisJICogdGhlIGNhbGxhY2tzLCBz byB0aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlIC4uLgorCSAqCisJICogWFhYIERvIHdlIG5l ZWQgdG8gZG8gc29tZXRoaW5nIGZvciBzby0+bWFya1Bvcz8KKwkgKi8KKwlpZiAocHJlZmV0 Y2hfbWF4aW11bSA+IDApCisJeworCQlJbmRleFByZWZldGNoIHByZWZldGNoZXIgPSBwYWxs b2MwKHNpemVvZihJbmRleFByZWZldGNoRGF0YSkpOworCisJCXByZWZldGNoZXItPnByZWZl dGNoSW5kZXggPSAtMTsKKwkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hUYXJnZXQgPSAtMzsKKwkJ cHJlZmV0Y2hlci0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBwcmVmZXRjaF9tYXhpbXVtOworCQlw cmVmZXRjaGVyLT5wcmVmZXRjaFJlc2V0ID0gcHJlZmV0Y2hfcmVzZXQ7CisKKwkJcHJlZmV0 Y2hlci0+Y2FjaGVJbmRleCA9IDA7CisJCW1lbXNldChwcmVmZXRjaGVyLT5jYWNoZUJsb2Nr cywgMCwgc2l6ZW9mKEJsb2NrTnVtYmVyKSAqIDgpOworCisJCS8qIGNhbGxiYWNrcyAqLwor CQlwcmVmZXRjaGVyLT5nZXRfYmxvY2sgPSBnaXN0X3ByZWZldGNoX2dldGJsb2NrOworCQlw cmVmZXRjaGVyLT5nZXRfcmFuZ2UgPSBnaXN0X3ByZWZldGNoX2dldHJhbmdlOworCisJCXNj YW4tPnhzX3ByZWZldGNoID0gcHJlZmV0Y2hlcjsKKwl9CisKIAlzY2FuLT5vcGFxdWUgPSBz bzsKIAogCS8qCkBAIC0zNTYsMyArMzgzLDQyIEBAIGdpc3RlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIAkgKi8KIAlmcmVlR0lTVHN0YXRlKHNvLT5naXN0c3RhdGUpOwogfQorCitz dGF0aWMgdm9pZAorZ2lzdF9wcmVmZXRjaF9nZXRyYW5nZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgKnN0YXJ0LCBpbnQgKmVuZCwgYm9vbCAqcmVzZXQp Cit7CisJR0lTVFNjYW5PcGFxdWUJc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKKworCS8qIGRpZCB3ZSByZWJ1aWxkIHRoZSBhcnJheSBvZiB0dXBsZSBwb2ludGVycz8g Ki8KKwkqcmVzZXQgPSBzby0+ZGlkUmVzZXQ7CisJc28tPmRpZFJlc2V0ID0gZmFsc2U7CisK KwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCXsKKwkJLyogRGlkIHdlIGFs cmVhZHkgcHJvY2VzcyB0aGUgaXRlbSBvciBpcyBpdCBpbnZhbGlkPyAqLworCQkqc3RhcnQg PSBzby0+Y3VyUGFnZURhdGE7CisJCSplbmQgPSAoc28tPm5QYWdlRGF0YSAtIDEpOworCX0K KwllbHNlCisJeworCQkqc3RhcnQgPSAwOworCQkqZW5kID0gc28tPmN1clBhZ2VEYXRhOwor CX0KK30KKworc3RhdGljIEJsb2NrTnVtYmVyCitnaXN0X3ByZWZldGNoX2dldGJsb2NrKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCBpbmRleCkKK3sKKwlH SVNUU2Nhbk9wYXF1ZQlzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUl0 ZW1Qb2ludGVyCQl0aWQ7CisKKwlpZiAoKGluZGV4IDwgc28tPmN1clBhZ2VEYXRhKSB8fCAo aW5kZXggPj0gc28tPm5QYWdlRGF0YSkpCisJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7 CisKKwkvKiBnZXQgdGhlIHR1cGxlIElEIGFuZCBleHRyYWN0IHRoZSBibG9jayBudW1iZXIg Ki8KKwl0aWQgPSAmc28tPnBhZ2VEYXRhW2luZGV4XS5oZWFwUHRyOworCisJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCh0aWQpKTsKKworCXJldHVybiBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZmM1ZDk3ZjYw NmUuLjAxYTI1MTMyYmNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00OCw2ICs0 OCw5IEBAIHN0YXRpYyB2b2lkIGhhc2hidWlsZENhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAog CQkJCQkJCSAgYm9vbCB0dXBsZUlzQWxpdmUsCiAJCQkJCQkJICB2b2lkICpzdGF0ZSk7CiAK K3N0YXRpYyB2b2lkIF9oYXNoX3ByZWZldGNoX2dldHJhbmdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCAqc3RhcnQsIGludCAqZW5kLCBib29sICpyZXNl dCk7CitzdGF0aWMgQmxvY2tOdW1iZXIgX2hhc2hfcHJlZmV0Y2hfZ2V0YmxvY2soSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgaW50IGluZGV4KTsKKwogCiAvKgog ICogSGFzaCBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBh Y2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKQEAgLTM2Miw3ICszNjUsNyBAQCBoYXNoZ2V0Yml0 bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAgKgloYXNoYmVnaW5z Y2FuKCkgLS0gc3RhcnQgYSBzY2FuIG9uIGEgaGFzaCBpbmRleAogICovCiBJbmRleFNjYW5E ZXNjCi1oYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVy YnlzKQoraGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cywgaW50IHByZWZldGNoX21heGltdW0sIGludCBwcmVmZXRjaF9yZXNldCkKIHsKIAlJ bmRleFNjYW5EZXNjIHNjYW47CiAJSGFzaFNjYW5PcGFxdWUgc287CkBAIC0zODMsNiArMzg2 LDMxIEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKIAlzby0+bnVtS2lsbGVkID0gMDsK IAorCS8qCisJICogWFhYIG1heWJlIHNob3VsZCBoYXBwZW4gaW4gUmVsYXRpb25HZXRJbmRl eFNjYW4/IEJ1dCB3ZSBuZWVkIHRvIGRlZmluZQorCSAqIHRoZSBjYWxsYWNrcywgc28gdGhh dCBuZWVkcyB0byBoYXBwZW4gaGVyZSAuLi4KKwkgKgorCSAqIFhYWCBEbyB3ZSBuZWVkIHRv IGRvIHNvbWV0aGluZyBmb3Igc28tPm1hcmtQb3M/CisJICovCisJaWYgKHByZWZldGNoX21h eGltdW0gPiAwKQorCXsKKwkJSW5kZXhQcmVmZXRjaCBwcmVmZXRjaGVyID0gcGFsbG9jMChz aXplb2YoSW5kZXhQcmVmZXRjaERhdGEpKTsKKworCQlwcmVmZXRjaGVyLT5wcmVmZXRjaElu ZGV4ID0gLTE7CisJCXByZWZldGNoZXItPnByZWZldGNoVGFyZ2V0ID0gLTM7CisJCXByZWZl dGNoZXItPnByZWZldGNoTWF4VGFyZ2V0ID0gcHJlZmV0Y2hfbWF4aW11bTsKKwkJcHJlZmV0 Y2hlci0+cHJlZmV0Y2hSZXNldCA9IHByZWZldGNoX3Jlc2V0OworCisJCXByZWZldGNoZXIt PmNhY2hlSW5kZXggPSAwOworCQltZW1zZXQocHJlZmV0Y2hlci0+Y2FjaGVCbG9ja3MsIDAs IHNpemVvZihCbG9ja051bWJlcikgKiA4KTsKKworCQkvKiBjYWxsYmFja3MgKi8KKwkJcHJl ZmV0Y2hlci0+Z2V0X2Jsb2NrID0gX2hhc2hfcHJlZmV0Y2hfZ2V0YmxvY2s7CisJCXByZWZl dGNoZXItPmdldF9yYW5nZSA9IF9oYXNoX3ByZWZldGNoX2dldHJhbmdlOworCisJCXNjYW4t PnhzX3ByZWZldGNoID0gcHJlZmV0Y2hlcjsKKwl9CisKIAlzY2FuLT5vcGFxdWUgPSBzbzsK IAogCXJldHVybiBzY2FuOwpAQCAtOTE4LDMgKzk0Niw0MiBAQCBoYXNoYnVja2V0Y2xlYW51 cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwK IAllbHNlCiAJCUxvY2tCdWZmZXIoYnVja2V0X2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsK IH0KKworc3RhdGljIHZvaWQKK19oYXNoX3ByZWZldGNoX2dldHJhbmdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCAqc3RhcnQsIGludCAqZW5kLCBib29s ICpyZXNldCkKK3sKKwlIYXNoU2Nhbk9wYXF1ZQlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCisJLyogZGlkIHdlIHJlYnVpbGQgdGhlIGFycmF5IG9mIHR1cGxlIHBv aW50ZXJzPyAqLworCSpyZXNldCA9IHNvLT5jdXJyUG9zLmRpZFJlc2V0OworCXNvLT5jdXJy UG9zLmRpZFJlc2V0ID0gZmFsc2U7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpKQorCXsKKwkJLyogRGlkIHdlIGFscmVhZHkgcHJvY2VzcyB0aGUgaXRlbSBvciBpcyBp dCBpbnZhbGlkPyAqLworCQkqc3RhcnQgPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJCSpl bmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwl9CisJZWxzZQorCXsKKwkJKnN0YXJ0ID0g c28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkqZW5kID0gc28tPmN1cnJQb3MuaXRlbUluZGV4 OworCX0KK30KKworc3RhdGljIEJsb2NrTnVtYmVyCitfaGFzaF9wcmVmZXRjaF9nZXRibG9j ayhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgaW5kZXgpCit7 CisJSGFzaFNjYW5PcGFxdWUJc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlJdGVtUG9pbnRlcgkJdGlkOworCisJaWYgKChpbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0 SXRlbSkgfHwgKGluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pKQorCQlyZXR1cm4gSW52 YWxpZEJsb2NrTnVtYmVyOworCisJLyogZ2V0IHRoZSB0dXBsZSBJRCBhbmQgZXh0cmFjdCB0 aGUgYmxvY2sgbnVtYmVyICovCisJdGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW2luZGV4XS5o ZWFwVGlkOworCisJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCh0aWQpKTsKKworCXJldHVy biBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoc2VhcmNoLmMKaW5kZXggOWVhMmE0MmEwN2YuLmI1Y2VhNWUyM2ViIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCkBAIC00MzQsNiArNDM0LDggQEAg X2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlj dXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwog CXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKIAorCWluZGV4X3ByZWZl dGNoKHNjYW4sIGRpcik7CisKIAkvKiBpZiB3ZSdyZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBm b3VuZCBhIHZhbGlkIHR1cGxlcyAqLwogCXJldHVybiB0cnVlOwogfQpAQCAtNDY3LDYgKzQ2 OSw3IEBAIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQ LCBTY2FuRGlyZWN0aW9uIGRpcikKIAogCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKIAlzby0+ Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJc28tPmN1 cnJQb3MuZGlkUmVzZXQgPSB0cnVlOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKIAl7CkBAIC01OTcsNiArNjAwLDcgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCX0KIAogCUFz c2VydChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwor CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IDY0NjEzNWNjMjFjLi5iMmY0ZWFkYzFlYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC00NCw2ICs0NCw3IEBACiAj aW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgog CiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxl LAogCQkJCQkJCQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCkBAIC03 NTYsNiArNzU3LDkgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRp b24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAkJCVBST0dSRVNTX0NMVVNURVJfSU5E RVhfUkVMSUQKIAkJfTsKIAkJaW50NjQJCWNpX3ZhbFsyXTsKKwkJaW50CQkJcHJlZmV0Y2hf dGFyZ2V0OworCisJCXByZWZldGNoX3RhcmdldCA9IGdldF90YWJsZXNwYWNlX2lvX2NvbmN1 cnJlbmN5KE9sZEhlYXAtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CiAKIAkJLyogU2V0IHBo YXNlIGFuZCBPSURPbGRJbmRleCB0byBjb2x1bW5zICovCiAJCWNpX3ZhbFswXSA9IFBST0dS RVNTX0NMVVNURVJfUEhBU0VfSU5ERVhfU0NBTl9IRUFQOwpAQCAtNzY0LDcgKzc2OCw4IEBA IGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJl bGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBO VUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgs IFNuYXBzaG90QW55LCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9s ZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCwKKwkJCQkJCQkJCXByZWZldGNo X3RhcmdldCwgcHJlZmV0Y2hfdGFyZ2V0KTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2Nhbiwg TlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKaW5kZXggNzIyOTI3YWViYWIuLjI2NGViZTFkOGU1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwpAQCAtMTI2LDYgKzEyNiw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2Fu LT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCS8q IHNldCBpbiBlYWNoIEFNIHdoZW4gYXBwbGljYWJsZSAqLworCXNjYW4tPnhzX3ByZWZldGNo ID0gTlVMTDsKKwogCXJldHVybiBzY2FuOwogfQogCkBAIC00NDAsOCArNDQzLDkgQEAgc3lz dGFibGVfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9S LCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCQl9CiAKKwkJLyogbm8gaW5kZXggcHJl ZmV0Y2ggZm9yIHN5c3RlbSBjYXRhbG9ncyAqLwogCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCi0JCQkJCQkJCQkJIHNuYXBzaG90LCBu a2V5cywgMCk7CisJCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCwgMCwgMCk7CiAJCWlu ZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2Nhbiwga2V5LCBua2V5cywgTlVMTCwgMCk7CiAJCXN5 c3NjYW4tPnNjYW4gPSBOVUxMOwogCX0KQEAgLTY5Niw4ICs3MDAsOSBAQCBzeXN0YWJsZV9i ZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQllbG9nKEVSUk9S LCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAorCS8qIG5vIGluZGV4IHByZWZl dGNoIGZvciBzeXN0ZW0gY2F0YWxvZ3MgKi8KIAlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkgc25hcHNo b3QsIG5rZXlzLCAwKTsKKwkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDAsIDAsIDApOwog CWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2Nhbiwga2V5LCBua2V5cywgTlVMTCwgMCk7CiAJ c3lzc2Nhbi0+c2NhbiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j CmluZGV4IGIyNWIwM2Y3YWJjLi5hYThhMTQ2MjRkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9idWZt Z3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRl ICJ1dGlscy9zeXNjYWNoZS5oIgpAQCAtMTA2LDcgKzEwNyw4IEBAIGRvIHsgXAogCiBzdGF0 aWMgSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBw c2NhbiwgYm9vbCB0ZW1wX3NuYXApOworCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2Fu RGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAsCisJCQkJCQkJCQkJCSAgaW50IHByZWZldGNo X3RhcmdldCwgaW50IHByZWZldGNoX3Jlc2V0KTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0y MDAsMTggKzIwMiwzNiBAQCBpbmRleF9pbnNlcnQoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK ICAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFt Z2V0dHVwbGUKICAqCiAgKiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHN1aXRhYmxlIGxvY2tz IG9uIHRoZSBoZWFwIGFuZCB0aGUgaW5kZXguCisgKgorICogcHJlZmV0Y2hfdGFyZ2V0IGRl dGVybWluZXMgaWYgcHJlZmV0Y2hpbmcgaXMgcmVxdWVzdGVkIGZvciB0aGlzIGluZGV4IHNj YW4uCisgKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZGlzYWJsZSB0aGlzIGZvciB0d28gcmVh c29ucy4gRmlyc3RseSwgd2UgZG9uJ3Qgd2FudAorICogdG8gZG8gcHJlZmV0Y2hpbmcgZm9y IElPUyAod2hlcmUgd2UgaG9wZSBtb3N0IG9mIHRoZSBoZWFwIHBhZ2VzIHdvbid0IGJlCisg KiByZWFsbHkgbmVlZGVkLiBTZWNvbmRseSwgd2UgbXVzdCBwcmV2ZW50IGluZmluaXRlIGxv b3Agd2hlbiBkZXRlcm1pbmluZworICogcHJlZmV0Y2ggdmFsdWUgZm9yIHRoZSB0YWJsZXNw YWNlIC0gdGhlIGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KCkKKyAqIGRvZXMgYW4g aW5kZXggc2NhbiBpbnRlcm5hbGx5LCB3aGljaCB3b3VsZCByZXN1bHQgaW4gaW5maW5pdGUg bG9vcC4gU28gd2UKKyAqIHNpbXBseSBkaXNhYmxlIHByZWZldGNoaW5nIGluIHN5c3RhYmxl X2JlZ2luc2NhbigpLgorICoKKyAqIFhYWCBNYXliZSB3ZSBzaG91bGQgZG8gcHJlZmV0Y2hp bmcgZXZlbiBmb3IgY2F0YWxvZ3MsIGJ1dCB0aGVuIGRpc2FibGUgaXQKKyAqIHdoZW4gYWNj ZXNzaW5nIFRhYmxlU3BhY2VSZWxhdGlvbklkLiBXZSBzdGlsbCBuZWVkIHRoZSBhYmlsaXR5 IHRvIGRpc2FibGUKKyAqIHRoaXMgYW5kIGNhdGFsb2dzIGFyZSBleHBlY3RlZCB0byBiZSB0 aW55LCBzbyBwcmVmZXRjaGluZyBpcyB1bmxpa2VseSB0bworICogbWFrZSBhIGRpZmZlcmVu Y2UuCisgKgorICogWFhYIFRoZSBzZWNvbmQgcmVhc29uIGRvZXNuJ3QgcmVhbGx5IGFwcGx5 IGFmdGVyIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeQorICogbG9va3VwIG1vdmVkIHRvIGNh bGxlciBvZiBpbmRleF9iZWdpbnNjYW4uCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2Jl Z2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQlpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCisJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAorCQkJCWludCBwcmVmZXRj aF90YXJnZXQsIGludCBwcmVmZXRjaF9yZXNldCkKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47 CiAKIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAotCXNjYW4gPSBp bmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5 cywgc25hcHNob3QsIE5VTEwsIGZhbHNlKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2lu dGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LCBOVUxM LCBmYWxzZSwKKwkJCQkJCQkJCXByZWZldGNoX3RhcmdldCwgcHJlZmV0Y2hfcmVzZXQpOwog CiAJLyoKIAkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVz Yy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0CkBAIC0yNDEsNyArMjYxLDggQEAgaW5kZXhf YmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiAJQXNzZXJ0KHNu YXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CiAKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu X2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBzbmFwc2hvdCwgTlVMTCwgZmFs c2UpOworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwg bmtleXMsIDAsIHNuYXBzaG90LCBOVUxMLCBmYWxzZSwKKwkJCQkJCQkJCTAsIDApOyAvKiBu byBwcmVmZXRjaCAqLwogCiAJLyoKIAkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBp bnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0CkBAIC0yNTgsNyAr Mjc5LDggQEAgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9u LAogc3RhdGljIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywg U25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2Fu LCBib29sIHRlbXBfc25hcCkKKwkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4s IGJvb2wgdGVtcF9zbmFwLAorCQkJCQkJIGludCBwcmVmZXRjaF90YXJnZXQsIGludCBwcmVm ZXRjaF9yZXNldCkKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47CiAKQEAgLTI3Niw4ICsyOTgs OCBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK IAkvKgogCSAqIFRlbGwgdGhlIEFNIHRvIG9wZW4gYSBzY2FuLgogCSAqLwotCXNjYW4gPSBp bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1iZWdpbnNjYW4oaW5kZXhSZWxhdGlvbiwgbmtl eXMsCi0JCQkJCQkJCQkJCQlub3JkZXJieXMpOworCXNjYW4gPSBpbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1iZWdpbnNjYW4oaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywK KwkJCQkJCQkJCQkJCXByZWZldGNoX3RhcmdldCwgcHJlZmV0Y2hfcmVzZXQpOwogCS8qIElu aXRpYWxpemUgaW5mb3JtYXRpb24gZm9yIHBhcmFsbGVsIHNjYW4uICovCiAJc2Nhbi0+cGFy YWxsZWxfc2NhbiA9IHBzY2FuOwogCXNjYW4tPnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsK QEAgLTMxNyw2ICszMzksMTYgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlz LCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CisKKwkvKiBJZiB3 ZSdyZSBwcmVmZXRjaGluZyBmb3IgdGhpcyBpbmRleCwgbWF5YmUgcmVzZXQgc29tZSBvZiB0 aGUgc3RhdGUuICovCisJaWYgKHNjYW4tPnhzX3ByZWZldGNoICE9IE5VTEwpCisJeworCQlJ bmRleFByZWZldGNoIHByZWZldGNoZXIgPSBzY2FuLT54c19wcmVmZXRjaDsKKworCQlwcmVm ZXRjaGVyLT5wcmVmZXRjaEluZGV4ID0gLTE7CisJCXByZWZldGNoZXItPnByZWZldGNoVGFy Z2V0ID0gTWluKHByZWZldGNoZXItPnByZWZldGNoVGFyZ2V0LAorCQkJCQkJCQkJCSBwcmVm ZXRjaGVyLT5wcmVmZXRjaFJlc2V0KTsKKwl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K QEAgLTQ4NywxMCArNTE5LDEzIEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKICAqIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwg aW5kZXggc2NhbgogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgc3VpdGFibGUgbG9j a3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KKyAqCisgKiBYWFggU2VlIGluZGV4X2Jl Z2luc2NhbigpIGZvciBtb3JlIGNvbW1lbnRzIG9uIHByZWZldGNoX3RhcmdldC4KICAqLwog SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMsCi0JCQkJCQkgaW50IG5vcmRlcmJ5 cywgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQorCQkJCQkJIGludCBub3JkZXJieXMs IFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCSBpbnQgcHJlZmV0Y2hfdGFy Z2V0LCBpbnQgcHJlZmV0Y2hfcmVzZXQpCiB7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJSW5k ZXhTY2FuRGVzYyBzY2FuOwpAQCAtNDk5LDcgKzUzNCw3IEBAIGluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwgaW50IG5rZXlz LAogCXNuYXBzaG90ID0gUmVzdG9yZVNuYXBzaG90KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRh KTsKIAlSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwKLQkJ CQkJCQkJCXBzY2FuLCB0cnVlKTsKKwkJCQkJCQkJCXBzY2FuLCB0cnVlLCBwcmVmZXRjaF90 YXJnZXQsIHByZWZldGNoX3Jlc2V0KTsKIAogCS8qCiAJICogU2F2ZSBhZGRpdGlvbmFsIHBh cmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldApA QCAtNTU3LDYgKzU5Miw5IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfdHVw bGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEpOwogCisJLyogZG8gaW5kZXggcHJlZmV0Y2hp bmcsIGlmIG5lZWRlZCAqLworCWluZGV4X3ByZWZldGNoKHNjYW4sIGRpcmVjdGlvbik7CisK IAkvKiBSZXR1cm4gdGhlIFRJRCBvZiB0aGUgdHVwbGUgd2UgZm91bmQuICovCiAJcmV0dXJu ICZzY2FuLT54c19oZWFwdGlkOwogfQpAQCAtOTg4LDMgKzEwMjYsMjI4IEBAIGluZGV4X29w Y2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBpbmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBEYXR1 bSBhdHRvcHRpb25zLAogCiAJcmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9w dHMsIGF0dG9wdGlvbnMsIHZhbGlkYXRlKTsKIH0KKworCisKKy8qCisgKiBEbyBwcmVmZXRj aGluZywgYW5kIGdyYWR1YWxseSBpbmNyZWFzZSB0aGUgcHJlZmV0Y2ggZGlzdGFuY2UuCisg KgorICogWFhYIFRoaXMgaXMgbGltaXRlZCB0byBhIHNpbmdsZSBpbmRleCBwYWdlIChiZWNh dXNlIHRoYXQncyB3aGVyZSB3ZSBnZXQKKyAqIGN1cnJQb3MuaXRlbXMgZnJvbSkuIEJ1dCBp bmRleCB0dXBsZXMgYXJlIHR5cGljYWxseSB2ZXJ5IHNtYWxsLCBzbyB0aGVyZQorICogc2hv dWxkIGJlIHF1aXRlIGEgYml0IG9mIHN0dWZmIHRvIHByZWZldGNoIChlc3BlY2lhbGx5IHdp dGggZGVkdXBsaWNhdGVkCisgKiBpbmRleGVzLCBldGMuKS4gRG9lcyBub3Qgc2VlbSB3b3J0 aCByZXdvcmtpbmcgdGhlIGluZGV4IGFjY2VzcyB0byBhbGxvdworICogbW9yZSBhZ2dyZXNz aXZlIHByZWZldGNoaW5nLCBpdCdzIGJlc3QgZWZmb3J0LgorICoKKyAqIFhYWCBTb21lIGlk ZWFzIGhvdyB0byBhdXRvLXR1bmUgdGhlIHByZWZldGNoaW5nLCBzbyB0aGF0IHVubmVjZXNz YXJ5CisgKiBwcmVmZXRjaGluZyBkb2VzIG5vdCBjYXVzZSBzaWduaWZpY2FudCByZWdyZXNz aW9ucyAoZS5nLiBmb3IgbmVzdGxvb3AKKyAqIHdpdGggaW5uZXIgaW5kZXggc2NhbikuIFdl IGNvdWxkIHRyYWNrIG51bWJlciBvZiBpbmRleCBwYWdlcyB2aXNpdGVkCisgKiBhbmQgaW5k ZXggdHVwbGVzIHJldHVybmVkLCB0byBjYWxjdWxhdGUgYXZnIHR1cGxlcyAvIHBhZ2UsIGFu ZCB0aGVuCisgKiB1c2UgdGhhdCB0byBsaW1pdCBwcmVmZXRjaGluZyBhZnRlciBzd2l0Y2hp bmcgdG8gYSBuZXcgcGFnZSAoaW5zdGVhZAorICogb2YganVzdCB1c2luZyBwcmVmZXRjaE1h eFRhcmdldCwgd2hpY2ggY2FuIGdldCBtdWNoIGxhcmdlcikuCisgKgorICogWFhYIE9idmlv dXNseSwgYW5vdGhlciBvcHRpb24gaXMgdG8gdXNlIHRoZSBwbGFubmVyIGVzdGltYXRlcyAt IHdlIGtub3cKKyAqIGhvdyBtYW55IHJvd3Mgd2UncmUgZXhwZWN0ZWQgdG8gZmV0Y2ggKG9u IGF2ZXJhZ2UsIGFzc3VtaW5nIHRoZSBlc3RpbWF0ZXMKKyAqIGFyZSByZWFzb25hYmx5IGFj Y3VyYXRlKSwgc28gd2h5IG5vdCB0byB1c2UgdGhhdC4gQW5kIG1heWJlIGNvbWJpbmUgaXQK KyAqIHdpdGggdGhlIGF1dG8tdHVuaW5nIGJhc2VkIG9uIHJ1bnRpbWUgc3RhdGlzdGljcywg ZGVzY3JpYmVkIGFib3ZlLgorICoKKyAqIFhYWCBUaGUgcHJlZmV0Y2hpbmcgbWF5IGludGVy ZmVyZSB3aXRoIHRoZSBwYXRjaCBhbGxvd2luZyB1cyB0byBldmFsdWF0ZQorICogY29uZGl0 aW9ucyBvbiB0aGUgaW5kZXggdHVwbGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5vdCBuZWVk IHRoZSBoZWFwCisgKiB0dXBsZS4gTWF5YmUgaWYgdGhlcmUncyBzdWNoIGZpbHRlciwgd2Ug c2hvdWxkIHByZWZldGNoIG9ubHkgcGFnZXMgdGhhdAorICogYXJlIG5vdCBhbGwtdmlzaWJs ZSAoYW5kIHRoZSBzYW1lIGlkZWEgd291bGQgYWxzbyB3b3JrIGZvciBJT1MpLCBidXQKKyAq IGl0IGFsc28gbWFrZXMgdGhlIGluZGV4aW5nIGEgYml0ICJhd2FyZSIgb2YgdGhlIHZpc2li aWxpdHkgc3R1ZmYgKHdoaWNoCisgKiBzZWVtcyBhIGJpdCB3cm9uZykuIEFsc28sIG1heWJl IHdlIHNob3VsZCBjb25zaWRlciB0aGUgZmlsdGVyIHNlbGVjdGl2aXR5CisgKiAoaWYgdGhl IGluZGV4LW9ubHkgZmlsdGVyIGlzIGV4cGVjdGVkIHRvIGVsaW1pbmF0ZSBvbmx5IGZldyBy b3dzLCB0aGVuCisgKiB0aGUgdm0gY2hlY2sgaXMgcG9pbnRsZXNzKS4gTWF5YmUgdGhpcyBj b3VsZC9zaG91bGQgYmUgYXV0by10dW5pbmcgdG9vLAorICogaS5lLiB3ZSBjb3VsZCB0cmFj ayBob3cgbWFueSBoZWFwIHR1cGxlcyB3ZXJlIG5lZWRlZCBhZnRlciBhbGwsIGFuZCB0aGVu CisgKiB3ZSB3b3VsZCBjb25zaWRlciB0aGlzIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBw cmVmZXRjaCBhbGwtdmlzaWJsZQorICogcGFnZXMgb3Igbm90IChtYXR0ZXJzIG9ubHkgZm9y IHJlZ3VsYXIgaW5kZXggc2NhbnMsIG5vdCBJT1MpLgorICoKKyAqIFhYWCBNYXliZSB3ZSBj b3VsZC9zaG91bGQgYWxzbyBwcmVmZXRjaCB0aGUgbmV4dCBpbmRleCBibG9jaywgZS5nLiBz dG9yZWQKKyAqIGluIEJUU2NhblBvc0RhdGEubmV4dFBhZ2UuCisgKi8KK3ZvaWQKK2luZGV4 X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJ SW5kZXhQcmVmZXRjaAlwcmVmZXRjaCA9IHNjYW4tPnhzX3ByZWZldGNoOworCisJLyoKKwkg KiBObyBoZWFwIHJlbGF0aW9uIG1lYW5zIGJpdG1hcCBpbmRleCBzY2FuLCB3aGljaCBkb2Vz IHByZWZldGNoaW5nIGF0CisJICogdGhlIGJpdG1hcCBoZWFwIHNjYW4sIHNvIG5vIHByZWZl dGNoIGhlcmUgKHdlIGNhbid0IGRvIGl0IGFueXdheSwKKwkgKiB3aXRob3V0IHRoZSBoZWFw KQorCSAqCisJICogWFhYIEJ1dCBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGhhdmUgcHJlZmV0 Y2hNYXhUYXJnZXQ9MCwgYmVjYXVzZSBpbgorCSAqIGluZGV4X2JlYmluc2Nhbl9iaXRtYXAo KSB3ZSBkaXNhYmxlIHByZWZldGNoaW5nLiBTbyBtYXliZSB3ZSBzaG91bGQKKwkgKiBqdXN0 IGNoZWNrIHRoYXQuCisJICovCisJaWYgKCFwcmVmZXRjaCkKKwkJcmV0dXJuOworCisJLyog d2FzIGl0IGluaXRpYWxpemVkIGNvcnJlY3RseT8gKi8KKwkvLyBBc3NlcnQocHJlZmV0Y2gt PnByZWZldGNoSW5kZXggIT0gLTEpOworCisJLyoKKwkgKiBJZiB3ZSBnb3QgaGVyZSwgcHJl ZmV0Y2hpbmcgaXMgZW5hYmxlZCBhbmQgaXQncyBhIG5vZGUgdGhhdCBzdXBwb3J0cworCSAq IHByZWZldGNoaW5nIChpLmUuIGl0IGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNjYW4pLgor CSAqLworCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24pOworCisJLyogZ3JhZHVhbGx5IGlu Y3JlYXNlIHRoZSBwcmVmZXRjaCBkaXN0YW5jZSAqLworCXByZWZldGNoLT5wcmVmZXRjaFRh cmdldCA9IE1pbihwcmVmZXRjaC0+cHJlZmV0Y2hUYXJnZXQgKyAxLAorCQkJCQkJCQkgICBw cmVmZXRjaC0+cHJlZmV0Y2hNYXhUYXJnZXQpOworCisJLyoKKwkgKiBEaWQgd2UgYWxyZWFk eSByZWFjaCB0aGUgcG9pbnQgdG8gYWN0dWFsbHkgc3RhcnQgcHJlZmV0Y2hpbmc/IElmIG5v dCwKKwkgKiB3ZSdyZSBkb25lLiBXZSdsbCB0cnkgYWdhaW4gZm9yIHRoZSBuZXh0IGluZGV4 IHR1cGxlLgorCSAqLworCWlmIChwcmVmZXRjaC0+cHJlZmV0Y2hUYXJnZXQgPD0gMCkKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBYWFggSSB0aGluayB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5 IGFib3V0IGRpcmVjdGlvbiBoZXJlLCB0aGF0J3MgaGFuZGxlZAorCSAqIGJ5IGhvdyB0aGUg QU1zIGJ1aWxkIHRoZSBjdXJQb3MgZXRjLiAoc2VlIG5idHNlYXJjaC5jKQorCSAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJeworCQlib29sCQlyZXNldDsKKwkJ aW50CQkJc3RhcnRJbmRleCwKKwkJCQkJZW5kSW5kZXg7CisKKwkJLyogZ2V0IGluZGV4ZXMg b2YgdW5wcm9jZXNzZWQgaW5kZXggZW50cmllcyAqLworCQlwcmVmZXRjaC0+Z2V0X3Jhbmdl KHNjYW4sIGRpciwgJnN0YXJ0SW5kZXgsICZlbmRJbmRleCwgJnJlc2V0KTsKKworCQkvKgor CQkgKiBEaWQgd2Ugc3dpdGNoIHRvIGEgZGlmZmVyZW50IGluZGV4IGJsb2NrPyBpZiB5ZXMs IHJlc2V0IHJlbGV2YW50CisJCSAqIGluZm8gc28gdGhhdCB3ZSBzdGFydCBwcmVmZXRjaGlu ZyBmcm9tIHNjcmF0Y2guCisJCSAqLworCQlpZiAocmVzZXQpCisJCXsKKwkJCXByZWZldGNo LT5wcmVmZXRjaFRhcmdldCA9IHByZWZldGNoLT5wcmVmZXRjaFJlc2V0OworCQkJcHJlZmV0 Y2gtPnByZWZldGNoSW5kZXggPSBzdGFydEluZGV4OyAvKiBtYXliZSAtMSBpbnN0ZWFkPyAq LworCQkJcGdCdWZmZXJVc2FnZS5ibGtzX3ByZWZldGNoX3JvdW5kcysrOworCQl9CisKKwkJ LyoKKwkJICogQWRqdXN0IHRoZSByYW5nZSwgYmFzZWQgb24gd2hhdCB3ZSBhbHJlYWR5IHBy ZWZldGNoZWQsIGFuZCBhbHNvCisJCSAqIGJhc2VkIG9uIHRoZSBwcmVmZXRjaCB0YXJnZXQu CisJCSAqCisJCSAqIFhYWCBXZSBuZWVkIHRvIGFkanVzdCB0aGUgZW5kIGluZGV4IGZpcnN0 LCBiZWNhdXNlIGl0IGRlcGVuZHMgb24KKwkJICogdGhlIGFjdHVhbCBwb3NpdGlvbiwgYmVm b3JlIHdlIGNvbnNpZGVyIGhvdyBmYXIgd2UgcHJlZmV0Y2hlZC4KKwkJICovCisJCWVuZElu ZGV4ID0gTWluKGVuZEluZGV4LCBzdGFydEluZGV4ICsgcHJlZmV0Y2gtPnByZWZldGNoVGFy Z2V0KTsKKwkJc3RhcnRJbmRleCA9IE1heChzdGFydEluZGV4LCBwcmVmZXRjaC0+cHJlZmV0 Y2hJbmRleCArIDEpOworCisJCWZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZElu ZGV4OyBpKyspCisJCXsKKwkJCWJvb2wJCXJlY2VudGx5X3ByZWZldGNoZWQgPSBmYWxzZTsK KwkJCUJsb2NrTnVtYmVyCWJsb2NrOworCisJCQlibG9jayA9IHByZWZldGNoLT5nZXRfYmxv Y2soc2NhbiwgZGlyLCBpKTsKKworCQkJLyoKKwkJCSAqIERvIG5vdCBwcmVmZXRjaCB0aGUg c2FtZSBibG9jayBvdmVyIGFuZCBvdmVyIGFnYWluLAorCQkJICoKKwkJCSAqIFRoaXMgaGFw cGVucyBlLmcuIGZvciBjbHVzdGVyZWQgb3IgbmF0dXJhbGx5IGNvcnJlbGF0ZWQgaW5kZXhl cworCQkJICogKGZrZXkgdG8gYSBzZXF1ZW5jZSBJRCkuIEl0J3Mgbm90IGV4cGVuc2l2ZSAo dGhlIGJsb2NrIGlzIGluIHBhZ2UKKwkJCSAqIGNhY2hlIGFscmVhZHksIHNvIG5vIEkvTyks IGJ1dCBpdCdzIG5vdCBmcmVlIGVpdGhlci4KKwkJCSAqCisJCQkgKiBYWFggV2UgY2FuJ3Qg anVzdCBjaGVjayBibG9ja3MgYmV0d2VlbiBzdGFydEluZGV4IGFuZCBlbmRJbmRleCwKKwkJ CSAqIGJlY2F1c2UgYXQgc29tZSBwb2ludCAoYWZ0ZXIgdGhlIHBlZmV0Y2ggdGFyZ2V0IGdl dHMgcmFtcGVkIHVwKQorCQkJICogaXQncyBnb2luZyB0byBiZSBqdXN0IGEgc2luZ2xlIGJs b2NrLgorCQkJICoKKwkJCSAqIFhYWCBUaGUgc29sdXRpb24gaGVyZSBpcyBwcmV0dHkgdHJp dmlhbCAtIHdlIGp1c3QgY2hlY2sgdGhlCisJCQkgKiBpbW1lZGlhdGVseSBwcmVjZWRpbmcg YmxvY2suIFdlIGNvdWxkIGNoZWNrIGEgbG9uZ2VyIGhpc3RvcnksIG9yCisJCQkgKiBtYXli ZSBtYWludGFpbiBzb21lICJhbHJlYWR5IHByZWZldGNoZWQiIHN0cnVjdCAoc21hbGwgTFJV IGFycmF5CisJCQkgKiBvZiBsYXN0IHByZWZldGNoZWQgYmxvY2tzIC0gc2F5IDggYmxvY2tz IG9yIHNvIC0gd291bGQgd29yayBmaW5lLAorCQkJICogSSB0aGluaykuCisJCQkgKi8KKwkJ CWZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQorCQkJeworCQkJCS8qIHRoZSBjYWNoZWQg YmxvY2sgbWlnaHQgYmUgSW52YWxpZEJsb2NrTnVtYmVyLCBidXQgdGhhdCdzIGZpbmUgKi8K KwkJCQlpZiAocHJlZmV0Y2gtPmNhY2hlQmxvY2tzW2pdID09IGJsb2NrKQorCQkJCXsKKwkJ CQkJcmVjZW50bHlfcHJlZmV0Y2hlZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKworCQkJaWYgKHJlY2VudGx5X3ByZWZldGNoZWQpCisJCQkJY29udGludWU7CisKKwkJ CVByZWZldGNoQnVmZmVyKHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLCBibG9j ayk7CisJCQlwZ0J1ZmZlclVzYWdlLmJsa3NfcHJlZmV0Y2hlcysrOworCisJCQlwcmVmZXRj aC0+Y2FjaGVCbG9ja3NbcHJlZmV0Y2gtPmNhY2hlSW5kZXhdID0gYmxvY2s7CisJCQlwcmVm ZXRjaC0+Y2FjaGVJbmRleCA9IChwcmVmZXRjaC0+Y2FjaGVJbmRleCArIDEpICUgODsKKwkJ fQorCisJCXByZWZldGNoLT5wcmVmZXRjaEluZGV4ID0gZW5kSW5kZXg7CisJfQorCWVsc2UK Kwl7CisJCWJvb2wJcmVzZXQ7CisJCWludAkJc3RhcnRJbmRleCwKKwkJCQllbmRJbmRleDsK KworCQkvKiBnZXQgaW5kZXhlcyBvZiB1bnByb2Nlc3NlZCBpbmRleCBlbnRyaWVzICovCisJ CXByZWZldGNoLT5nZXRfcmFuZ2Uoc2NhbiwgZGlyLCAmc3RhcnRJbmRleCwgJmVuZEluZGV4 LCAmcmVzZXQpOworCisJCS8qIEZJWE1FIGhhbmRsZSB0aGUgcmVzZXQgZmxhZyAqLworCisJ CS8qCisJCSAqIEFkanVzdCB0aGUgcmFuZ2UsIGJhc2VkIG9uIHdoYXQgd2UgYWxyZWFkeSBw cmVmZXRjaGVkLCBhbmQgYWxzbworCQkgKiBiYXNlZCBvbiB0aGUgcHJlZmV0Y2ggdGFyZ2V0 LgorCQkgKgorCQkgKiBYWFggV2UgbmVlZCB0byBhZGp1c3QgdGhlIHN0YXJ0IGluZGV4IGZp cnN0LCBiZWNhdXNlIGl0IGRlcGVuZHMgb24KKwkJICogdGhlIGFjdHVhbCBwb3NpdGlvbiwg YmVmb3JlIHdlIGNvbnNpZGVyIGhvdyBmYXIgd2UgcHJlZmV0Y2hlZCAod2hpY2gKKwkJICog Zm9yIGJhY2t3YXJkcyBzY2FucyBpcyAoZW5kIGluZGV4KS4KKwkJICovCisJCXN0YXJ0SW5k ZXggPSBNYXgoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBwcmVmZXRjaC0+cHJlZmV0Y2hUYXJn ZXQpOworCQllbmRJbmRleCA9IE1pbihlbmRJbmRleCwgcHJlZmV0Y2gtPnByZWZldGNoSW5k ZXggLSAxKTsKKworCQlmb3IgKGludCBpID0gZW5kSW5kZXg7IGkgPj0gc3RhcnRJbmRleDsg aS0tKQorCQl7CisJCQlib29sCQlyZWNlbnRseV9wcmVmZXRjaGVkID0gZmFsc2U7CisJCQlC bG9ja051bWJlcglibG9jazsKKworCQkJYmxvY2sgPSBwcmVmZXRjaC0+Z2V0X2Jsb2NrKHNj YW4sIGRpciwgaSk7CisKKwkJCS8qCisJCQkgKiBEbyBub3QgcHJlZmV0Y2ggdGhlIHNhbWUg YmxvY2sgb3ZlciBhbmQgb3ZlciBhZ2FpbiwKKwkJCSAqCisJCQkgKiBUaGlzIGhhcHBlbnMg ZS5nLiBmb3IgY2x1c3RlcmVkIG9yIG5hdHVyYWxseSBjb3JyZWxhdGVkIGluZGV4ZXMKKwkJ CSAqIChma2V5IHRvIGEgc2VxdWVuY2UgSUQpLiBJdCdzIG5vdCBleHBlbnNpdmUgKHRoZSBi bG9jayBpcyBpbiBwYWdlCisJCQkgKiBjYWNoZSBhbHJlYWR5LCBzbyBubyBJL08pLCBidXQg aXQncyBub3QgZnJlZSBlaXRoZXIuCisJCQkgKgorCQkJICogWFhYIFdlIGNhbid0IGp1c3Qg Y2hlY2sgYmxvY2tzIGJldHdlZW4gc3RhcnRJbmRleCBhbmQgZW5kSW5kZXgsCisJCQkgKiBi ZWNhdXNlIGF0IHNvbWUgcG9pbnQgKGFmdGVyIHRoZSBwZWZldGNoIHRhcmdldCBnZXRzIHJh bXBlZCB1cCkKKwkJCSAqIGl0J3MgZ29pbmcgdG8gYmUganVzdCBhIHNpbmdsZSBibG9jay4K KwkJCSAqCisJCQkgKiBYWFggVGhlIHNvbHV0aW9uIGhlcmUgaXMgcHJldHR5IHRyaXZpYWwg LSB3ZSBqdXN0IGNoZWNrIHRoZQorCQkJICogaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGJsb2Nr LiBXZSBjb3VsZCBjaGVjayBhIGxvbmdlciBoaXN0b3J5LCBvcgorCQkJICogbWF5YmUgbWFp bnRhaW4gc29tZSAiYWxyZWFkeSBwcmVmZXRjaGVkIiBzdHJ1Y3QgKHNtYWxsIExSVSBhcnJh eQorCQkJICogb2YgbGFzdCBwcmVmZXRjaGVkIGJsb2NrcyAtIHNheSA4IGJsb2NrcyBvciBz byAtIHdvdWxkIHdvcmsgZmluZSwKKwkJCSAqIEkgdGhpbmspLgorCQkJICovCisJCQlmb3Ig KGludCBqID0gMDsgaiA8IDg7IGorKykKKwkJCXsKKwkJCQkvKiB0aGUgY2FjaGVkIGJsb2Nr IG1pZ2h0IGJlIEludmFsaWRCbG9ja051bWJlciwgYnV0IHRoYXQncyBmaW5lICovCisJCQkJ aWYgKHByZWZldGNoLT5jYWNoZUJsb2Nrc1tqXSA9PSBibG9jaykKKwkJCQl7CisJCQkJCXJl Y2VudGx5X3ByZWZldGNoZWQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisK KwkJCWlmIChyZWNlbnRseV9wcmVmZXRjaGVkKQorCQkJCWNvbnRpbnVlOworCisJCQlQcmVm ZXRjaEJ1ZmZlcihzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwgYmxvY2spOwor CQkJcGdCdWZmZXJVc2FnZS5ibGtzX3ByZWZldGNoZXMrKzsKKworCQkJcHJlZmV0Y2gtPmNh Y2hlQmxvY2tzW3ByZWZldGNoLT5jYWNoZUluZGV4XSA9IGJsb2NrOworCQkJcHJlZmV0Y2gt PmNhY2hlSW5kZXggPSAocHJlZmV0Y2gtPmNhY2hlSW5kZXggKyAxKSAlIDg7CisJCX0KKwor CQlwcmVmZXRjaC0+cHJlZmV0Y2hJbmRleCA9IHN0YXJ0SW5kZXg7CisJfQorfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggMWNlNWIxNTE5OWEuLmIxYTAyY2M5YmNk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTM3LDYgKzM3LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luZGV4X3Nl bGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGls cy9zcGNjYWNoZS5oIgogCiAKIC8qCkBAIC04Nyw2ICs4OCw4IEBAIHN0YXRpYyBCVFZhY3V1 bVBvc3RpbmcgYnRyZWV2YWN1dW1wb3N0aW5nKEJUVmFjU3RhdGUgKnZzdGF0ZSwKIAkJCQkJ CQkJCQkgIE9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0LAogCQkJCQkJCQkJCSAgaW50ICpu cmVtYWluaW5nKTsKIAorc3RhdGljIHZvaWQgX2J0X3ByZWZldGNoX2dldHJhbmdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCAqc3RhcnQsIGludCAqZW5k LCBib29sICpyZXNldCk7CitzdGF0aWMgQmxvY2tOdW1iZXIgX2J0X3ByZWZldGNoX2dldGJs b2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCBpbmRleCk7 CiAKIC8qCiAgKiBCdHJlZSBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRp bmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKQEAgLTM0MSw3ICszNDQsNyBAQCBi dGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogICoJYnRi ZWdpbnNjYW4oKSAtLSBzdGFydCBhIHNjYW4gb24gYSBidHJlZSBpbmRleAogICovCiBJbmRl eFNjYW5EZXNjCi1idGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKK2J0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzLCBpbnQgcHJlZmV0Y2hfbWF4aW11bSwgaW50IHByZWZldGNoX3Jlc2V0KQogewog CUluZGV4U2NhbkRlc2Mgc2NhbjsKIAlCVFNjYW5PcGFxdWUgc287CkBAIC0zNjksNiArMzcy LDMxIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVy YnlzKQogCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KIAlz by0+bnVtS2lsbGVkID0gMDsKIAorCS8qCisJICogWFhYIG1heWJlIHNob3VsZCBoYXBwZW4g aW4gUmVsYXRpb25HZXRJbmRleFNjYW4/IEJ1dCB3ZSBuZWVkIHRvIGRlZmluZQorCSAqIHRo ZSBjYWxsYWNrcywgc28gdGhhdCBuZWVkcyB0byBoYXBwZW4gaGVyZSAuLi4KKwkgKgorCSAq IFhYWCBEbyB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBmb3Igc28tPm1hcmtQb3M/CisJICov CisJaWYgKHByZWZldGNoX21heGltdW0gPiAwKQorCXsKKwkJSW5kZXhQcmVmZXRjaCBwcmVm ZXRjaGVyID0gcGFsbG9jMChzaXplb2YoSW5kZXhQcmVmZXRjaERhdGEpKTsKKworCQlwcmVm ZXRjaGVyLT5wcmVmZXRjaEluZGV4ID0gLTE7CisJCXByZWZldGNoZXItPnByZWZldGNoVGFy Z2V0ID0gLTM7CisJCXByZWZldGNoZXItPnByZWZldGNoTWF4VGFyZ2V0ID0gcHJlZmV0Y2hf bWF4aW11bTsKKwkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hSZXNldCA9IHByZWZldGNoX3Jlc2V0 OworCisJCXByZWZldGNoZXItPmNhY2hlSW5kZXggPSAwOworCQltZW1zZXQocHJlZmV0Y2hl ci0+Y2FjaGVCbG9ja3MsIDAsIHNpemVvZihCbG9ja051bWJlcikgKiA4KTsKKworCQkvKiBj YWxsYmFja3MgKi8KKwkJcHJlZmV0Y2hlci0+Z2V0X2Jsb2NrID0gX2J0X3ByZWZldGNoX2dl dGJsb2NrOworCQlwcmVmZXRjaGVyLT5nZXRfcmFuZ2UgPSBfYnRfcHJlZmV0Y2hfZ2V0cmFu Z2U7CisKKwkJc2Nhbi0+eHNfcHJlZmV0Y2ggPSBwcmVmZXRjaGVyOworCX0KKwogCS8qCiAJ ICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9u bHksIHNvIHdlIGRvIG5vdAogCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3BhY2UgYXJy YXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCkBAIC0xNDIzLDMgKzE0 NTEsNDIgQEAgYnRjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBhdHRubykKIHsKIAly ZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIHZvaWQKK19idF9wcmVmZXRjaF9nZXRyYW5nZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgKnN0YXJ0LCBpbnQg KmVuZCwgYm9vbCAqcmVzZXQpCit7CisJQlRTY2FuT3BhcXVlCXNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOworCisJLyogZGlkIHdlIHJlYnVpbGQgdGhlIGFycmF5IG9mIHR1 cGxlIHBvaW50ZXJzPyAqLworCSpyZXNldCA9IHNvLT5jdXJyUG9zLmRpZFJlc2V0OworCXNv LT5jdXJyUG9zLmRpZFJlc2V0ID0gZmFsc2U7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQorCXsKKwkJLyogRGlkIHdlIGFscmVhZHkgcHJvY2VzcyB0aGUgaXRlbSBv ciBpcyBpdCBpbnZhbGlkPyAqLworCQkqc3RhcnQgPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7 CisJCSplbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwl9CisJZWxzZQorCXsKKwkJKnN0 YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkqZW5kID0gc28tPmN1cnJQb3MuaXRl bUluZGV4OworCX0KK30KKworc3RhdGljIEJsb2NrTnVtYmVyCitfYnRfcHJlZmV0Y2hfZ2V0 YmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgaW50IGluZGV4 KQoreworCUJUU2Nhbk9wYXF1ZQlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlJdGVtUG9pbnRlcgkJdGlkOworCisJaWYgKChpbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0 SXRlbSkgfHwgKGluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pKQorCQlyZXR1cm4gSW52 YWxpZEJsb2NrTnVtYmVyOworCisJLyogZ2V0IHRoZSB0dXBsZSBJRCBhbmQgZXh0cmFjdCB0 aGUgYmxvY2sgbnVtYmVyICovCisJdGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW2luZGV4XS5o ZWFwVGlkOworCisJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCh0aWQpKTsKKworCXJldHVy biBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYwppbmRleCAyNjNmNzVmY2U5NS4uNzYyZDk1ZDA5ZWQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtNDcsNyArNDcsNiBA QCBzdGF0aWMgQnVmZmVyIF9idF93YWxrX2xlZnQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCdWZmZXIgYnVmLAogc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogc3RhdGljIGlubGluZSB2b2lkIF9i dF9pbml0aWFsaXplX21vcmVfZGF0YShCVFNjYW5PcGFxdWUgc28sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKIAotCiAvKgogICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkKICAqCkBA IC0xMzg1LDcgKzEzODQsNiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkJICovCiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwogCQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQogCQlyZXR1cm4gZmFsc2U7CiAJ fQogCWVsc2UKQEAgLTE1MzgsNiArMTUzNiwxMiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkg Ki8KIAlBc3NlcnQoQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKTsKIAorCS8qCisJ ICogTWFyayB0aGUgY3VyclBvcyBhcyByZXNldCBiZWZvcmUgbG9hZGluZyB0aGUgbmV4dCBj aHVuayBvZiBwb2ludGVycywgdG8KKwkgKiByZXN0YXJ0IHRoZSBwcmVyZXRjaGluZy4KKwkg Ki8KKwlzby0+Y3VyclBvcy5kaWRSZXNldCA9IHRydWU7CisKIAlwYWdlID0gQnVmZmVyR2V0 UGFnZShzby0+Y3VyclBvcy5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdl KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYwppbmRleCBjYmZhZjBjMDBh Yy4uNzkwMTUxOTRiNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3Bnc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jCkBA IC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFj Y2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0zMiw2ICszMywxMCBAQCB0eXBlZGVmIHZv aWQgKCpzdG9yZVJlc19mdW5jKSAoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgSXRlbVBvaW50ZXIg aGVhcFB0ciwKIAkJCQkJCQkgICBTcEdpc3RMZWFmVHVwbGUgbGVhZlR1cGxlLCBib29sIHJl Y2hlY2ssCiAJCQkJCQkJICAgYm9vbCByZWNoZWNrRGlzdGFuY2VzLCBkb3VibGUgKmRpc3Rh bmNlcyk7CiAKK3N0YXRpYyB2b2lkIHNwZ2lzdF9wcmVmZXRjaF9nZXRyYW5nZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgKnN0YXJ0LCBpbnQgKmVuZCwg Ym9vbCAqcmVzZXQpOworc3RhdGljIEJsb2NrTnVtYmVyIHNwZ2lzdF9wcmVmZXRjaF9nZXRi bG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBpbnQgaW5kZXgp OworCisKIC8qCiAgKiBQYWlyaW5nIGhlYXAgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhl IFNwR2lzdFNlYXJjaEl0ZW0gcXVldWUuCiAgKiBLTk4tc2VhcmNoZXMgY3VycmVudGx5IG9u bHkgc3VwcG9ydCBOVUxMUyBMQVNULiAgU28sIHByZXNlcnZlIHRoaXMgbG9naWMKQEAgLTE5 MSw2ICsxOTYsNyBAQCByZXNldFNwR2lzdFNjYW5PcGFxdWUoU3BHaXN0U2Nhbk9wYXF1ZSBz bykKIAkJCXBmcmVlKHNvLT5yZWNvblR1cHNbaV0pOwogCX0KIAlzby0+aVB0ciA9IHNvLT5u UHRycyA9IDA7CisJc28tPmRpZFJlc2V0ID0gdHJ1ZTsKIH0KIAogLyoKQEAgLTMwMSw3ICsz MDcsNyBAQCBzcGdQcmVwYXJlU2NhbktleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogfQogCiBJ bmRleFNjYW5EZXNjCi1zcGdiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQga2V5c3osIGlu dCBvcmRlcmJ5c3opCitzcGdiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQga2V5c3osIGlu dCBvcmRlcmJ5c3osIGludCBwcmVmZXRjaF9tYXhpbXVtLCBpbnQgcHJlZmV0Y2hfcmVzZXQp CiB7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCVNwR2lzdFNjYW5PcGFxdWUgc287CkBAIC0z MTYsNiArMzIyLDggQEAgc3BnYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IGtleXN6LCBp bnQgb3JkZXJieXN6KQogCQlzby0+a2V5RGF0YSA9IE5VTEw7CiAJaW5pdFNwR2lzdFN0YXRl KCZzby0+c3RhdGUsIHNjYW4tPmluZGV4UmVsYXRpb24pOwogCisJc28tPnN0YXRlLmhlYXAg PSByZWxhdGlvbl9vcGVuKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRyZWxp ZCwgTm9Mb2NrKTsKKwogCXNvLT50ZW1wQ3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1 cnJlbnRNZW1vcnlDb250ZXh0LAogCQkJCQkJCQkJCSJTUC1HaVNUIHNlYXJjaCB0ZW1wb3Jh cnkgY29udGV4dCIsCiAJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CkBAIC0z NzEsNiArMzc5LDMxIEBAIHNwZ2JlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBrZXlzeiwg aW50IG9yZGVyYnlzeikKIAogCXNvLT5pbmRleENvbGxhdGlvbiA9IHJlbC0+cmRfaW5kY29s bGF0aW9uWzBdOwogCisJLyoKKwkgKiBYWFggbWF5YmUgc2hvdWxkIGhhcHBlbiBpbiBSZWxh dGlvbkdldEluZGV4U2Nhbj8gQnV0IHdlIG5lZWQgdG8gZGVmaW5lCisJICogdGhlIGNhbGxh Y2tzLCBzbyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlIC4uLgorCSAqCisJICogWFhYIERv IHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIGZvciBzby0+bWFya1Bvcz8KKwkgKi8KKwlpZiAo cHJlZmV0Y2hfbWF4aW11bSA+IDApCisJeworCQlJbmRleFByZWZldGNoIHByZWZldGNoZXIg PSBwYWxsb2MwKHNpemVvZihJbmRleFByZWZldGNoRGF0YSkpOworCisJCXByZWZldGNoZXIt PnByZWZldGNoSW5kZXggPSAtMTsKKwkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hUYXJnZXQgPSAt MzsKKwkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBwcmVmZXRjaF9tYXhpbXVt OworCQlwcmVmZXRjaGVyLT5wcmVmZXRjaFJlc2V0ID0gcHJlZmV0Y2hfcmVzZXQ7CisKKwkJ cHJlZmV0Y2hlci0+Y2FjaGVJbmRleCA9IDA7CisJCW1lbXNldChwcmVmZXRjaGVyLT5jYWNo ZUJsb2NrcywgMCwgc2l6ZW9mKEJsb2NrTnVtYmVyKSAqIDgpOworCisJCS8qIGNhbGxiYWNr cyAqLworCQlwcmVmZXRjaGVyLT5nZXRfYmxvY2sgPSBzcGdpc3RfcHJlZmV0Y2hfZ2V0Ymxv Y2s7CisJCXByZWZldGNoZXItPmdldF9yYW5nZSA9IHNwZ2lzdF9wcmVmZXRjaF9nZXRyYW5n ZTsKKworCQlzY2FuLT54c19wcmVmZXRjaCA9IHByZWZldGNoZXI7CisJfQorCiAJc2Nhbi0+ b3BhcXVlID0gc287CiAKIAlyZXR1cm4gc2NhbjsKQEAgLTQ1Myw2ICs0ODYsOCBAQCBzcGdl bmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJcGZyZWUoc2Nhbi0+eHNfb3JkZXJieW51 bGxzKTsKIAl9CiAKKwlyZWxhdGlvbl9jbG9zZShzby0+c3RhdGUuaGVhcCwgTm9Mb2NrKTsK KwogCXBmcmVlKHNvKTsKIH0KIApAQCAtNTg0LDYgKzYxOSwxMyBAQCBzcGdMZWFmVGVzdChT cEdpc3RTY2FuT3BhcXVlIHNvLCBTcEdpc3RTZWFyY2hJdGVtICppdGVtLAogCQkJCQkJCQkJ CQkJCQlpc251bGwsCiAJCQkJCQkJCQkJCQkJCWRpc3RhbmNlcyk7CiAKKwkJCS8vIEZJWE1F IHByZWZldGNoIGhlcmU/IG9yIGluIHN0b3JlR2V0dHVwbGU/CisJCQl7CisJCQkJQmxvY2tO dW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZsZWFmVHVwbGUtPmhl YXBQdHIpOworCisJCQkJUHJlZmV0Y2hCdWZmZXIoc28tPnN0YXRlLmhlYXAsIE1BSU5fRk9S S05VTSwgYmxvY2spOworCQkJfQorCiAJCQlzcGdBZGRTZWFyY2hJdGVtVG9RdWV1ZShzbywg aGVhcEl0ZW0pOwogCiAJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3h0KTsKQEAgLTEw NDcsNyArMTA4OSwxMiBAQCBzcGdnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCQkJCWluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5X2Rpc3RhbmNl cyhzY2FuLCBzby0+b3JkZXJCeVR5cGVzLAogCQkJCQkJCQkJCQkJCSBzby0+ZGlzdGFuY2Vz W3NvLT5pUHRyXSwKIAkJCQkJCQkJCQkJCQkgc28tPnJlY2hlY2tEaXN0YW5jZXNbc28tPmlQ dHJdKTsKKwogCQkJc28tPmlQdHIrKzsKKworCQkJLyogcHJlZmV0Y2ggYWRkaXRpb25hbCB0 dXBsZXMgKi8KKwkJCWluZGV4X3ByZWZldGNoKHNjYW4sIGRpcik7CisKIAkJCXJldHVybiB0 cnVlOwogCQl9CiAKQEAgLTEwNzAsNiArMTExNyw3IEBAIHNwZ2dldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkJcGZyZWUoc28tPnJlY29uVHVw c1tpXSk7CiAJCX0KIAkJc28tPmlQdHIgPSBzby0+blB0cnMgPSAwOworCQlzby0+ZGlkUmVz ZXQgPSB0cnVlOwogCiAJCXNwZ1dhbGsoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28sIGZhbHNl LCBzdG9yZUdldHR1cGxlLAogCQkJCXNjYW4tPnhzX3NuYXBzaG90KTsKQEAgLTEwOTUsMyAr MTE0Myw0MiBAQCBzcGdjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBhdHRubykKIAog CXJldHVybiBjYWNoZS0+Y29uZmlnLmNhblJldHVybkRhdGE7CiB9CisKK3N0YXRpYyB2b2lk CitzcGdpc3RfcHJlZmV0Y2hfZ2V0cmFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgaW50ICpzdGFydCwgaW50ICplbmQsIGJvb2wgKnJlc2V0KQoreworCVNw R2lzdFNjYW5PcGFxdWUJc28gPSAoU3BHaXN0U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwor CisJLyogZGlkIHdlIHJlYnVpbGQgdGhlIGFycmF5IG9mIHR1cGxlIHBvaW50ZXJzPyAqLwor CSpyZXNldCA9IHNvLT5kaWRSZXNldDsKKwlzby0+ZGlkUmVzZXQgPSBmYWxzZTsKKworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJeworCQkvKiBEaWQgd2UgYWxyZWFk eSBwcm9jZXNzIHRoZSBpdGVtIG9yIGlzIGl0IGludmFsaWQ/ICovCisJCSpzdGFydCA9IHNv LT5pUHRyOworCQkqZW5kID0gKHNvLT5uUHRycyAtIDEpOworCX0KKwllbHNlCisJeworCQkq c3RhcnQgPSAwOworCQkqZW5kID0gc28tPmlQdHI7CisJfQorfQorCitzdGF0aWMgQmxvY2tO dW1iZXIKK3NwZ2lzdF9wcmVmZXRjaF9nZXRibG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBpbnQgaW5kZXgpCit7CisJU3BHaXN0U2Nhbk9wYXF1ZQlzbyA9 IChTcEdpc3RTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSXRlbVBvaW50ZXIJCXRpZDsK KworCWlmICgoaW5kZXggPCBzby0+aVB0cikgfHwgKGluZGV4ID49IHNvLT5uUHRycykpCisJ CXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkvKiBnZXQgdGhlIHR1cGxlIElEIGFu ZCBleHRyYWN0IHRoZSBibG9jayBudW1iZXIgKi8KKwl0aWQgPSAmc28tPmhlYXBQdHJzW2lu ZGV4XTsKKworCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQodGlkKSk7CisKKwlyZXR1cm4g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd1dGlscy5jCmluZGV4IDE5MGU0Zjc2YTllLi40YWFjNjhmMDc2NiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAj aW5jbHVkZSAiYWNjZXNzL2FtdmFsaWRhdGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCIK ICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCIKQEAgLTMzNCw2ICszMzUs OSBAQCBpbml0U3BHaXN0U3RhdGUoU3BHaXN0U3RhdGUgKnN0YXRlLCBSZWxhdGlvbiBpbmRl eCkKIAogCXN0YXRlLT5pbmRleCA9IGluZGV4OwogCisJLyogd2UnbGwgaW5pdGlhbGl6ZSB0 aGUgcmVmZXJlbmNlIGluIHNwZ2JlZ2luc2NhbiAqLworCXN0YXRlLT5oZWFwID0gTlVMTDsK KwogCS8qIEdldCBjYWNoZWQgc3RhdGljIGluZm9ybWF0aW9uIGFib3V0IGluZGV4ICovCiAJ Y2FjaGUgPSBzcGdHZXRDYWNoZShpbmRleCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCAxNWY5YmRkY2RmMy4uMGU0MWZmYThmYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMKQEAgLTM1NTgsNiArMzU1OCw3IEBAIHNob3dfYnVmZmVyX3VzYWdlKEV4cGxhaW5TdGF0 ZSAqZXMsIGNvbnN0IEJ1ZmZlclVzYWdlICp1c2FnZSwgYm9vbCBwbGFubmluZykKIAkJCQkJ CQkJICAhSU5TVFJfVElNRV9JU19aRVJPKHVzYWdlLT5ibGtfd3JpdGVfdGltZSkpOwogCQli b29sCQloYXNfdGVtcF90aW1pbmcgPSAoIUlOU1RSX1RJTUVfSVNfWkVSTyh1c2FnZS0+dGVt cF9ibGtfcmVhZF90aW1lKSB8fAogCQkJCQkJCQkJICAgIUlOU1RSX1RJTUVfSVNfWkVSTyh1 c2FnZS0+dGVtcF9ibGtfd3JpdGVfdGltZSkpOworCQlib29sCQloYXNfcHJlZmV0Y2hlcyA9 ICh1c2FnZS0+Ymxrc19wcmVmZXRjaGVzID4gMCk7CiAJCWJvb2wJCXNob3dfcGxhbm5pbmcg PSAocGxhbm5pbmcgJiYgKGhhc19zaGFyZWQgfHwKIAkJCQkJCQkJCQkJCSAgaGFzX2xvY2Fs IHx8IGhhc190ZW1wIHx8IGhhc190aW1pbmcgfHwKIAkJCQkJCQkJCQkJCSAgaGFzX3RlbXBf dGltaW5nKSk7CkBAIC0zNjU1LDYgKzM2NTYsMjMgQEAgc2hvd19idWZmZXJfdXNhZ2UoRXhw bGFpblN0YXRlICplcywgY29uc3QgQnVmZmVyVXNhZ2UgKnVzYWdlLCBib29sIHBsYW5uaW5n KQogCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CiAJCX0KIAorCQkv KiBBcyBhYm92ZSwgc2hvdyBvbmx5IHBvc2l0aXZlIGNvdW50ZXIgdmFsdWVzLiAqLworCQlp ZiAoaGFzX3ByZWZldGNoZXMpCisJCXsKKwkJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZXMtPnN0ciwgIlByZWZldGNoZXM6Iik7CisKKwkJ CWlmICh1c2FnZS0+Ymxrc19wcmVmZXRjaGVzID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZv KGVzLT5zdHIsICIgYmxvY2tzPSVsbGQiLAorCQkJCQkJCQkgKGxvbmcgbG9uZykgdXNhZ2Ut PmJsa3NfcHJlZmV0Y2hlcyk7CisKKwkJCWlmICh1c2FnZS0+Ymxrc19wcmVmZXRjaF9yb3Vu ZHMgPiAwKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiByb3VuZHM9JWxsZCIs CisJCQkJCQkJCSAobG9uZyBsb25nKSB1c2FnZS0+Ymxrc19wcmVmZXRjaF9yb3VuZHMpOwor CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihlcy0+c3RyLCAnXG4nKTsKKwkJfQorCiAJCWlm IChzaG93X3BsYW5uaW5nKQogCQkJZXMtPmluZGVudC0tOwogCX0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggMWQ4MmI2NGI4OTcuLmU1Y2UxZGJjOTUzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtNzY1LDExICs3NjUsMTUgQEAg Y2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJl bGF0aW9uIGluZGV4LAogCS8qCiAJICogTWF5IGhhdmUgdG8gcmVzdGFydCBzY2FuIGZyb20g dGhpcyBwb2ludCBpZiBhIHBvdGVudGlhbCBjb25mbGljdCBpcwogCSAqIGZvdW5kLgorCSAq CisJICogWFhYIFNob3VsZCB0aGlzIGRvIGluZGV4IHByZWZldGNoPyBQcm9iYWJseSBub3Qg d29ydGggaXQgZm9yIHVuaXF1ZQorCSAqIGNvbnN0cmFpbnRzLCBJIGd1ZXNzPyBPdGhlcndp c2Ugd2Ugc2hvdWxkIGNhbGN1bGF0ZSBwcmVmZXRjaF90YXJnZXQKKwkgKiBqdXN0IGxpa2Ug aW4gbm9kZUluZGV4c2NhbiBldGMuCiAJICovCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNl OwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4 X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsICZEaXJ0eVNuYXBzaG90LCBp bmRua2V5YXR0cywgMCwgMCwgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5r ZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAKIAl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9z bG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggOWRkNzE2ODQ2 MTUuLmE5OTdhYWM4MjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYwpAQCAtMTU3LDggKzE1NywxMyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkvKiBCdWlsZCBzY2FuIGtleS4gKi8KIAlz a2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJl bCwgc2VhcmNoc2xvdCk7CiAKLQkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsICZzbmFwLCBza2V5X2F0dG9mZiwgMCk7 CisJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4KKwkgKgorCSAqIFhYWCBTaG91bGQgdGhpcyBk byBpbmRleCBwcmVmZXRjaGluZz8gV2UncmUgbG9va2luZyBmb3IgYSBzaW5nbGUgdHVwbGUs CisJICogcHJvYmFibHkgdXNpbmcgYSBQSyAvIFVOSVFVRSBpbmRleCwgc28gZG9lcyBub3Qg c2VlbSB3b3J0aCBpdC4gSWYgd2UKKwkgKiByZWNvbnNpZGVyIHRoaXMsIGNhbGNsYXRlIHBy ZWZldGNoX3RhcmdldCBsaWtlIGluIG5vZGVJbmRleHNjYW4uCisJICovCisJc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgJnNuYXAsIHNrZXlfYXR0b2ZmLCAwLCAwLCAw KTsKIAogcmV0cnk6CiAJZm91bmQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2luc3RydW1lbnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2luc3RydW1l bnQuYwppbmRleCBlZTc4YTU3NDlkMi4uNDM0YmU1OWZjYTAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2luc3RydW1lbnQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9pbnN0cnVtZW50LmMKQEAgLTIzNSw2ICsyMzUsOCBAQCBCdWZmZXJVc2FnZUFkZChCdWZm ZXJVc2FnZSAqZHN0LCBjb25zdCBCdWZmZXJVc2FnZSAqYWRkKQogCWRzdC0+bG9jYWxfYmxr c193cml0dGVuICs9IGFkZC0+bG9jYWxfYmxrc193cml0dGVuOwogCWRzdC0+dGVtcF9ibGtz X3JlYWQgKz0gYWRkLT50ZW1wX2Jsa3NfcmVhZDsKIAlkc3QtPnRlbXBfYmxrc193cml0dGVu ICs9IGFkZC0+dGVtcF9ibGtzX3dyaXR0ZW47CisJZHN0LT5ibGtzX3ByZWZldGNoX3JvdW5k cyArPSBhZGQtPmJsa3NfcHJlZmV0Y2hfcm91bmRzOworCWRzdC0+Ymxrc19wcmVmZXRjaGVz ICs9IGFkZC0+Ymxrc19wcmVmZXRjaGVzOwogCUlOU1RSX1RJTUVfQUREKGRzdC0+YmxrX3Jl YWRfdGltZSwgYWRkLT5ibGtfcmVhZF90aW1lKTsKIAlJTlNUUl9USU1FX0FERChkc3QtPmJs a193cml0ZV90aW1lLCBhZGQtPmJsa193cml0ZV90aW1lKTsKIAlJTlNUUl9USU1FX0FERChk c3QtPnRlbXBfYmxrX3JlYWRfdGltZSwgYWRkLT50ZW1wX2Jsa19yZWFkX3RpbWUpOwpAQCAt MjU3LDYgKzI1OSw4IEBAIEJ1ZmZlclVzYWdlQWNjdW1EaWZmKEJ1ZmZlclVzYWdlICpkc3Qs CiAJZHN0LT5sb2NhbF9ibGtzX3dyaXR0ZW4gKz0gYWRkLT5sb2NhbF9ibGtzX3dyaXR0ZW4g LSBzdWItPmxvY2FsX2Jsa3Nfd3JpdHRlbjsKIAlkc3QtPnRlbXBfYmxrc19yZWFkICs9IGFk ZC0+dGVtcF9ibGtzX3JlYWQgLSBzdWItPnRlbXBfYmxrc19yZWFkOwogCWRzdC0+dGVtcF9i bGtzX3dyaXR0ZW4gKz0gYWRkLT50ZW1wX2Jsa3Nfd3JpdHRlbiAtIHN1Yi0+dGVtcF9ibGtz X3dyaXR0ZW47CisJZHN0LT5ibGtzX3ByZWZldGNoZXMgKz0gYWRkLT5ibGtzX3ByZWZldGNo ZXMgLSBzdWItPmJsa3NfcHJlZmV0Y2hlczsKKwlkc3QtPmJsa3NfcHJlZmV0Y2hfcm91bmRz ICs9IGFkZC0+Ymxrc19wcmVmZXRjaF9yb3VuZHMgLSBzdWItPmJsa3NfcHJlZmV0Y2hfcm91 bmRzOwogCUlOU1RSX1RJTUVfQUNDVU1fRElGRihkc3QtPmJsa19yZWFkX3RpbWUsCiAJCQkJ CQkgIGFkZC0+YmxrX3JlYWRfdGltZSwgc3ViLT5ibGtfcmVhZF90aW1lKTsKIAlJTlNUUl9U SU1FX0FDQ1VNX0RJRkYoZHN0LT5ibGtfd3JpdGVfdGltZSwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IDBiNDNhOWI5Njk5Li4zZWNiODQ3MGQ0 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC04 NywxMiArODcsMjAgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUp CiAJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGluZGV4IG9ubHkgc2NhbiBpcyBub3QgcGFy YWxsZWwsIG9yIGlmIHdlJ3JlCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBv bmx5IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZQogCQkgKiBwYXJhbGxlbC4KKwkJICoK KwkJICogWFhYIE1heWJlIHdlIHNob3VsZCBlbmFibGUgcHJlZmV0Y2hpbmcsIGJ1dCBwcmVm ZXRjaCBvbmx5IHBhZ2VzIHRoYXQKKwkJICogYXJlIG5vdCBhbGwtdmlzaWJsZSAoYnV0IGNo ZWNraW5nIHRoYXQgZnJvbSB0aGUgaW5kZXggY29kZSBzZWVtcyBsaWtlCisJCSAqIGEgdmlv bGF0aW9uIG9mIGxheWVyaW5nIGV0YykuCisJCSAqCisJCSAqIFhYWCBUaGlzIG1pZ2h0IGxl YWQgdG8gSU9TIGJlaW5nIHNsb3dlciB0aGFuIHBsYWluIGluZGV4IHNjYW4sIGlmIHRoZQor CQkgKiB0YWJsZSBoYXMgYSBsb3Qgb2YgcGFnZXMgdGhhdCBuZWVkIHJlY2hlY2suCiAJCSAq LwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkg ICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5L ZXlzLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKKwkJCQkJCQkJ ICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJICAgMCwgMCk7CS8qIG5v IGluZGV4IHByZWZldGNoIGZvciBJT1MgKi8KIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0g c2NhbmRlc2M7CiAKQEAgLTY3NCw3ICs2ODIsOCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aW9z c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJIHBpc2Nhbik7CisJ CQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSAwLCAwKTsJLyogbm8gaW5kZXggcHJlZmV0Y2gg Zm9yIElPUyAqLwogCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7 CiAJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKQEAgLTcxOSw3ICs3 MjgsOCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCiAJCQkJ CQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1P cmRlckJ5S2V5cywKLQkJCQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJ CQkJCSAwLCAwKTsJLyogbm8gaW5kZXggcHJlZmV0Y2ggZm9yIElPUyAqLwogCW5vZGUtPmlv c3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDQ1NDBjNzc4MWQyLi43MWFlNmE0N2NlNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtNDMsNiArNDMsNyBA QAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvc3BjY2Fj aGUuaCIKIAogLyoKICAqIFdoZW4gYW4gb3JkZXJpbmcgb3BlcmF0b3IgaXMgdXNlZCwgdHVw bGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggdGhhdApAQCAtODUsNiArODYsNyBAQCBJbmRl eE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247 CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlS ZWxhdGlvbiBoZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOwogCiAJLyoK IAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQpAQCAtMTAzLDYgKzEwNSwyMiBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUp CiAKIAlpZiAoc2NhbmRlc2MgPT0gTlVMTCkKIAl7CisJCWludAlwcmVmZXRjaF90YXJnZXQ7 CisJCWludAlwcmVmZXRjaF9yZXNldDsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgbnVtYmVy IG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKKwkJ ICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRoZSB0 YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJCSAqCisJCSAqIFhY WCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNh cCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3Jl IHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5YmUKKwkJICoganVzdCByZXNldCB0byB0 aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAor CQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KKwkJICovCisJCXBy ZWZldGNoX3RhcmdldCA9IGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwt PnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CisJCXByZWZldGNoX3Jlc2V0ID0gTWluKHByZWZl dGNoX3RhcmdldCwgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKKwogCQkvKgogCQkg KiBXZSByZWFjaCBoZXJlIGlmIHRoZSBpbmRleCBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3Ig aWYgd2UncmUKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3 YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KQEAgLTExMSw3ICsxMjksOSBAQCBJbmRleE5l eHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlv bkRlc2MsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5v ZGUtPmlzc19OdW1TY2FuS2V5cywKLQkJCQkJCQkJICAgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzKTsKKwkJCQkJCQkJICAgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAorCQkJCQkJCQkg ICBwcmVmZXRjaF90YXJnZXQsCisJCQkJCQkJCSAgIHByZWZldGNoX3Jlc2V0KTsKIAogCQlu b2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtMTk4LDYgKzIxOCwyMyBAQCBJ bmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCWlmIChzY2Fu ZGVzYyA9PSBOVUxMKQogCXsKKwkJUmVsYXRpb24gaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbjsKKwkJaW50CXByZWZldGNoX3RhcmdldDsKKwkJaW50CXByZWZldGNo X3Jlc2V0OworCisJCS8qCisJCSAqIERldGVybWluZSBudW1iZXIgb2YgaGVhcCBwYWdlcyB0 byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcworCQkgKiBlc3NlbnRpYWxseSBq dXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRhYmxlIChvciB0aGUKKwkJ ICogdGFibGVzcGFjZSBpdCdzIGluKS4KKwkJICoKKwkJICogWFhYIFNob3VsZCB0aGlzIGFs c28gbG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2FwIHRoZSB0YXJnZXQKKwkJ ICogdG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUgdGhhbiB3ZSBleHBlY3Qg dG8gdXNlLiBPciBtYXliZQorCQkgKiBqdXN0IHJlc2V0IHRvIHRoYXQgdmFsdWUgZHVyaW5n IHByZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0CisJCSAqIGluZGV4IHBhZ2Ug KG9yIHJhdGhlciBhZnRlciByZXNjYW4pPworCQkgKi8KKwkJcHJlZmV0Y2hfdGFyZ2V0ID0g Z2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJlbC0+cmRfcmVsLT5yZWx0YWJs ZXNwYWNlKTsKKwkJcHJlZmV0Y2hfcmVzZXQgPSBNaW4ocHJlZmV0Y2hfdGFyZ2V0LCBub2Rl LT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOworCiAJCS8qCiAJCSAqIFdlIHJlYWNoIGhlcmUg aWYgdGhlIGluZGV4IHNjYW4gaXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZQogCQkgKiBz ZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJl IHBhcmFsbGVsLgpAQCAtMjA2LDcgKzI0Myw5IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKElu ZGV4U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNj LAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5p c3NfTnVtU2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7 CisJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJICAgcHJl ZmV0Y2hfdGFyZ2V0LAorCQkJCQkJCQkgICBwcmVmZXRjaF9yZXNldCk7CiAKIAkJbm9kZS0+ aXNzX1NjYW5EZXNjID0gc2NhbmRlc2M7CiAKQEAgLTE2NzgsNiArMTcxNywyMSBAQCBFeGVj SW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIHsKIAlFU3Rh dGUJICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwogCVBhcmFsbGVsSW5kZXhTY2Fu RGVzYyBwaXNjYW47CisJUmVsYXRpb24JaGVhcFJlbDsKKwlpbnQJCQlwcmVmZXRjaF90YXJn ZXQ7CisJaW50CQkJcHJlZmV0Y2hfcmVzZXQ7CisKKwkvKgorCSAqIERldGVybWluZSBudW1i ZXIgb2YgaGVhcCBwYWdlcyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcwor CSAqIGVzc2VudGlhbGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0aGUg dGFibGUgKG9yIHRoZQorCSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJICoKKwkgKiBYWFgg TWF5YmUgcmVkdWNlIHRoZSB2YWx1ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/CisJICovCisJ aGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKworCXByZWZldGNoX3Rh cmdldCA9IGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwtPnJkX3JlbC0+ cmVsdGFibGVzcGFjZSk7CisJcHJlZmV0Y2hfcmVzZXQgPSBNaW4ocHJlZmV0Y2hfdGFyZ2V0 LCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOwogCiAJcGlzY2FuID0gc2htX3RvY19h bGxvY2F0ZShwY3h0LT50b2MsIG5vZGUtPmlzc19Qc2Nhbkxlbik7CiAJaW5kZXhfcGFyYWxs ZWxzY2FuX2luaXRpYWxpemUobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLApAQCAtMTY5 MCw3ICsxNzQ0LDkgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3Rh dGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkg bm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwKKwkJCQkJCQkJIHBy ZWZldGNoX3RhcmdldCwKKwkJCQkJCQkJIHByZWZldGNoX3Jlc2V0KTsKIAogCS8qCiAJICog SWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdv IGFoZWFkIGFuZCBwYXNzCkBAIC0xNzI2LDYgKzE3ODIsMTQgQEAgRXhlY0luZGV4U2Nhbklu aXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJICBQYXJhbGxl bFdvcmtlckNvbnRleHQgKnB3Y3h0KQogewogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNj YW47CisJUmVsYXRpb24JaGVhcFJlbDsKKwlpbnQJCQlwcmVmZXRjaF90YXJnZXQ7CisJaW50 CQkJcHJlZmV0Y2hfcmVzZXQ7CisKKwloZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uOworCisJcHJlZmV0Y2hfdGFyZ2V0ID0gZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3Vy cmVuY3koaGVhcFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKTsKKwlwcmVmZXRjaF9yZXNl dCA9IE1pbihwcmVmZXRjaF90YXJnZXQsIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fcm93cyk7 CiAKIAlwaXNjYW4gPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5w bGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQpAQCAt MTczMyw3ICsxNzk3LDkgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJ CQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9y ZGVyQnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwKKwkJCQkJ CQkJIHByZWZldGNoX3RhcmdldCwKKwkJCQkJCQkJIHByZWZldGNoX3Jlc2V0KTsKIAogCS8q CiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVh ZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4 IGM0ZmNkMDA3NmVhLi4wYjAyYjYyNjVkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMKQEAgLTYyMTgsNyArNjIxOCw3IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQo UmVsYXRpb24gaGVhcFJlbCwKIAogCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVh cFJlbCwgaW5kZXhSZWwsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLAotCQkJ CQkJCQkgMSwgMCk7CisJCQkJCQkJCSAxLCAwLCAwLCAwKTsJLyogWFhYIG1heWJlIGRvIHBy ZWZldGNoPyAqLwogCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJaW5k ZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nh biwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCA0NDc2ZmY3 ZmJhMS4uODBmZWM3YTExZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xNjAsNyArMTYwLDkg QEAgdHlwZWRlZiB2b2lkICgqYW1hZGp1c3RtZW1iZXJzX2Z1bmN0aW9uKSAoT2lkIG9wZmFt aWx5b2lkLAogLyogcHJlcGFyZSBmb3IgaW5kZXggc2NhbiAqLwogdHlwZWRlZiBJbmRleFNj YW5EZXNjICgqYW1iZWdpbnNjYW5fZnVuY3Rpb24pIChSZWxhdGlvbiBpbmRleFJlbGF0aW9u LAogCQkJCQkJCQkJCQkgICBpbnQgbmtleXMsCi0JCQkJCQkJCQkJCSAgIGludCBub3JkZXJi eXMpOworCQkJCQkJCQkJCQkgICBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkgICBpbnQg cHJlZmV0Y2hfbWF4aW11bSwKKwkJCQkJCQkJCQkJICAgaW50IHByZWZldGNoX3Jlc2V0KTsK IAogLyogKHJlKXN0YXJ0IGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2JyaW5faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2lu dGVybmFsLmgKaW5kZXggOTdkZGM5MjViMjcuLmYxN2RjZGZmZDg2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9icmluX2ludGVybmFsLmgKQEAgLTk2LDcgKzk2LDcgQEAgZXh0ZXJuIGJvb2wgYnJp bmluc2VydChSZWxhdGlvbiBpZHhSZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLAog CQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAogCQkJCQkgICBib29sIGlu ZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwot ZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnJpbmJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnJpbmJlZ2luc2Nh bihSZWxhdGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmZXRjaF9t YXhpbXVtLCBpbnQgcHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIGludDY0IGJyaW5nZXRiaXRt YXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBi cmlucmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNj YW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKaW5kZXggYTMwODc5NTY2NTQuLjZhNTAwYzVhYTFmIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaApAQCAtMTUyLDcgKzE1Miw5IEBAIGV4dGVybiBib29sIGluZGV4X2luc2VydChS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVn aW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CisJCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzLAorCQkJCQkJCQkJIGludCBwcmVmZXRjaF90YXJnZXQsCisJCQkJCQkJCQkgaW50 IHByZWZldGNoX3Jlc2V0KTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nh bl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQkJU25hcHNob3Qg c25hcHNob3QsCiAJCQkJCQkJCQkJCWludCBua2V5cyk7CkBAIC0xNjksNyArMTcxLDkgQEAg ZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJh bGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4cmVs LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCi0JCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRl eFNjYW5EZXNjIHBzY2FuKTsKKwkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2Mg cHNjYW4sCisJCQkJCQkJCQkJCSAgaW50IHByZWZldGNoX3RhcmdldCwKKwkJCQkJCQkJCQkJ ICBpbnQgcHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5l eHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbik7CiBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7CkBAIC0yMzAsNCArMjM0LDQ1IEBA IGV4dGVybiBIZWFwVHVwbGUgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNj IHN5c3NjYW4sCiAJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRl cm4gdm9pZCBzeXN0YWJsZV9lbmRzY2FuX29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lzc2Nhbik7 CiAKKworCit2b2lkIGluZGV4X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyoKKyAqIFhYWCBub3Qgc3VyZSBpdCdzIHRo ZSByaWdodCBwbGFjZSB0byBkZWZpbmUgdGhlc2UgY2FsbGJhY2tzIGV0Yy4KKyAqLwordHlw ZWRlZiB2b2lkICgqcHJlZmV0Y2hlcl9nZXRyYW5nZV9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbmRlc2MsCisJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkJCQkJCSAgaW50ICpzdGFydCwgaW50ICplbmQsCisJCQkJCQkJCQkJCSAgYm9vbCAq cmVzZXQpOworCit0eXBlZGVmIEJsb2NrTnVtYmVyICgqcHJlZmV0Y2hlcl9nZXRibG9ja19m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsCisJCQkJCQkJCQkJCQkJIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSBpbnQgaW5kZXgpOworCit0eXBl ZGVmIHN0cnVjdCBJbmRleFByZWZldGNoRGF0YQoreworCS8qCisJICogWFhYIFdlIG5lZWQg dG8gZGlzYWJsZSB0aGlzIGluIHNvbWUgY2FzZXMgKGUuZy4gd2hlbiB1c2luZyBpbmRleC1v bmx5CisJICogc2NhbnMsIHdlIGRvbid0IHdhbnQgdG8gcHJlZmV0Y2ggcGFnZXMpLiBPciBt YXliZSB3ZSBzaG91bGQgcHJlZmV0Y2gKKwkgKiBvbmx5IHBhZ2VzIHRoYXQgYXJlIG5vdCBh bGwtdmlzaWJsZSwgdGhhdCdkIGJlIGV2ZW4gYmV0dGVyLgorCSAqLworCWludAkJCXByZWZl dGNoSW5kZXg7CS8qIGhvdyBmYXIgd2UgYWxyZWFkeSBwcmVmZXRjaGVkICovCisJaW50CQkJ cHJlZmV0Y2hUYXJnZXQ7CS8qIGhvdyBmYXIgd2Ugc2hvdWxkIGJlIHByZWZldGNoaW5nICov CisJaW50CQkJcHJlZmV0Y2hNYXhUYXJnZXQ7CS8qIG1heGltdW0gcHJlZmV0Y2hpbmcgZGlz dGFuY2UgKi8KKwlpbnQJCQlwcmVmZXRjaFJlc2V0OwkvKiByZXNldCB0byB0aGlzIGRpc3Rh bmNlIG9uIHJlc2NhbiAqLworCisJLyoKKwkgKiBhIHNtYWxsIExSVSBjYWNoZSBvZiByZWNl bnRseSBwcmVmZXRjaGVkIGJsb2NrcworCSAqCisJICogWFhYIG5lZWRzIHRvIGJlIHRpbnks IHRvIG1ha2UgdGhlIChmcmVxdWVudCkgc2VhcmNoZXMgdmVyeSBjaGVhcAorCSAqLworCUJs b2NrTnVtYmVyCWNhY2hlQmxvY2tzWzhdOworCWludAkJCWNhY2hlSW5kZXg7CisKKwlwcmVm ZXRjaGVyX2dldGJsb2NrX2Z1bmN0aW9uCWdldF9ibG9jazsKKwlwcmVmZXRjaGVyX2dldHJh bmdlX2Z1bmN0aW9uCWdldF9yYW5nZTsKKworfSBJbmRleFByZWZldGNoRGF0YTsKKwogI2Vu ZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9naW5fcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl9wcml2YXRlLmgKaW5k ZXggNmRhNjQ5MjhiNjYuLmI0YmQzYjJlMjAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2luX3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luX3ByaXZh dGUuaApAQCAtMzg0LDcgKzM4NCw3IEBAIHR5cGVkZWYgc3RydWN0IEdpblNjYW5PcGFxdWVE YXRhCiAKIHR5cGVkZWYgR2luU2Nhbk9wYXF1ZURhdGEgKkdpblNjYW5PcGFxdWU7CiAKLWV4 dGVybiBJbmRleFNjYW5EZXNjIGdpbmJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gSW5kZXhTY2FuRGVzYyBnaW5iZWdpbnNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmZXRjaF9t YXhpbXVtLCBpbnQgcHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIHZvaWQgZ2luZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgZ2lucmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgIFNjYW5L ZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oCmluZGV4IDNlZGM3NDBhM2YzLi5lODQ0YTllZWQ4NCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aXN0X3ByaXZhdGUuaApAQCAtMTc2LDYgKzE3Niw3IEBAIHR5cGVkZWYgc3RydWN0IEdJU1RT Y2FuT3BhcXVlRGF0YQogCU9mZnNldE51bWJlciBjdXJQYWdlRGF0YTsJLyogbmV4dCBpdGVt IHRvIHJldHVybiAqLwogCU1lbW9yeUNvbnRleHQgcGFnZURhdGFDeHQ7CS8qIGNvbnRleHQg aG9sZGluZyB0aGUgZmV0Y2hlZCB0dXBsZXMsIGZvcgogCQkJCQkJCQkgKiBpbmRleC1vbmx5 IHNjYW5zICovCisJYm9vbAlkaWRSZXNldDsJCQkvKiByZXNldCBzaW5jZSBsYXN0IGFjY2Vz cz8gKi8KIH0gR0lTVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEdJU1RTY2FuT3BhcXVl RGF0YSAqR0lTVFNjYW5PcGFxdWU7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2lzdHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0c2Nhbi5oCmluZGV4IDY1OTEx MjQ1Zjc0Li5hZGYxNjdhNjBiNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dp c3RzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RzY2FuLmgKQEAgLTE2LDcg KzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogCi1leHRlcm4gSW5kZXhT Y2FuRGVzYyBnaXN0YmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CitleHRlcm4gSW5kZXhTY2FuRGVzYyBnaXN0YmVnaW5zY2FuKFJlbGF0aW9uIHIs IGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZldGNoX21heGltdW0sIGludCBw cmVmZXRjaF9yZXNldCk7CiBleHRlcm4gdm9pZCBnaXN0cmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5 cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBnaXN0ZW5kc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggOWUwMzUyNzBhMTYuLjc0MzE5Mjk5N2M1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oYXNoLmgKQEAgLTEyNCw2ICsxMjQsOCBAQCB0eXBlZGVmIHN0cnVjdCBI YXNoU2NhblBvc0RhdGEKIAlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXgg aW4gaXRlbXNbXSAqLwogCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4g aXRlbXNbXSAqLwogCisJYm9vbAkJZGlkUmVzZXQ7CisKIAlIYXNoU2NhblBvc0l0ZW0gaXRl bXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyogTVVTVCBCRSBMQVNUICovCiB9IEhhc2hT Y2FuUG9zRGF0YTsKIApAQCAtMzcwLDcgKzM3Miw3IEBAIGV4dGVybiBib29sIGhhc2hpbnNl cnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCSAg IHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CiBleHRlcm4gYm9vbCBoYXNoZ2V0dHVw bGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50 NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsK LWV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIEluZGV4U2NhbkRlc2MgaGFzaGJlZ2lu c2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZl dGNoX21heGltdW0sIGludCBwcmVmZXRjaF9yZXNldCk7CiBleHRlcm4gdm9pZCBoYXNocmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2 b2lkIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgK aW5kZXggZDY4NDc4NjA5NTkuLjhkMDUzZGU0NjFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBA IC05ODQsNiArOTg0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zRGF0YQogCWludAkJ CWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCiAJaW50CQkJ aXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCiAKKwkvKiBEaWQg dGhlIHBvc2l0aW9uIHJlc2V0L3JlYnVpbHQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBjaGVj a2VkIGl0PyAqLworCWJvb2wJCWRpZFJlc2V0OworCiAJQlRTY2FuUG9zSXRlbSBpdGVtc1tN YXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICovCiB9IEJUU2NhblBvc0Rh dGE7CiAKQEAgLTEwMTksNiArMTAyMiw3IEBAIHR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRT Y2FuUG9zOwogCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAogCQkoc2NhbnBv cykubHNuID0gSW52YWxpZFhMb2dSZWNQdHI7IFwKIAkJKHNjYW5wb3MpLm5leHRUdXBsZU9m ZnNldCA9IDA7IFwKKwkJKHNjYW5wb3MpLmRpZFJlc2V0ID0gdHJ1ZTsgXAogCX0gd2hpbGUg KDApCiAKIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUg U0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KQEAgLTExMjcsNyArMTEzMSw3IEBAIGV4dGVy biBib29sIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNu dWxsLAogCQkJCQkgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJIGJvb2wg aW5kZXhVbmNoYW5nZWQsCiAJCQkJCSBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwot ZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmZXRjaF9t YXhpbXVtLCBpbnQgcHJlZmV0Y2hfcmVzZXQpOwogZXh0ZXJuIFNpemUgYnRlc3RpbWF0ZXBh cmFsbGVsc2Nhbih2b2lkKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lk ICp0YXJnZXQpOwogZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGQwMzM2MGVh YzA0Li5jMTE5ZmU1OTdkOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xMDYsNiArMTA2 LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIAlSZWxhdGlvbgly ZWw7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0 aW9uLCBkZWZpbmVkIGluIGdlbmFtLmguCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4UHJl ZmV0Y2hEYXRhIEluZGV4UHJlZmV0Y2hEYXRhOwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVm ZXRjaERhdGEgKkluZGV4UHJlZmV0Y2g7CisKIC8qCiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5k ZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3RoIGFtZ2V0dHVwbGUtYmFzZWQKICAq IGFuZCBhbWdldGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFyZSBv bmx5IHJlbGV2YW50IGluCkBAIC0xNjIsNiArMTY4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEKIAlib29sCSAgICp4c19vcmRlcmJ5bnVsbHM7CiAJYm9vbAkJeHNf cmVjaGVja29yZGVyYnk7CiAKKwkvKiBwcmVmZXRjaGluZyBzdGF0ZSAob3IgTlVMTCBpZiBk aXNhYmxlZCkgKi8KKwlJbmRleFByZWZldGNoRGF0YSAqeHNfcHJlZmV0Y2g7CisKIAkvKiBw YXJhbGxlbCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJ c3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFsbGVsX3NjYW47CiB9CQkJ SW5kZXhTY2FuRGVzY0RhdGE7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Bn aXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmgKaW5kZXggZmUzMWQzMmRiZTku LmUxZTI2MzU1OTdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCkBAIC0yMDMsNyArMjAzLDcgQEAg ZXh0ZXJuIGJvb2wgc3BnaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBEYXR1bSAqdmFsdWVzLCBi b29sICppc251bGwsCiAJCQkJCSAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIAog Lyogc3Bnc2Nhbi5jICovCi1leHRlcm4gSW5kZXhTY2FuRGVzYyBzcGdiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQga2V5c3osIGludCBvcmRlcmJ5c3opOworZXh0ZXJuIEluZGV4U2Nh bkRlc2Mgc3BnYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IGtleXN6LCBpbnQgb3JkZXJi eXN6LCBpbnQgcHJlZmV0Y2hfbWF4aW11bSwgaW50IHByZWZldGNoX3Jlc2V0KTsKIGV4dGVy biB2b2lkIHNwZ2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIHNw Z3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkJCQkJICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgKaW5kZXggYzZlZjQ2ZmMyMDYuLmUwMGQ0ZmM5 MGI2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaApAQCAtMTQ0LDcgKzE0 NCw3IEBAIHR5cGVkZWYgc3RydWN0IFNwR2lzdFR5cGVEZXNjCiB0eXBlZGVmIHN0cnVjdCBT cEdpc3RTdGF0ZQogewogCVJlbGF0aW9uCWluZGV4OwkJCS8qIGluZGV4IHdlJ3JlIHdvcmtp bmcgd2l0aCAqLwotCisJUmVsYXRpb24JaGVhcDsJCQkvKiBoZWFwIHRoZSBpbmRleCBpcyBk ZWZpbmVkIG9uICovCiAJc3BnQ29uZmlnT3V0IGNvbmZpZzsJCS8qIGZpbGxlZCBpbiBieSBv cGNsYXNzIGNvbmZpZyBtZXRob2QgKi8KIAogCVNwR2lzdFR5cGVEZXNjIGF0dFR5cGU7CQkv KiB0eXBlIG9mIHZhbHVlcyB0byBiZSBpbmRleGVkL3Jlc3RvcmVkICovCkBAIC0yMzEsNiAr MjMxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU3BHaXN0U2Nhbk9wYXF1ZURhdGEKIAlib29sCQly ZWNoZWNrRGlzdGFuY2VzW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIGRpc3RhbmNlIHJl Y2hlY2sKIAkJCQkJCQkJCQkJCQkJCSAqIGZsYWdzICovCiAJSGVhcFR1cGxlCXJlY29uVHVw c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiByZWNvbnN0cnVjdGVkIHR1cGxlcyAqLwor CWJvb2wJCWRpZFJlc2V0OwkJLyogKi8KIAogCS8qIGRpc3RhbmNlcyAoZm9yIHJlY2hlY2sp ICovCiAJSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3RhbmNlc1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCmluZGV4IDg3ZTVlMjE4M2Jk Li45N2RkM2MyYzQyMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1 bWVudC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaApAQCAtMzMs NiArMzMsOCBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJVc2FnZQogCWludDY0CQlsb2NhbF9i bGtzX3dyaXR0ZW47IC8qICMgb2YgbG9jYWwgZGlzayBibG9ja3Mgd3JpdHRlbiAqLwogCWlu dDY0CQl0ZW1wX2Jsa3NfcmVhZDsgLyogIyBvZiB0ZW1wIGJsb2NrcyByZWFkICovCiAJaW50 NjQJCXRlbXBfYmxrc193cml0dGVuOwkvKiAjIG9mIHRlbXAgYmxvY2tzIHdyaXR0ZW4gKi8K KwlpbnQ2NAkJYmxrc19wcmVmZXRjaF9yb3VuZHM7CS8qICMgb2YgcHJlZmV0Y2ggcm91bmRz ICovCisJaW50NjQJCWJsa3NfcHJlZmV0Y2hlczsJLyogIyBvZiBidWZmZXJzIHByZWZldGNo ZWQgKi8KIAlpbnN0cl90aW1lCWJsa19yZWFkX3RpbWU7CS8qIHRpbWUgc3BlbnQgcmVhZGlu ZyBibG9ja3MgKi8KIAlpbnN0cl90aW1lCWJsa193cml0ZV90aW1lOyAvKiB0aW1lIHNwZW50 IHdyaXRpbmcgYmxvY2tzICovCiAJaW5zdHJfdGltZQl0ZW1wX2Jsa19yZWFkX3RpbWU7IC8q IHRpbWUgc3BlbnQgcmVhZGluZyB0ZW1wIGJsb2NrcyAqLwo= --------------cTFulINgWkvXmj1LM3tLLV5J--