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 1omNku-0006zk-CB for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Oct 2022 23:18:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1omNkt-00075g-2i for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Oct 2022 23:18:15 +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 1omNkr-00075X-Hs for pgsql-hackers@lists.postgresql.org; Sat, 22 Oct 2022 23:18:14 +0000 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1omNkg-00043F-0B for pgsql-hackers@lists.postgresql.org; Sat, 22 Oct 2022 23:18:12 +0000 Received: by mail-wr1-x435.google.com with SMTP id bk15so10138048wrb.13 for ; Sat, 22 Oct 2022 16:18:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=jQ7NRQXC/Bu2kGTCnFSu6bP3bL4yYew9JMxawuSEvNA=; b=aXPrjxjTzhJpZmydNEaIgJmfFoXkhkaz4zI9uGeu8ZkiXABwMQ1dtiiHqmFP2ykXDY Ps2Q2RQ8xNZ4GZKJQeKJBlPie+9+Y1YBDdswUbmG344V2ZC1W9Iqo7TloQD/xEf175Kx 2yIAloRwo5HKuwC/1RAoyFdPYGEBizSTiAM3JHbovzfo+yV8jxLmdMopWfArX3cBCa7S 69VT6Tu6yny5CbjUw4keG4W0/5FuXflUfbeSbpM+leZ8LTTLmMJIDVjecyKFd3B5WT6i kerPDC+h34vc/6sRg3GFcNTsLuLHmS741wYX/upgmqV/MSd2smGNs0sbHNjGosRKG69n PXpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=jQ7NRQXC/Bu2kGTCnFSu6bP3bL4yYew9JMxawuSEvNA=; b=y3kuVMGLOnihb6TijzPteWii0Qn9wbg5sdsM5yIcmblDzoQyfYp8JdhPcTUSlOOMED KGXttDdoL/jyJE5Ael1aAsnAgPQI2w+quoi+INv0xS3epT8c8ghWWjmk3UAys8vAUKrl k4jA8D8aRJv9gho+DFg69QagtMHMxBipql+hBaCDrJKhvuBx7Lw3wZLwBAaVxhf38nTd Kc/uspLXiIHkQW4yW7ERfJ+EHULy0a6R8rYw1F5wyB+G+YBgWB914/GeZr3i3kWBYcJz /UHD3mPtvXK5yIgHncF8vBdiZ6g1Ill5qsp4YFBBCzZSHsPsD2KXQ8DdV7Lh8zB6M513 gYNw== X-Gm-Message-State: ACrzQf2CTQUD41V3rE0+wNl3mQx/xyPaZQWBFDuMVfkmiab7mzIdtGvc SqY1DgPTiDex1+99Wc2z29/poenFijsFHfDEilimwKEsKHMTksauX/vMZx1R0l+RrKNJV/BDfa9 5E4wBDnI/EZIPFiVlgED6erMpnX+Fsa+CSUdq5LytM0bNkG5nAHKADphH76IfqO6jx8OA8Tjlu3 PF5stZDAm2Edw72cg198KO3Ss5MunYcsMV+vScpFIAJgA288JnOrNObI4xEt/ccIjnGANfntJoM 4XBTkWHGMQgDXSuYvPXt89QcTWlaSyj0GkBXjT4IM9m3Wwz3V2eDltEwnqCI4PJNce6 X-Google-Smtp-Source: AMsMyM48t2mDJKvy0+G9c2gVhTCff1Rm9rRDvwd7uQRadIMql5PdsDmjMYbAO+Hmxrt/8fEfUfcqIA== X-Received: by 2002:adf:e7c8:0:b0:236:6a30:cb2e with SMTP id e8-20020adfe7c8000000b002366a30cb2emr418058wrn.12.1666480679631; Sat, 22 Oct 2022 16:17:59 -0700 (PDT) Received: from [10.137.0.17] (ip-86-49-225-241.bb.vodafone.cz. [86.49.225.241]) by smtp.gmail.com with ESMTPSA id h8-20020a05600c314800b003c6cd82596esm4025611wmo.43.2022.10.22.16.17.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 22 Oct 2022 16:17:58 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------8VOkXIVw7iOMRvbSwLeCpy0A" Message-ID: <6319e69d-6207-e543-2f5d-3f45b666aca2@enterprisedb.com> Date: Sun, 23 Oct 2022 01:17:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Subject: Re: PATCH: Using BRIN indexes for sorted output From: Tomas Vondra To: Matthias van de Meent Cc: Zhihong Yu , PostgreSQL Hackers References: <1a7c2ff5-a855-64e9-0272-1f9947f8a558@enterprisedb.com> <1607e037-8c5b-1626-9f98-496f067b9eb5@enterprisedb.com> <0695af03-8bd3-f032-47aa-0657135ce45d@enterprisedb.com> <87964cda-e440-8759-2838-bc4628072a18@enterprisedb.com> Content-Language: en-US In-Reply-To: <87964cda-e440-8759-2838-bc4628072a18@enterprisedb.com> X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 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. --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, here's an updated/reworked version of the patch, on top of the "BRIN statistics" patch as 0001 (because some of the stuff is useful, but we can ignore this part in this thread). Warning: I realized the new node is somewhat broken when it comes to projection and matching the indexed column, most likely because the targetlists are wired/processed incorrectly or something like that. So when experimenting with this, just index the first column of the table and don't do anything requiring a projection. I'll get this fixed, but I've been focusing on the other stuff. I'm not particularly familiar with this tlist/project stuff, so any help is welcome. The main change in this version is the adoption of multiple ideas suggested by Matthias in his earlier responses. Firstly, this changes how the index opclass passes information to the executor node. Instead of using a plain array, we now use a tuplesort. This addresses the memory consumption issues with large number of ranges, and it also simplifies the sorting etc. which is now handled by the tuplesort. The support procedure simply fills a tuplesort and then hands it over to the caller (more or less). Secondly, instead of ordering the ranges by maxval, this orders them by minval (as suggested by Matthias), which greatly simplifies the code because we don't need to detect overlapping ranges etc. More precisely, the ranges are sorted to get this ordering - not yet summarized ranges - ranges sorted by (minval, blkno) - all-nulls ranges This particular ordering is beneficial for the algorithm, which does two passes over the ranges. For the NULLS LAST case (i.e. the default), we do this: - produce tuples with non-NULL values, ordered by the value - produce tuples with NULL values (arbitrary order) And each of these phases does a separate pass over the ranges (I'll get to that in a minute). And the ordering is tailored to this. Note: For DESC we'd sort by maxval, and for NULLS FIRST the phases would happen in the opposite order, but those are details. Let's assume ASC ordering with NULLS LAST, unless stated otherwise. The idea here is that all not-summarized ranges need to be processed always, both when processing NULLs and non-NULL values, which happens as two separate passes over ranges. The all-null ranges don't need to be processed during the non-NULL pass, and we can terminate this pass early once we hit the first null-only range. So placing them last helps with this. The regular ranges are ordered by minval, as dictated by the algorithm (which is now described in nodeBrinSort.c comment), but we also sort them by blkno to make this a bit more sequential (but this only matters for ranges with the same minval, and that's probably rare, but the extra sort key is also cheap so why not). I mentioned we do two separate passes - one for non-NULL values, one for NULL values. That may be somewhat inefficient, because in extreme cases we might end up scanning the whole table twice (imagine BRIN ranges where each range has both regular values and NULLs). It might be possible to do all of this in a single pass, at least in some cases - for example while scanning ranges, we might stash NULL rows into a tuplestore, so that the second pass is not needed. That assumes there are not too many such rows (otherwise we might need to write and then read many rows, outweighing the cost of just doing two passes). This should be possible to estimate/cost fairly well, I think, and the comment in nodeBrinSort actually presents some ideas about this. And we can't do that for the NULLS FIRST case, because if we stash the non-NULL rows somewhere, we won't be able to do the "incremental" sort, i.e. we might just do regular Sort right away. So I've kept this simple approach with two passes for now. This still uses the approach with spilling tuples to a tuplestore, and only sorting rows that we know are safe to output. I still think this is a good approach, for the reasons I explained before, but changing this is not hard so we can experiment. There's however a related question - how quickly should we increment the minval value, serving as a watermark? One option is to go to the next distinct minval value - but that may result in excessive number of tiny sorts, because the number ranges and rows between the old and new minval values tends to be small. Another negative consequence is that this may cause of lot of spilling (and re-spilling), because we only consume tiny number of rows from the tuplestore after incrementing the watermark. Or we can do larger steps, skipping some of the minval values, so that more rows quality into the sort. Of course, too large step means we'll exceed work_mem and switch to an on-disk sort, which we probably don't want. Also, this may be the wrong thing to do for LIMIT queries, that only need a couple rows, and a tiny sort is fine (because we won't do too many of them). Patch 0004 introduces a new GUC called brinsort_watermark_step, that can be used to experiment with this. By default it's set to '1' which means we simply progress to the next minval value. Then 0005 tries to customize this based on statistics - we estimate the number of rows we expect to get for each minval increment to "add" and then pick just a step value not to overflow work_mem. This happens in create_brinsort_plan, and the comment explains the main weakness - the way the number of rows is estimated is somewhat naive, as it just divides reltuples by number of ranges. But I have a couple ideas about what statistics we might collect, explained in 0001 in the comment at brin_minmax_stats. But there's another option - we can tune the step based on past sorts. If we see the sorts are doing on-disk sort, maybe try doing smaller steps. Patch 0006 implements a very simple variant of this. There's a couple ideas about how it might be improved, mentioned in the comment at brinsort_adjust_watermark_step. There's also patch 0003, which extends the EXPLAIN output with a counters tracking the number of sorts, counts of on-disk/in-memory sorts, space used, number of rows sorted/spilled, and so on. This is useful when analyzing e.g. the effect of higher/lower watermark steps, discussed in the preceding paragraphs. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0001-Allow-index-AMs-to-build-and-use-custom-sta-20221022.patch" Content-Disposition: attachment; filename*0="0001-Allow-index-AMs-to-build-and-use-custom-sta-20221022.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkOGRhODdmNzJmMzY3Y2MwMzY0MzU3ZmY0YmRhMWRkMDI4MTAyMTVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogTW9uLCAxNyBPY3QgMjAyMiAxODozOToyOCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS82XSBBbGxvdyBpbmRleCBBTXMgdG8gYnVpbGQgYW5kIHVzZSBjdXN0 b20gc3RhdGlzdGljcwoKU29tZSBpbmRleGluZyBBTXMgd29yayB2ZXJ5IGRpZmZlcmVudGx5 IGFuZCBlc3RpbWF0aW5nIHRoZW0gdXNpbmcKZXhpc3Rpbmcgc3RhdGlzdGljcyBpcyBwcm9i bGVtYXRpYywgcHJvZHVjaW5nIHVucmVsaWFibGUgY29zdGluZy4gVGhpcwphcHBsaWVzIGUu Zy4gdG8gQlJJTiwgd2hpY2ggcmVsaWVzIG9uIHBhZ2UgcmFuZ2VzLCBub3QgdHVwbGUgcG9p bnRlcnMuCgpUaGlzIGFkZHMgYW4gb3B0aW9uYWwgQU0gcHJvY2VkdXJlLCBhbGxvd2luZyB0 aGUgb3BmYW1pbHkgdG8gYnVpbGQKY3VzdG9tIHN0YXRpc3RpY3MsIHN0b3JlIHRoZW0gaW4g cGdfc3RhdGlzdGljIGFuZCB0aGVuIHVzZSB0aGVtIGR1cmluZwpwbGFubmluZy4gQnkgZGVm YXVsdCB0aGlzIGlzIGRpc2FibGVkLCBidXQgbWF5IGJlIGVuYWJsZWQgYnkgc2V0dGluZwoK ICAgU0VUIGVuYWJsZV9pbmRleGFtX3N0YXRzID0gdHJ1ZTsKClRoZW4gQU5BTFlaRSB3aWxs IGNhbGwgdGhlIG9wdGlvbmFsIHByb2NlZHVyZSBmb3IgYWxsIGluZGV4ZXMuCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbl9taW5tYXguYyB8IDEzMzIgKysrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAgICB8ICAxMzgg KystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgIHwgICA1OSArKwog c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMgICB8ICAgNDEgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICB8ICAgMTAgKwogc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmggICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW4uaCAgICAgICAgICAgICB8ICAgNTEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5f aW50ZXJuYWwuaCAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2Mu ZGF0ICAgICB8ICAgNjQgKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgfCAgICA0ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3RhdGlzdGljLmggICAgfCAg ICA1ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oICAgICAgICAgfCAgICAyICsK IHNyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oICAgICAgICAgfCAgICAxICsKIDE0IGZp bGVzIGNoYW5nZWQsIDE3MDYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluLmMKaW5kZXggNmZhYmQxNGMyNjMuLjNmZTk1Y2Q3MTdmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC05Niw2ICs5Niw3IEBAIGJyaW5oYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXN0cmF0ZWdpZXMgPSAwOwogCWFtcm91 dGluZS0+YW1zdXBwb3J0ID0gQlJJTl9MQVNUX09QVElPTkFMX1BST0NOVU07CiAJYW1yb3V0 aW5lLT5hbW9wdHNwcm9jbnVtID0gQlJJTl9QUk9DTlVNX09QVElPTlM7CisJYW1yb3V0aW5l LT5hbXN0YXRzcHJvY251bSA9IEJSSU5fUFJPQ05VTV9TVEFUSVNUSUNTOwogCWFtcm91dGlu ZS0+YW1jYW5vcmRlciA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5vcmRlcmJ5b3AgPSBm YWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuYmFja3dhcmQgPSBmYWxzZTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fbWlubWF4LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluX21pbm1heC5jCmluZGV4IGVhZDllOGY0ZTM2Li4wMTM1YTAwYWU5 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9taW5tYXguYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX21pbm1heC5jCkBAIC0xMCwxNyAr MTAsMjIgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nl c3MvYnJpbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9icmluX2ludGVybmFsLmgiCisjaW5jbHVk ZSAiYWNjZXNzL2JyaW5fcmV2bWFwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2JyaW5fdHVwbGUu aCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRu dW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Ftb3AuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdl L2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgogCiB0eXBlZGVmIHN0cnVjdCBNaW5tYXhPcGFxdWUKIHsKQEAg LTMxLDYgKzM2LDExIEBAIHR5cGVkZWYgc3RydWN0IE1pbm1heE9wYXF1ZQogc3RhdGljIEZt Z3JJbmZvICptaW5tYXhfZ2V0X3N0cmF0ZWd5X3Byb2NpbmZvKEJyaW5EZXNjICpiZGVzYywg dWludDE2IGF0dG5vLAogCQkJCQkJCQkJCQkgIE9pZCBzdWJ0eXBlLCB1aW50MTYgc3RyYXRl Z3ludW0pOwogCisvKiBwcmludCBkZWJ1Z2dpbmcgaW50byBhYm91dCBjYWxjdWxhdGVkIHN0 YXRpc3RpY3MgKi8KKyNkZWZpbmUgU1RBVFNfREVCVUcKKworLyogY2FsY3VsYXRlIHRoZSBz dGF0cyBpbiBkaWZmZXJlbnQgd2F5cyBmb3IgY3Jvc3MtY2hlY2tpbmcgKi8KKyNkZWZpbmUg U1RBVFNfQ1JPU1NfQ0hFQ0sKIAogRGF0dW0KIGJyaW5fbWlubWF4X29wY2luZm8oUEdfRlVO Q1RJT05fQVJHUykKQEAgLTI2Miw2ICsyNzIsMTMyOCBAQCBicmluX21pbm1heF91bmlvbihQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKKy8qIEZJWE1FIGNv cHkgb2YgYSBwcml2YXRlIHN0cnVjdCBmcm9tIGJyaW4uYyAqLwordHlwZWRlZiBzdHJ1Y3Qg QnJpbk9wYXF1ZQoreworCUJsb2NrTnVtYmVyIGJvX3BhZ2VzUGVyUmFuZ2U7CisJQnJpblJl dm1hcCAqYm9fcm1BY2Nlc3M7CisJQnJpbkRlc2MgICAqYm9fYmRlc2M7Cit9IEJyaW5PcGFx dWU7CisKKy8qCisgKiBDb21wYXJlIHJhbmdlcyBieSBtaW52YWwgKGNvbGxhdGlvbiBhbmQg b3BlcmF0b3IgYXJlIHRha2VuIGZyb20gdGhlIGV4dHJhCisgKiBhcmd1bWVudCwgd2hpY2gg aXMgZXhwZWN0ZWQgdG8gYmUgVHlwZUNhY2hlRW50cnkpLgorICovCitzdGF0aWMgaW50City YW5nZV9taW52YWxfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFy ZykKK3sKKwlCcmluUmFuZ2UgKnJhID0gKihCcmluUmFuZ2UgKiopIGE7CisJQnJpblJhbmdl ICpyYiA9ICooQnJpblJhbmdlICoqKSBiOworCVR5cGVDYWNoZUVudHJ5ICp0eXBlbnRyeSA9 IChUeXBlQ2FjaGVFbnRyeSAqKSBhcmc7CisJRm1nckluZm8gICAqY21wZnVuYyA9ICZ0eXBl bnRyeS0+Y21wX3Byb2NfZmluZm87CisJRGF0dW0JYzsKKwlpbnQJCXI7CisKKwljID0gRnVu Y3Rpb25DYWxsMkNvbGwoY21wZnVuYywgdHlwZW50cnktPnR5cGNvbGxhdGlvbiwKKwkJCQkJ CSAgcmEtPm1pbl92YWx1ZSwgcmItPm1pbl92YWx1ZSk7CisJciA9IERhdHVtR2V0SW50MzIo Yyk7CisKKwlpZiAociAhPSAwKQorCQlyZXR1cm4gcjsKKworCWlmIChyYS0+Ymxrbm9fc3Rh cnQgPCByYi0+Ymxrbm9fc3RhcnQpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAx OworfQorCisvKgorICogQ29tcGFyZSByYW5nZXMgYnkgbWF4dmFsIChjb2xsYXRpb24gYW5k IG9wZXJhdG9yIGFyZSB0YWtlbiBmcm9tIHRoZSBleHRyYQorICogYXJndW1lbnQsIHdoaWNo IGlzIGV4cGVjdGVkIHRvIGJlIFR5cGVDYWNoZUVudHJ5KS4KKyAqLworc3RhdGljIGludAor cmFuZ2VfbWF4dmFsX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICph cmcpCit7CisJQnJpblJhbmdlICpyYSA9ICooQnJpblJhbmdlICoqKSBhOworCUJyaW5SYW5n ZSAqcmIgPSAqKEJyaW5SYW5nZSAqKikgYjsKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnkg PSAoVHlwZUNhY2hlRW50cnkgKikgYXJnOworCUZtZ3JJbmZvICAgKmNtcGZ1bmMgPSAmdHlw ZW50cnktPmNtcF9wcm9jX2ZpbmZvOworCURhdHVtCWM7CisJaW50CQlyOworCisJYyA9IEZ1 bmN0aW9uQ2FsbDJDb2xsKGNtcGZ1bmMsIHR5cGVudHJ5LT50eXBjb2xsYXRpb24sCisJCQkJ CQkgIHJhLT5tYXhfdmFsdWUsIHJiLT5tYXhfdmFsdWUpOworCXIgPSBEYXR1bUdldEludDMy KGMpOworCisJaWYgKHIgIT0gMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAocmEtPmJsa25vX3N0 YXJ0IDwgcmItPmJsa25vX3N0YXJ0KQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4g MTsKK30KKworLyogY29tcGFyZSB2YWx1ZXMgdXNpbmcgYW4gb3BlcmF0b3IgZnJvbSB0eXBj YWNoZSAqLworc3RhdGljIGludAorcmFuZ2VfdmFsdWVzX2NtcChjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiLCB2b2lkICphcmcpCit7CisJRGF0dW0JZGEgPSAqIChEYXR1bSAqKSBh OworCURhdHVtCWRiID0gKiAoRGF0dW0gKikgYjsKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50 cnkgPSAoVHlwZUNhY2hlRW50cnkgKikgYXJnOworCUZtZ3JJbmZvICAgKmNtcGZ1bmMgPSAm dHlwZW50cnktPmNtcF9wcm9jX2ZpbmZvOworCURhdHVtCWM7CisKKwljID0gRnVuY3Rpb25D YWxsMkNvbGwoY21wZnVuYywgdHlwZW50cnktPnR5cGNvbGxhdGlvbiwKKwkJCQkJCSAgZGEs IGRiKTsKKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihjKTsKK30KKworLyoKKyAqIG1heHZhbF9z dGFydAorICoJCURldGVybWluZSBmaXJzdCBpbmRleCBzbyB0aGF0IChtYXh2YWx1ZSA+PSB2 YWx1ZSkuCisgKgorICogVGhlIGFycmF5IG9mIHJhbmdlcyBpcyBleHBlY3RlZCB0byBiZSBz b3J0ZWQgYnkgbWF4dmFsdWUsIHNvIHRoaXMgaXMgdGhlIGZpcnN0CisgKiByYW5nZSB0aGF0 IGNhbiBwb3NzaWJseSBpbnRlcnNlY3Qgd2l0aCByYW5nZSBoYXZpbmcgInZhbHVlIiBhcyBt aW52YWwuCisgKi8KK3N0YXRpYyBpbnQKK21heHZhbF9zdGFydChCcmluUmFuZ2UgKipyYW5n ZXMsIGludCBucmFuZ2VzLCBEYXR1bSB2YWx1ZSwgVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hl KQoreworCWludAkJc3RhcnQgPSAwLAorCQkJZW5kID0gKG5yYW5nZXMgLSAxKTsKKworCS8v IGV2ZXJ5dGhpbmcgbWF0Y2hlcworCWlmIChyYW5nZV92YWx1ZXNfY21wKCZ2YWx1ZSwgJnJh bmdlc1tzdGFydF0tPm1heF92YWx1ZSwgdHlwY2FjaGUpIDw9IDApCisJCXJldHVybiAwOwor CisJLy8gbm8gbWF0Y2hlcworCWlmIChyYW5nZV92YWx1ZXNfY21wKCZ2YWx1ZSwgJnJhbmdl c1tlbmRdLT5tYXhfdmFsdWUsIHR5cGNhY2hlKSA+IDApCisJCXJldHVybiBucmFuZ2VzOwor CisJd2hpbGUgKChlbmQgLSBzdGFydCkgPiAwKQorCXsKKwkJaW50CW1pZHBvaW50OworCQlp bnQJcjsKKworCQltaWRwb2ludCA9IHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDI7CisKKwkJ ciA9IHJhbmdlX3ZhbHVlc19jbXAoJnZhbHVlLCAmcmFuZ2VzW21pZHBvaW50XS0+bWF4X3Zh bHVlLCB0eXBjYWNoZSk7CisKKwkJaWYgKHIgPD0gMCkKKwkJCWVuZCA9IG1pZHBvaW50Owor CQllbHNlCisJCQlzdGFydCA9IChtaWRwb2ludCArIDEpOworCX0KKworCUFzc2VydChyYW5n ZXNbc3RhcnRdLT5tYXhfdmFsdWUgPj0gdmFsdWUpOworCUFzc2VydChyYW5nZXNbc3RhcnQt MV0tPm1heF92YWx1ZSA8IHZhbHVlKTsKKworCXJldHVybiBzdGFydDsKK30KKworLyoKKyAq IG1pbnZhbF9lbmQKKyAqCQlEZXRlcm1pbmUgZmlyc3QgaW5kZXggc28gdGhhdCAobWludmFs ID4gdmFsdWUpLgorICoKKyAqIFRoZSBhcnJheSBvZiByYW5nZXMgaXMgZXhwZWN0ZWQgdG8g YmUgc29ydGVkIGJ5IG1pbnZhbHVlLCBzbyB0aGlzIGlzIHRoZSBmaXJzdAorICogcmFuZ2Ug dGhhdCBjYW4ndCBwb3NzaWJseSBpbnRlcnNlY3Qgd2l0aCBhIHJhbmdlIGhhdmluZyAidmFs dWUiIGFzIG1heHZhbC4KKyAqLworc3RhdGljIGludAorbWludmFsX2VuZChCcmluUmFuZ2Ug KipyYW5nZXMsIGludCBucmFuZ2VzLCBEYXR1bSB2YWx1ZSwgVHlwZUNhY2hlRW50cnkgKnR5 cGNhY2hlKQoreworCWludAkJc3RhcnQgPSAwLAorCQkJZW5kID0gKG5yYW5nZXMgLSAxKTsK KworCS8vIGV2ZXJ5dGhpbmcgbWF0Y2hlcworCWlmIChyYW5nZV92YWx1ZXNfY21wKCZ2YWx1 ZSwgJnJhbmdlc1tlbmRdLT5taW5fdmFsdWUsIHR5cGNhY2hlKSA+PSAwKQorCQlyZXR1cm4g bnJhbmdlczsKKworCS8vIG5vIG1hdGNoZXMKKwlpZiAocmFuZ2VfdmFsdWVzX2NtcCgmdmFs dWUsICZyYW5nZXNbc3RhcnRdLT5taW5fdmFsdWUsIHR5cGNhY2hlKSA8IDApCisJCXJldHVy biAwOworCisJd2hpbGUgKChlbmQgLSBzdGFydCkgPiAwKQorCXsKKwkJaW50IG1pZHBvaW50 OworCQlpbnQgcjsKKworCQltaWRwb2ludCA9IHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDI7 CisKKwkJciA9IHJhbmdlX3ZhbHVlc19jbXAoJnZhbHVlLCAmcmFuZ2VzW21pZHBvaW50XS0+ bWluX3ZhbHVlLCB0eXBjYWNoZSk7CisKKwkJaWYgKHIgPj0gMCkKKwkJCXN0YXJ0ID0gbWlk cG9pbnQgKyAxOworCQllbHNlCisJCQllbmQgPSBtaWRwb2ludDsKKwl9CisKKwlBc3NlcnQo cmFuZ2VzW3N0YXJ0XS0+bWluX3ZhbHVlID4gdmFsdWUpOworCUFzc2VydChyYW5nZXNbc3Rh cnQtMV0tPm1pbl92YWx1ZSA8PSB2YWx1ZSk7CisKKwlyZXR1cm4gc3RhcnQ7Cit9CisKKwor LyoKKyAqIGxvd2VyX2JvdW5kCisgKgkJRGV0ZXJtaW5lIGZpcnN0IGluZGV4IHNvIHRoYXQg KHZhbHVlc1tpbmRleF0gPj0gdmFsdWUpLgorICoKKyAqIFRoZSBhcnJheSBvZiByYW5nZXMg aXMgZXhwZWN0ZWQgdG8gYmUgc29ydGVkIGJ5IG1heHZhbHVlLCBzbyB0aGlzIGlzIHRoZSBm aXJzdAorICogcmFuZ2UgdGhhdCBjYW4gcG9zc2libHkgaW50ZXJzZWN0IHdpdGggcmFuZ2Ug aGF2aW5nICJ2YWx1ZSIgYXMgbWludmFsLgorICovCitzdGF0aWMgaW50Citsb3dlcl9ib3Vu ZChEYXR1bSAqdmFsdWVzLCBpbnQgbnZhbHVlcywgRGF0dW0gdmFsdWUsIFR5cGVDYWNoZUVu dHJ5ICp0eXBjYWNoZSkKK3sKKwlpbnQJCXN0YXJ0ID0gMCwKKwkJCWVuZCA9IChudmFsdWVz IC0gMSk7CisKKwkvLyBldmVyeXRoaW5nIG1hdGNoZXMKKwlpZiAocmFuZ2VfdmFsdWVzX2Nt cCgmdmFsdWUsICZ2YWx1ZXNbc3RhcnRdLCB0eXBjYWNoZSkgPD0gMCkKKwkJcmV0dXJuIDA7 CisKKwkvLyBubyBtYXRjaGVzCisJaWYgKHJhbmdlX3ZhbHVlc19jbXAoJnZhbHVlLCAmdmFs dWVzW2VuZF0sIHR5cGNhY2hlKSA+IDApCisJCXJldHVybiBudmFsdWVzOworCisJd2hpbGUg KChlbmQgLSBzdGFydCkgPiAwKQorCXsKKwkJaW50CW1pZHBvaW50OworCQlpbnQJcjsKKwor CQltaWRwb2ludCA9IHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDI7CisKKwkJciA9IHJhbmdl X3ZhbHVlc19jbXAoJnZhbHVlLCAmdmFsdWVzW21pZHBvaW50XSwgdHlwY2FjaGUpOworCisJ CWlmIChyIDw9IDApCisJCQllbmQgPSBtaWRwb2ludDsKKwkJZWxzZQorCQkJc3RhcnQgPSAo bWlkcG9pbnQgKyAxKTsKKwl9CisKKwlBc3NlcnQodmFsdWVzW3N0YXJ0XSA+PSB2YWx1ZSk7 CisJQXNzZXJ0KHZhbHVlc1tzdGFydC0xXSA8IHZhbHVlKTsKKworCXJldHVybiBzdGFydDsK K30KKworLyoKKyAqIHVwcGVyX2JvdW5kCisgKgkJRGV0ZXJtaW5lIGZpcnN0IGluZGV4IHNv IHRoYXQgKHZhbHVlc1tpbmRleF0gPiB2YWx1ZSkuCisgKgorICogVGhlIGFycmF5IG9mIHJh bmdlcyBpcyBleHBlY3RlZCB0byBiZSBzb3J0ZWQgYnkgbWludmFsdWUsIHNvIHRoaXMgaXMg dGhlIGZpcnN0CisgKiByYW5nZSB0aGF0IGNhbid0IHBvc3NpYmx5IGludGVyc2VjdCB3aXRo IGEgcmFuZ2UgaGF2aW5nICJ2YWx1ZSIgYXMgbWF4dmFsLgorICovCitzdGF0aWMgaW50Cit1 cHBlcl9ib3VuZChEYXR1bSAqdmFsdWVzLCBpbnQgbnZhbHVlcywgRGF0dW0gdmFsdWUsIFR5 cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSkKK3sKKwlpbnQJCXN0YXJ0ID0gMCwKKwkJCWVuZCA9 IChudmFsdWVzIC0gMSk7CisKKwkvLyBldmVyeXRoaW5nIG1hdGNoZXMKKwlpZiAocmFuZ2Vf dmFsdWVzX2NtcCgmdmFsdWUsICZ2YWx1ZXNbZW5kXSwgdHlwY2FjaGUpID49IDApCisJCXJl dHVybiBudmFsdWVzOworCisJLy8gbm8gbWF0Y2hlcworCWlmIChyYW5nZV92YWx1ZXNfY21w KCZ2YWx1ZSwgJnZhbHVlc1tzdGFydF0sIHR5cGNhY2hlKSA8IDApCisJCXJldHVybiAwOwor CisJd2hpbGUgKChlbmQgLSBzdGFydCkgPiAwKQorCXsKKwkJaW50IG1pZHBvaW50OworCQlp bnQgcjsKKworCQltaWRwb2ludCA9IHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDI7CisKKwkJ ciA9IHJhbmdlX3ZhbHVlc19jbXAoJnZhbHVlLCAmdmFsdWVzW21pZHBvaW50XSwgdHlwY2Fj aGUpOworCisJCWlmIChyID49IDApCisJCQlzdGFydCA9IG1pZHBvaW50ICsgMTsKKwkJZWxz ZQorCQkJZW5kID0gbWlkcG9pbnQ7CisJfQorCisJQXNzZXJ0KHZhbHVlc1tzdGFydF0gPiB2 YWx1ZSk7CisJQXNzZXJ0KHZhbHVlc1tzdGFydC0xXSA8PSB2YWx1ZSk7CisKKwlyZXR1cm4g c3RhcnQ7Cit9CisKKy8qCisgKiBTaW1wbGUgaGlzdG9ncmFtLCB3aXRoIGJpbnMgdHJhY2tp bmcgdmFsdWUgYW5kIHR3byBvdmVybGFwIGNvdW50cy4KKyAqCisgKiBYWFggTWF5YmUgd2Ug c2hvdWxkIGhhdmUgdHdvIHNlcGFyYXRlIGhpc3RvZ3JhbXMsIG9uZSBmb3IgYWxsIGNvdW50 cyBhbmQKKyAqIGFub3RoZXIgb25lIGZvciAidW5pcXVlIiB2YWx1ZXMuCisgKgorICogWFhY IFNlcmlhbGl6ZSB0aGUgaGlzdG9ncmFtLiBUaGVyZSBtaWdodCBiZSBhIGRhdGEgc2V0IHdo ZXJlIHdlIGhhdmUgdmVyeQorICogbWFueSBkaXN0aW5jdCBidWNrZXRzICh2YWx1ZXMgaGF2 aW5nIHZlcnkgZGlmZmVyZW50IG51bWJlciBvZiBtYXRjaGluZworICogcmFuZ2VzKSAtIG5v dCBzdXJlIGlmIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIHVwcGVyIGxpbWl0IChidXQgaGFyZCB0 byBzYXkgZm9yCisgKiBvdGhlciBvcGNsYXNzZXMsIGxpa2UgYmxvb20pLiBBbmQgd2UgZG9u J3Qgd2FudCBhcmJpdHJhcmlseSBsYXJnZSBoaXN0b2dyYW0sCisgKiB0byBrZWVwIHRoZSBz dGF0aXN0aWNzIGZhaXJseSBzbWFsbCwgSSBndWVzcy4gU28gd2UnZCBuZWVkIHRvIHBpY2sg YSBzdWJzZXQsCisgKiBtZXJnZSBidWNrZXRzIHdpdGggInNpbWlsYXIiIGNvdW50cywgb3Ig YXBwcm94aW1hdGUgaXQgc29tZWhvdy4gRm9yIG5vdyB3ZQorICogZG9uJ3Qgc2VyaWFsaXpl IGl0LCBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGUgaGlzdG9ncmFtLgorICovCit0eXBlZGVm IHN0cnVjdCBoaXN0b2dyYW1fYmluX3QKK3sKKwlpbnQJCXZhbHVlOworCWludAkJY291bnQ7 Cit9IGhpc3RvZ3JhbV9iaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGlzdG9ncmFtX3QKK3sK KwlpbnQJCQkJbmJpbnM7CisJaW50CQkJCW5iaW5zX21heDsKKwloaXN0b2dyYW1fYmluX3QJ Ymluc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBoaXN0b2dyYW1fdDsKKworI2RlZmlu ZSBISVNUT0dSQU1fQklOU19TVEFSVCAzMgorCisvKiBhbGxvY2F0ZSBoaXN0b2dyYW0gd2l0 aCBkZWZhdWx0IG51bWJlciBvZiBiaW5zICovCitzdGF0aWMgaGlzdG9ncmFtX3QgKgoraGlz dG9ncmFtX2luaXQodm9pZCkKK3sKKwloaXN0b2dyYW1fdCAqaGlzdDsKKworCWhpc3QgPSAo aGlzdG9ncmFtX3QgKikgcGFsbG9jMChvZmZzZXRvZihoaXN0b2dyYW1fdCwgYmlucykgKwor CQkJCQkJCQkgICBzaXplb2YoaGlzdG9ncmFtX2Jpbl90KSAqIEhJU1RPR1JBTV9CSU5TX1NU QVJUKTsKKwloaXN0LT5uYmluc19tYXggPSBISVNUT0dSQU1fQklOU19TVEFSVDsKKworCXJl dHVybiBoaXN0OworfQorCisvKgorICogaGlzdG9ncmFtX2FkZAorICoJCUFkZCBhIGhpdCBm b3IgYSBwYXJ0aWN1bGFyIHZhbHVlIHRvIHRoZSBoaXN0b2dyYW0uCisgKgorICogWFhYIFdl IGRvbid0IHNvcnQgdGhlIGJpbnMsIHNvIGp1c3QgZG8gYmluYXJ5IHNvcnQuIEZvciBsYXJn ZSBudW1iZXIgb2YgdmFsdWVzCisgKiB0aGlzIG1pZ2h0IGJlIGFuIGlzc3VlLCBmb3Igc21h bGwgbnVtYmVyIG9mIHZhbHVlcyBhIGxpbmVhciBzZWFyY2ggaXMgZmluZS4KKyAqLworc3Rh dGljIGhpc3RvZ3JhbV90ICoKK2hpc3RvZ3JhbV9hZGQoaGlzdG9ncmFtX3QgKmhpc3QsIGlu dCB2YWx1ZSkKK3sKKwlib29sCWZvdW5kID0gZmFsc2U7CisJaGlzdG9ncmFtX2Jpbl90ICpi aW47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGhpc3QtPm5iaW5zOyBpKyspCisJeworCQlp ZiAoaGlzdC0+Ymluc1tpXS52YWx1ZSA9PSB2YWx1ZSkKKwkJeworCQkJYmluID0gJmhpc3Qt PmJpbnNbaV07CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKQor CXsKKwkJaWYgKGhpc3QtPm5iaW5zID09IGhpc3QtPm5iaW5zX21heCkKKwkJeworCQkJaW50 CQluYmlucyA9ICgyICogaGlzdC0+bmJpbnNfbWF4KTsKKwkJCWhpc3QgPSByZXBhbGxvYyho aXN0LCBvZmZzZXRvZihoaXN0b2dyYW1fdCwgYmlucykgKworCQkJCQkJCQkgICBzaXplb2Yo aGlzdG9ncmFtX2Jpbl90KSAqIG5iaW5zKTsKKwkJCWhpc3QtPm5iaW5zX21heCA9IG5iaW5z OworCQl9CisKKwkJQXNzZXJ0KGhpc3QtPm5iaW5zIDwgaGlzdC0+bmJpbnNfbWF4KTsKKwor CQliaW4gPSAmaGlzdC0+Ymluc1toaXN0LT5uYmlucysrXTsKKwkJYmluLT52YWx1ZSA9IHZh bHVlOworCQliaW4tPmNvdW50ID0gMDsKKwl9CisKKwliaW4tPmNvdW50ICs9IDE7CisKKwlB c3NlcnQoYmluLT52YWx1ZSA9PSB2YWx1ZSk7CisJQXNzZXJ0KGJpbi0+Y291bnQgPj0gMCk7 CisKKwlyZXR1cm4gaGlzdDsKK30KKworLyogdXNlZCB0byBzb3J0IGhpc3RvZ3JhbSBiaW5z IGJ5IHZhbHVlICovCitzdGF0aWMgaW50CitoaXN0b2dyYW1fYmluX2NtcChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiKQoreworCWhpc3RvZ3JhbV9iaW5fdCAqYmEgPSAoaGlzdG9n cmFtX2Jpbl90ICopIGE7CisJaGlzdG9ncmFtX2Jpbl90ICpiYiA9IChoaXN0b2dyYW1fYmlu X3QgKikgYjsKKworCWlmIChiYS0+dmFsdWUgPCBiYi0+dmFsdWUpCisJCXJldHVybiAtMTsK KworCWlmIChiYi0+dmFsdWUgPCBiYS0+dmFsdWUpCisJCXJldHVybiAxOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkCitoaXN0b2dyYW1fcHJpbnQoaGlzdG9ncmFtX3QgKmhp c3QpCit7CisJcmV0dXJuOworCisJZWxvZyhXQVJOSU5HLCAiLS0tLS0gaGlzdG9ncmFtIC0t LS0tIik7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBoaXN0LT5uYmluczsgaSsrKQorCXsKKwkJ ZWxvZyhXQVJOSU5HLCAiYmluICVkIHZhbHVlICVkIGNvdW50ICVkIiwKKwkJCSBpLCBoaXN0 LT5iaW5zW2ldLnZhbHVlLCBoaXN0LT5iaW5zW2ldLmNvdW50KTsKKwl9Cit9CisKKy8qCisg KiBicmluX21pbm1heF9jb3VudF9vdmVybGFwcworICoJCUNhbGN1bGF0ZSBudW1iZXIgb2Yg b3ZlcmxhcHMuCisgKgorICogVGhpcyB1c2VzIHRoZSBtaW5yYW5nZXMgdG8gcXVpY2tseSBl bGltaW5hdGUgcmFuZ2VzIHRoYXQgY2FuJ3QgcG9zc2libHkKKyAqIGludGVyc2VjdC4gV2Ug c2ltcGx5IHdhbGsgbWlucmFuZ2VzIHVudGlsIG1pbnZhbCA+IGN1cnJlbnQgbWF4dmFsLCBh bmQKKyAqIHdlJ3JlIGRvbmUuCisgKgorICogVW5saWtlIGJyaW5fbWlubWF4X2NvdW50X292 ZXJsYXBzMiwgdGhpcyBkb2VzIG5vdCBoYXZlIGlzc3VlcyB3aXRoIHdpZGUKKyAqIHJhbmdl cywgc28gdGhpcyBpcyB3aGF0IHdlIHNob3VsZCB1c2UuCisgKi8KK3N0YXRpYyBpbnQKK2Jy aW5fbWlubWF4X2NvdW50X292ZXJsYXBzKEJyaW5SYW5nZSAqKm1pbnJhbmdlcywgaW50IG5y YW5nZXMsIFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSkKK3sKKwlpbnQgbm92ZXJsYXBzOwor CisjaWZkZWYgU1RBVFNfREVCVUcKKwlUaW1lc3RhbXBUegkJc3RhcnRfdHMgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisjZW5kaWYKKworCW5vdmVybGFwcyA9IDA7CisJZm9yIChpbnQg aSA9IDA7IGkgPCBucmFuZ2VzOyBpKyspCisJeworCQlEYXR1bQltYXh2YWwgPSBtaW5yYW5n ZXNbaV0tPm1heF92YWx1ZTsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgaW5kZXggb2YgdGhl IGZpcnN0IHJhbmdlIHdpdGggKG1pbnZhbCA+IGN1cnJlbnQgbWF4dmFsKQorCQkgKiBieSBi aW5hcnkgc2VhcmNoLiBXZSBrbm93IGFsbCBvdGhlciByYW5nZXMgY2FuJ3Qgb3ZlcmxhcCB0 aGUKKwkJICogY3VycmVudCBvbmUuIFdlIHNpbXBseSBzdWJ0cmFjdCBpbmRleGVzIHRvIGNv dW50IHJhbmdlcy4KKwkJICovCisJCWludAkJaWR4ID0gbWludmFsX2VuZChtaW5yYW5nZXMs IG5yYW5nZXMsIG1heHZhbCwgdHlwY2FjaGUpOworCisJCS8qIC0xIGJlY2F1c2Ugd2UgZG9u J3QgY291bnQgdGhlIHJhbmdlIGFzIGludGVyc2VjdGluZyB3aXRoIGl0c2VsZiAqLworCQlu b3ZlcmxhcHMgKz0gKGlkeCAtIGkgLSAxKTsKKwl9CisKKwkvKgorCSAqIFdlIG9ubHkgY291 bnQgMS8yIHRoZSByYW5nZXMgKG1pbnZhbCA+IGN1cnJlbnQgbWludmFsKSwgc28gdGhlIHRv dGFsCisJICogbnVtYmVyIG9mIG92ZXJsYXBzIGlzIHR3aWNlIHdoYXQgd2UgY291bnRlZC4K KwkgKi8KKwlub3ZlcmxhcHMgKj0gMjsKKworI2lmZGVmIFNUQVRTX0RFQlVHCisJZWxvZyhX QVJOSU5HLCAiLS0tLS0gYnJpbl9taW5tYXhfY291bnRfb3ZlcmxhcHMgLS0tLS0iKTsKKwll bG9nKFdBUk5JTkcsICJub3ZlcmxhcHMgPSAlZCIsIG5vdmVybGFwcyk7CisJZWxvZyhXQVJO SU5HLCAiZHVyYXRpb24gPSAlbGQiLCBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRz KHN0YXJ0X3RzLAorCQkJCQkJCQkJR2V0Q3VycmVudFRpbWVzdGFtcCgpKSk7CisjZW5kaWYK KworCXJldHVybiBub3ZlcmxhcHM7Cit9CisKKyNpZmRlZiBTVEFUU19DUk9TU19DSEVDSwor LyoKKyAqIGJyaW5fbWlubWF4X2NvdW50X292ZXJsYXBzMgorICoJCUNhbGN1bGF0ZSBudW1i ZXIgb2Ygb3ZlcmxhcHMuCisgKgorICogVGhpcyB1c2VzIHRoZSBtaW5yYW5nZXMvbWF4cmFu Z2VzIHRvIHF1aWNrbHkgZWxpbWluYXRlIHJhbmdlcyB0aGF0IGNhbid0CisgKiBwb3NzaWJs eSBpbnRlcnNlY3QuCisgKgorICogWFhYIFNlZW1zIHJhdGhlciBjb21wbGljYXRlZCBhbmQg d29ya3MgcG9vcmx5IGZvciB3aWRlIHJhbmdlcyAod2l0aCBvdXRsaWVyCisgKiB2YWx1ZXMp LCBicmluX21pbm1heF9jb3VudF9vdmVybGFwcyBpcyBsaWtlbHkgYmV0dGVyLgorICovCitz dGF0aWMgaW50CiticmluX21pbm1heF9jb3VudF9vdmVybGFwczIoQnJpblJhbmdlcyAqcmFu Z2VzLAorCQkJCQkJICAgQnJpblJhbmdlICoqbWlucmFuZ2VzLCBCcmluUmFuZ2UgKiptYXhy YW5nZXMsCisJCQkJCQkgICBUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUpCit7CisJaW50IG5v dmVybGFwczsKKworCVRpbWVzdGFtcFR6CQlzdGFydF90cyA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKKworCS8qCisJICogV2FsayB0aGUgcmFuZ2VzIG9yZGVyZWQgYnkgbWF4X3ZhbHVl cywgc2VlIGhvdyBtYW55IHJhbmdlcyBvdmVybGFwLgorCSAqCisJICogT25jZSB3ZSBnZXQg dG8gYSBzdGF0ZSB3aGVyZSAobWluX3ZhbHVlID4gY3VycmVudC5tYXhfdmFsdWUpIGZvcgor CSAqIGFsbCBmdXR1cmUgcmFuZ2VzLCB3ZSBrbm93IG5vbmUgb2YgdGhlbSBjYW4gb3Zlcmxh cCBhbmQgd2UgY2FuCisJICogdGVybWluYXRlLiBUaGlzIGlzIHdoYXQgbWluX2luZGV4X2xv d2VzdCBpcyBmb3IuCisJICoKKwkgKiBYWFggSWYgdGhlcmUgYXJlIHZlcnkgd2lkZSByYW5n ZXMgKHdpdGggb3V0bGllciBtaW4vbWF4IHZhbHVlcyksCisJICogdGhlIG1pbl9pbmRleF9s b3dlc3QgaXMgZ29pbmcgdG8gYmUgcHJldHR5IHVzZWxlc3MsIGJlY2F1c2UgdGhlCisJICog cmFuZ2Ugd2lsbCBiZSBzb3J0ZWQgYXQgdGhlIHZlcnkgZW5kIGJ5IG1heF92YWx1ZSwgYnV0 IHdpbGwgaGF2ZQorCSAqIHZlcnkgbG93IG1pbl9pbmRleCwgc28gdGhpcyB3b24ndCB3b3Jr LgorCSAqCisJICogWFhYIFdlIGNvdWxkIGNvbGxlY3QgYSBtb3JlIGVsYWJvcmF0ZSBzdHVm ZiwgbGlrZSBmb3IgZXhhbXBsZSBhCisJICogaGlzdG9ncmFtIG9mIG51bWJlciBvZiBvdmVy bGFwcywgb3IgbWF4aW11bSBudW1iZXIgb2Ygb3ZlcmxhcHMuCisJICogU28gd2UnZCBoYXZl IGF2ZXJhZ2UsIGJ1dCB0aGVuIGFsc28gYW4gaW5mbyBpZiB0aGVyZSBhcmUgc29tZQorCSAq IHJhbmdlcyB3aXRoIHZlcnkgbWFueSBvdmVybGFwcy4KKwkgKi8KKwlub3ZlcmxhcHMgPSAw OworCWZvciAoaW50IGkgPSAwOyBpIDwgcmFuZ2VzLT5ucmFuZ2VzOyBpKyspCisJeworCQlp bnQJCQlpZHggPSBpKzE7CisJCUJyaW5SYW5nZSAqcmEgPSBtYXhyYW5nZXNbaV07CisJCXVp bnQ2NAkJbWluX2luZGV4ID0gcmEtPm1pbl9pbmRleDsKKworCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCisjaWZkZWYgTk9UX1VTRUQKKwkJLyoKKwkJICogWFhYIE5vdCBuZWVkZWQs IHdlIGNhbiBqdXN0IGNvdW50ICJmdXR1cmUiIHJhbmdlcyBhbmQgdGhlbgorCQkgKiB3ZSBq dXN0IG11bHRpcGx5IGJ5IDIuCisJCSAqLworCisJCS8qCisJCSAqIFdoYXQncyB0aGUgZmly c3QgcmFuZ2UgdGhhdCBtaWdodCBvdmVybGFwIHdpdGggdGhpcyBvbmU/CisJCSAqIG5lZWRz IHRvIGhhdmUgbWF4dmFsID4gY3VycmVudC5taW52YWwuCisJCSAqLworCQl3aGlsZSAoaWR4 ID4gMCkKKwkJeworCQkJQnJpblJhbmdlICpyYiA9IG1heHJhbmdlc1tpZHggLSAxXTsKKwor CQkJLyogdGhlIHJhbmdlIGlzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUsIHNvIGNhbid0IGlu dGVyc2VjdCAqLworCQkJaWYgKHJhbmdlX3ZhbHVlc19jbXAoJnJiLT5tYXhfdmFsdWUsICZy YS0+bWluX3ZhbHVlLCB0eXBjYWNoZSkgPCAwKQorCQkJCWJyZWFrOworCisJCQlpZHgtLTsK KwkJfQorI2VuZGlmCisKKwkJLyoKKwkJICogRmluZCB0aGUgZmlyc3QgbWluX2luZGV4IHRo YXQgaXMgaGlnaGVyIHRoYW4gdGhlIG1heF92YWx1ZSwKKwkJICogc28gdGhhdCB3ZSBjYW4g Y29tcGFyZSB0aGF0IGluc3RlYWQgb2YgdGhlIHZhbHVlcyBpbiB0aGUKKwkJICogbmV4dCBs b29wLiBUaGVyZSBzaG91bGQgYmUgZmV3ZXIgdmFsdWUgY29tcGFyaXNvbnMgdGhhbiBpbgor CQkgKiB0aGUgbmV4dCBsb29wLCBzbyB3ZSdsbCBzYXZlIG9uIGZ1bmN0aW9uIGNhbGxzLgor CQkgKi8KKwkJd2hpbGUgKG1pbl9pbmRleCA8IHJhbmdlcy0+bnJhbmdlcykKKwkJeworCQkJ aWYgKHJhbmdlX3ZhbHVlc19jbXAoJm1pbnJhbmdlc1ttaW5faW5kZXhdLT5taW5fdmFsdWUs CisJCQkJCQkJCSAmcmEtPm1heF92YWx1ZSwgdHlwY2FjaGUpID4gMCkKKwkJCQlicmVhazsK KworCQkJbWluX2luZGV4Kys7CisJCX0KKworCQkvKgorCQkgKiBXYWxrIHRoZSBmb2xsb3dp bmcgcmFuZ2VzIChvcmRlcmVkIGJ5IG1heF92YWx1ZSksIGFuZCBjaGVjaworCQkgKiBpZiBp dCBvdmVybGFwcy4gSWYgaXQgbWF0Y2hlcywgd2UgbG9vayBhdCB0aGUgbmV4dCBvbmUuIElm CisJCSAqIG5vdCwgd2UgY2hlY2sgaWYgdGhlcmUgY2FuIGJlIG1vcmUgcmFuZ2VzLgorCQkg Ki8KKwkJZm9yIChpbnQgaiA9IGlkeDsgaiA8IHJhbmdlcy0+bnJhbmdlczsgaisrKQorCQl7 CisJCQlCcmluUmFuZ2UgKnJiID0gbWF4cmFuZ2VzW2pdOworCisJCQkvKiB0aGUgcmFuZ2Ug b3ZlcmxhcHMgLSBqdXN0IGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lICovCisJCQkvLyBp ZiAocmFuZ2VfdmFsdWVzX2NtcCgmcmItPm1pbl92YWx1ZSwgJnJhLT5tYXhfdmFsdWUsIHR5 cGNhY2hlKSA8PSAwKQorCQkJaWYgKHJiLT5taW5faW5kZXggPCBtaW5faW5kZXgpCisJCQl7 CisJCQkJbm92ZXJsYXBzKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkg KiBBcmUgdGhlcmUgYW55IGZ1dHVyZSByYW5nZXMgdGhhdCBtaWdodCBvdmVybGFwPyBXZSBj YW4KKwkJCSAqIGNoZWNrIHRoZSBtaW5faW5kZXhfbG93ZXN0IHRvIGRlY2lkZSBxdWlja2x5 LgorCQkJICovCisJCQkgaWYgKHJiLT5taW5faW5kZXhfbG93ZXN0ID49IG1pbl9pbmRleCkK KwkJCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIG9ubHkgY291bnQgaW50ZXJz ZWN0IGZvciAiZm9sbG93aW5nIiByYW5nZXMgd2hlbiBvcmRlcmVkIGJ5IG1heHZhbCwKKwkg KiBzbyB3ZSBvbmx5IHNlZSAxLzIgdGhlIG92ZXJsYXBzLiBTbyBkb3VibGUgdGhlIHJlc3Vs dC4KKwkgKi8KKwlub3ZlcmxhcHMgKj0gMjsKKworCWVsb2coV0FSTklORywgIi0tLS0tIGJy aW5fbWlubWF4X2NvdW50X292ZXJsYXBzMiAtLS0tLSIpOworCWVsb2coV0FSTklORywgIm5v dmVybGFwcyA9ICVkIiwgbm92ZXJsYXBzKTsKKwllbG9nKFdBUk5JTkcsICJkdXJhdGlvbiA9 ICVsZCIsIFRpbWVzdGFtcERpZmZlcmVuY2VNaWxsaXNlY29uZHMoc3RhcnRfdHMsCisJCQkJ CQkJCQlHZXRDdXJyZW50VGltZXN0YW1wKCkpKTsKKworCXJldHVybiBub3ZlcmxhcHM7Cit9 CisKKy8qCisgKiBicmluX21pbm1heF9jb3VudF9vdmVybGFwc19icnV0ZWZvcmNlCisgKgkJ Q2FsY3VsYXRlIG51bWJlciBvZiBvdmVybGFwcyBieSBicnV0ZSBmb3JjZS4KKyAqCisgKiBB Y3R1YWxseSBjb21wYXJlcyBldmVyeSByYW5nZSB0byBldmVyeSBvdGhlciByYW5nZS4gUXVp dGUgZXhwZW5zaXZlLCB1c2VkCisgKiBwcmltYXJpbHkgdG8gY3Jvc3MtY2hlY2sgdGhlIG90 aGVyIGFsZ29yaXRobXMuIAorICovCitzdGF0aWMgaW50CiticmluX21pbm1heF9jb3VudF9v dmVybGFwc19icnV0ZWZvcmNlKEJyaW5SYW5nZXMgKnJhbmdlcywgVHlwZUNhY2hlRW50cnkg KnR5cGNhY2hlKQoreworCWludCBub3ZlcmxhcHM7CisKKwlUaW1lc3RhbXBUegkJc3RhcnRf dHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkvKgorCSAqIEJydXRlIGZvcmNlIGNh bGN1bGF0aW9uIG9mIG92ZXJsYXBwaW5nIHJhbmdlcywgY29tcGFyaW5nIGVhY2gKKwkgKiBy YW5nZSB0byBldmVyeSBvdGhlciByYW5nZSAtIGJvdW5kIHRvIGJlIHByZXR0eSBleHBlbnNp dmUsIGFzCisJICogaXQncyBwcmV0dHkgbXVjaCBPKE5eMikuIEtlcHQgbW9zdGx5IGZvciBl YXN5IGNyb3NzLWNoZWNrIHdpdGgKKwkgKiB0aGUgcHJlY2VkaW5nICJvcHRpbWl6ZWQiIGNv ZGUuCisJICovCisJbm92ZXJsYXBzID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJhbmdl cy0+bnJhbmdlczsgaSsrKQorCXsKKwkJQnJpblJhbmdlICpyYSA9ICZyYW5nZXMtPnJhbmdl c1tpXTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IHJhbmdlcy0+bnJhbmdlczsgaisrKQor CQl7CisJCQlCcmluUmFuZ2UgKnJiID0gJnJhbmdlcy0+cmFuZ2VzW2pdOworCisJCQlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCisJCQlpZiAoaSA9PSBqKQorCQkJCWNvbnRpbnVlOwor CisJCQlpZiAocmFuZ2VfdmFsdWVzX2NtcCgmcmEtPm1heF92YWx1ZSwgJnJiLT5taW5fdmFs dWUsIHR5cGNhY2hlKSA8IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChyYW5nZV92YWx1 ZXNfY21wKCZyYi0+bWF4X3ZhbHVlLCAmcmEtPm1pbl92YWx1ZSwgdHlwY2FjaGUpIDwgMCkK KwkJCQljb250aW51ZTsKKworCQkJZWxvZyhERUJVRzEsICJbJWxkLCVsZF0gb3ZlcmxhcHMg WyVsZCwlbGRdIiwKKwkJCQkgcmEtPm1pbl92YWx1ZSwgcmEtPm1heF92YWx1ZSwKKwkJCQkg cmItPm1pbl92YWx1ZSwgcmItPm1heF92YWx1ZSk7CisKKwkJCW5vdmVybGFwcysrOworCQl9 CisJfQorCisJZWxvZyhXQVJOSU5HLCAiLS0tLS0gYnJpbl9taW5tYXhfY291bnRfb3Zlcmxh cHNfYnJ1dGVmb3JjZSAtLS0tLSIpOworCWVsb2coV0FSTklORywgIm5vdmVybGFwcyA9ICVk Iiwgbm92ZXJsYXBzKTsKKwllbG9nKFdBUk5JTkcsICJkdXJhdGlvbiA9ICVsZCIsIFRpbWVz dGFtcERpZmZlcmVuY2VNaWxsaXNlY29uZHMoc3RhcnRfdHMsCisJCQkJCQkJCQlHZXRDdXJy ZW50VGltZXN0YW1wKCkpKTsKKworCXJldHVybiBub3ZlcmxhcHM7Cit9CisjZW5kaWYKKwor LyoKKyAqIGJyaW5fbWlubWF4X21hdGNoX3R1cGxlc190b19yYW5nZXMKKyAqCQlNYXRjaCB0 dXBsZXMgdG8gcmFuZ2VzLCBjb3VudCBhdmVyYWdlIG51bWJlciBvZiByYW5nZXMgcGVyIHR1 cGxlLgorICoKKyAqIEFsdGVybmF0aXZlIHRvIGJyaW5fbWlubWF4X21hdGNoX3R1cGxlc190 b19yYW5nZXMyLCBsZXZlcmFnaW5nIG9yZGVyaW5nCisgKiBvZiB2YWx1ZXMsIG5vdCByYW5n ZXMuCisgKgorICogWFhYIFRoaXMgc2VlbXMgbGlrZSB0aGUgb3B0aW1hbCB3YXkgdG8gZG8g dGhpcy4KKyAqLworc3RhdGljIHZvaWQKK2JyaW5fbWlubWF4X21hdGNoX3R1cGxlc190b19y YW5nZXMoQnJpblJhbmdlcyAqcmFuZ2VzLAorCQkJCQkJCQkgICBpbnQgbnVtcm93cywgSGVh cFR1cGxlICpyb3dzLAorCQkJCQkJCQkgICBpbnQgbnZhbHVlcywgRGF0dW0gKnZhbHVlcywK KwkJCQkJCQkJICAgVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJCQkgICBpbnQg KnJlc19ubWF0Y2hlcywKKwkJCQkJCQkJICAgaW50ICpyZXNfbm1hdGNoZXNfdW5pcXVlLAor CQkJCQkJCQkgICBpbnQgKnJlc19udmFsdWVzX3VuaXF1ZSkKK3sKKwlpbnQJCW5tYXRjaGVz ID0gMDsKKwlpbnQJCW5tYXRjaGVzX3VuaXF1ZSA9IDA7CisJaW50CQludmFsdWVzX3VuaXF1 ZSA9IDA7CisJaW50CQlubWF0Y2hlc192YWx1ZSA9IDA7CisKKwlpbnQJICAgKnVuaXF1ZSA9 IChpbnQgKikgcGFsbG9jMChzaXplb2YoaW50KSAqIG52YWx1ZXMpOworCisjaWZkZWYgU1RB VFNfREVCVUcKKwlUaW1lc3RhbXBUegkJc3RhcnRfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1w KCk7CisjZW5kaWYKKworCS8qCisJICogQnVpbGQgcnVubmluZyBjb3VudCBvZiB1bmlxdWUg dmFsdWVzLiBXZSBrbm93IHRoZXJlIGFyZSB1bmlxdWVbaV0KKwkgKiB1bmlxdWUgdmFsdWVz IGluIHZhbHVlcyBhcnJheSB1cCB0byBpbmRleCAiaSIuCisJICovCisJdW5pcXVlWzBdID0g MTsKKwlmb3IgKGludCBpID0gMTsgaSA8IG52YWx1ZXM7IGkrKykKKwl7CisJCWlmIChyYW5n ZV92YWx1ZXNfY21wKCZ2YWx1ZXNbaS0xXSwgJnZhbHVlc1tpXSwgdHlwY2FjaGUpID09IDAp CisJCQl1bmlxdWVbaV0gPSB1bmlxdWVbaS0xXTsKKwkJZWxzZQorCQkJdW5pcXVlW2ldID0g dW5pcXVlW2ktMV0gKyAxOworCX0KKworCW52YWx1ZXNfdW5pcXVlID0gdW5pcXVlW252YWx1 ZXMtMV07CisKKwkvKgorCSAqIFdhbGsgdGhlIHJhbmdlcywgZm9yIGVhY2ggcmFuZ2UgZGV0 ZXJtaW5lIHRoZSBmaXJzdC9sYXN0IG1hcHBpbmcKKwkgKiB2YWx1ZS4gVXNlIHRoZSAidW5p cXVlIiBhcnJheSB0byBjb3VudCB0aGUgdW5pcXVlIHZhbHVlcy4KKwkgKi8KKwlmb3IgKGlu dCBpID0gMDsgaSA8IHJhbmdlcy0+bnJhbmdlczsgaSsrKQorCXsKKwkJaW50CQlzdGFydDsK KwkJaW50CQllbmQ7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQlzdGFydCA9 IGxvd2VyX2JvdW5kKHZhbHVlcywgbnZhbHVlcywgcmFuZ2VzLT5yYW5nZXNbaV0ubWluX3Zh bHVlLCB0eXBjYWNoZSk7CisJCWVuZCA9IHVwcGVyX2JvdW5kKHZhbHVlcywgbnZhbHVlcywg cmFuZ2VzLT5yYW5nZXNbaV0ubWF4X3ZhbHVlLCB0eXBjYWNoZSk7CisKKwkJQXNzZXJ0KGVu ZCA+IHN0YXJ0KTsKKworCQlubWF0Y2hlc192YWx1ZSA9IChlbmQgLSBzdGFydCk7CisJCW5t YXRjaGVzX3VuaXF1ZSArPSAodW5pcXVlW2VuZC0xXSAtIHVuaXF1ZVtzdGFydF0gKyAxKTsK KworCQlubWF0Y2hlcyArPSBubWF0Y2hlc192YWx1ZTsKKwl9CisKKyNpZmRlZiBTVEFUU19E RUJVRworCWVsb2coV0FSTklORywgIi0tLS0tIGJyaW5fbWlubWF4X21hdGNoX3R1cGxlc190 b19yYW5nZXMgLS0tLS0iKTsKKwllbG9nKFdBUk5JTkcsICJubWF0Y2hlcyA9ICVkICVmIiwg bm1hdGNoZXMsIChkb3VibGUpIG5tYXRjaGVzIC8gbnVtcm93cyk7CisJZWxvZyhXQVJOSU5H LCAibm1hdGNoZXMgdW5pcXVlID0gJWQgJWQgJWYiLCBubWF0Y2hlc191bmlxdWUsIG52YWx1 ZXNfdW5pcXVlLAorCQkgKGRvdWJsZSkgbm1hdGNoZXNfdW5pcXVlIC8gbnZhbHVlc191bmlx dWUpOworCWVsb2coV0FSTklORywgImR1cmF0aW9uID0gJWxkIiwgVGltZXN0YW1wRGlmZmVy ZW5jZU1pbGxpc2Vjb25kcyhzdGFydF90cywKKwkJCQkJCQkJCUdldEN1cnJlbnRUaW1lc3Rh bXAoKSkpOworI2VuZGlmCisKKwkqcmVzX25tYXRjaGVzID0gbm1hdGNoZXM7CisJKnJlc19u bWF0Y2hlc191bmlxdWUgPSBubWF0Y2hlc191bmlxdWU7CisJKnJlc19udmFsdWVzX3VuaXF1 ZSA9IG52YWx1ZXNfdW5pcXVlOworfQorCisjaWZkZWYgU1RBVFNfQ1JPU1NfQ0hFQ0sKKy8q CisgKiBicmluX21pbm1heF9tYXRjaF90dXBsZXNfdG9fcmFuZ2VzMgorICoJCU1hdGNoIHR1 cGxlcyB0byByYW5nZXMsIGNvdW50IGF2ZXJhZ2UgbnVtYmVyIG9mIHJhbmdlcyBwZXIgdHVw bGUuCisgKgorICogTWF0Y2ggc2FtcGxlIHR1cGxlcyB0byB0aGUgcmFuZ2VzLCBzbyB0aGF0 IHdlIGNhbiBjb3VudCBob3cgbWFueSByYW5nZXMKKyAqIGEgdmFsdWUgbWF0Y2hlcyBvbiBh dmVyYWdlLiBUaGlzIG1pZ2h0IHNlZW0gcmVkdW5kYW50IHRvIHRoZSBudW1iZXIgb2YKKyAq IG92ZXJsYXBzLCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB+YXZnX292ZXJsYXBzLzIuCisgKgor ICogSW1hZ2luZSByYW5nZXMgYXJyYW5nZWQgaW4gInNoaWZ0ZWQiIHVuaWZvcm1seSBieSAx L292ZXJsYXBzLCBlLmcuIHdpdGggMworICogb3ZlcmxhcHMgWzAsMTAwXSwgWzMzLDEzM10s IFs2NiwgMTY2XSBhbmQgc28gb24uIEEgcmFuZG9tIHZhbHVlIHdpbGwgaGl0CisgKiBvbmx5 IGhhbGYgb2YgdGhlcmUgcmFuZ2VzLCB0aHVzIDEvMi4gVGhpcyBjYW4gYmUgZXh0ZW5kZWQg dG8gcmFuZG9tbHkKKyAqIG92ZXJsYXBwaW5nIHJhbmdlcy4KKyAqCisgKiBIb3dldmVyLCB3 ZSBtYXkgbm90IGJlIGFibGUgdG8gY291bnQgb3ZlcmxhcHMgZm9yIHNvbWUgb3BjbGFzc2Vz IChlLmcuIGZvcgorICogYmxvb20gcmFuZ2VzKSwgaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIGF0 IGxlYXN0IHRoaXMuCisgKgorICogVGhpcyBzaW1wbHkgd2Fsa3MgdGhlIHZhbHVlcywgYW5k IGRldGVybWluZXMgbWF0Y2hpbmcgcmFuZ2VzIGJ5IGxvb2tpbmcKKyAqIGZvciBsb3dlci91 cHBlciBib3VuZCBpbiByYW5nZXMgb3JkZXJlZCBieSBtaW52YWwvbWF4dmFsLgorICoKKyAq IFhYWCBUaGUgb3RoZXIgcXVlc3Rpb24gaXMgd2hhdCB0byBkbyBhYm91dCBkdXBsaWNhdGUg dmFsdWVzLiBJZiB3ZSBoYXZlIGEKKyAqIHZlcnkgZnJlcXVlbnQgdmFsdWUgaW4gdGhlIHNh bXBsZSwgaXQncyBsaWtlbHkgaW4gbWFueSBwbGFjZXMvcmFuZ2VzLiBXaGljaAorICogd2ls bCBza2V3IHRoZSBhdmVyYWdlLCBiZWNhdXNlIGl0J2xsIGJlIGFkZGVkIHJlcGVhdGVkbHku IFNvIHdlIGFsc28gY291bnQKKyAqIGF2Z19yYW5nZXMgZm9yIHVuaXF1ZSB2YWx1ZXMuCisg KgorICogWFhYIFRoZSByZWxhdGlvbnNoaXAgdGhhdCAoYXZlcmFnZV9tYXRjaGVzIH4gYXZl cmFnZV9vdmVybGFwcy8yKSBvbmx5CisgKiB3b3JrcyBmb3IgbWlubWF4IG9wY2xhc3MsIGFu ZCBjYW4ndCBiZSBleHRlbmRlZCB0byBtaW5tYXgtbXVsdGkuIFRoZQorICogb3ZlcmxhcHMg Y2FuIG9ubHkgY29uc2lkZXIgdGhlIHR3byBleHRyZW1lIHZhbHVlcyAoZXNzZW50aWFsbHkg dHJlYXRpbmcKKyAqIHRoZSBzdW1tYXJ5IGFzIGEgc2luZ2xlIG1pbm1heCByYW5nZSksIGJl Y2F1c2UgdGhhdCdzIHdoYXQgYnJpbnNvcnQKKyAqIG5lZWRzLiBCdXQgdGhlIG1pbm1heC1t dWx0aSByYW5nZSBtYXkgaGF2ZSAiZ2FwcyIgKGtpbmRhIHRoZSB3aG9sZSBwb2ludAorICog b2YgdGhlc2Ugb3BjbGFzc2VzKSwgd2hpY2ggYWZmZWN0cyBtYXRjaGluZyB0dXBsZXMgdG8g cmFuZ2VzLgorICoKKyAqIFhYWCBUaGlzIGFsc28gYnVpbGRzIGhpc3RvZ3JhbXMgb2YgdGhl IG51bWJlciBvZiBtYXRjaGVzLCBib3RoIGZvciB0aGUKKyAqIHJhdyBhbmQgdW5pcXVlIHZh bHVlcy4gQXQgdGhlIG1vbWVudCB3ZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHRoZQorICog cmVzdWx0cywgdGhvdWdoIChleGNlcHQgZm9yIHByaW50aW5nIHRob3NlKS4KKyAqLworc3Rh dGljIHZvaWQKK2JyaW5fbWlubWF4X21hdGNoX3R1cGxlc190b19yYW5nZXMyKEJyaW5SYW5n ZXMgKnJhbmdlcywKKwkJCQkJCQkJICAgIEJyaW5SYW5nZSAqKm1pbnJhbmdlcywgQnJpblJh bmdlICoqbWF4cmFuZ2VzLAorCQkJCQkJCQkgICAgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKKwkJCQkJCQkJICAgIGludCBudmFsdWVzLCBEYXR1bSAqdmFsdWVzLAorCQkJCQkJ CQkgICAgVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJCQkgICAgaW50ICpyZXNf bm1hdGNoZXMsCisJCQkJCQkJCSAgICBpbnQgKnJlc19ubWF0Y2hlc191bmlxdWUsCisJCQkJ CQkJCSAgICBpbnQgKnJlc19udmFsdWVzX3VuaXF1ZSkKK3sKKwlpbnQJCW5tYXRjaGVzID0g MDsKKwlpbnQJCW5tYXRjaGVzX3VuaXF1ZSA9IDA7CisJaW50CQludmFsdWVzX3VuaXF1ZSA9 IDA7CisJaGlzdG9ncmFtX3QgKmhpc3QgPSBoaXN0b2dyYW1faW5pdCgpOworCWhpc3RvZ3Jh bV90ICpoaXN0X3VuaXF1ZSA9IGhpc3RvZ3JhbV9pbml0KCk7CisJaW50CQlubWF0Y2hlc192 YWx1ZSA9IDA7CisKKwlUaW1lc3RhbXBUegkJc3RhcnRfdHMgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG52YWx1ZXM7IGkrKykKKwl7CisJCWlu dAkJc3RhcnQ7CisJCWludAkJZW5kOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisK KwkJLyoKKwkJICogU2FtZSB2YWx1ZSBhcyBwcmVjZWRpbmcsIHNvIGp1c3QgdXNlIHRoZSBw cmVjZWRpbmcgY291bnQuCisJCSAqIFdlIGRvbid0IGluY3JlbWVudCB0aGUgdW5pcXVlIGNv dW50ZXJzLCBiZWNhdXNlIHRoaXMgaXMKKwkJICogYSBkdXBsaWNhdGUuCisJCSAqLworCQlp ZiAoKGkgPiAwKSAmJiAocmFuZ2VfdmFsdWVzX2NtcCgmdmFsdWVzW2ktMV0sICZ2YWx1ZXNb aV0sIHR5cGNhY2hlKSA9PSAwKSkKKwkJeworCQkJbm1hdGNoZXMgKz0gbm1hdGNoZXNfdmFs dWU7CisJCQloaXN0ID0gaGlzdG9ncmFtX2FkZChoaXN0LCBubWF0Y2hlc192YWx1ZSk7CisJ CQljb250aW51ZTsKKwkJfQorCisJCW5tYXRjaGVzX3ZhbHVlID0gMDsKKworCQlzdGFydCA9 IG1heHZhbF9zdGFydChtYXhyYW5nZXMsIHJhbmdlcy0+bnJhbmdlcywgdmFsdWVzW2ldLCB0 eXBjYWNoZSk7CisJCWVuZCA9IG1pbnZhbF9lbmQobWlucmFuZ2VzLCByYW5nZXMtPm5yYW5n ZXMsIHZhbHVlc1tpXSwgdHlwY2FjaGUpOworCisJCWZvciAoaW50IGogPSBzdGFydDsgaiA8 IHJhbmdlcy0+bnJhbmdlczsgaisrKQorCQl7CisJCQlpZiAobWF4cmFuZ2VzW2pdLT5taW5f aW5kZXggPj0gZW5kKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobWF4cmFuZ2VzW2pdLT5t aW5faW5kZXhfbG93ZXN0ID49IGVuZCkKKwkJCQlicmVhazsKKworCQkJbm1hdGNoZXNfdmFs dWUrKzsKKwkJfQorCisJCWhpc3QgPSBoaXN0b2dyYW1fYWRkKGhpc3QsIG5tYXRjaGVzX3Zh bHVlKTsKKwkJaGlzdF91bmlxdWUgPSBoaXN0b2dyYW1fYWRkKGhpc3RfdW5pcXVlLCBubWF0 Y2hlc192YWx1ZSk7CisKKwkJbm1hdGNoZXMgKz0gbm1hdGNoZXNfdmFsdWU7CisJCW5tYXRj aGVzX3VuaXF1ZSArPSBubWF0Y2hlc192YWx1ZTsKKwkJbnZhbHVlc191bmlxdWUrKzsKKwl9 CisKKwllbG9nKFdBUk5JTkcsICItLS0tLSBicmluX21pbm1heF9tYXRjaF90dXBsZXNfdG9f cmFuZ2VzMiAtLS0tLSIpOworCWVsb2coV0FSTklORywgIm5tYXRjaGVzID0gJWQgJWYiLCBu bWF0Y2hlcywgKGRvdWJsZSkgbm1hdGNoZXMgLyBudW1yb3dzKTsKKwllbG9nKFdBUk5JTkcs ICJubWF0Y2hlcyB1bmlxdWUgPSAlZCAlZCAlZiIsCisJCSBubWF0Y2hlc191bmlxdWUsIG52 YWx1ZXNfdW5pcXVlLCAoZG91YmxlKSBubWF0Y2hlc191bmlxdWUgLyBudmFsdWVzX3VuaXF1 ZSk7CisJZWxvZyhXQVJOSU5HLCAiZHVyYXRpb24gPSAlbGQiLCBUaW1lc3RhbXBEaWZmZXJl bmNlTWlsbGlzZWNvbmRzKHN0YXJ0X3RzLAorCQkJCQkJCQkJR2V0Q3VycmVudFRpbWVzdGFt cCgpKSk7CisKKwlwZ19xc29ydChoaXN0LT5iaW5zLCBoaXN0LT5uYmlucywgc2l6ZW9mKGhp c3RvZ3JhbV9iaW5fdCksIGhpc3RvZ3JhbV9iaW5fY21wKTsKKwlwZ19xc29ydChoaXN0X3Vu aXF1ZS0+YmlucywgaGlzdF91bmlxdWUtPm5iaW5zLCBzaXplb2YoaGlzdG9ncmFtX2Jpbl90 KSwgaGlzdG9ncmFtX2Jpbl9jbXApOworCisJaGlzdG9ncmFtX3ByaW50KGhpc3QpOworCWhp c3RvZ3JhbV9wcmludChoaXN0X3VuaXF1ZSk7CisKKwlwZnJlZShoaXN0KTsKKwlwZnJlZSho aXN0X3VuaXF1ZSk7CisKKwkqcmVzX25tYXRjaGVzID0gbm1hdGNoZXM7CisJKnJlc19ubWF0 Y2hlc191bmlxdWUgPSBubWF0Y2hlc191bmlxdWU7CisJKnJlc19udmFsdWVzX3VuaXF1ZSA9 IG52YWx1ZXNfdW5pcXVlOworfQorCisvKgorICogYnJpbl9taW5tYXhfbWF0Y2hfdHVwbGVz X3RvX3Jhbmdlc19icnV0ZWZvcmNlCisgKgkJTWF0Y2ggdHVwbGVzIHRvIHJhbmdlcywgY291 bnQgYXZlcmFnZSBudW1iZXIgb2YgcmFuZ2VzIHBlciB0dXBsZS4KKyAqCisgKiBCcnV0ZWZv cmNlIGFwcHJvYWNoLCB1c2VkIG1vc3RseSBmb3IgY3Jvc3MtY2hlY2tpbmcuCisgKi8KK3N0 YXRpYyB2b2lkCiticmluX21pbm1heF9tYXRjaF90dXBsZXNfdG9fcmFuZ2VzX2JydXRlZm9y Y2UoQnJpblJhbmdlcyAqcmFuZ2VzLAorCQkJCQkJCQkJCQkgIGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsCisJCQkJCQkJCQkJCSAgaW50IG52YWx1ZXMsIERhdHVtICp2YWx1ZXMs CisJCQkJCQkJCQkJCSAgVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJCQkJCQkg IGludCAqcmVzX25tYXRjaGVzLAorCQkJCQkJCQkJCQkgIGludCAqcmVzX25tYXRjaGVzX3Vu aXF1ZSwKKwkJCQkJCQkJCQkJICBpbnQgKnJlc19udmFsdWVzX3VuaXF1ZSkKK3sKKwlpbnQg bm1hdGNoZXMgPSAwOworCWludCBubWF0Y2hlc191bmlxdWUgPSAwOworCWludCBudmFsdWVz X3VuaXF1ZSA9IDA7CisKKwlUaW1lc3RhbXBUegkJc3RhcnRfdHMgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG52YWx1ZXM7IGkrKykKKwl7CisJ CWJvb2wJaXNfdW5pcXVlOworCQlpbnQJCW5tYXRjaGVzX3ZhbHVlID0gMDsKKworCQlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIGlzIHRoaXMgYSBuZXcgdmFsdWU/ICovCisJ CWlzX3VuaXF1ZSA9ICgoaSA9PSAwKSB8fCAocmFuZ2VfdmFsdWVzX2NtcCgmdmFsdWVzW2kt MV0sICZ2YWx1ZXNbaV0sIHR5cGNhY2hlKSAhPSAwKSk7CisKKwkJLyogY291bnQgdW5pcXVl IHZhbHVlcyAqLworCQludmFsdWVzX3VuaXF1ZSArPSAoaXNfdW5pcXVlKSA/IDEgOiAwOwor CisJCWZvciAoaW50IGogPSAwOyBqIDwgcmFuZ2VzLT5ucmFuZ2VzOyBqKyspCisJCXsKKwkJ CWlmIChyYW5nZV92YWx1ZXNfY21wKCZ2YWx1ZXNbaV0sICZyYW5nZXMtPnJhbmdlc1tqXS5t aW5fdmFsdWUsIHR5cGNhY2hlKSA8IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChyYW5n ZV92YWx1ZXNfY21wKCZ2YWx1ZXNbaV0sICZyYW5nZXMtPnJhbmdlc1tqXS5tYXhfdmFsdWUs IHR5cGNhY2hlKSA+IDApCisJCQkJY29udGludWU7CisKKwkJCW5tYXRjaGVzX3ZhbHVlKys7 CisJCX0KKworCQlubWF0Y2hlcyArPSBubWF0Y2hlc192YWx1ZTsKKwkJbm1hdGNoZXNfdW5p cXVlICs9IChpc191bmlxdWUpID8gbm1hdGNoZXNfdmFsdWUgOiAwOworCX0KKworCWVsb2co V0FSTklORywgIi0tLS0tIGJyaW5fbWlubWF4X21hdGNoX3R1cGxlc190b19yYW5nZXNfYnJ1 dGVmb3JjZSAtLS0tLSIpOworCWVsb2coV0FSTklORywgIm5tYXRjaGVzID0gJWQgJWYiLCBu bWF0Y2hlcywgKGRvdWJsZSkgbm1hdGNoZXMgLyBudW1yb3dzKTsKKwllbG9nKFdBUk5JTkcs ICJubWF0Y2hlcyB1bmlxdWUgPSAlZCAlZCAlZiIsIG5tYXRjaGVzX3VuaXF1ZSwgbnZhbHVl c191bmlxdWUsCisJCSAoZG91YmxlKSBubWF0Y2hlc191bmlxdWUgLyBudmFsdWVzX3VuaXF1 ZSk7CisJZWxvZyhXQVJOSU5HLCAiZHVyYXRpb24gPSAlbGQiLCBUaW1lc3RhbXBEaWZmZXJl bmNlTWlsbGlzZWNvbmRzKHN0YXJ0X3RzLAorCQkJCQkJCQkJR2V0Q3VycmVudFRpbWVzdGFt cCgpKSk7CisKKwkqcmVzX25tYXRjaGVzID0gbm1hdGNoZXM7CisJKnJlc19ubWF0Y2hlc191 bmlxdWUgPSBubWF0Y2hlc191bmlxdWU7CisJKnJlc19udmFsdWVzX3VuaXF1ZSA9IG52YWx1 ZXNfdW5pcXVlOworfQorI2VuZGlmCisKKy8qCisgKiBicmluX21pbm1heF92YWx1ZV9zdGF0 cworICoJCUNhbGN1bGF0ZSBzdGF0aXN0aWNzIGFib3V0IG1pbnZhbC9tYXh2YWwgdmFsdWVz LgorICoKKyAqIFdlIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcywg YW5kIGFsc28gY29ycmVsYXRpb24gd2l0aCByZXNwZWN0CisgKiB0byBibGtub19zdGFydC4g V2UgZG9uJ3QgY2FsY3VsYXRlIHRoZSByZWd1bGFyIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50 LCBiZWNhdXNlCisgKiBvdXIgZ29hbCBpcyB0byBlc3RpbWF0ZSBob3cgc2VxdWVudGlhbCB0 aGUgYWNjZXNzZXMgYXJlLiBUaGUgcmVndWxhciBjb3JyZWxhdGlvbgorICogd291bGQgcHJv ZHVjZSAwIGZvciBjeWNsaWNhbCBkYXRhIHNldHMgbGlrZSBtb2QoaSwxMDAwMDAwKSwgYnV0 IGl0IG1heSBiZSBxdWl0ZQorICogc2VxdWFudGlhbCBhY2Nlc3MuIE1heWJlIGl0IHNob3Vs ZCBiZSBjYWxsZWQgZGlmZmVyZW50bHksIG5vdCBjb3JyZWxhdGlvbj8KKyAqCisgKiBYWFgg TWF5YmUgdGhpcyBzaG91bGQgY2FsY3VsYXRlIG1pbnZhbCB2cy4gbWF4dmFsIGNvcnJlbGF0 aW9uIHRvbz8KKyAqCisgKiBYWFggSSBkb24ndCBrbm93IGhvdyBpbXBvcnRhbnQgdGhlIHNl cXVlbnRpYWxpdHkgaXMgLSBCUklOIGdlbmVyYWxseSB1c2VzIDFNQgorICogcGFnZSByYW5n ZXMsIHdoaWNoIGlzIHByZXR0eSBzZXF1ZW50aWFsIGFuZCB0aGUgb25lIHJhbmRvbSBzZWVr IGluIGJldHdlZW4gaXMKKyAqIGxpa2VseSBnb2luZyB0byBiZSBuZWdsaWdpYmxlLiBNYXli ZSBmb3Igc21hbGwgcGFnZSByYW5nZXMgaXQnbGwgbWF0dGVyLCB0aG91Z2guCisgKi8KK3N0 YXRpYyB2b2lkCiticmluX21pbm1heF92YWx1ZV9zdGF0cyhCcmluUmFuZ2UgKiptaW5yYW5n ZXMsIEJyaW5SYW5nZSAqKm1heHJhbmdlcywKKwkJCQkJCWludCBucmFuZ2VzLCBUeXBlQ2Fj aGVFbnRyeSAqdHlwY2FjaGUsCisJCQkJCQlkb3VibGUgKm1pbnZhbF9jb3JyZWxhdGlvbiwg aW50NjQgKm1pbnZhbF9uZGlzdGluY3QsCisJCQkJCQlkb3VibGUgKm1heHZhbF9jb3JyZWxh dGlvbiwgaW50NjQgKm1heHZhbF9uZGlzdGluY3QpCit7CisJLyogKi8KKwlpbnQ2NAltaW52 YWxfbmRpc3QgPSAxLAorCQkJbWF4dmFsX25kaXN0ID0gMSwKKwkJCW1pbnZhbF9jb3JyID0g MCwKKwkJCW1heHZhbF9jb3JyID0gMDsKKworCWZvciAoaW50IGkgPSAxOyBpIDwgbnJhbmdl czsgaSsrKQorCXsKKwkJaWYgKHJhbmdlX3ZhbHVlc19jbXAoJm1pbnJhbmdlc1tpLTFdLT5t aW5fdmFsdWUsICZtaW5yYW5nZXNbaV0tPm1pbl92YWx1ZSwgdHlwY2FjaGUpICE9IDApCisJ CQltaW52YWxfbmRpc3QrKzsKKworCQlpZiAocmFuZ2VfdmFsdWVzX2NtcCgmbWF4cmFuZ2Vz W2ktMV0tPm1heF92YWx1ZSwgJm1heHJhbmdlc1tpXS0+bWF4X3ZhbHVlLCB0eXBjYWNoZSkg IT0gMCkKKwkJCW1heHZhbF9uZGlzdCsrOworCisJCS8qIGlzIGl0IGltbWVkaWF0ZWx5IHNl cXVlbnRpYWw/ICovCisJCWlmIChtaW5yYW5nZXNbaS0xXS0+Ymxrbm9fZW5kICsgMSA9PSBt aW5yYW5nZXNbaV0tPmJsa25vX3N0YXJ0KQorCQkJbWludmFsX2NvcnIrKzsKKworCQkvKiBp cyBpdCBpbW1lZGlhdGVseSBzZXF1ZW50aWFsPyAqLworCQlpZiAobWF4cmFuZ2VzW2ktMV0t PmJsa25vX2VuZCArIDEgPT0gbWF4cmFuZ2VzW2ldLT5ibGtub19zdGFydCkKKwkJCW1heHZh bF9jb3JyKys7CisJfQorCisJKm1pbnZhbF9uZGlzdGluY3QgPSBtaW52YWxfbmRpc3Q7CisJ Km1heHZhbF9uZGlzdGluY3QgPSBtYXh2YWxfbmRpc3Q7CisKKwkqbWludmFsX2NvcnJlbGF0 aW9uID0gKGRvdWJsZSkgbWludmFsX2NvcnIgLyBucmFuZ2VzOworCSptYXh2YWxfY29ycmVs YXRpb24gPSAoZG91YmxlKSBtYXh2YWxfY29yciAvIG5yYW5nZXM7CisKKyNpZmRlZiBTVEFU U19ERUJVRworCWVsb2coV0FSTklORywgIi0tLS0tIGJyaW5fbWlubWF4X3ZhbHVlX3N0YXRz IC0tLS0tIik7CisJZWxvZyhXQVJOSU5HLCAibWludmFsIG5kaXN0aW5jdCAlbGQgY29ycmVs YXRpb24gJWYiLAorCQkgKm1pbnZhbF9uZGlzdGluY3QsICptaW52YWxfY29ycmVsYXRpb24p OworCisJZWxvZyhXQVJOSU5HLCAibWF4dmFsIG5kaXN0aW5jdCAlbGQgY29ycmVsYXRpb24g JWYiLAorCQkgKm1heHZhbF9uZGlzdGluY3QsICptYXh2YWxfY29ycmVsYXRpb24pOworI2Vu ZGlmCit9CisKKy8qCisgKiBicmluX21pbm1heF9zdGF0cworICoJCUNhbGN1bGF0ZSBjdXN0 b20gc3RhdGlzdGljcyBmb3IgYSBCUklOIG1pbm1heCBpbmRleC4KKyAqCisgKiBBdCB0aGUg bW9tZW50IHRoaXMgY2FsY3VsYXRlczoKKyAqCisgKiAgLSBudW1iZXIgb2Ygc3VtbWFyaXpl ZC9ub3Qtc3VtbWFyaXplZCBhbmQgYWxsL2hhcyBudWxscyByYW5nZXMKKyAqICAtIGF2ZXJh Z2UgbnVtYmVyIG9mIG92ZXJsYXBzIGZvciBhIHJhbmdlCisgKiAgLSBhdmVyYWdlIG51bWJl ciBvZiByb3dzIG1hdGNoaW5nIGEgcmFuZ2UKKyAqICAtIG51bWJlciBvZiBkaXN0aW5jdCBt aW52YWwvbWF4dmFsIHZhbHVlcworICoKKyAqIFRoZXJlIGFyZSBtdWx0aXBsZSB3YXlzIHRv IGNhbGN1bGF0ZSBzb21lIG9mIHRoZSBtZXRyaWNzLCBzbyB0byBhbGxvdworICogY3Jvc3Mt Y2hlY2tpbmcgZHVyaW5nIGRldmVsb3BtZW50IGl0J3MgcG9zc2libGUgdG8gcnVuIGFuZCBj b21wYXJlIGFsbC4KKyAqIFRvIGRvIHRoYXQsIGRlZmluZSBTVEFUU19DUk9TU19DSEVDSy4g VGhlcmUncyBhbHNvIFNUQVRTX0RFQlVHIGRlZmluZQorICogdGhhdCBzaW1wbHkgcHJpbnRz IHRoZSBjYWxjdWxhdGVkIHJlc3VsdHMuCisgKgorICogWFhYIFRoaXMgY291bGQgYWxzbyBj YWxjdWxhdGUgY29ycmVsYXRpb24gb2YgdGhlIHJhbmdlIG1pbnZhbCwgc28gdGhhdAorICog d2UgY2FuIGVzdGltYXRlIGhvdyBtdWNoIHJhbmRvbSBJL08gd2lsbCBoYXBwZW4gZHVyaW5n IHRoZSBCcmluU29ydC4KKyAqIEFuZCBwZXJoYXBzIHdlIHNob3VsZCBhbHNvIHNvcnQgdGhl IHJhbmdlcyBieSAobWludmFsLGJsb2NrX3N0YXJ0KSB0bworICogbWFrZSB0aGlzIGFzIHNl cXVlbnRpYWwgYXMgcG9zc2libGU/CisgKgorICogWFhYIEFub3RoZXIgaW50ZXJlc3Rpbmcg c3RhdGlzdGljcyBtaWdodCBiZSB0aGUgbnVtYmVyIG9mIHJhbmdlcyB3aXRoCisgKiB0aGUg c2FtZSBtaW52YWwgKG9yIG51bWJlciBvZiBkaXN0aW5jdCBtaW52YWwgdmFsdWVzKSwgYmVj YXVzZSB0aGF0J3MKKyAqIGVzc2VudGlhbGx5IHdoYXQgd2UgbmVlZCB0byBlc3RpbWF0ZSBo b3cgbWFueSByYW5nZXMgd2lsbCBiZSByZWFkIGluCisgKiBvbmUgYnJpbnNvcnQgc3RlcC4g SW4gZmFjdCwga25vd2luZyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IG1pbnZhbAorICogdmFs dWVzIHRlbGxzIHVzIHRoZSBudW1iZXIgb2YgQnJpblNvcnQgbG9vcHMuCisgKgorICogWFhY IFdlIG1pZ2h0IGFsc28gY2FsY3VsYXRlIGEgaGlzdG9ncmFtIG9mIG1pbnZhbC9tYXh2YWwg dmFsdWVzLgorICoKKyAqIFhYWCBJIHdvbmRlciBpZiB3ZSBjb3VsZCB0cmFjayBmb3IgZWFj aCByYW5nZSB0cmFjayBwcm9iYWJpbGl0aWVzOgorICoKKyAqIC0gUDEgPSBQKHYgPD0gbWlu dmFsKQorICogLSBQMiA9IFAoeCA8PSBNYXgobWF4dmFsKSkgZm9yIE1heChtYXh2YWwpIG92 ZXIgcHJlY2VkaW5nIHJhbmdlcworICoKKyAqIFRoYXQgd291bGQgYWxsb3cgdXMgdG8gZXN0 aW1hdGUgaG93IG1hbnkgcmFuZ2VzIHdlJ2xsIGhhdmUgdG8gcmVhZCB0byBwcm9kdWNlCisg KiBhIHBhcnRpY3VsYXIgbnVtYmVyIG9mIHJvd3MsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZmly c3QgcHJvYmFiaWxpdHkgdG8gZXhjZWVkCisgKiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBy b3dzIChmcmFjdGlvbiBvZiB0aGUgdGFibGUpOgorICoKKyAqICAgICAobGltaXQgcm93cyAv IHJlbHR1cGxlcykgPD0gUCh2IDw9IG1pbnZhbCkKKyAqCisgKiBhbmQgdGhlbiB0aGUgc2Vj b25kIHByb2JhYmlsaXR5IHdvdWxkIHNheSBob3cgbWFueSByb3dzIHdlJ2xsIHByb2Nlc3Mg KGVpdGhlcgorICogc29ydCBvciBzcGlsbCkuIEFuZCBpbnZlcnNlbHkgZm9yIHRoZSBERVND IG9yZGVyaW5nLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gUDEgZm9yIHR3byBy YW5nZXMgaXMgaG93IG11Y2ggd2UnZCBoYXZlIHRvIHNvcnQKKyAqIGlmIHdlIG1vdmVkIHRo ZSB3YXRlcm1hcmsgYmV0d2VlbiB0aGUgcmFuZ2VzIChmaXJzdCBtaW52YWwgdG8gc2Vjb25k IG9uZSkuCisgKiBUaGUgKFAyIC0gUDEpIGZvciB0aGUgbmV3IHdhdGVybWFyayByYW5nZSBt ZWFzdXJlcyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4KKyAqIHRoZSB0dXBsZXN0b3JlLiBXZSds bCBuZWVkIHRvIGFnZ3JlZ2F0ZSB0aGlzLCB0aG91Z2gsIHdlIGNhbid0IGtlZXAgdGhlCisg KiB3aG9sZSBkYXRhIC0gcHJvYmFibHkgYXZlcmFnZS9tZWRpYW4vbWF4IGZvciB0aGUgZGlm ZmVyZW5jZXMgd291bGQgYmUgbmljZS4KKyAqIE1pZ2h0IGJlIHRyaWNreSBmb3IgZGlmZmVy ZW50IHdhdGVybWFyayBzdGVwIHZhbHVlcywgdGhvdWdoLgorICoKKyAqIFRoaXMgd291bGQg YWxzbyBhbGxvdyBlc3RpbWF0aW5nIGhvdyBtYW55IHJvd3Mgd2lsbCBzcGlsbCBmcm9tIGVh Y2ggcmFuZ2UsCisgKiBiZWNhdXNlIHdlIGhhdmUgYW4gZXN0aW1hdGUgaG93IG1hbnkgcm93 cyBtYXRjaCBhIHJhbmdlIG9uIGF2ZXJhZ2UsIGFuZAorICogd2UgY2FuIGNvbXBhcmUgaXQg dG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBQMS4KKyAqCisgKiBPbmUgaXNzdWUgaXMgd2Ug ZG9uJ3QgaGF2ZSBhY3R1YWwgdHVwbGVzIGZyb20gdGhlIHJhbmdlcywgc28gd2UgY2FuJ3QK KyAqIG1lYXN1cmUgZXhhY3RseSBob3cgbWFueSByb3dzIHdvdWxkIHdlIGFkZC4gQnV0IHdl IGNhbiBtYXRjaCB0aGUgc2FtcGxlCisgKiBhbmQgYXQgbGVhc3QgZXN0aW1hdGUgdGhlIHRo ZSBwcm9iYWJpbGl0eSBkaWZmZXJlbmNlLgorICovCitEYXR1bQorYnJpbl9taW5tYXhfc3Rh dHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZWxhdGlvbgkJaGVhcFJlbCA9IChSZWxhdGlv bikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJUmVsYXRpb24JCWluZGV4UmVsID0gKFJlbGF0 aW9uKSBQR19HRVRBUkdfUE9JTlRFUigxKTsKKwlBdHRyTnVtYmVyCQlhdHRudW0gPSBQR19H RVRBUkdfSU5UMTYoMik7CisJQXR0ck51bWJlcgkJaGVhcF9hdHRudW0gPSBQR19HRVRBUkdf SU5UMTYoMyk7CisJSGVhcFR1cGxlCSAgICpyb3dzID0gKEhlYXBUdXBsZSAqKSBQR19HRVRB UkdfUE9JTlRFUig0KTsKKwlpbnQJCQkJbnVtcm93cyA9IFBHX0dFVEFSR19JTlQzMig1KTsK KworCUJyaW5PcGFxdWUgKm9wYXF1ZTsKKwlCbG9ja051bWJlciBuYmxvY2tzOworCUJsb2Nr TnVtYmVyCW5yYW5nZXM7CisJQmxvY2tOdW1iZXIJaGVhcEJsazsKKwlCcmluTWVtVHVwbGUg KmR0dXA7CisJQnJpblR1cGxlICAqYnR1cCA9IE5VTEw7CisJU2l6ZQkJYnR1cHN6ID0gMDsK KwlCdWZmZXIJCWJ1ZiA9IEludmFsaWRCdWZmZXI7CisJQnJpblJhbmdlcyAgKnJhbmdlczsK KwlCbG9ja051bWJlcglwYWdlc1BlclJhbmdlOworCUJyaW5EZXNjCSAgICpiZGVzYzsKKwlC cmluTWlubWF4U3RhdHMgKnN0YXRzOworCisJT2lkCQkJCXR5cG9pZDsKKwlUeXBlQ2FjaGVF bnRyeSAqdHlwY2FjaGU7CisJQnJpblJhbmdlCSAgKiptaW5yYW5nZXMsCisJCQkJICAqKm1h eHJhbmdlczsKKwlpbnQ2NAkJCW5vdmVybGFwczsKKwlpbnQ2NAkJCXByZXZfbWluX2luZGV4 OworCisJLyoKKwkgKiBNb3N0bHkgd2hhdCBicmluYmVnaW5zY2FuIGRvZXMgdG8gaW5pdGlh bGl6ZSBCcmluT3BhcXVlLCBleGNlcHQgdGhhdAorCSAqIHdlIHVzZSBhY3RpdmUgc25hcHNo b3QgaW5zdGVhZCBvZiB0aGUgc2NhbiBzbmFwc2hvdC4KKwkgKi8KKwlvcGFxdWUgPSBwYWxs b2Nfb2JqZWN0KEJyaW5PcGFxdWUpOworCW9wYXF1ZS0+Ym9fcm1BY2Nlc3MgPSBicmluUmV2 bWFwSW5pdGlhbGl6ZShpbmRleFJlbCwKKwkJCQkJCQkJCQkJICAgJm9wYXF1ZS0+Ym9fcGFn ZXNQZXJSYW5nZSwKKwkJCQkJCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSk7CisJb3Bh cXVlLT5ib19iZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhpbmRleFJlbCk7CisKKwliZGVzYyA9 IG9wYXF1ZS0+Ym9fYmRlc2M7CisJcGFnZXNQZXJSYW5nZSA9IG9wYXF1ZS0+Ym9fcGFnZXNQ ZXJSYW5nZTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYXR0bnVtIGlzIHZhbGlk ICovCisJQXNzZXJ0KChhdHRudW0gPiAwKSAmJiAoYXR0bnVtIDw9IGJkZXNjLT5iZF90dXBk ZXNjLT5uYXR0cykpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2Yg dGhlIHRhYmxlIHNvIHRoYXQgd2Uga25vdyBob3cgbG9uZyB0byBpdGVyYXRlCisJICogb24g dGhlIHJldm1hcCAoYW5kIHRvIHByZS1hbGxvY2F0ZSB0aGUgYXJyYXlzKS4KKwkgKi8KKwlu YmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhoZWFwUmVsKTsKKworCS8qCisJ ICogSG93IG1hbnkgcmFuZ2VzIGNhbiB0aGVyZSBiZT8gV2Ugc2ltcGx5IGxvb2sgYXQgdGhl IG51bWJlciBvZiBwYWdlcywKKwkgKiBkaXZpZGUgaXQgYnkgdGhlIHBhZ2VzX3Blcl9yYW5n ZS4KKwkgKgorCSAqIFhYWCBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG92ZXJmbG93 IG5yYW5nZXMsIHNvIHdlIGp1c3QgZGl2aWRlCisJICogYW5kIHRoZW4gbWF5YmUgYWRkIDEg Zm9yIHBhcnRpYWwgcmFuZ2VzLgorCSAqLworCW5yYW5nZXMgPSAobmJsb2NrcyAvIHBhZ2Vz UGVyUmFuZ2UpOworCWlmIChuYmxvY2tzICUgcGFnZXNQZXJSYW5nZSAhPSAwKQorCQlucmFu Z2VzICs9IDE7CisKKwkvKiBhbGxvY2F0ZSBmb3Igc3BhY2UsIGFuZCBhbHNvIGZvciB0aGUg YWx0ZXJuYXRpdmUgb3JkZXJpbmcgKi8KKwlyYW5nZXMgPSBwYWxsb2MwKG9mZnNldG9mKEJy aW5SYW5nZXMsIHJhbmdlcykgKyBucmFuZ2VzICogc2l6ZW9mKEJyaW5SYW5nZSkpOworCXJh bmdlcy0+bnJhbmdlcyA9IDA7CisKKwkvKiBhbGxvY2F0ZSBhbiBpbml0aWFsIGluLW1lbW9y eSB0dXBsZSwgb3V0IG9mIHRoZSBwZXItcmFuZ2UgbWVtY3h0ICovCisJZHR1cCA9IGJyaW5f bmV3X21lbXR1cGxlKGJkZXNjKTsKKworCS8qIHJlc3VsdCBzdGF0cyAqLworCXN0YXRzID0g cGFsbG9jMChzaXplb2YoQnJpbk1pbm1heFN0YXRzKSk7CisJU0VUX1ZBUlNJWkUoc3RhdHMs IHNpemVvZihCcmluTWlubWF4U3RhdHMpKTsKKworCS8qCisJICogTm93IHNjYW4gdGhlIHJl dm1hcC4gIFdlIHN0YXJ0IGJ5IHF1ZXJ5aW5nIGZvciBoZWFwIHBhZ2UgMCwKKwkgKiBpbmNy ZW1lbnRpbmcgYnkgdGhlIG51bWJlciBvZiBwYWdlcyBwZXIgcmFuZ2U7IHRoaXMgZ2l2ZXMg dXMgYSBmdWxsCisJICogdmlldyBvZiB0aGUgdGFibGUuCisJICoKKwkgKiBYWFggV2UgY291 bnQgdGhlIHJhbmdlcywgYW5kIGNvdW50IHRoZSBzcGVjaWFsIHR5cGVzIChub3Qgc3VtbWFy aXplZCwKKwkgKiBhbGwtbnVsbCBhbmQgaGFzLW51bGwpLiBUaGUgcmVndWxhciByYW5nZXMg YXJlIGFjY3VtdWxhdGVkIGludG8gYW4KKwkgKiBhcnJheSwgc28gdGhhdCB3ZSBjYW4gY2Fs Y3VsYXRlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyAob3ZlcmxhcHMsIGhpdHMKKwkgKiBmb3Ig c2FtcGxlIHR1cGxlcywgZXRjKS4KKwkgKgorCSAqIFhYWCBUaGlzIG5lZWRzIHJldGhpbmtp bmcgdG8gbWFrZSBpdCB3b3JrIHdpdGggbGFyZ2UgaW5kZXhlcyB3aXRoIG1vcmUKKwkgKiBy YW5nZXMgdGhhbiB3ZSBjYW4gZml0IGludG8gbWVtb3J5ICh3b3JrX21lbS9tYWludGVuYW5j ZV93b3JrX21lbSkuCisJICovCisJZm9yIChoZWFwQmxrID0gMDsgaGVhcEJsayA8IG5ibG9j a3M7IGhlYXBCbGsgKz0gcGFnZXNQZXJSYW5nZSkKKwl7CisJCWJvb2wJCWdvdHR1cGxlID0g ZmFsc2U7CisJCUJyaW5UdXBsZSAgKnR1cDsKKwkJT2Zmc2V0TnVtYmVyIG9mZjsKKwkJU2l6 ZQkJc2l6ZTsKKworCQlzdGF0cy0+bl9yYW5nZXMrKzsKKworCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCisJCXR1cCA9IGJyaW5HZXRUdXBsZUZvckhlYXBCbG9jayhvcGFxdWUtPmJv X3JtQWNjZXNzLCBoZWFwQmxrLCAmYnVmLAorCQkJCQkJCQkJICAgJm9mZiwgJnNpemUsIEJV RkZFUl9MT0NLX1NIQVJFLAorCQkJCQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSk7CisJ CWlmICh0dXApCisJCXsKKwkJCWdvdHR1cGxlID0gdHJ1ZTsKKwkJCWJ0dXAgPSBicmluX2Nv cHlfdHVwbGUodHVwLCBzaXplLCBidHVwLCAmYnR1cHN6KTsKKwkJCUxvY2tCdWZmZXIoYnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQl9CisKKwkJLyogUmFuZ2VzIHdpdGggbm8gaW5k ZXhlZCB0dXBsZSBhcmUgaWdub3JlZCBmb3Igb3ZlcmxhcCBhbmFseXNpcy4gKi8KKwkJaWYg KCFnb3R0dXBsZSkKKwkJeworCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlk dHVwID0gYnJpbl9kZWZvcm1fdHVwbGUoYmRlc2MsIGJ0dXAsIGR0dXApOworCQkJaWYgKGR0 dXAtPmJ0X3BsYWNlaG9sZGVyKQorCQkJeworCQkJCS8qIFBsYWNlaG9sZGVycyBjYW4gYmUg aWdub3JlZCB0b28sIGFzIGlmIG5vdCBzdW1tYXJpemVkLiAqLworCQkJCWNvbnRpbnVlOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCUJyaW5WYWx1ZXMgKmJ2YWw7CisKKwkJCQlidmFs ID0gJmR0dXAtPmJ0X2NvbHVtbnNbYXR0bnVtIC0gMV07CisKKwkJCQkvKiBPSyB0aGlzIHJh bmdlIGlzIHN1bW1hcml6ZWQgKi8KKwkJCQlzdGF0cy0+bl9zdW1tYXJpemVkKys7CisKKwkJ CQlpZiAoYnZhbC0+YnZfYWxsbnVsbHMpCisJCQkJCXN0YXRzLT5uX2FsbF9udWxscysrOwor CisJCQkJaWYgKGJ2YWwtPmJ2X2hhc251bGxzKQorCQkJCQlzdGF0cy0+bl9oYXNfbnVsbHMr KzsKKworCQkJCWlmICghYnZhbC0+YnZfYWxsbnVsbHMpCisJCQkJeworCQkJCQlCcmluUmFu Z2UgICpyYW5nZTsKKworCQkJCQlyYW5nZSA9ICZyYW5nZXMtPnJhbmdlc1tyYW5nZXMtPm5y YW5nZXMrK107CisKKwkJCQkJcmFuZ2UtPmJsa25vX3N0YXJ0ID0gaGVhcEJsazsKKwkJCQkJ cmFuZ2UtPmJsa25vX2VuZCA9IGhlYXBCbGsgKyAocGFnZXNQZXJSYW5nZSAtIDEpOworCisJ CQkJCXJhbmdlLT5taW5fdmFsdWUgPSBidmFsLT5idl92YWx1ZXNbMF07CisJCQkJCXJhbmdl LT5tYXhfdmFsdWUgPSBidmFsLT5idl92YWx1ZXNbMV07CisJCQkJfQorCQkJfQorCQl9CisJ fQorCisJaWYgKGJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7 CisKKwllbG9nKFdBUk5JTkcsICJleHRyYWN0ZWQgcmFuZ2VzICVkIGZyb20gQlJJTiBpbmRl eCIsIHJhbmdlcy0+bnJhbmdlcyk7CisKKwkvKiBpZiB3ZSBoYXZlIG5vIHJlZ3VsYXIgcmFu Z2VzLCB3ZSdyZSBkb25lICovCisJaWYgKHJhbmdlcy0+bnJhbmdlcyA9PSAwKQorCQlnb3Rv IGNsZWFudXA7CisKKwkvKgorCSAqIEJ1aWxkIGF1eGlsaWFyeSBpbmZvIHRvIG9wdGltaXpl IHRoZSBjYWxjdWxhdGlvbi4KKwkgKgorCSAqIFdlIGhhdmUgcmFuZ2VzIGluIHRoZSBibG9j a251bSBvcmRlciwgYnV0IHRoYXQgaXMgbm90IHZlcnkgdXNlZnVsIHdoZW4KKwkgKiBjYWxj dWxhdGluZyB3aGljaCByYW5nZXMgaW50ZXJzdGVjdCAtIHdlIGNvdWxkIGNyb3NzLWNoZWNr IGV2ZXJ5IHJhbmdlCisJICogYWdhaW5zdCBldmVyeSBvdGhlciByYW5nZSwgYnV0IHRoYXQn cyBPKE5eMikgYW5kIHRodXMgbWF5IGdldCBleHRyZW1lbHkKKwkgKiBleHBlbnNpdmUgcHJl dHR5IHF1aWNrKS4KKwkgKgorCSAqIFRvIG1ha2UgdGhhdCBjaGVhcGVyLCB3ZSdsbCBidWls ZCB0d28gb3JkZXJpbmdzLCBhbGxvd2luZyB1cyB0byBxdWlja2x5CisJICogZWxpbWluYXRl IHJhbmdlcyB0aGF0IGNhbid0IHBvc3NpYmx5IG92ZXJsYXA6CisJICoKKwkgKiAtIG1pbnJh bmdlcyA9IHJhbmdlcyBvcmRlcmVkIGJ5IG1pbl92YWx1ZQorCSAqIC0gbWF4cmFuZ2VzID0g cmFuZ2VzIG9yZGVyZWQgYnkgbWF4X3ZhbHVlCisJICoKKwkgKiBUbyBjb3VudCBpbnRlcnNl Y3Rpb25zLCB3ZSdsbCB0aGVuIHdhbGsgbWF4cmFuZ2VzIChpLmUuIHJhbmdlcyBvcmRlcmVk CisJICogYnkgbWF4dmFsKSwgYW5kIGZvciBlYWNoIGZvbGxvd2luZyByYW5nZSB3ZSdsbCBj aGVjayBpZiBpdCBvdmVybGFwcy4KKwkgKiBJZiB5ZXMsIHdlJ2xsIHByb2NlZWQgdG8gdGhl IG5leHQgb25lLCB1bnRpbCB3ZSBmaW5kIGEgcmFuZ2UgdGhhdCBkb2VzCisJICogbm90IG92 ZXJsYXAuIEJ1dCB0aGVyZSBtaWdodCBiZSBhIGxhdGVyIHBhZ2Ugb3ZlcmxhcHBpbmcgLSBi dXQgd2UgY2FuCisJICogdXNlIGEgbWluX2luZGV4X2xvd2VzdCB0cmFja2luZyB0aGUgbWlu aW11bSBtaW5faW5kZXggZm9yICJmdXR1cmUiCisJICogcmFuZ2VzIHRvIHF1aWNrbHkgZGVj aWRlIGlmIHRoZXJlIGFyZSBzdWNoIHJhbmdlcy4gSWYgdGhlcmUgYXJlIG5vbmUsCisJICog d2UgY2FuIHRlcm1pbmF0ZSAoYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgbWF4cmFuZ2VzIGVs ZW1lbnQpLCBlbHNlIHdlCisJICogaGF2ZSB0byBwcm9jZXNzIGFkZGl0aW9uYWwgcmFuZ2Vz LgorCSAqCisJICogTm90ZTogVGhpcyBvbmx5IGNvdW50cyBvdmVybGFwcyB3aXRoIHJhbmdl cyB3aXRoIG1heF92YWx1ZSBoaWdoZXIgdGhhbgorCSAqIHRoZSBjdXJyZW50IG9uZSAtIHdl IHdhbnQgdG8gY291bnQgYWxsLCBidXQgdGhlIG92ZXJsYXBzIHdpdGggcHJlY2VkaW5nCisJ ICogcmFuZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGNvdW50ZWQgd2hlbiBwcm9jZXNzaW5nIHRo b3NlIHByZWNlZGluZyByYW5nZXMuCisJICogVGhhdCBpcywgd2UnbGwgZW5kIHVwIHdpdGgg Y291bnRpbmcgZWFjaCBvdmVybGFwIGp1c3QgZm9yIG9uZSBvZiB0aG9zZQorCSAqIHJhbmdl cywgc28gd2UgZ2V0IG9ubHkgMS8yIHRoZSBjb3VudC4KKwkgKgorCSAqIE5vdGU6IFdlIGRv bid0IGNvdW50IHRoZSByYW5nZSBhcyBvdmVybGFwcGluZyB3aXRoIGl0c2VsZi4gVGhpcyBu ZWVkcworCSAqIHRvIGJlIGNvbnNpZGVyZWQgbGF0ZXIsIHdoZW4gYXBwbHlpbmcgdGhlIHN0 YXRpc3RpY3MuCisJICoKKwkgKgorCSAqIFhYWCBUaGlzIHdpbGwgbm90IHdvcmsgZm9yIHZl cnkgbWFueSByYW5nZXMgLSB3ZSBjYW4gaGF2ZSB1cCB0byAyXjMyIG9mCisJICogdGhlbSwg c28gYWxsb2NhdGluZyBhIH4zMkIgc3RydWN0IGZvciBlYWNoIHdvdWxkIG5lZWQgYSBsb3Qg b2YgbWVtb3J5LgorCSAqIE5vdCBzdXJlIHdoYXQgdG8gZG8gYWJvdXQgdGhhdCwgcGVyaGFw cyB3ZSBjb3VsZCBzYW1wbGUgYSBjb3VwbGUgcmFuZ2VzCisJICogYW5kIGRvIHNvbWUgY2Fs Y3VsYXRpb25zIGJhc2VkIG9uIHRoYXQ/IFRoYXQgaXMsIHdlIGNvdWxkIHByb2Nlc3MgYWxs CisJICogcmFuZ2VzIHVwIHRvIHNvbWUgbnVtYmVyIChzYXksIHN0YXRpc3RpY3NfdGFyZ2V0 ICogMzAwLCBhcyBmb3Igcm93cyksIGFuZAorCSAqIHRoZW4gc2FtcGxlIHJhbmdlcyBmb3Ig bGFyZ2VyIHRhYmxlcy4gVGhlbiBzb3J0IHRoZSBzYW1wbGVkIHJhbmdlcywgYW5kCisJICog d2FsayB0aHJvdWdoIGFsbCByYW5nZXMgb25jZSwgY29tcGFyaW5nIHRoZW0gdG8gdGhlIHNh bXBsZSBhbmQgY291bnRpbmcKKwkgKiBvdmVybGFwcyAoaGF2aW5nIHRoZW0gc29ydGVkIHNo b3VsZCBhbGxvdyBtYWtpbmcgdGhpcyBxdWl0ZSBlZmZpY2llbnQsCisJICogSSB0aGluayAt IGZvbGxvd2luZyBhbGdvcml0aG0gc2ltaWxhciB0byB0aGUgb25lIGltcGxlbWVudGVkIGhl cmUpLgorCSAqLworCisJLyogaW5mbyBhYm91dCBvcmRlcmluZyBmb3IgdGhlIGRhdGEgdHlw ZSAqLworCXR5cG9pZCA9IGdldF9hdHR0eXBlKFJlbGF0aW9uR2V0UmVsaWQoaW5kZXhSZWwp LCBhdHRudW0pOworCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUodHlwb2lkLCBUWVBF Q0FDSEVfQ01QX1BST0NfRklORk8pOworCisJLyogc2hvdWxkbid0IGhhcHBlbiwgSSB0aGlu ayAtIHdlIHVzZSB0aGlzIHRvIGJ1aWxkIHRoZSBpbmRleCAqLworCUFzc2VydChPaWRJc1Zh bGlkKHR5cGNhY2hlLT5jbXBfcHJvY19maW5mby5mbl9vaWQpKTsKKworCW1pbnJhbmdlcyA9 IChCcmluUmFuZ2UgKiopIHBhbGxvYzAocmFuZ2VzLT5ucmFuZ2VzICogc2l6ZW9mKEJyaW5S YW5nZXMgKikpOworCW1heHJhbmdlcyA9IChCcmluUmFuZ2UgKiopIHBhbGxvYzAocmFuZ2Vz LT5ucmFuZ2VzICogc2l6ZW9mKEJyaW5SYW5nZXMgKikpOworCisJLyoKKwkgKiBCdWlsZCBh bmQgc29ydCB0aGUgcmFuZ2VzIG1pbl92YWx1ZSAvIG1heF92YWx1ZSAoanVzdCBwb2ludGVy cworCSAqIHRvIHRoZSBtYWluIGFycmF5KS4gVGhlbiBnbyBhbmQgYXNzaWduIHRoZSBtaW5f aW5kZXggdG8gZWFjaAorCSAqIHJhbmdlLCBhbmQgZmluYWxseSB3YWxrIHRoZSBtYXhyYW5n ZXMgYXJyYXkgYmFja3dhcmRzIGFuZCB0cmFjaworCSAqIHRoZSBtaW5faW5kZXhfbG93ZXN0 IGFzIG1pbmltdW0gb2YgImZ1dHVyZSIgaW5kZXhlcy4KKwkgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IHJhbmdlcy0+bnJhbmdlczsgaSsrKQorCXsKKwkJbWlucmFuZ2VzW2ldID0gJnJh bmdlcy0+cmFuZ2VzW2ldOworCQltYXhyYW5nZXNbaV0gPSAmcmFuZ2VzLT5yYW5nZXNbaV07 CisJfQorCisJcXNvcnRfYXJnKG1pbnJhbmdlcywgcmFuZ2VzLT5ucmFuZ2VzLCBzaXplb2Yo QnJpblJhbmdlICopLAorCQkJICByYW5nZV9taW52YWxfY21wLCB0eXBjYWNoZSk7CisKKwlx c29ydF9hcmcobWF4cmFuZ2VzLCByYW5nZXMtPm5yYW5nZXMsIHNpemVvZihCcmluUmFuZ2Ug KiksCisJCQkgIHJhbmdlX21heHZhbF9jbXAsIHR5cGNhY2hlKTsKKworCS8qCisJICogVXBk YXRlIHRoZSBtaW5faW5kZXggZm9yIGVhY2ggcmFuZ2UuIElmIHRoZSB2YWx1ZXMgYXJlIGVx dWFsLCBiZSBzdXJlIHRvCisJICogcGljayB0aGUgbG93ZXN0IGluZGV4IHdpdGggdGhhdCBt aW5fdmFsdWUuCisJICovCisJbWlucmFuZ2VzWzBdLT5taW5faW5kZXggPSAwOworCWZvciAo aW50IGkgPSAxOyBpIDwgcmFuZ2VzLT5ucmFuZ2VzOyBpKyspCisJeworCQlpZiAocmFuZ2Vf dmFsdWVzX2NtcCgmbWlucmFuZ2VzW2ldLT5taW5fdmFsdWUsICZtaW5yYW5nZXNbaS0xXS0+ bWluX3ZhbHVlLCB0eXBjYWNoZSkgPT0gMCkKKwkJCW1pbnJhbmdlc1tpXS0+bWluX2luZGV4 ID0gbWlucmFuZ2VzW2ktMV0tPm1pbl9pbmRleDsKKwkJZWxzZQorCQkJbWlucmFuZ2VzW2ld LT5taW5faW5kZXggPSBpOworCX0KKworCS8qCisJICogV2FsayB0aGUgbWF4cmFuZ2VzIGJh Y2t3YXJkIGFuZCBhc3NpZ24gdGhlIG1pbl9pbmRleF9sb3dlc3QgYXMKKwkgKiBhIHJ1bm5p bmcgbWluaW11bS4KKwkgKi8KKwlwcmV2X21pbl9pbmRleCA9IHJhbmdlcy0+bnJhbmdlczsK Kwlmb3IgKGludCBpID0gKHJhbmdlcy0+bnJhbmdlcyAtIDEpOyBpID49IDA7IGktLSkKKwl7 CisJCW1heHJhbmdlc1tpXS0+bWluX2luZGV4X2xvd2VzdCA9IE1pbihtYXhyYW5nZXNbaV0t Pm1pbl9pbmRleCwKKwkJCQkJCQkJCQkJIHByZXZfbWluX2luZGV4KTsKKwkJcHJldl9taW5f aW5kZXggPSBtYXhyYW5nZXNbaV0tPm1pbl9pbmRleF9sb3dlc3Q7CisJfQorCisJLyogY2Fs Y3VsYXRlIGF2ZXJhZ2UgbnVtYmVyIG9mIG92ZXJsYXBwaW5nIHJhbmdlcyBmb3IgYW55IHJh bmdlICovCisJbm92ZXJsYXBzID0gYnJpbl9taW5tYXhfY291bnRfb3ZlcmxhcHMobWlucmFu Z2VzLCByYW5nZXMtPm5yYW5nZXMsIHR5cGNhY2hlKTsKKworCXN0YXRzLT5hdmdfb3Zlcmxh cHMgPSAoZG91YmxlKSBub3ZlcmxhcHMgLyByYW5nZXMtPm5yYW5nZXM7CisKKyNpZmRlZiBT VEFUU19DUk9TU19DSEVDSworCWJyaW5fbWlubWF4X2NvdW50X292ZXJsYXBzMihyYW5nZXMs IG1pbnJhbmdlcywgbWF4cmFuZ2VzLCB0eXBjYWNoZSk7CisJYnJpbl9taW5tYXhfY291bnRf b3ZlcmxhcHNfYnJ1dGVmb3JjZShyYW5nZXMsIHR5cGNhY2hlKTsKKyNlbmRpZgorCisJLyog Y2FsY3VsYXRlIG1pbnZhbC9tYXh2YWwgc3RhdHMgKGRpc3RpbmN0IHZhbHVlcyBhbmQgY29y cmVsYXRpb24pICovCisJYnJpbl9taW5tYXhfdmFsdWVfc3RhdHMobWlucmFuZ2VzLCBtYXhy YW5nZXMsCisJCQkJCQkJcmFuZ2VzLT5ucmFuZ2VzLCB0eXBjYWNoZSwKKwkJCQkJCQkmc3Rh dHMtPm1pbnZhbF9jb3JyZWxhdGlvbiwKKwkJCQkJCQkmc3RhdHMtPm1pbnZhbF9uZGlzdGlu Y3QsCisJCQkJCQkJJnN0YXRzLT5tYXh2YWxfY29ycmVsYXRpb24sCisJCQkJCQkJJnN0YXRz LT5tYXh2YWxfbmRpc3RpbmN0KTsKKworCS8qIG1hdGNoIHR1cGxlcyB0byByYW5nZXMgKi8K Kwl7CisJCWludAkJbnZhbHVlcyA9IDA7CisJCWludAkJbm1hdGNoZXMsCisJCQkJbm1hdGNo ZXNfdW5pcXVlLAorCQkJCW52YWx1ZXNfdW5pcXVlOworCisJCURhdHVtICAqdmFsdWVzID0g KERhdHVtICopIHBhbGxvYzAobnVtcm93cyAqIHNpemVvZihEYXR1bSkpOworCisJCVR1cGxl RGVzYwl0ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaGVhcFJlbCk7CisKKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJCXsKKwkJCWJvb2wJaXNudWxsOworCQkJRGF0 dW0JdmFsdWU7CisKKwkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKHJvd3NbaV0sIGhlYXBfYXR0 bnVtLCB0ZGVzYywgJmlzbnVsbCk7CisJCQlpZiAoIWlzbnVsbCkKKwkJCQl2YWx1ZXNbbnZh bHVlcysrXSA9IHZhbHVlOworCQl9CisKKwkJcXNvcnRfYXJnKHZhbHVlcywgbnZhbHVlcywg c2l6ZW9mKERhdHVtKSwgcmFuZ2VfdmFsdWVzX2NtcCwgdHlwY2FjaGUpOworCisJCS8qIG9w dGltaXplZCBhbGdvcml0aG0gKi8KKwkJYnJpbl9taW5tYXhfbWF0Y2hfdHVwbGVzX3RvX3Jh bmdlcyhyYW5nZXMsCisJCQkJCQkJCQkJICAgbnVtcm93cywgcm93cywgbnZhbHVlcywgdmFs dWVzLAorCQkJCQkJCQkJCSAgIHR5cGNhY2hlLAorCQkJCQkJCQkJCSAgICZubWF0Y2hlcywK KwkJCQkJCQkJCQkgICAmbm1hdGNoZXNfdW5pcXVlLAorCQkJCQkJCQkJCSAgICZudmFsdWVz X3VuaXF1ZSk7CisKKwkJc3RhdHMtPmF2Z19tYXRjaGVzID0gKGRvdWJsZSkgbm1hdGNoZXMg LyBudW1yb3dzOworCQlzdGF0cy0+YXZnX21hdGNoZXNfdW5pcXVlID0gKGRvdWJsZSkgbm1h dGNoZXNfdW5pcXVlIC8gbnZhbHVlc191bmlxdWU7CisKKyNpZmRlZiBTVEFUU19DUk9TU19D SEVDSworCQlicmluX21pbm1heF9tYXRjaF90dXBsZXNfdG9fcmFuZ2VzMihyYW5nZXMsIG1p bnJhbmdlcywgbWF4cmFuZ2VzLAorCQkJCQkJCQkJCSAgICBudW1yb3dzLCByb3dzLCBudmFs dWVzLCB2YWx1ZXMsCisJCQkJCQkJCQkJICAgIHR5cGNhY2hlLAorCQkJCQkJCQkJCSAgICAm bm1hdGNoZXMsCisJCQkJCQkJCQkJICAgICZubWF0Y2hlc191bmlxdWUsCisJCQkJCQkJCQkJ ICAgICZudmFsdWVzX3VuaXF1ZSk7CisKKwkJYnJpbl9taW5tYXhfbWF0Y2hfdHVwbGVzX3Rv X3Jhbmdlc19icnV0ZWZvcmNlKHJhbmdlcywKKwkJCQkJCQkJCQkJCQkgIG51bXJvd3MsIHJv d3MsCisJCQkJCQkJCQkJCQkJICBudmFsdWVzLCB2YWx1ZXMsCisJCQkJCQkJCQkJCQkJICB0 eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICZubWF0Y2hlcywKKwkJCQkJCQkJCQkJCQkgICZu bWF0Y2hlc191bmlxdWUsCisJCQkJCQkJCQkJCQkJICAmbnZhbHVlc191bmlxdWUpOworI2Vu ZGlmCisJfQorCisJLyoKKwkgKiBQb3NzaWJseSBxdWl0ZSBsYXJnZSwgc28gcmVsZWFzZSBl eHBsaWNpdGx5IGFuZCBkb24ndCByZWx5CisJICogb24gdGhlIG1lbW9yeSBjb250ZXh0IHRv IGRpc2NhcmQgdGhpcy4KKwkgKi8KKwlwZnJlZShtaW5yYW5nZXMpOworCXBmcmVlKG1heHJh bmdlcyk7CisKK2NsZWFudXA6CisJLyogcG9zc2libHkgcXVpdGUgbGFyZ2UsIHNvIHJlbGVh c2UgZXhwbGljaXRseSAqLworCXBmcmVlKHJhbmdlcyk7CisKKwkvKiBmcmVlIHRoZSBCcmlu T3BhcXVlLCBqdXN0IGxpa2UgYnJpbmVuZHNjYW4oKSB3b3VsZCAqLworCWJyaW5SZXZtYXBU ZXJtaW5hdGUob3BhcXVlLT5ib19ybUFjY2Vzcyk7CisJYnJpbl9mcmVlX2Rlc2Mob3BhcXVl LT5ib19iZGVzYyk7CisKKwlQR19SRVRVUk5fUE9JTlRFUihzdGF0cyk7Cit9CisKIC8qCiAg KiBDYWNoZSBhbmQgcmV0dXJuIHRoZSBwcm9jZWR1cmUgZm9yIHRoZSBnaXZlbiBzdHJhdGVn eS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5kZXggZmYxMzU0ODEyYmQuLmI3NDM1 MTk0ZGMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAK ICNpbmNsdWRlIDxtYXRoLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl9pbnRlcm5hbC5o IgogI2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFt LmgiCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgpAQCAtMzAsNiArMzEsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXgu aCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNl LmgiCkBAIC04MSw2ICs4Myw3IEBAIHR5cGVkZWYgc3RydWN0IEFubEluZGV4RGF0YQogCiAv KiBEZWZhdWx0IHN0YXRpc3RpY3MgdGFyZ2V0IChHVUMgcGFyYW1ldGVyKSAqLwogaW50CQkJ ZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldCA9IDEwMDsKK2Jvb2wJCWVuYWJsZV9pbmRleGFt X3N0YXRzID0gZmFsc2U7CiAKIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNlZW0g d29ydGggcGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwogc3RhdGljIE1lbW9yeUNv bnRleHQgYW5sX2NvbnRleHQgPSBOVUxMOwpAQCAtOTIsNyArOTUsNyBAQCBzdGF0aWMgdm9p ZCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsCiAJCQkJCQkgICBBY3F1aXJlU2Ft cGxlUm93c0Z1bmMgYWNxdWlyZWZ1bmMsIEJsb2NrTnVtYmVyIHJlbHBhZ2VzLAogCQkJCQkJ ICAgYm9vbCBpbmgsIGJvb2wgaW5fb3V0ZXJfeGFjdCwgaW50IGVsZXZlbCk7CiBzdGF0aWMg dm9pZCBjb21wdXRlX2luZGV4X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgZG91YmxlIHRvdGFs cm93cywKLQkJCQkJCQkJQW5sSW5kZXhEYXRhICppbmRleGRhdGEsIGludCBuaW5kZXhlcywK KwkJCQkJCQkJQW5sSW5kZXhEYXRhICppbmRleGRhdGEsIFJlbGF0aW9uICppbmRleFJlbHMs IGludCBuaW5kZXhlcywKIAkJCQkJCQkJSGVhcFR1cGxlICpyb3dzLCBpbnQgbnVtcm93cywK IAkJCQkJCQkJTWVtb3J5Q29udGV4dCBjb2xfY29udGV4dCk7CiBzdGF0aWMgVmFjQXR0clN0 YXRzICpleGFtaW5lX2F0dHJpYnV0ZShSZWxhdGlvbiBvbmVyZWwsIGludCBhdHRudW0sCkBA IC00NTQsMTUgKzQ1Nyw0OSBAQCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLAogCQl7CiAJCQlBbmxJbmRleERhdGEgKnRoaXNkYXRhID0g JmluZGV4ZGF0YVtpbmRdOwogCQkJSW5kZXhJbmZvICAqaW5kZXhJbmZvOworCQkJYm9vbAkJ Y29sbGVjdEFtU3RhdHM7CisJCQlPaWQJCQlyZWdwcm9jOwogCiAJCQl0aGlzZGF0YS0+aW5k ZXhJbmZvID0gaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oSXJlbFtpbmRdKTsKIAkJCXRo aXNkYXRhLT50dXBsZUZyYWN0ID0gMS4wOyAvKiBmaXggbGF0ZXIgaWYgcGFydGlhbCAqLwot CQkJaWYgKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgIT0gTklMICYmIHZhX2NvbHMgPT0g TklMKQorCisJCQkvKgorCQkJICogU2hvdWxkIHdlIGNvbGxlY3QgQU0tc3BlY2lmaWMgc3Rh dGlzdGljcyBmb3IgYW55IG9mIHRoZSBjb2x1bW5zPworCQkJICoKKwkJCSAqIElmIEFNLXNw ZWNpZmljIHN0YXRpc3RpY3MgYXJlIGVuYWJsZWQgKHVzaW5nIGEgR1VDKSwgc2VlIGlmIHdl CisJCQkgKiBoYXZlIGFuIG9wdGlvbmFsIHN1cHBvcnQgcHJvY2VkdXJlIHRvIGJ1aWxkIHRo ZSBzdGF0aXN0aWNzLgorCQkJICoKKwkJCSAqIElmIHRoZXJlJ3MgYW55IHN1Y2ggYXR0cmli dXRlLCB3ZSBqdXN0IGZvcmNlIGJ1aWxkaW5nIHN0YXRzCisJCQkgKiBldmVuIGZvciByZWd1 bGFyIGluZGV4IGtleXMgKG5vdCBqdXN0IGV4cHJlc3Npb25zKSBhbmQgaW5kZXhlcworCQkJ ICogd2l0aG91dCBwcmVkaWNhdGVzLiBJdCdkIGJlIGdvb2QgdG8gb25seSBidWlsZCB0aGUg QU0gc3RhdHMsIGJ1dAorCQkJICogZm9yIG5vdyB0aGlzIGlzIGdvb2QgZW5vdWdoLgorCQkJ ICoKKwkJCSAqIFhYWCBUaGUgR1VDIGlzIHRoZXJlIG1vcmVzdGx5IHRvIG1ha2UgaXQgZWFz aWVyIHRvIGVuYWJsZS9kaXNhYmxlCisJCQkgKiB0aGlzIGR1cmluZyBkZXZlbG9wbWVudC4K KwkJCSAqCisJCQkgKiBGSVhNRSBPbmx5IGJ1aWxkIHRoZSBBTSBzdGF0aXN0aWNzLCBub3Qg dGhlIG90aGVyIHN0YXRzLiBBbmQgb25seQorCQkJICogZG8gdGhhdCBmb3IgdGhlIGtleXMg d2l0aCB0aGUgb3B0aW9uYWwgcHJvY2VkdXJlLiBub3QgYWxsIG9mIHRoZW0uCisJCQkgKi8K KwkJCWNvbGxlY3RBbVN0YXRzID0gZmFsc2U7CisJCQlpZiAoZW5hYmxlX2luZGV4YW1fc3Rh dHMgJiYgKElyZWxbaW5kXS0+cmRfaW5kYW0tPmFtc3RhdHNwcm9jbnVtICE9IDApKQorCQkJ eworCQkJCWZvciAoaW50IGogPSAwOyBqIDwgaW5kZXhJbmZvLT5paV9OdW1JbmRleEF0dHJz OyBqKyspCisJCQkJeworCQkJCQlyZWdwcm9jID0gaW5kZXhfZ2V0cHJvY2lkKElyZWxbaW5k XSwgKGorMSksIElyZWxbaW5kXS0+cmRfaW5kYW0tPmFtc3RhdHNwcm9jbnVtKTsKKwkJCQkJ aWYgKE9pZElzVmFsaWQocmVncHJvYykpCisJCQkJCXsKKwkJCQkJCWNvbGxlY3RBbVN0YXRz ID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAo KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgIT0gTklMIHx8IGNvbGxlY3RBbVN0YXRzKSAm JiB2YV9jb2xzID09IE5JTCkKIAkJCXsKIAkJCQlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW0g PSBsaXN0X2hlYWQoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyk7CiAKIAkJCQl0aGlzZGF0 YS0+dmFjYXR0cnN0YXRzID0gKFZhY0F0dHJTdGF0cyAqKikKLQkJCQkJcGFsbG9jKGluZGV4 SW5mby0+aWlfTnVtSW5kZXhBdHRycyAqIHNpemVvZihWYWNBdHRyU3RhdHMgKikpOworCQkJ CQlwYWxsb2MwKGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyAqIHNpemVvZihWYWNBdHRy U3RhdHMgKikpOwogCQkJCXRjbnQgPSAwOwogCQkJCWZvciAoaSA9IDA7IGkgPCBpbmRleElu Zm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKIAkJCQl7CkBAIC00ODMsNiArNTIwLDEyIEBA IGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMs CiAJCQkJCQlpZiAodGhpc2RhdGEtPnZhY2F0dHJzdGF0c1t0Y250XSAhPSBOVUxMKQogCQkJ CQkJCXRjbnQrKzsKIAkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXRoaXNkYXRh LT52YWNhdHRyc3RhdHNbdGNudF0gPQorCQkJCQkJCWV4YW1pbmVfYXR0cmlidXRlKElyZWxb aW5kXSwgaSArIDEsIE5VTEwpOworCQkJCQkJdGNudCsrOworCQkJCQl9CiAJCQkJfQogCQkJ CXRoaXNkYXRhLT5hdHRyX2NudCA9IHRjbnQ7CiAJCQl9CkBAIC01ODgsNyArNjMxLDcgQEAg ZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywK IAogCQlpZiAobmluZGV4ZXMgPiAwKQogCQkJY29tcHV0ZV9pbmRleF9zdGF0cyhvbmVyZWws IHRvdGFscm93cywKLQkJCQkJCQkJaW5kZXhkYXRhLCBuaW5kZXhlcywKKwkJCQkJCQkJaW5k ZXhkYXRhLCBJcmVsLCBuaW5kZXhlcywKIAkJCQkJCQkJcm93cywgbnVtcm93cywKIAkJCQkJ CQkJY29sX2NvbnRleHQpOwogCkBAIC04MjIsMTIgKzg2NSw4MiBAQCBkb19hbmFseXplX3Jl bChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCWFubF9jb250ZXh0 ID0gTlVMTDsKIH0KIAorLyoKKyAqIGNvbXB1dGVfaW5kZXhhbV9zdGF0cworICoJCUNhbGwg dGhlIG9wdGlvbmFsIHByb2NlZHVyZSB0byBjb21wdXRlIEFNLXNwZWNpZmljIHN0YXRpc3Rp Y3MuCisgKgorICogV2Ugc2ltcGx5IGNhbGwgdGhlIHByb2NlZHVyZSwgd2hpY2ggaXMgZXhw ZWN0ZWQgdG8gcHJvZHVjZSBhIGJ5dGVhIHZhbHVlLgorICoKKyAqIEF0IHRoZSBtb21lbnQg dGhpcyBvbmx5IGRlYWxzIHdpdGggQlJJTiBpbmRleGVzLCBhbmQgYmFpbHMgb3V0IGZvciBv dGhlcgorICogYWNjZXNzIG1ldGhvZHMsIGJ1dCBpdCBzaG91bGQgYmUgZ2VuZXJpYyAtIHVz ZSBzb21ldGhpbmcgbGlrZSBhbW9wdHNwcm9jbnVtCisgKiBhbmQganVzdCBjaGVjayBpZiB0 aGUgcHJvY2VkdXJlIGV4aXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2NvbXB1dGVfaW5kZXhh bV9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsCisJCQkJCSAgUmVsYXRpb24gaW5kZXhSZWwsIElu ZGV4SW5mbyAqaW5kZXhJbmZvLAorCQkJCQkgIGRvdWJsZSB0b3RhbHJvd3MsIEFubEluZGV4 RGF0YSAqaW5kZXhkYXRhLAorCQkJCQkgIEhlYXBUdXBsZSAqcm93cywgaW50IG51bXJvd3Mp Cit7CisJaWYgKCFlbmFibGVfaW5kZXhhbV9zdGF0cykKKwkJcmV0dXJuOworCisJLyogaWdu b3JlIGluZGV4IEFNcyB3aXRob3V0IHRoZSBvcHRpb25hbCBwcm9jZWR1cmUgKi8KKwlpZiAo aW5kZXhSZWwtPnJkX2luZGFtLT5hbXN0YXRzcHJvY251bSA9PSAwKQorCQlyZXR1cm47CisK KwkvKgorCSAqIExvb2sgYXQgYXR0cmlidXRlcywgYW5kIGNhbGN1bGF0ZSBzdGF0cyBmb3Ig dGhvc2UgdGhhdCBoYXZlIHRoZQorCSAqIG9wdGlvbmFsIHN0YXRzIHByb2MgZm9yIHRoZSBv cGZhbWlseS4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVt SW5kZXhBdHRyczsgaSsrKQorCXsKKwkJQXR0ck51bWJlcgkJYXR0bm8gPSAoaSArIDEpOwor CQlBdHRyTnVtYmVyCQlhdHRudW0gPSBpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNb aV07CS8qIGhlYXAgYXR0bnVtICovCisJCVJlZ1Byb2NlZHVyZQlyZWdwcm9jOworCQlGbWdy SW5mbwkgICAqc3RhdHNwcm9jOworCQlEYXR1bQkJCWRhdHVtOworCQlWYWNBdHRyU3RhdHMg ICAqc3RhdHM7CisJCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCisJCS8qIGRvIHRoaXMgZmly c3QsIGFzIGl0IGRvZXNuJ3QgZmFpbCB3aGVuIHByb2Mgbm90IGRlZmluZWQgKi8KKwkJcmVn cHJvYyA9IGluZGV4X2dldHByb2NpZChpbmRleFJlbCwgYXR0bm8sIGluZGV4UmVsLT5yZF9p bmRhbS0+YW1zdGF0c3Byb2NudW0pOworCisJCS8qIGlnbm9yZSBvcGNsYXNzZXMgd2l0aG91 dCB0aGUgb3B0aW9uYWwgcHJvY2VkdXJlICovCisJCWlmICghUmVnUHJvY2VkdXJlSXNWYWxp ZChyZWdwcm9jKSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXRzcHJvYyA9IGluZGV4X2dldHBy b2NpbmZvKGluZGV4UmVsLCBhdHRubywgaW5kZXhSZWwtPnJkX2luZGFtLT5hbXN0YXRzcHJv Y251bSk7CisKKwkJc3RhdHMgPSBpbmRleGRhdGEtPnZhY2F0dHJzdGF0c1tpXTsKKworCQlp ZiAoc3RhdHNwcm9jICE9IE5VTEwpCisJCQllbG9nKFdBUk5JTkcsICJjb2xsZWN0aW5nIHN0 YXRzIG9uIEJSSU4gcmFuZ2VzICVwIHVzaW5nIHByb2MgJXAgYXR0bnVtICVkIiwKKwkJCQkg aW5kZXhSZWwsIHN0YXRzcHJvYywgYXR0bm8pOworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhzdGF0cy0+YW5sX2NvbnRleHQpOworCisJCS8qIGNhbGwgdGhlIHByb2Ms IGxldCB0aGUgQU0gY2FsY3VsYXRlIHdoYXRldmVyIGl0IHdhbnRzICovCisJCWRhdHVtID0g RnVuY3Rpb25DYWxsNkNvbGwoc3RhdHNwcm9jLAorCQkJCQkJCQkgIEludmFsaWRPaWQsIC8q IEZJWE1FIGNvcnJlY3QgY29sbGF0aW9uICovCisJCQkJCQkJCSAgUG9pbnRlckdldERhdHVt KG9uZXJlbCksCisJCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKGluZGV4UmVsKSwKKwkJCQkJ CQkJICBJbnQxNkdldERhdHVtKGF0dG5vKSwKKwkJCQkJCQkJICBJbnQxNkdldERhdHVtKGF0 dG51bSksCisJCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKHJvd3MpLAorCQkJCQkJCQkgIElu dDMyR2V0RGF0dW0obnVtcm93cykpOworCisJCXN0YXRzLT5zdGFpbmRleGFtID0gZGF0dW07 CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorfQorCiAvKgogICog Q29tcHV0ZSBzdGF0aXN0aWNzIGFib3V0IGluZGV4ZXMgb2YgYSByZWxhdGlvbgogICovCiBz dGF0aWMgdm9pZAogY29tcHV0ZV9pbmRleF9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGRvdWJs ZSB0b3RhbHJvd3MsCi0JCQkJCUFubEluZGV4RGF0YSAqaW5kZXhkYXRhLCBpbnQgbmluZGV4 ZXMsCisJCQkJCUFubEluZGV4RGF0YSAqaW5kZXhkYXRhLCBSZWxhdGlvbiAqaW5kZXhSZWxz LCBpbnQgbmluZGV4ZXMsCiAJCQkJCUhlYXBUdXBsZSAqcm93cywgaW50IG51bXJvd3MsCiAJ CQkJCU1lbW9yeUNvbnRleHQgY29sX2NvbnRleHQpCiB7CkBAIC04NDcsNiArOTYwLDcgQEAg Y29tcHV0ZV9pbmRleF9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGRvdWJsZSB0b3RhbHJvd3Ms CiAJewogCQlBbmxJbmRleERhdGEgKnRoaXNkYXRhID0gJmluZGV4ZGF0YVtpbmRdOwogCQlJ bmRleEluZm8gICppbmRleEluZm8gPSB0aGlzZGF0YS0+aW5kZXhJbmZvOworCQlSZWxhdGlv bglpbmRleFJlbCA9IGluZGV4UmVsc1tpbmRdOwogCQlpbnQJCQlhdHRyX2NudCA9IHRoaXNk YXRhLT5hdHRyX2NudDsKIAkJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAJCUVTdGF0ZQkgICAq ZXN0YXRlOwpAQCAtODU5LDYgKzk3MywxMyBAQCBjb21wdXRlX2luZGV4X3N0YXRzKFJlbGF0 aW9uIG9uZXJlbCwgZG91YmxlIHRvdGFscm93cywKIAkJCQkJcm93bm87CiAJCWRvdWJsZQkJ dG90YWxpbmRleHJvd3M7CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIEJSSU4gaW5kZXgs IHRyeSBjYWxsaW5nIGEgcHJvY2VkdXJlIHRvIGNvbGxlY3QKKwkJICogZXh0cmEgb3BmYW1p bHktc3BlY2lmaWMgc3RhdGlzdGljcyAoaWYgcHJvY2VkdXJlIGRlZmluZWQpLgorCQkgKi8K KwkJY29tcHV0ZV9pbmRleGFtX3N0YXRzKG9uZXJlbCwgaW5kZXhSZWwsIGluZGV4SW5mbywg dG90YWxyb3dzLAorCQkJCQkJCSAgdGhpc2RhdGEsIHJvd3MsIG51bXJvd3MpOworCiAJCS8q IElnbm9yZSBpbmRleCBpZiBubyBjb2x1bW5zIHRvIGFuYWx5emUgYW5kIG5vdCBwYXJ0aWFs ICovCiAJCWlmIChhdHRyX2NudCA9PSAwICYmIGluZGV4SW5mby0+aWlfUHJlZGljYXRlID09 IE5JTCkKIAkJCWNvbnRpbnVlOwpAQCAtMTY2MSw2ICsxNzgyLDEzIEBAIHVwZGF0ZV9hdHRz dGF0cyhPaWQgcmVsaWQsIGJvb2wgaW5oLCBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZh Y2F0dHJzdGF0cykKIAkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0g MV0gPSBGbG9hdDRHZXREYXR1bShzdGF0cy0+c3RhbnVsbGZyYWMpOwogCQl2YWx1ZXNbQW51 bV9wZ19zdGF0aXN0aWNfc3Rhd2lkdGggLSAxXSA9IEludDMyR2V0RGF0dW0oc3RhdHMtPnN0 YXdpZHRoKTsKIAkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWRpc3RpbmN0IC0gMV0g PSBGbG9hdDRHZXREYXR1bShzdGF0cy0+c3RhZGlzdGluY3QpOworCisJCS8qIG9wdGlvbmFs IEFNLXNwZWNpZmljIHN0YXRzICovCisJCWlmIChEYXR1bUdldFBvaW50ZXIoc3RhdHMtPnN0 YWluZGV4YW0pICE9IE5VTEwpCisJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhaW5k ZXhhbSAtIDFdID0gc3RhdHMtPnN0YWluZGV4YW07CisJCWVsc2UKKwkJCW51bGxzW0FudW1f cGdfc3RhdGlzdGljX3N0YWluZGV4YW0gLSAxXSA9IHRydWU7CisKIAkJaSA9IEFudW1fcGdf c3RhdGlzdGljX3N0YWtpbmQxIC0gMTsKIAkJZm9yIChrID0gMDsgayA8IFNUQVRJU1RJQ19O VU1fU0xPVFM7IGsrKykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCA2 OWUwZmI5OGY1Yi4uOWY2NDBhZGIxM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j CkBAIC03NzE1LDYgKzc3MTUsNyBAQCBicmluY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpy b290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAogCVJlbGF0aW9uCWlu ZGV4UmVsOwogCUxpc3RDZWxsICAgKmw7CiAJVmFyaWFibGVTdGF0RGF0YSB2YXJkYXRhOwor CWRvdWJsZQkJYXZlcmFnZU92ZXJsYXBzOwogCiAJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBS VEVfUkVMQVRJT04pOwogCkBAIC03NzYyLDYgKzc3NjMsNyBAQCBicmluY29zdGVzdGltYXRl KFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50 LAogCSAqIGNvcnJlbGF0aW9uIHN0YXRpc3RpY3MsIHdlIHdpbGwga2VlcCBpdCBhcyAwLgog CSAqLwogCSppbmRleENvcnJlbGF0aW9uID0gMDsKKwlhdmVyYWdlT3ZlcmxhcHMgPSAwLjA7 CiAKIAlmb3JlYWNoKGwsIHBhdGgtPmluZGV4Y2xhdXNlcykKIAl7CkBAIC03NzcxLDYgKzc3 NzMsMzYgQEAgYnJpbmNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRo ICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkJLyogYXR0ZW1wdCB0byBsb29rdXAgc3Rh dHMgaW4gcmVsYXRpb24gZm9yIHRoaXMgaW5kZXggY29sdW1uICovCiAJCWlmIChhdHRudW0g IT0gMCkKIAkJeworCQkJLyoKKwkJCSAqIElmIEFNLXNwZWNpZmljIHN0YXRpc3RpY3MgYXJl IGVuYWJsZWQsIHRyeSBsb29raW5nIHVwIHRoZSBzdGF0cworCQkJICogZm9yIHRoZSBpbmRl eCBrZXkuIFdlIG9ubHkgaGF2ZSB0aGlzIGZvciBtaW5tYXggb3BjbGFzc2VzLCBzbworCQkJ ICogd2UganVzdCBjYXN0IGl0IGxpa2UgdGhhdC4gQnV0IG90aGVyIEJSSU4gb3BjbGFzc2Vz IG1pZ2h0IG5lZWQKKwkJCSAqIG90aGVyIHN0YXRzIHNvIGVpdGhlciB3ZSBuZWVkIHRvIGFi c3RyYWN0IHRoaXMgc29tZWhvdywgb3IgbWF5YmUKKwkJCSAqIGp1c3QgY29sbGVjdCBhIHN1 ZmZpY2llbnRseSBnZW5lcmljIHN0YXRzIGZvciBhbGwgQlJJTiBpbmRleGVzLgorCQkJICoK KwkJCSAqIFhYWCBNYWtlIHRoaXMgbm9uLW1pbm1heCBzcGVjaWZpYy4KKwkJCSAqLworCQkJ aWYgKGVuYWJsZV9pbmRleGFtX3N0YXRzKQorCQkJeworCQkJCUJyaW5NaW5tYXhTdGF0cyAg KmFtc3RhdHMKKwkJCQkJPSAoQnJpbk1pbm1heFN0YXRzICopIGdldF9hdHRpbmRleGFtKGlu ZGV4LT5pbmRleG9pZCwgYXR0bnVtKTsKKworCQkJCWlmIChhbXN0YXRzKQorCQkJCXsKKwkJ CQkJZWxvZyhERUJVRzEsICJmb3VuZCBBTSBzdGF0czogYXR0bnVtICVkIG5fcmFuZ2VzICVs ZCBuX3N1bW1hcml6ZWQgJWxkIG5fYWxsX251bGxzICVsZCBuX2hhc19udWxscyAlbGQgYXZn X292ZXJsYXBzICVmIiwKKwkJCQkJCSBhdHRudW0sIGFtc3RhdHMtPm5fcmFuZ2VzLCBhbXN0 YXRzLT5uX3N1bW1hcml6ZWQsCisJCQkJCQkgYW1zdGF0cy0+bl9hbGxfbnVsbHMsIGFtc3Rh dHMtPm5faGFzX251bGxzLAorCQkJCQkJIGFtc3RhdHMtPmF2Z19vdmVybGFwcyk7CisKKwkJ CQkJLyoKKwkJCQkJICogVGhlIG9ubHkgdGhpbmcgd2UgdXNlIGF0IHRoZSBtb21lbnQgaXMg dGhlIGF2ZXJhZ2UgbnVtYmVyCisJCQkJCSAqIG9mIG92ZXJsYXBzIGZvciBhIHNpbmdsZSBy YW5nZS4gVXNlIHRoZSBvdGhlciBzdHVmZiB0b28uCisJCQkJCSAqLworCQkJCQlhdmVyYWdl T3ZlcmxhcHMgPSBNYXgoYXZlcmFnZU92ZXJsYXBzLAorCQkJCQkJCQkJCSAgMS4wICsgYW1z dGF0cy0+YXZnX292ZXJsYXBzKTsKKwkJCQl9CisJCQl9CisKIAkJCS8qIFNpbXBsZSB2YXJp YWJsZSAtLSBsb29rIHRvIHN0YXRzIGZvciB0aGUgdW5kZXJseWluZyB0YWJsZSAqLwogCQkJ aWYgKGdldF9yZWxhdGlvbl9zdGF0c19ob29rICYmCiAJCQkJKCpnZXRfcmVsYXRpb25fc3Rh dHNfaG9vaykgKHJvb3QsIHJ0ZSwgYXR0bnVtLCAmdmFyZGF0YSkpCkBAIC03ODUxLDYgKzc4 ODMsMTQgQEAgYnJpbmNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRo ICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJIGJhc2VyZWwtPnJlbGlk LAogCQkJCQkJCQkJCQkgSk9JTl9JTk5FUiwgTlVMTCk7CiAKKwkvKgorCSAqIFhYWCBDYW4g d2UgY29tYmluZSBxdWFsU2VsZWN0aXZpdHkgd2l0aCB0aGUgYXZlcmFnZSBudW1iZXIgb2Yg bWF0Y2hpbmcKKwkgKiByYW5nZXMgcGVyIHZhbHVlPyBxdWFsU2VsZWN0aXZpdHkgZXN0aW1h dGVzIGhvdyBtYW55IHR1cGxlcyBhciB3ZQorCSAqIGdvaW5nIHRvIG1hdGNoLCBhbmQgYXZl cmFnZSBudW1iZXIgb2YgbWF0Y2hlcyBzYXlzIGhvdyBtYW55IHJhbmdlcworCSAqIHdpbGwg ZWFjaCBvZiB0aG9zZSBtYXRjaCBvbiBhdmVyYWdlLiBXZSBkb24ndCBrbm93IGhvdyBtYW55 IHdpbGwKKwkgKiBiZSBkdXBsaWNhdGUsIGJ1dCBpdCBnaXZlcyB1cyBhIHdvcnN0LWNhc2Ug ZXN0aW1hdGUsIGF0IGxlYXN0LgorCSAqLworCiAJLyoKIAkgKiBOb3cgY2FsY3VsYXRlIHRo ZSBtaW5pbXVtIHBvc3NpYmxlIHJhbmdlcyB3ZSBjb3VsZCBtYXRjaCB3aXRoIGlmIGFsbCBv ZgogCSAqIHRoZSByb3dzIHdlcmUgaW4gdGhlIHBlcmZlY3Qgb3JkZXIgaW4gdGhlIHRhYmxl J3MgaGVhcC4KQEAgLTc4NjcsNiArNzkwNywyNSBAQCBicmluY29zdGVzdGltYXRlKFBsYW5u ZXJJbmZvICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAogCWVs c2UKIAkJZXN0aW1hdGVkUmFuZ2VzID0gTWluKG1pbmltYWxSYW5nZXMgLyAqaW5kZXhDb3Jy ZWxhdGlvbiwgaW5kZXhSYW5nZXMpOwogCisJZWxvZyhERUJVRzEsICJiZWZvcmUgaW5kZXgg QU0gc3RhdHM6IGNlc3RpbWF0ZWRSYW5nZXMgPSAlZiIsIGVzdGltYXRlZFJhbmdlcyk7CisK KwkvKgorCSAqIElmIHdlIGZvdW5kIHNvbWUgQU0gc3RhdHMsIGxvb2sgYXQgYXZlcmFnZSBu dW1iZXIgb2Ygb3ZlcmxhcHBpbmcgcmFuZ2VzLAorCSAqIGFuZCBhcHBseSB0aGF0IHRvIHRo ZSBjdXJyZW50bHkgZXN0aW1hdGVkIHJhbmdlcy4KKwkgKgorCSAqIFhYWCBXZSBwcmV0dHkg bXVjaCBjb21iaW5lIHRoaXMgd2l0aCBjb3JyZWxhdGlvbiBpbmZvIChiZWNhdXNlIGl0IHdh cworCSAqIGFscmVhZHkgYXBwbGllZCBpbiB0aGUgZXN0aW1hdGVkUmFuZ2VzIGZvcm11bGEg YWJvdmUpLCB3aGljaCBtaWdodCBiZQorCSAqIG92ZXJseSBwZXNzaW1pc3RpYy4gVGhlIG92 ZXJsYXBzIHN0YXRzIHNlZW1zIHNvbWV3aGF0IHJlZHVuZGFudCB3aXRoCisJICogdGhlIGNv cnJlbGF0aW9uLCBzbyBtYXliZSB3ZSBzaG91bGQgZG8ganVzdCBvbmU/IFRoZSBBTSBzdGF0 cyBzZWVtcworCSAqIGxpa2UgYSBtb3JlIHJlbGlhYmxlIGluZm9ybWF0aW9uLCBiZWNhdXNl IHRoZSBjb3JyZWxhdGlvbiBpcyBub3QgdmVyeQorCSAqIHNlbnNpdGl2ZSB0byBvdXRsaWVy cywgZm9yIGV4YW1wbGUuIFNvIG1heWJlIGxldCdzIHByZWZlciB0aGF0LCBhbmQKKwkgKiBv bmx5IHVzZSB0aGUgY29ycmVsYXRpb24gYXMgZmFsbGJhY2sgd2hlbiBBTSBzdGF0cyBhcmUg bm90IGF2YWlsYWJsZT8KKwkgKi8KKwlpZiAoYXZlcmFnZU92ZXJsYXBzID4gMC4wKQorCQll c3RpbWF0ZWRSYW5nZXMgPSBNaW4oZXN0aW1hdGVkUmFuZ2VzICogYXZlcmFnZU92ZXJsYXBz LCBpbmRleFJhbmdlcyk7CisKKwllbG9nKERFQlVHMSwgImFmdGVyIGluZGV4IEFNIHN0YXRz OiBjZXN0aW1hdGVkUmFuZ2VzID0gJWYiLCBlc3RpbWF0ZWRSYW5nZXMpOworCiAJLyogd2Ug ZXhwZWN0IHRvIHZpc2l0IHRoaXMgcG9ydGlvbiBvZiB0aGUgdGFibGUgKi8KIAlzZWxlYyA9 IGVzdGltYXRlZFJhbmdlcyAvIGluZGV4UmFuZ2VzOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2xzeXNjYWNoZS5jCmluZGV4IGExNmE2M2Y0OTU3Li4xNzI1ZjVhZjM0NyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKQEAgLTMxMzgsNiArMzEzOCw0NyBAQCBnZXRf YXR0YXZnd2lkdGgoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSkKIAlyZXR1cm4gMDsK IH0KIAorCisvKgorICogZ2V0X2F0dHN0YWluZGV4YW0KKyAqCisgKgkgIEdpdmVuIHRoZSB0 YWJsZSBhbmQgYXR0cmlidXRlIG51bWJlciBvZiBhIGNvbHVtbiwgZ2V0IHRoZSBpbmRleCBB TQorICoJICBzdGF0aXN0aWNzLiAgUmV0dXJuIE5VTEwgaWYgbm8gZGF0YSBhdmFpbGFibGUu CisgKgorICogQ3VycmVudGx5IHRoaXMgaXMgb25seSBjb25zdWx0ZWQgZm9yIGluZGl2aWR1 YWwgdGFibGVzLCBub3QgZm9yIGluaGVyaXRhbmNlCisgKiB0cmVlcywgc28gd2UgZG9uJ3Qg bmVlZCBhbiAiaW5oIiBwYXJhbWV0ZXIuCisgKi8KK2J5dGVhICoKK2dldF9hdHRpbmRleGFt KE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pCit7CisJSGVhcFR1cGxlCXRwOworCisJ dHAgPSBTZWFyY2hTeXNDYWNoZTMoU1RBVFJFTEFUVElOSCwKKwkJCQkJCSBPYmplY3RJZEdl dERhdHVtKHJlbGlkKSwKKwkJCQkJCSBJbnQxNkdldERhdHVtKGF0dG51bSksCisJCQkJCQkg Qm9vbEdldERhdHVtKGZhbHNlKSk7CisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHApKQorCXsK KwkJRGF0dW0JdmFsOworCQlieXRlYSAgKnJldHZhbCA9IE5VTEw7CisJCWJvb2wJaXNudWxs OworCisJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihTVEFUUkVMQVRUSU5ILCB0cCwKKwkJCQkJ CQkgIEFudW1fcGdfc3RhdGlzdGljX3N0YWluZGV4YW0sCisJCQkJCQkJICAmaXNudWxsKTsK KworCQlpZiAoIWlzbnVsbCkKKwkJCXJldHZhbCA9IChieXRlYSAqKSBQR19ERVRPQVNUX0RB VFVNKHZhbCk7CisKKwkJLy8gc3RhaW5kZXhhbSA9ICgoRm9ybV9wZ19zdGF0aXN0aWMpIEdF VFNUUlVDVCh0cCkpLT5zdGFpbmRleGFtOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCisJ CXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBnZXRf YXR0c3RhdHNzbG90CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRl eCAwNWFiMDg3OTM0Yy4uMDZkZmViNmNkOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCkBAIC05NjcsNiArOTY3LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25m aWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAor CXsKKwkJeyJlbmFibGVfaW5kZXhhbV9zdGF0cyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5J TkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNl IG9mIGluZGV4IEFNIHN0YXRzLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJCX0s CisJCSZlbmFibGVfaW5kZXhhbV9zdGF0cywKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5V TEwKKwl9LAogCXsKIAkJeyJnZXFvIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19HRVFP LAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGdlbmV0aWMgcXVlcnkgb3B0aW1pemF0aW9u LiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCAxZGM2NzRkMjMwNS4uODQzN2MyZjBlNzEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9hbWFwaS5oCkBAIC0yMTYsNiArMjE2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhBbVJvdXRpbmUKIAl1aW50MTYJCWFtc3VwcG9ydDsKIAkvKiBvcGNsYXNzIG9wdGlvbnMg c3VwcG9ydCBmdW5jdGlvbiBudW1iZXIgb3IgMCAqLwogCXVpbnQxNgkJYW1vcHRzcHJvY251 bTsKKwkvKiBvcGNsYXNzIHN0YXRpc3RpY3Mgc3VwcG9ydCBmdW5jdGlvbiBudW1iZXIgb3Ig MCAqLworCXVpbnQxNgkJYW1zdGF0c3Byb2NudW07CiAJLyogZG9lcyBBTSBzdXBwb3J0IE9S REVSIEJZIGluZGV4ZWQgY29sdW1uJ3MgdmFsdWU/ICovCiAJYm9vbAkJYW1jYW5vcmRlcjsK IAkvKiBkb2VzIEFNIHN1cHBvcnQgT1JERVIgQlkgcmVzdWx0IG9mIGFuIG9wZXJhdG9yIG9u IGluZGV4ZWQgY29sdW1uPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKaW5kZXggODg3ZmIwYTU1MzIuLmE3 Y2NjYWM5YzkwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKQEAgLTM0LDYgKzM0LDU3IEBAIHR5cGVkZWYg c3RydWN0IEJyaW5TdGF0c0RhdGEKIAlCbG9ja051bWJlciByZXZtYXBOdW1QYWdlczsKIH0g QnJpblN0YXRzRGF0YTsKIAorLyoKKyAqIEluZm8gYWJvdXQgcmFuZ2VzIGZvciBCUklOIFNv cnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJyaW5SYW5nZQoreworCUJsb2NrTnVtYmVyIGJs a25vX3N0YXJ0OworCUJsb2NrTnVtYmVyIGJsa25vX2VuZDsKKworCURhdHVtCW1pbl92YWx1 ZTsKKwlEYXR1bQltYXhfdmFsdWU7CisJYm9vbAloYXNfbnVsbHM7CisJYm9vbAlhbGxfbnVs bHM7CisJYm9vbAlub3Rfc3VtbWFyaXplZDsKKworCS8qCisJICogSW5kZXggb2YgdGhlIHJh bmdlIHdoZW4gb3JkZXJlZCBieSBtaW5fdmFsdWUgKGlmIHRoZXJlIGFyZSBtdWx0aXBsZQor CSAqIHJhbmdlcyB3aXRoIHRoZSBzYW1lIG1pbl92YWx1ZSwgaXQncyB0aGUgbG93ZXN0IG9u ZSkuCisJICovCisJdWludDMyCW1pbl9pbmRleDsKKworCS8qCisJICogTWluaW11bSBtaW5f aW5kZXggZnJvbSBhbGwgcmFuZ2VzIHdpdGggaGlnaGVyIG1heF92YWx1ZSAoaS5lLiB3aGVu CisJICogc29ydGVkIGJ5IG1heF92YWx1ZSkuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByYW5n ZXMgd2l0aCB0aGUgc2FtZQorCSAqIG1heF92YWx1ZSwgaXQgZGVwZW5kcyBvbiB0aGUgb3Jk ZXJpbmcgKGkuZS4gdGhlIHJhbmdlcyBtYXkgZ2V0CisJICogZGlmZmVyZW50IG1pbl9pbmRl eF9sb3dlc3QsIGRlcGVuZGluZyBvbiB0aGUgZXhhY3Qgb3JkZXJpbmcpLgorCSAqLworCXVp bnQzMgltaW5faW5kZXhfbG93ZXN0OworfSBCcmluUmFuZ2U7CisKK3R5cGVkZWYgc3RydWN0 IEJyaW5SYW5nZXMKK3sKKwlpbnQJCQlucmFuZ2VzOworCUJyaW5SYW5nZQlyYW5nZXNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30gQnJpblJhbmdlczsKKwordHlwZWRlZiBzdHJ1Y3Qg QnJpbk1pbm1heFN0YXRzCit7CisJaW50MzIJCXZsX2xlbl87CQkvKiB2YXJsZW5hIGhlYWRl ciAoZG8gbm90IHRvdWNoIGRpcmVjdGx5ISkgKi8KKwlpbnQ2NAkJbl9yYW5nZXM7CisJaW50 NjQJCW5fc3VtbWFyaXplZDsKKwlpbnQ2NAkJbl9hbGxfbnVsbHM7CisJaW50NjQJCW5faGFz X251bGxzOworCWRvdWJsZQkJYXZnX292ZXJsYXBzOworCWRvdWJsZQkJYXZnX21hdGNoZXM7 CisJZG91YmxlCQlhdmdfbWF0Y2hlc191bmlxdWU7CisKKwlkb3VibGUJCW1pbnZhbF9jb3Jy ZWxhdGlvbjsKKwlkb3VibGUJCW1heHZhbF9jb3JyZWxhdGlvbjsKKwlpbnQ2NAkJbWludmFs X25kaXN0aW5jdDsKKwlpbnQ2NAkJbWF4dmFsX25kaXN0aW5jdDsKK30gQnJpbk1pbm1heFN0 YXRzOwogCiAjZGVmaW5lIEJSSU5fREVGQVVMVF9QQUdFU19QRVJfUkFOR0UJMTI4CiAjZGVm aW5lIEJyaW5HZXRQYWdlc1BlclJhbmdlKHJlbGF0aW9uKSBcCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW5faW50ZXJuYWwuaAppbmRleCAyNTE4NjYwOTI3Mi4uZWU2YzZmOWI3MDkgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2JyaW5faW50ZXJuYWwuaApAQCAtNzMsNiArNzMsNyBAQCB0eXBlZGVmIHN0 cnVjdCBCcmluRGVzYwogI2RlZmluZSBCUklOX1BST0NOVU1fVU5JT04JCQk0CiAjZGVmaW5l IEJSSU5fTUFOREFUT1JZX05QUk9DUwkJNAogI2RlZmluZSBCUklOX1BST0NOVU1fT1BUSU9O UyAJCTUJLyogb3B0aW9uYWwgKi8KKyNkZWZpbmUgQlJJTl9QUk9DTlVNX1NUQVRJU1RJQ1MJ CTYJLyogb3B0aW9uYWwgKi8KIC8qIHByb2NlZHVyZSBudW1iZXJzIHVwIHRvIDEwIGFyZSBy ZXNlcnZlZCBmb3IgQlJJTiBmdXR1cmUgZXhwYW5zaW9uICovCiAjZGVmaW5lIEJSSU5fRklS U1RfT1BUSU9OQUxfUFJPQ05VTSAxMQogI2RlZmluZSBCUklOX0xBU1RfT1BUSU9OQUxfUFJP Q05VTQkxNQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0CmluZGV4IDRjYzEyOWJlYmQ4 Li5lYTNkZTliY2JhMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXBy b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1wcm9jLmRhdApAQCAtODA0 LDYgKzgwNCw4IEBACiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfY29uc2lzdGVudCcgfSwK IHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2J5dGVhX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0 dHlwZSA9PiAnYnl0ZWEnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2J5dGVhJywgYW1wcm9j bnVtID0+ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9j ZmFtaWx5ID0+ICdicmluL2J5dGVhX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn Ynl0ZWEnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2J5dGVhJywgYW1wcm9jbnVtID0+ICc2 JywgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKIAogIyBibG9vbSBieXRlYQog eyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vYnl0ZWFfYmxvb21fb3BzJywgYW1wcm9jbGVmdHR5 cGUgPT4gJ2J5dGVhJywKQEAgLTgzNSw2ICs4MzcsOCBAQAogICBhbXByb2MgPT4gJ2JyaW5f bWlubWF4X2NvbnNpc3RlbnQnIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9jaGFyX21p bm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnY2hhcicsCiAgIGFtcHJvY3JpZ2h0dHlw ZSA9PiAnY2hhcicsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhf dW5pb24nIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9jaGFyX21pbm1heF9vcHMnLCBh bXByb2NsZWZ0dHlwZSA9PiAnY2hhcicsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnY2hhcics IGFtcHJvY251bSA9PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAK ICMgYmxvb20gImNoYXIiCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9jaGFyX2Jsb29tX29w cycsIGFtcHJvY2xlZnR0eXBlID0+ICdjaGFyJywKQEAgLTg2NCw2ICs4NjgsOCBAQAogICBh bXByb2MgPT4gJ2JyaW5fbWlubWF4X2NvbnNpc3RlbnQnIH0sCiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9uYW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbmFtZScsCiAg IGFtcHJvY3JpZ2h0dHlwZSA9PiAnbmFtZScsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9 PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9uYW1l X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbmFtZScsCisgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAnbmFtZScsIGFtcHJvY251bSA9PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5t YXhfc3RhdHMnIH0sCiAKICMgYmxvb20gbmFtZQogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4v bmFtZV9ibG9vbV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbmFtZScsCkBAIC04OTMsNiAr ODk5LDggQEAKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9jb25zaXN0ZW50JyB9LAogeyBh bXByb2NmYW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5 cGUgPT4gJ2ludDgnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDgnLCBhbXByb2NudW0g PT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2NmYW1p bHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2lu dDgnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDgnLCBhbXByb2NudW0gPT4gJzYnLCBh bXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiB7IGFtcHJvY2ZhbWlseSA9PiAn YnJpbi9pbnRlZ2VyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50MicsCiAg IGFtcHJvY3JpZ2h0dHlwZSA9PiAnaW50MicsIGFtcHJvY251bSA9PiAnMScsCkBAIC05MDUs NiArOTEzLDggQEAKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9jb25zaXN0ZW50JyB9LAog eyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ2ludDInLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDInLCBhbXByb2Nu dW0gPT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4g J2ludDInLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDInLCBhbXByb2NudW0gPT4gJzYn LCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9pbnRlZ2VyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50NCcs CiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnaW50NCcsIGFtcHJvY251bSA9PiAnMScsCkBAIC05 MTcsNiArOTI3LDggQEAKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9jb25zaXN0ZW50JyB9 LAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9j bGVmdHR5cGUgPT4gJ2ludDQnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDQnLCBhbXBy b2NudW0gPT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXBy b2NmYW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUg PT4gJ2ludDQnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDQnLCBhbXByb2NudW0gPT4g JzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBtdWx0 aSBpbnRlZ2VyOiBpbnQyLCBpbnQ0LCBpbnQ4CiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9p bnRlZ2VyX21pbm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50MicsCkBA IC0xMDM0LDYgKzEwNDYsOCBAQAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X2NvbnNpc3Rl bnQnIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90ZXh0X21pbm1heF9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAndGV4dCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGV4dCcsIGFt cHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFt cHJvY2ZhbWlseSA9PiAnYnJpbi90ZXh0X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9 PiAndGV4dCcsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGV4dCcsIGFtcHJvY251bSA9PiAn NicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAKICMgYmxvb20gdGV4dAog eyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGV4dF9ibG9vbV9vcHMnLCBhbXByb2NsZWZ0dHlw ZSA9PiAndGV4dCcsCkBAIC0xMDYyLDYgKzEwNzYsOCBAQAogICBhbXByb2MgPT4gJ2JyaW5f bWlubWF4X2NvbnNpc3RlbnQnIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9vaWRfbWlu bWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdvaWQnLAogICBhbXByb2NyaWdodHR5cGUg PT4gJ29pZCcsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5p b24nIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9vaWRfbWlubWF4X29wcycsIGFtcHJv Y2xlZnR0eXBlID0+ICdvaWQnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ29pZCcsIGFtcHJv Y251bSA9PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAKICMgbWlu bWF4IG11bHRpIG9pZAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vb2lkX21pbm1heF9tdWx0 aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnb2lkJywKQEAgLTExMTAsNiArMTEyNiw4IEBA CiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfY29uc2lzdGVudCcgfSwKIHsgYW1wcm9jZmFt aWx5ID0+ICdicmluL3RpZF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpZCcs CiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGlkJywgYW1wcm9jbnVtID0+ICc0JywgYW1wcm9j ID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL3Rp ZF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpZCcsCisgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAndGlkJywgYW1wcm9jbnVtID0+ICc2JywgYW1wcm9jID0+ICdicmluX21pbm1h eF9zdGF0cycgfSwKIAogIyBibG9vbSB0aWQKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL3Rp ZF9ibG9vbV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGlkJywKQEAgLTExNjAsNiArMTE3 OCw5IEBACiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9mbG9hdF9taW5tYXhfb3BzJywgYW1w cm9jbGVmdHR5cGUgPT4gJ2Zsb2F0NCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZmxvYXQ0 JywgYW1wcm9jbnVtID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicg fSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL2Zsb2F0X21pbm1heF9vcHMnLCBhbXByb2Ns ZWZ0dHlwZSA9PiAnZmxvYXQ0JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdmbG9hdDQnLCBh bXByb2NudW0gPT4gJzYnLAorICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAog CiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9mbG9hdF9taW5tYXhfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ2Zsb2F0OCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZmxvYXQ4JywgYW1w cm9jbnVtID0+ICcxJywKQEAgLTExNzMsNiArMTE5NCw5IEBACiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9mbG9hdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2Zsb2F0OCcs CiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZmxvYXQ4JywgYW1wcm9jbnVtID0+ICc0JywKICAg YW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdi cmluL2Zsb2F0X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnZmxvYXQ4JywKKyAg YW1wcm9jcmlnaHR0eXBlID0+ICdmbG9hdDgnLCBhbXByb2NudW0gPT4gJzYnLAorICBhbXBy b2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBtdWx0aSBmbG9hdAog eyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vZmxvYXRfbWlubWF4X211bHRpX29wcycsIGFtcHJv Y2xlZnR0eXBlID0+ICdmbG9hdDQnLApAQCAtMTI2MSw2ICsxMjg1LDkgQEAKIHsgYW1wcm9j ZmFtaWx5ID0+ICdicmluL21hY2FkZHJfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ ICdtYWNhZGRyJywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdtYWNhZGRyJywgYW1wcm9jbnVt ID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9j ZmFtaWx5ID0+ICdicmluL21hY2FkZHJfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ ICdtYWNhZGRyJywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdtYWNhZGRyJywgYW1wcm9jbnVt ID0+ICc2JywKKyAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKIAogIyBtaW5t YXggbXVsdGkgbWFjYWRkcgogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vbWFjYWRkcl9taW5t YXhfbXVsdGlfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ21hY2FkZHInLApAQCAtMTMxNCw2 ICsxMzQxLDkgQEAKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL21hY2FkZHI4X21pbm1heF9v cHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbWFjYWRkcjgnLAogICBhbXByb2NyaWdodHR5cGUg PT4gJ21hY2FkZHI4JywgYW1wcm9jbnVtID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21p bm1heF91bmlvbicgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL21hY2FkZHI4X21pbm1h eF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbWFjYWRkcjgnLAorICBhbXByb2NyaWdodHR5 cGUgPT4gJ21hY2FkZHI4JywgYW1wcm9jbnVtID0+ICc2JywKKyAgYW1wcm9jID0+ICdicmlu X21pbm1heF9zdGF0cycgfSwKIAogIyBtaW5tYXggbXVsdGkgbWFjYWRkcjgKIHsgYW1wcm9j ZmFtaWx5ID0+ICdicmluL21hY2FkZHI4X21pbm1heF9tdWx0aV9vcHMnLApAQCAtMTM2Niw2 ICsxMzk2LDggQEAKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9jb25zaXN0ZW50JyB9LAog eyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vbmV0d29ya19taW5tYXhfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ2luZXQnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2luZXQnLCBhbXByb2Nu dW0gPT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vbmV0d29ya19taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4g J2luZXQnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2luZXQnLCBhbXByb2NudW0gPT4gJzYn LCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBtdWx0aSBp bmV0CiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9uZXR3b3JrX21pbm1heF9tdWx0aV9vcHMn LCBhbXByb2NsZWZ0dHlwZSA9PiAnaW5ldCcsCkBAIC0xNDM2LDYgKzE0NjgsOSBAQAogeyBh bXByb2NmYW1pbHkgPT4gJ2JyaW4vYnBjaGFyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlw ZSA9PiAnYnBjaGFyJywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdicGNoYXInLCBhbXByb2Nu dW0gPT4gJzQnLAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXBy b2NmYW1pbHkgPT4gJ2JyaW4vYnBjaGFyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9 PiAnYnBjaGFyJywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdicGNoYXInLCBhbXByb2NudW0g PT4gJzYnLAorICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIGJsb29t IGNoYXJhY3RlcgogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vYnBjaGFyX2Jsb29tX29wcycs IGFtcHJvY2xlZnR0eXBlID0+ICdicGNoYXInLApAQCAtMTQ2Nyw2ICsxNTAyLDggQEAKICAg YW1wcm9jID0+ICdicmluX21pbm1heF9jb25zaXN0ZW50JyB9LAogeyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vdGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpbWUnLAog ICBhbXByb2NyaWdodHR5cGUgPT4gJ3RpbWUnLCBhbXByb2NudW0gPT4gJzQnLCBhbXByb2Mg PT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGlt ZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpbWUnLAorICBhbXByb2NyaWdo dHR5cGUgPT4gJ3RpbWUnLCBhbXByb2NudW0gPT4gJzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlu bWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBtdWx0aSB0aW1lIHdpdGhvdXQgdGltZSB6b25l CiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90aW1lX21pbm1heF9tdWx0aV9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAndGltZScsCkBAIC0xNTE3LDYgKzE1NTQsOSBAQAogeyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vZGF0ZXRpbWVfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ ICd0aW1lc3RhbXAnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ3RpbWVzdGFtcCcsIGFtcHJv Y251bSA9PiAnNCcsCiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFt cHJvY2ZhbWlseSA9PiAnYnJpbi9kYXRldGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5 cGUgPT4gJ3RpbWVzdGFtcCcsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGltZXN0YW1wJywg YW1wcm9jbnVtID0+ICc2JywKKyAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwK IAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vZGF0ZXRpbWVfbWlubWF4X29wcycsIGFtcHJv Y2xlZnR0eXBlID0+ICd0aW1lc3RhbXB0eicsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGlt ZXN0YW1wdHonLCBhbXByb2NudW0gPT4gJzEnLApAQCAtMTUzMCw2ICsxNTcwLDkgQEAKIHsg YW1wcm9jZmFtaWx5ID0+ICdicmluL2RhdGV0aW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0 dHlwZSA9PiAndGltZXN0YW1wdHonLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ3RpbWVzdGFt cHR6JywgYW1wcm9jbnVtID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlv bicgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL2RhdGV0aW1lX21pbm1heF9vcHMnLCBh bXByb2NsZWZ0dHlwZSA9PiAndGltZXN0YW1wdHonLAorICBhbXByb2NyaWdodHR5cGUgPT4g J3RpbWVzdGFtcHR6JywgYW1wcm9jbnVtID0+ICc2JywKKyAgYW1wcm9jID0+ICdicmluX21p bm1heF9zdGF0cycgfSwKIAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vZGF0ZXRpbWVfbWlu bWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdkYXRlJywKICAgYW1wcm9jcmlnaHR0eXBl ID0+ICdkYXRlJywgYW1wcm9jbnVtID0+ICcxJywKQEAgLTE1NDIsNiArMTU4NSw4IEBACiAg IGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfY29uc2lzdGVudCcgfSwKIHsgYW1wcm9jZmFtaWx5 ID0+ICdicmluL2RhdGV0aW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnZGF0 ZScsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZGF0ZScsIGFtcHJvY251bSA9PiAnNCcsIGFt cHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJp bi9kYXRldGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2RhdGUnLAorICBh bXByb2NyaWdodHR5cGUgPT4gJ2RhdGUnLCBhbXByb2NudW0gPT4gJzYnLCBhbXByb2MgPT4g J2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBtdWx0aSBkYXRldGltZSAoZGF0 ZSwgdGltZXN0YW1wLCB0aW1lc3RhbXB0eikKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2Rh dGV0aW1lX21pbm1heF9tdWx0aV9vcHMnLApAQCAtMTY2OCw2ICsxNzEzLDkgQEAKIHsgYW1w cm9jZmFtaWx5ID0+ICdicmluL2ludGVydmFsX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlw ZSA9PiAnaW50ZXJ2YWwnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludGVydmFsJywgYW1w cm9jbnVtID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sg YW1wcm9jZmFtaWx5ID0+ICdicmluL2ludGVydmFsX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0 dHlwZSA9PiAnaW50ZXJ2YWwnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludGVydmFsJywg YW1wcm9jbnVtID0+ICc2JywKKyAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwK IAogIyBtaW5tYXggbXVsdGkgaW50ZXJ2YWwKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2lu dGVydmFsX21pbm1heF9tdWx0aV9vcHMnLApAQCAtMTcyMSw2ICsxNzY5LDkgQEAKIHsgYW1w cm9jZmFtaWx5ID0+ICdicmluL3RpbWV0el9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUg PT4gJ3RpbWV0eicsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGltZXR6JywgYW1wcm9jbnVt ID0+ICc0JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9j ZmFtaWx5ID0+ICdicmluL3RpbWV0el9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4g J3RpbWV0eicsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGltZXR6JywgYW1wcm9jbnVtID0+ ICc2JywKKyAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKIAogIyBtaW5tYXgg bXVsdGkgdGltZSB3aXRoIHRpbWUgem9uZQogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGlt ZXR6X21pbm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGltZXR6JywKQEAg LTE3NzEsNiArMTgyMiw4IEBACiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfY29uc2lzdGVu dCcgfSwKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2JpdF9taW5tYXhfb3BzJywgYW1wcm9j bGVmdHR5cGUgPT4gJ2JpdCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnYml0JywgYW1wcm9j bnVtID0+ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKK3sgYW1wcm9j ZmFtaWx5ID0+ICdicmluL2JpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2Jp dCcsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnYml0JywgYW1wcm9jbnVtID0+ICc2JywgYW1w cm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKIAogIyBtaW5tYXggYml0IHZhcnlpbmcK IHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL3ZhcmJpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ3ZhcmJpdCcsCkBAIC0xNzg1LDYgKzE4MzgsOSBAQAogeyBhbXByb2NmYW1p bHkgPT4gJ2JyaW4vdmFyYml0X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndmFy Yml0JywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICd2YXJiaXQnLCBhbXByb2NudW0gPT4gJzQn LAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vdmFyYml0X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndmFyYml0 JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICd2YXJiaXQnLCBhbXByb2NudW0gPT4gJzYnLAor ICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1heCBudW1lcmlj CiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9udW1lcmljX21pbm1heF9vcHMnLCBhbXByb2Ns ZWZ0dHlwZSA9PiAnbnVtZXJpYycsCkBAIC0xNzk5LDYgKzE4NTUsOSBAQAogeyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vbnVtZXJpY19taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4g J251bWVyaWMnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ251bWVyaWMnLCBhbXByb2NudW0g PT4gJzQnLAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAoreyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vbnVtZXJpY19taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4g J251bWVyaWMnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ251bWVyaWMnLCBhbXByb2NudW0g PT4gJzYnLAorICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAogCiAjIG1pbm1h eCBtdWx0aSBudW1lcmljCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9udW1lcmljX21pbm1h eF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbnVtZXJpYycsCkBAIC0xODUxLDYg KzE5MTAsOCBAQAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X2NvbnNpc3RlbnQnIH0sCiB7 IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi91dWlkX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlw ZSA9PiAndXVpZCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndXVpZCcsIGFtcHJvY251bSA9 PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFtcHJvY2ZhbWls eSA9PiAnYnJpbi91dWlkX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndXVpZCcs CisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndXVpZCcsIGFtcHJvY251bSA9PiAnNicsIGFtcHJv YyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAKICMgbWlubWF4IG11bHRpIHV1aWQKIHsg YW1wcm9jZmFtaWx5ID0+ICdicmluL3V1aWRfbWlubWF4X211bHRpX29wcycsIGFtcHJvY2xl ZnR0eXBlID0+ICd1dWlkJywKQEAgLTE5MjQsNiArMTk4NSw5IEBACiB7IGFtcHJvY2ZhbWls eSA9PiAnYnJpbi9wZ19sc25fbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdwZ19s c24nLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ3BnX2xzbicsIGFtcHJvY251bSA9PiAnNCcs CiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCit7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9wZ19sc25fbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdwZ19sc24n LAorICBhbXByb2NyaWdodHR5cGUgPT4gJ3BnX2xzbicsIGFtcHJvY251bSA9PiAnNicsCisg IGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAKICMgbWlubWF4IG11bHRpIHBn X2xzbgogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vcGdfbHNuX21pbm1heF9tdWx0aV9vcHMn LCBhbXByb2NsZWZ0dHlwZSA9PiAncGdfbHNuJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDYyYTViOGU2NTVkLi4xZGQ5MTc3YjAxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC04NDA3LDYgKzg0MDcsMTAgQEAKIHsgb2lkID0+ICczMzg2JywgZGVzY3Ig PT4gJ0JSSU4gbWlubWF4IHN1cHBvcnQnLAogICBwcm9uYW1lID0+ICdicmluX21pbm1heF91 bmlvbicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAogICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJu YWwgaW50ZXJuYWwgaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9 LAoreyBvaWQgPT4gJzk5NzknLCBkZXNjciA9PiAnQlJJTiBtaW5tYXggc3VwcG9ydCcsCisg IHByb25hbWUgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcs CisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBpbnRlcm5hbCBpbnQyIGludDIgaW50ZXJu YWwgaW50NCcsCisgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCiAKICMgQlJJ TiBtaW5tYXggbXVsdGkKIHsgb2lkID0+ICc0NjE2JywgZGVzY3IgPT4gJ0JSSU4gbXVsdGkg bWlubWF4IHN1cHBvcnQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19z dGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3RhdGlzdGljLmgKaW5kZXgg Y2RmNzQ0ODEzOTguLjcwNDNiMTY5ZjdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N0YXRpc3RpYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3RhdGlz dGljLmgKQEAgLTEyMSw2ICsxMjEsMTEgQEAgQ0FUQUxPRyhwZ19zdGF0aXN0aWMsMjYxOSxT dGF0aXN0aWNSZWxhdGlvbklkKQogCWFueWFycmF5CXN0YXZhbHVlczM7CiAJYW55YXJyYXkJ c3RhdmFsdWVzNDsKIAlhbnlhcnJheQlzdGF2YWx1ZXM1OworCisJLyoKKwkgKiBTdGF0aXN0 aWNzIGNhbGN1bGF0ZWQgYnkgaW5kZXggQU0gKGUuZy4gQlJJTiBmb3IgcmFuZ2VzLCBldGMu KS4KKwkgKi8KKwlieXRlYQkJc3RhaW5kZXhhbTsKICNlbmRpZgogfSBGb3JtRGF0YV9wZ19z dGF0aXN0aWM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5o IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggNWQ4MTZiYTdmNGUuLjMx OWY3ZDRhYWRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApAQCAtMTU1LDYgKzE1NSw3IEBA IHR5cGVkZWYgc3RydWN0IFZhY0F0dHJTdGF0cwogCWZsb2F0NAkgICAqc3RhbnVtYmVyc1tT VEFUSVNUSUNfTlVNX1NMT1RTXTsKIAlpbnQJCQludW12YWx1ZXNbU1RBVElTVElDX05VTV9T TE9UU107CiAJRGF0dW0JICAgKnN0YXZhbHVlc1tTVEFUSVNUSUNfTlVNX1NMT1RTXTsKKwlE YXR1bQkJc3RhaW5kZXhhbTsJCS8qIGluZGV4LXNwZWNpZmljIHN0YXRzIChhcyBieXRlYSkg Ki8KIAogCS8qCiAJICogVGhlc2UgZmllbGRzIGRlc2NyaWJlIHRoZSBzdGF2YWx1ZXNbbl0g ZWxlbWVudCB0eXBlcy4gVGhleSB3aWxsIGJlCkBAIC0yNTgsNiArMjU5LDcgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGludCB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2U7 CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHZhY3V1bV9mYWlsc2FmZV9hZ2U7CiBleHRlcm4g UEdETExJTVBPUlQgaW50IHZhY3V1bV9tdWx0aXhhY3RfZmFpbHNhZmVfYWdlOworZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4YW1fc3RhdHM7CiAKIC8qIFZhcmlhYmxl cyBmb3IgY29zdC1iYXNlZCBwYXJhbGxlbCB2YWN1dW0gKi8KIGV4dGVybiBQR0RMTElNUE9S VCBwZ19hdG9taWNfdWludDMyICpWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv bHN5c2NhY2hlLmgKaW5kZXggNTBmMDI4ODMwNTIuLjcxY2U1YjE1ZDc0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9sc3lzY2FjaGUuaApAQCAtMTg1LDYgKzE4NSw3IEBAIGV4dGVybiBPaWQJZ2V0QmFzZVR5 cGUoT2lkIHR5cGlkKTsKIGV4dGVybiBPaWQJZ2V0QmFzZVR5cGVBbmRUeXBtb2QoT2lkIHR5 cGlkLCBpbnQzMiAqdHlwbW9kKTsKIGV4dGVybiBpbnQzMiBnZXRfdHlwYXZnd2lkdGgoT2lk IHR5cGlkLCBpbnQzMiB0eXBtb2QpOwogZXh0ZXJuIGludDMyIGdldF9hdHRhdmd3aWR0aChP aWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKTsKK2V4dGVybiBieXRlYSAqZ2V0X2F0dGlu ZGV4YW0oT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSk7CiBleHRlcm4gYm9vbCBnZXRf YXR0c3RhdHNzbG90KEF0dFN0YXRzU2xvdCAqc3Nsb3QsIEhlYXBUdXBsZSBzdGF0c3R1cGxl LAogCQkJCQkJCSBpbnQgcmVxa2luZCwgT2lkIHJlcW9wLCBpbnQgZmxhZ3MpOwogZXh0ZXJu IHZvaWQgZnJlZV9hdHRzdGF0c3Nsb3QoQXR0U3RhdHNTbG90ICpzc2xvdCk7Ci0tIAoyLjM3 LjMKCg== --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0002-Allow-BRIN-indexes-to-produce-sorted-output-20221022.patch" Content-Disposition: attachment; filename*0="0002-Allow-BRIN-indexes-to-produce-sorted-output-20221022.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwOWM3MTI3MTI0YzQ0MzczYzAwNjEyNmFkYjczOTFiNWZjM2UzNDc1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCA5IE9jdCAyMDIyIDExOjMzOjM3ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCAyLzZdIEFsbG93IEJSSU4gaW5kZXhlcyB0byBwcm9kdWNlIHNvcnRlZCBv dXRwdXQKClNvbWUgQlJJTiBpbmRleGVzIGNhbiBiZSB1c2VkIHRvIHByb2R1Y2Ugc29ydGVk IG91dHB1dCwgYnkgdXNpbmcgdGhlCnJhbmdlIGluZm9ybWF0aW9uIHRvIHNvcnQgdHVwbGVz IGluY3JlbWVudGFsbHkuIFRoaXMgaXMgcGFydGljdWxhcmx5CmludGVyZXN0aW5nIGZvciBM SU1JVCBxdWVyaWVzLCB3aGljaCBvbmx5IG5lZWQgdG8gc2NhbiB0aGUgZmlyc3QgZmV3CnJv d3MsIGFuZCBhbHRlcm5hdGl2ZSBwbGFucyAoZS5nLiBTZXEgU2NhbiArIFNvcnQpIGhhdmUg YSB2ZXJ5IGhpZ2gKc3RhcnR1cCBjb3N0LgoKT2YgY291cnNlLCBpZiB0aGVyZSBhcmUgZS5n LiBCVFJFRSBpbmRleGVzIHRoaXMgaXMgZ29pbmcgdG8gYmUgc2xvd2VyLApidXQgcGVvcGxl IGFyZSB1bmxpa2VseSB0byBoYXZlIGJvdGggaW5kZXggdHlwZXMgb24gdGhlIHNhbWUgY29s dW1uLgoKVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB1c2UgZW5hYmxlX2JyaW5zb3J0 IEdVQyB0byBlbmFibGUgaXQuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9t aW5tYXguYyAgIHwgIDM4NiArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YyAgICAgICAgICB8ICAgNDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgICAg ICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyAg ICAgfCAgIDEwICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jICAgICB8 IDE1NTAgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMgICB8ICAyNTQgKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYyAgIHwgIDE4NiArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L3BhdGhrZXlzLmMgICB8ICAgNTAgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIHwgIDE4OCArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJl ZnMuYyAgICB8ICAgMTkgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyAgIHwgICA1NyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAg fCAgIDEwICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggICAgICAgICAgICAgICB8ICAg MzUgLQogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5faW50ZXJuYWwuaCAgICAgIHwgICAgMSAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtcHJvYy5kYXQgICAgICAgfCAgIDY0ICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICB8ICAgIDMgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3Ivbm9kZUJyaW5Tb3J0LmggICAgIHwgICA0NyArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgfCAgMTAzICsrCiBzcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgIDExICsKIHNyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAgMjYgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCAgICAgICAgfCAgICA5ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5o ICAgICAgICAgICB8ICAgIDMgKwogMjMgZmlsZXMgY2hhbmdlZCwgMzAyNSBpbnNlcnRpb25z KCspLCAzNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQnJpblNvcnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L2V4ZWN1dG9yL25vZGVCcmluU29ydC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbl9taW5tYXguYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5f bWlubWF4LmMKaW5kZXggMDEzNWEwMGFlOTEuLjlkODQwNjMwNTVjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX21pbm1heC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW5fbWlubWF4LmMKQEAgLTE2LDYgKzE2LDEwIEBACiAjaW5jbHVk ZSAiYWNjZXNzL2JyaW5fdHVwbGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNp bmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIK KyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXgu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19h bW9wLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCkBAIC00Miw2ICs0Niw5IEBAIHN0YXRpYyBGbWdySW5mbyAqbWlubWF4X2dldF9z dHJhdGVneV9wcm9jaW5mbyhCcmluRGVzYyAqYmRlc2MsIHVpbnQxNiBhdHRubywKIC8qIGNh bGN1bGF0ZSB0aGUgc3RhdHMgaW4gZGlmZmVyZW50IHdheXMgZm9yIGNyb3NzLWNoZWNraW5n ICovCiAjZGVmaW5lIFNUQVRTX0NST1NTX0NIRUNLCiAKKy8qIHByaW50IGluZm8gYWJvdXQg cmFuZ2VzICovCisjZGVmaW5lIEJSSU5TT1JUX0RFQlVHCisKIERhdHVtCiBicmluX21pbm1h eF9vcGNpbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC0xNTk0LDYgKzE2MDEsMzg1IEBA IGNsZWFudXA6CiAJUEdfUkVUVVJOX1BPSU5URVIoc3RhdHMpOwogfQogCisvKgorICogYnJp bl9taW5tYXhfcmFuZ2VfdHVwZGVzYworICoJCUNyZWF0ZSBhIHR1cGxlIGRlc2NyaXB0b3Ig dG8gc3RvcmUgQnJpblJhbmdlIGRhdGEuCisgKi8KK3N0YXRpYyBUdXBsZURlc2MKK2JyaW5f bWlubWF4X3JhbmdlX3R1cGRlc2MoQnJpbkRlc2MgKmJyZGVzYywgQXR0ck51bWJlciBhdHRu dW0pCit7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJQXR0ck51bWJlcglhdHRubyA9IDE7CisK KwkvKiBleHBlY3QgbWluaW11bSBhbmQgbWF4aW11bSAqLworCUFzc2VydChicmRlc2MtPmJk X2luZm9bYXR0bnVtIC0gMV0tPm9pX25zdG9yZWQgPT0gMik7CisKKwl0dXBkZXNjID0gQ3Jl YXRlVGVtcGxhdGVUdXBsZURlc2MoNyk7CisKKwkvKiBibGtub19zdGFydCAqLworCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBkZXNjLCBhdHRubysrLCBOVUxMLCBJTlQ4T0lELCAtMSwgMCk7 CisKKwkvKiBibGtub19lbmQgKGNvdWxkIGJlIGNhbGN1bGF0ZWQgYXMgYmxrbm9fc3RhcnQg KyBwYWdlc19wZXJfcmFuZ2UpICovCisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIGF0 dG5vKyssIE5VTEwsIElOVDhPSUQsIC0xLCAwKTsKKworCS8qIGhhc19udWxscyAqLworCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCBhdHRubysrLCBOVUxMLCBCT09MT0lELCAtMSwg MCk7CisKKwkvKiBhbGxfbnVsbHMgKi8KKwlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywg YXR0bm8rKywgTlVMTCwgQk9PTE9JRCwgLTEsIDApOworCisJLyogbm90X3N1bW1hcml6ZWQg Ki8KKwlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgYXR0bm8rKywgTlVMTCwgQk9PTE9J RCwgLTEsIDApOworCisJLyogbWluX3ZhbHVlICovCisJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGRlc2MsIGF0dG5vKyssIE5VTEwsCisJCQkJCSAgIGJyZGVzYy0+YmRfaW5mb1thdHRudW0g LSAxXS0+b2lfdHlwY2FjaGVbMF0tPnR5cGVfaWQsCisJCQkJCQkJCSAgIC0xLCAwKTsKKwor CS8qIG1heF92YWx1ZSAqLworCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCBhdHRubysr LCBOVUxMLAorCQkJCQkgICBicmRlc2MtPmJkX2luZm9bYXR0bnVtIC0gMV0tPm9pX3R5cGNh Y2hlWzBdLT50eXBlX2lkLAorCQkJCQkJCQkgICAtMSwgMCk7CisKKwlyZXR1cm4gdHVwZGVz YzsKK30KKworLyoKKyAqIGJyaW5fbWlubWF4X3JhbmdlX3R1cGxlCisgKgkJRm9ybSBhIG1p bmltYWwgdHVwbGUgcmVwcmVzZW50aW5nIHJhbmdlIGluZm8uCisgKi8KK3N0YXRpYyBNaW5p bWFsVHVwbGUKK2JyaW5fbWlubWF4X3JhbmdlX3R1cGxlKFR1cGxlRGVzYyB0dXBkZXNjLAor CQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tfc3RhcnQsIEJsb2NrTnVtYmVyIGJsb2NrX2VuZCwK KwkJCQkJCWJvb2wgaGFzX251bGxzLCBib29sIGFsbF9udWxscywgYm9vbCBub3Rfc3VtbWFy aXplZCwKKwkJCQkJCURhdHVtIG1pbl92YWx1ZSwgRGF0dW0gbWF4X3ZhbHVlKQoreworCURh dHVtCXZhbHVlc1s3XTsKKwlib29sCW51bGxzWzddOworCisJbWVtc2V0KG51bGxzLCAwLCBz aXplb2YobnVsbHMpKTsKKworCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oYmxvY2tfc3Rh cnQpOworCXZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0oYmxvY2tfZW5kKTsKKwl2YWx1ZXNb Ml0gPSBCb29sR2V0RGF0dW0oaGFzX251bGxzKTsKKwl2YWx1ZXNbM10gPSBCb29sR2V0RGF0 dW0oYWxsX251bGxzKTsKKwl2YWx1ZXNbNF0gPSBCb29sR2V0RGF0dW0obm90X3N1bW1hcml6 ZWQpOworCXZhbHVlc1s1XSA9IG1pbl92YWx1ZTsKKwl2YWx1ZXNbNl0gPSBtYXhfdmFsdWU7 CisKKwlpZiAoYWxsX251bGxzIHx8IG5vdF9zdW1tYXJpemVkKQorCXsKKwkJbnVsbHNbNV0g PSB0cnVlOworCQludWxsc1s2XSA9IHRydWU7CisJfQorCisJcmV0dXJuIGhlYXBfZm9ybV9t aW5pbWFsX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOworfQorCisvKgorICogYnJp bl9taW5tYXhfc2Nhbl9pbml0CisgKgkJUHJlcGFyZSB0aGUgQnJpblJhbmdlU2NhbkRlc2Mg aW5jbHVkaW5nIHRoZSBzb3J0aW5nIGluZm8gZXRjLgorICoKKyAqIFdlIHdhbnQgdG8gaGF2 ZSB0aGUgcmFuZ2VzIGluIHJvdWdobHkgdGhpcyBvcmRlcgorICoKKyAqIC0gbm90LXN1bW1h cml6ZWQKKyAqIC0gc3VtbWFyaXplZCwgbm9uLW51bGwgdmFsdWVzCisgKiAtIHN1bW1hcml6 ZWQsIGFsbC1udWxscworICoKKyAqIFdlIGRvIGl0IHRoaXMgd2F5LCBiZWNhdXNlIHRoZSBu b3Qtc3VtbWFyaXplZCByYW5nZXMgbmVlZCB0byBiZQorICogc2Nhbm5lZCBhbHdheXMgKGJv dGggdG8gcHJvZHVjZSBOVUxMIGFuZCBub24tTlVMTCB2YWx1ZXMpLCBhbmQKKyAqIHdlIG5l ZWQgdG8gcmVhZCBhbGwgb2YgdGhlbSBpbnRvIHRoZSB0dXBsZXNvcnQgYmVmb3JlIHByb2R1 Y2luZworICogYW55dGhpbmcuIFNvIHBsYWNpbmcgdGhlbSBhdCB0aGUgYmVnaW5uaW5nIGlz IHJlYXNvbmFibGUuCisgKgorICogVGhlIGFsbC1udWxscyByYW5nZXMgYXJlIHBsYWNlZCBs YXN0LCBiZWNhdXNlIHdoZW4gcHJvY2Vzc2luZworICogTlVMTHMgd2UgbmVlZCB0byBzY2Fu IGV2ZXJ5dGhpbmcgYW55d2F5IChzb21lIG9mIHRoZSByYW5nZXMgbWlnaHQKKyAqIGhhdmUg aGFzX251bGxzPXRydWUpLiBCdXQgZm9yIG5vbi1OVUxMIHZhbHVlcyB3ZSBjYW4gYWJvcnQg b25jZQorICogd2UgaGl0IHRoZSBmaXJzdCBhbGwtbnVsbHMgcmFuZ2UuCisgKgorICogVGhl IHJlZ3VsYXIgcmFuZ2VzIGFyZSBzb3J0ZWQgYnkgYmxrbm9fc3RhcnQsIHRvIG1ha2UgaXQg bWF5YmUKKyAqIGEgYml0IG1vcmUgc2VxdWVudGlhbCAoYnV0IHRoaXMgb25seSBoZWxwcyBp ZiB0aGVyZSBhcmUgcmFuZ2VzCisgKiB3aXRoIHRoZSBzYW1lIG1pbnZhbCkuCisgKi8KK3N0 YXRpYyBCcmluUmFuZ2VTY2FuRGVzYyAqCiticmluX21pbm1heF9zY2FuX2luaXQoQnJpbkRl c2MgKmJkZXNjLCBBdHRyTnVtYmVyIGF0dG51bSwgYm9vbCBhc2MpCit7CisJQnJpblJhbmdl U2NhbkRlc2MgICpzY2FuOworCisJLyogc29ydCBieSAobm90X3N1bW1hcml6ZWQsIG1pbnZh bCwgYmxrbm9fc3RhcnQsIGFsbF9udWxscykgKi8KKwlBdHRyTnVtYmVyCQkJa2V5c1s0XTsK KwlPaWQJCQkJCWNvbGxhdGlvbnNbNF07CisJYm9vbAkJCQludWxsc0ZpcnN0WzRdOworCU9p ZAkJCQkJb3BlcmF0b3JzWzRdOworCU9pZAkJCQkJdHlwaWQ7CisJVHlwZUNhY2hlRW50cnkJ ICAgKnR5cGNhY2hlOworCisJLyogd2UgZXhwZWN0IHRvIGhhdmUgbWluL21heCB2YWx1ZSBm b3IgZWFjaCByYW5nZSwgc2FtZSB0eXBlIGZvciBib3RoICovCisJQXNzZXJ0KGJkZXNjLT5i ZF9pbmZvW2F0dG51bSAtIDFdLT5vaV9uc3RvcmVkID09IDIpOworCUFzc2VydChiZGVzYy0+ YmRfaW5mb1thdHRudW0gLSAxXS0+b2lfdHlwY2FjaGVbMF0tPnR5cGVfaWQgPT0KKwkJICAg YmRlc2MtPmJkX2luZm9bYXR0bnVtIC0gMV0tPm9pX3R5cGNhY2hlWzFdLT50eXBlX2lkKTsK KworCXNjYW4gPSAoQnJpblJhbmdlU2NhbkRlc2MgKikgcGFsbG9jMChzaXplb2YoQnJpblJh bmdlU2NhbkRlc2MpKTsKKworCS8qIGJ1aWxkIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHJhbmdl IGRhdGEgKi8KKwlzY2FuLT50ZGVzYyA9IGJyaW5fbWlubWF4X3JhbmdlX3R1cGRlc2MoYmRl c2MsIGF0dG51bSk7CisKKwkvKiBpbml0aWFsaXplIG9yZGVyaW5nIGluZm8gKi8KKwlrZXlz WzBdID0gNTsJCQkJLyogbm90X3N1bW1hcml6ZWQgKi8KKwlrZXlzWzFdID0gNDsJCQkJLyog YWxsX251bGxzICovCisJa2V5c1syXSA9IChhc2MpID8gNiA6IDc7CS8qIG1pbl92YWx1ZSAo YXNjKSBvciBtYXhfdmFsdWUgKGRlc2MpICovCisJa2V5c1szXSA9IDE7CQkJCS8qIGJsa25v X3N0YXJ0ICovCisKKwljb2xsYXRpb25zWzBdID0gSW52YWxpZE9pZDsJLyogRklYTUUgKi8K Kwljb2xsYXRpb25zWzFdID0gSW52YWxpZE9pZDsJLyogRklYTUUgKi8KKwljb2xsYXRpb25z WzJdID0gSW52YWxpZE9pZDsJLyogRklYTUUgKi8KKwljb2xsYXRpb25zWzNdID0gSW52YWxp ZE9pZDsJLyogRklYTUUgKi8KKworCS8qIHVucmVsYXRlZCB0byB0aGUgb3JkZXJpbmcgZGVz aXJlZCBieSB0aGUgdXNlciAqLworCW51bGxzRmlyc3RbMF0gPSBmYWxzZTsKKwludWxsc0Zp cnN0WzFdID0gZmFsc2U7CisJbnVsbHNGaXJzdFsyXSA9IGZhbHNlOworCW51bGxzRmlyc3Rb M10gPSBmYWxzZTsKKworCS8qIGxvb2t1cCBzb3J0IG9wZXJhdG9yIGZvciB0aGUgYm9vbGVh biB0eXBlICh1c2VkIGZvciBub3Rfc3VtbWFyaXplZCkgKi8KKwl0eXBjYWNoZSA9IGxvb2t1 cF90eXBlX2NhY2hlKEJPT0xPSUQsIFRZUEVDQUNIRV9HVF9PUFIpOworCW9wZXJhdG9yc1sw XSA9IHR5cGNhY2hlLT5ndF9vcHI7CisKKwkvKiBsb29rdXAgc29ydCBvcGVyYXRvciBmb3Ig dGhlIGJvb2xlYW4gdHlwZSAodXNlZCBmb3IgYWxsX251bGxzKSAqLworCXR5cGNhY2hlID0g bG9va3VwX3R5cGVfY2FjaGUoQk9PTE9JRCwgVFlQRUNBQ0hFX0xUX09QUik7CisJb3BlcmF0 b3JzWzFdID0gdHlwY2FjaGUtPmx0X29wcjsKKworCS8qIGxvb2t1cCBzb3J0IG9wZXJhdG9y IGZvciB0aGUgbWluL21heCB0eXBlICovCisJdHlwaWQgPSBiZGVzYy0+YmRfaW5mb1thdHRu dW0gLSAxXS0+b2lfdHlwY2FjaGVbMF0tPnR5cGVfaWQ7CisJdHlwY2FjaGUgPSBsb29rdXBf dHlwZV9jYWNoZSh0eXBpZCwgVFlQRUNBQ0hFX0xUX09QUiB8IFRZUEVDQUNIRV9HVF9PUFIp OworCW9wZXJhdG9yc1syXSA9IChhc2MpID8gdHlwY2FjaGUtPmx0X29wciA6IHR5cGNhY2hl LT5ndF9vcHI7CisKKwkvKiBsb29rdXAgc29ydCBvcGVyYXRvciBmb3IgdGhlIGJpZ2ludCB0 eXBlICh1c2VkIGZvciBibGtub19zdGFydCkgKi8KKwl0eXBjYWNoZSA9IGxvb2t1cF90eXBl X2NhY2hlKElOVDhPSUQsIFRZUEVDQUNIRV9MVF9PUFIpOworCW9wZXJhdG9yc1szXSA9IHR5 cGNhY2hlLT5sdF9vcHI7CisKKwlzY2FuLT5yYW5nZXMgPSB0dXBsZXNvcnRfYmVnaW5faGVh cChzY2FuLT50ZGVzYywKKwkJCQkJCQkJCQk0LCAvKiBua2V5cyAqLworCQkJCQkJCQkJCWtl eXMsCisJCQkJCQkJCQkJb3BlcmF0b3JzLAorCQkJCQkJCQkJCWNvbGxhdGlvbnMsCisJCQkJ CQkJCQkJbnVsbHNGaXJzdCwKKwkJCQkJCQkJCQl3b3JrX21lbSwKKwkJCQkJCQkJCQlOVUxM LAorCQkJCQkJCQkJCVRVUExFU09SVF9SQU5ET01BQ0NFU1MpOworCisJc2Nhbi0+c2xvdCA9 IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChzY2FuLT50ZGVzYywKKwkJCQkJCQkJCQkgICZU VFNPcHNNaW5pbWFsVHVwbGUpOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8qCisgKiBicmlu X21pbm1heF9zY2FuX2FkZF90dXBsZQorICoJCUZvcm0gYW5kIHN0b3JlIGEgdHVwbGUgcmVw cmVzZW50aW5nIHRoZSBCUklOIHJhbmdlIHRvIHRoZSB0dXBsZXN0b3JlLgorICovCitzdGF0 aWMgdm9pZAorYnJpbl9taW5tYXhfc2Nhbl9hZGRfdHVwbGUoQnJpblJhbmdlU2NhbkRlc2Mg KnNjYW4sCisJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrX3N0YXJ0LCBCbG9ja051bWJlciBi bG9ja19lbmQsCisJCQkJCQkgIGJvb2wgaGFzX251bGxzLCBib29sIGFsbF9udWxscywgYm9v bCBub3Rfc3VtbWFyaXplZCwKKwkJCQkJCSAgRGF0dW0gbWluX3ZhbHVlLCBEYXR1bSBtYXhf dmFsdWUpCit7CisJTWluaW1hbFR1cGxlIHR1cDsKKworCXR1cCA9IGJyaW5fbWlubWF4X3Jh bmdlX3R1cGxlKHNjYW4tPnRkZXNjLCBibG9ja19zdGFydCwgYmxvY2tfZW5kLAorCQkJCQkJ CQkgIGhhc19udWxscywgYWxsX251bGxzLCBub3Rfc3VtbWFyaXplZCwKKwkJCQkJCQkJICBt aW5fdmFsdWUsIG1heF92YWx1ZSk7CisKKwlFeGVjU3RvcmVNaW5pbWFsVHVwbGUodHVwLCBz Y2FuLT5zbG90LCBmYWxzZSk7CisKKwl0dXBsZXNvcnRfcHV0dHVwbGVzbG90KHNjYW4tPnJh bmdlcywgc2Nhbi0+c2xvdCk7Cit9CisKKyNpZmRlZiBCUklOU09SVF9ERUJVRworLyoKKyAq IGJyaW5fbWlubWF4X3NjYW5fbmV4dAorICoJCVJldHVybiB0aGUgbmV4dCBCUklOIHJhbmdl IGluZm9ybWF0aW9uIGZyb20gdGhlIHR1cGxlc3RvcmUuCisgKgorICogUmV0dXJucyBOVUxM IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgcmFuZ2VzLgorICovCitzdGF0aWMgQnJpblJhbmdl ICoKK2JyaW5fbWlubWF4X3NjYW5fbmV4dChCcmluUmFuZ2VTY2FuRGVzYyAqc2NhbikKK3sK KwlpZiAodHVwbGVzb3J0X2dldHR1cGxlc2xvdChzY2FuLT5yYW5nZXMsIHRydWUsIGZhbHNl LCBzY2FuLT5zbG90LCBOVUxMKSkKKwl7CisJCWJvb2wJCWlzbnVsbDsKKwkJQnJpblJhbmdl ICAqcmFuZ2UgPSAoQnJpblJhbmdlICopIHBhbGxvYyhzaXplb2YoQnJpblJhbmdlKSk7CisK KwkJcmFuZ2UtPmJsa25vX3N0YXJ0ID0gc2xvdF9nZXRhdHRyKHNjYW4tPnNsb3QsIDEsICZp c251bGwpOworCQlyYW5nZS0+Ymxrbm9fZW5kID0gc2xvdF9nZXRhdHRyKHNjYW4tPnNsb3Qs IDIsICZpc251bGwpOworCQlyYW5nZS0+aGFzX251bGxzID0gc2xvdF9nZXRhdHRyKHNjYW4t PnNsb3QsIDMsICZpc251bGwpOworCQlyYW5nZS0+YWxsX251bGxzID0gc2xvdF9nZXRhdHRy KHNjYW4tPnNsb3QsIDQsICZpc251bGwpOworCQlyYW5nZS0+bm90X3N1bW1hcml6ZWQgPSBz bG90X2dldGF0dHIoc2Nhbi0+c2xvdCwgNSwgJmlzbnVsbCk7CisJCXJhbmdlLT5taW5fdmFs dWUgPSBzbG90X2dldGF0dHIoc2Nhbi0+c2xvdCwgNiwgJmlzbnVsbCk7CisJCXJhbmdlLT5t YXhfdmFsdWUgPSBzbG90X2dldGF0dHIoc2Nhbi0+c2xvdCwgNywgJmlzbnVsbCk7CisKKwkJ cmV0dXJuIHJhbmdlOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogYnJpbl9t aW5tYXhfc2Nhbl9kdW1wCisgKgkJUHJpbnQgaW5mbyBhYm91dCBhbGwgcGFnZSByYW5nZXMg c3RvcmVkIGluIHRoZSB0dXBsZXN0b3JlLgorICovCitzdGF0aWMgdm9pZAorYnJpbl9taW5t YXhfc2Nhbl9kdW1wKEJyaW5SYW5nZVNjYW5EZXNjICpzY2FuKQoreworCUJyaW5SYW5nZSAq cmFuZ2U7CisKKwllbG9nKFdBUk5JTkcsICI9PT09PSBkdW1waW5nID09PT09Iik7CisJd2hp bGUgKChyYW5nZSA9IGJyaW5fbWlubWF4X3NjYW5fbmV4dChzY2FuKSkgIT0gTlVMTCkKKwl7 CisJCWVsb2coV0FSTklORywgIlsldSAldV0gaGFzX251bGxzICVkIGFsbF9udWxscyAlZCBu b3Rfc3VtbWFyaXplZCAlZCB2YWx1ZXMgWyVmICVmXSIsCisJCQkgcmFuZ2UtPmJsa25vX3N0 YXJ0LCByYW5nZS0+Ymxrbm9fZW5kLAorCQkJIHJhbmdlLT5oYXNfbnVsbHMsIHJhbmdlLT5h bGxfbnVsbHMsIHJhbmdlLT5ub3Rfc3VtbWFyaXplZCwKKwkJCSBEYXR1bUdldEZsb2F0OChy YW5nZS0+bWluX3ZhbHVlKSwgRGF0dW1HZXRGbG9hdDgocmFuZ2UtPm1heF92YWx1ZSkpOwor CisJCXBmcmVlKHJhbmdlKTsKKwl9CisKKwkvKiByZXNldCB0aGUgdHVwbGVzdG9yZSwgc28g dGhhdCB3ZSBjYW4gc3RhcnQgc2Nhbm5pbmcgYWdhaW4gKi8KKwl0dXBsZXNvcnRfcmVzY2Fu KHNjYW4tPnJhbmdlcyk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2JyaW5fbWlubWF4 X3NjYW5fZmluYWxpemUoQnJpblJhbmdlU2NhbkRlc2MgKnNjYW4pCit7CisJdHVwbGVzb3J0 X3BlcmZvcm1zb3J0KHNjYW4tPnJhbmdlcyk7Cit9CisKKy8qCisgKiBicmluX21pbm1heF9y YW5nZXMKKyAqCQlMb2FkIHRoZSBCUklOIHJhbmdlcyBhbmQgc29ydCB0aGVtLgorICovCitE YXR1bQorYnJpbl9taW5tYXhfcmFuZ2VzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSW5kZXhT Y2FuRGVzYwlzY2FuID0gKEluZGV4U2NhbkRlc2MpIFBHX0dFVEFSR19QT0lOVEVSKDApOwor CUF0dHJOdW1iZXIJCWF0dG51bSA9IFBHX0dFVEFSR19JTlQxNigxKTsKKwlib29sCQkJYXNj ID0gUEdfR0VUQVJHX0JPT0woMik7CisJQnJpbk9wYXF1ZSAqb3BhcXVlOworCVJlbGF0aW9u CWluZGV4UmVsOworCVJlbGF0aW9uCWhlYXBSZWw7CisJQmxvY2tOdW1iZXIgbmJsb2NrczsK KwlCbG9ja051bWJlcgloZWFwQmxrOworCU9pZAkJCWhlYXBPaWQ7CisJQnJpbk1lbVR1cGxl ICpkdHVwOworCUJyaW5UdXBsZSAgKmJ0dXAgPSBOVUxMOworCVNpemUJCWJ0dXBzeiA9IDA7 CisJQnVmZmVyCQlidWYgPSBJbnZhbGlkQnVmZmVyOworCUJsb2NrTnVtYmVyCXBhZ2VzUGVy UmFuZ2U7CisJQnJpbkRlc2MJICAgKmJkZXNjOworCUJyaW5SYW5nZVNjYW5EZXNjICpicnNj YW47CisKKwkvKgorCSAqIERldGVybWluZSBob3cgbWFueSBCUklOIHJhbmdlcyBjb3VsZCB0 aGVyZSBiZSwgYWxsb2NhdGUgc3BhY2UgYW5kIHJlYWQKKwkgKiBhbGwgdGhlIG1pbi9tYXgg dmFsdWVzLgorCSAqLworCW9wYXF1ZSA9IChCcmluT3BhcXVlICopIHNjYW4tPm9wYXF1ZTsK KwliZGVzYyA9IG9wYXF1ZS0+Ym9fYmRlc2M7CisJcGFnZXNQZXJSYW5nZSA9IG9wYXF1ZS0+ Ym9fcGFnZXNQZXJSYW5nZTsKKworCWluZGV4UmVsID0gYmRlc2MtPmJkX2luZGV4OworCisJ LyogbWFrZSBzdXJlIHRoZSBwcm92aWRlZCBhdHRudW0gaXMgdmFsaWQgKi8KKwlBc3NlcnQo KGF0dG51bSA+IDApICYmIChhdHRudW0gPD0gYmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzKSk7 CisKKwkvKgorCSAqIFdlIG5lZWQgdG8ga25vdyB0aGUgc2l6ZSBvZiB0aGUgdGFibGUgc28g dGhhdCB3ZSBrbm93IGhvdyBsb25nIHRvIGl0ZXJhdGUKKwkgKiBvbiB0aGUgcmV2bWFwIChh bmQgdG8gcHJlLWFsbG9jYXRlIHRoZSBhcnJheXMpLgorCSAqLworCWhlYXBPaWQgPSBJbmRl eEdldFJlbGF0aW9uKFJlbGF0aW9uR2V0UmVsaWQoaW5kZXhSZWwpLCBmYWxzZSk7CisJaGVh cFJlbCA9IHRhYmxlX29wZW4oaGVhcE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwluYmxvY2tz ID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhoZWFwUmVsKTsKKwl0YWJsZV9jbG9zZSho ZWFwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogYWxsb2NhdGUgYW4gaW5pdGlhbCBp bi1tZW1vcnkgdHVwbGUsIG91dCBvZiB0aGUgcGVyLXJhbmdlIG1lbWN4dCAqLworCWR0dXAg PSBicmluX25ld19tZW10dXBsZShiZGVzYyk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzY2Fu IGRlc2NyaWJpbmcgc2NhbiBvZiByYW5nZXMgc29ydGVkIGJ5IG1pbnZhbCAqLworCWJyc2Nh biA9IGJyaW5fbWlubWF4X3NjYW5faW5pdChiZGVzYywgYXR0bnVtLCBhc2MpOworCisJLyoK KwkgKiBOb3cgc2NhbiB0aGUgcmV2bWFwLiAgV2Ugc3RhcnQgYnkgcXVlcnlpbmcgZm9yIGhl YXAgcGFnZSAwLAorCSAqIGluY3JlbWVudGluZyBieSB0aGUgbnVtYmVyIG9mIHBhZ2VzIHBl ciByYW5nZTsgdGhpcyBnaXZlcyB1cyBhIGZ1bGwKKwkgKiB2aWV3IG9mIHRoZSB0YWJsZS4K KwkgKi8KKwlmb3IgKGhlYXBCbGsgPSAwOyBoZWFwQmxrIDwgbmJsb2NrczsgaGVhcEJsayAr PSBwYWdlc1BlclJhbmdlKQorCXsKKwkJYm9vbAkJZ290dHVwbGUgPSBmYWxzZTsKKwkJQnJp blR1cGxlICAqdHVwOworCQlPZmZzZXROdW1iZXIgb2ZmOworCQlTaXplCQlzaXplOworCisJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJdHVwID0gYnJpbkdldFR1cGxlRm9ySGVh cEJsb2NrKG9wYXF1ZS0+Ym9fcm1BY2Nlc3MsIGhlYXBCbGssICZidWYsCisJCQkJCQkJCQkg ICAmb2ZmLCAmc2l6ZSwgQlVGRkVSX0xPQ0tfU0hBUkUsCisJCQkJCQkJCQkgICBzY2FuLT54 c19zbmFwc2hvdCk7CisJCWlmICh0dXApCisJCXsKKwkJCWdvdHR1cGxlID0gdHJ1ZTsKKwkJ CWJ0dXAgPSBicmluX2NvcHlfdHVwbGUodHVwLCBzaXplLCBidHVwLCAmYnR1cHN6KTsKKwkJ CUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQl9CisKKwkJLyoKKwkJ ICogUmFuZ2VzIHdpdGggbm8gaW5kZXhlZCB0dXBsZSBtYXkgY29udGFpbiBhbnl0aGluZy4K KwkJICovCisJCWlmICghZ290dHVwbGUpCisJCXsKKwkJCWJyaW5fbWlubWF4X3NjYW5fYWRk X3R1cGxlKGJyc2NhbiwKKwkJCQkJCQkJCSAgIGhlYXBCbGssIGhlYXBCbGsgKyAocGFnZXNQ ZXJSYW5nZSAtIDEpLAorCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCAwLCAwKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCWR0dXAgPSBicmluX2RlZm9ybV90dXBsZShiZGVzYywg YnR1cCwgZHR1cCk7CisJCQlpZiAoZHR1cC0+YnRfcGxhY2Vob2xkZXIpCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBQbGFjZWhvbGRlciB0dXBsZXMgYXJlIHRyZWF0ZWQgYXMgaWYgbm90IHN1 bW1hcml6ZWQuCisJCQkJICoKKwkJCQkgKiBYWFggSXMgdGhpcyBjb3JyZWN0PworCQkJCSAq LworCQkJCWJyaW5fbWlubWF4X3NjYW5fYWRkX3R1cGxlKGJyc2NhbiwKKwkJCQkJCQkJCQkg ICBoZWFwQmxrLCBoZWFwQmxrICsgKHBhZ2VzUGVyUmFuZ2UgLSAxKSwKKwkJCQkJCQkJCQkg ICBmYWxzZSwgZmFsc2UsIHRydWUsIDAsIDApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CUJyaW5WYWx1ZXMgKmJ2YWw7CisKKwkJCQlidmFsID0gJmR0dXAtPmJ0X2NvbHVtbnNbYXR0 bnVtIC0gMV07CisKKwkJCQlicmluX21pbm1heF9zY2FuX2FkZF90dXBsZShicnNjYW4sCisJ CQkJCQkJCQkJICAgaGVhcEJsaywgaGVhcEJsayArIChwYWdlc1BlclJhbmdlIC0gMSksCisJ CQkJCQkJCQkJICAgYnZhbC0+YnZfaGFzbnVsbHMsIGJ2YWwtPmJ2X2FsbG51bGxzLCBmYWxz ZSwKKwkJCQkJCQkJCQkgICBidmFsLT5idl92YWx1ZXNbMF0sIGJ2YWwtPmJ2X3ZhbHVlc1sx XSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYnVmICE9IEludmFsaWRCdWZmZXIpCisJCVJl bGVhc2VCdWZmZXIoYnVmKTsKKworCS8qIGRvIHRoZSBzb3J0IGFuZCBhbnkgbmVjZXNzYXJ5 IHBvc3QtcHJvY2Vzc2luZyAqLworCWJyaW5fbWlubWF4X3NjYW5fZmluYWxpemUoYnJzY2Fu KTsKKworI2lmZGVmIEJSSU5TT1JUX0RFQlVHCisJYnJpbl9taW5tYXhfc2Nhbl9kdW1wKGJy c2Nhbik7CisjZW5kaWYKKworCVBHX1JFVFVSTl9QT0lOVEVSKGJyc2Nhbik7Cit9CisKIC8q CiAgKiBDYWNoZSBhbmQgcmV0dXJuIHRoZSBwcm9jZWR1cmUgZm9yIHRoZSBnaXZlbiBzdHJh dGVneS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggZjg2OTgzYzY2MDEuLmUx NWIyOTI0NmIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC04NSw2ICs4NSw4IEBA IHN0YXRpYyB2b2lkIHNob3dfc29ydF9rZXlzKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBMaXN0 ICphbmNlc3RvcnMsCiAJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfaW5jcmVtZW50YWxfc29ydF9rZXlzKEluY3JlbWVudGFsU29ydFN0YXRlICppbmNy c29ydHN0YXRlLAogCQkJCQkJCQkJICAgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUg KmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfYnJpbnNvcnRfa2V5cyhCcmluU29ydFN0YXRlICpz b3J0c3RhdGUsIExpc3QgKmFuY2VzdG9ycywKKwkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVz KTsKIHN0YXRpYyB2b2lkIHNob3dfbWVyZ2VfYXBwZW5kX2tleXMoTWVyZ2VBcHBlbmRTdGF0 ZSAqbXN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd19hZ2dfa2V5cyhBZ2dTdGF0ZSAqYXN0YXRlLCBMaXN0 ICphbmNlc3RvcnMsCkBAIC0xMTAwLDYgKzExMDIsNyBAQCBFeHBsYWluUHJlU2Nhbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIEJpdG1hcHNldCAqKnJlbHNfdXNlZCkKIAkJY2FzZSBU X0luZGV4U2NhbjoKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCWNhc2UgVF9CaXRtYXBI ZWFwU2NhbjoKKwkJY2FzZSBUX0JyaW5Tb3J0OgogCQljYXNlIFRfVGlkU2NhbjoKIAkJY2Fz ZSBUX1RpZFJhbmdlU2NhbjoKIAkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKQEAgLTEyNjIsNiAr MTI2NSw5IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNl c3RvcnMsCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJcG5hbWUgPSBzbmFtZSA9ICJJ bmRleCBPbmx5IFNjYW4iOwogCQkJYnJlYWs7CisJCWNhc2UgVF9CcmluU29ydDoKKwkJCXBu YW1lID0gc25hbWUgPSAiQlJJTiBTb3J0IjsKKwkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFw SW5kZXhTY2FuOgogCQkJcG5hbWUgPSBzbmFtZSA9ICJCaXRtYXAgSW5kZXggU2NhbiI7CiAJ CQlicmVhazsKQEAgLTE1MDgsNiArMTUxNCwxNiBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCUV4cGxhaW5TY2FuVGFyZ2V0KChT Y2FuICopIGluZGV4b25seXNjYW4sIGVzKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRf QnJpblNvcnQ6CisJCQl7CisJCQkJQnJpblNvcnQgICpicmluc29ydCA9IChCcmluU29ydCAq KSBwbGFuOworCisJCQkJRXhwbGFpbkluZGV4U2NhbkRldGFpbHMoYnJpbnNvcnQtPmluZGV4 aWQsCisJCQkJCQkJCQkJYnJpbnNvcnQtPmluZGV4b3JkZXJkaXIsCisJCQkJCQkJCQkJZXMp OworCQkJCUV4cGxhaW5TY2FuVGFyZ2V0KChTY2FuICopIGJyaW5zb3J0LCBlcyk7CisJCQl9 CisJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJCXsKIAkJCQlCaXRt YXBJbmRleFNjYW4gKmJpdG1hcGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxh bjsKQEAgLTE3OTAsNiArMTgwNiwxOCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJIZWFw IEZldGNoZXMiLCBOVUxMLAogCQkJCQkJCQkJIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bnR1 cGxlczIsIDAsIGVzKTsKIAkJCWJyZWFrOworCQljYXNlIFRfQnJpblNvcnQ6CisJCQlzaG93 X3NjYW5fcXVhbCgoKEJyaW5Tb3J0ICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAorCQkJCQkJ ICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOworCQkJaWYgKCgo QnJpblNvcnQgKikgcGxhbiktPmluZGV4cXVhbG9yaWcpCisJCQkJc2hvd19pbnN0cnVtZW50 YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBJbmRleCBSZWNoZWNrIiwgMiwKKwkJCQkJ CQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfc2Nhbl9xdWFsKHBsYW4tPnF1YWws ICJGaWx0ZXIiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOworCQkJc2hvd19icmluc29y dF9rZXlzKGNhc3ROb2RlKEJyaW5Tb3J0U3RhdGUsIHBsYW5zdGF0ZSksIGFuY2VzdG9ycywg ZXMpOworCQkJaWYgKHBsYW4tPnF1YWwpCisJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291 bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAorCQkJCQkJCQkJCSAgIHBsYW5zdGF0 ZSwgZXMpOworCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46CiAJCQlzaG93 X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsb3JpZywK IAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKQEAg LTIzODksNiArMjQxNywyMSBAQCBzaG93X2luY3JlbWVudGFsX3NvcnRfa2V5cyhJbmNyZW1l bnRhbFNvcnRTdGF0ZSAqaW5jcnNvcnRzdGF0ZSwKIAkJCQkJCSBhbmNlc3RvcnMsIGVzKTsK IH0KIAorLyoKKyAqIFNob3cgdGhlIHNvcnQga2V5cyBmb3IgYSBCUklOIFNvcnQgbm9kZS4K KyAqLworc3RhdGljIHZvaWQKK3Nob3dfYnJpbnNvcnRfa2V5cyhCcmluU29ydFN0YXRlICpz b3J0c3RhdGUsIExpc3QgKmFuY2VzdG9ycywgRXhwbGFpblN0YXRlICplcykKK3sKKwlCcmlu U29ydAkgICAqcGxhbiA9IChCcmluU29ydCAqKSBzb3J0c3RhdGUtPnNzLnBzLnBsYW47CisK KwlzaG93X3NvcnRfZ3JvdXBfa2V5cygoUGxhblN0YXRlICopIHNvcnRzdGF0ZSwgIlNvcnQg S2V5IiwKKwkJCQkJCSBwbGFuLT5udW1Db2xzLCAwLCBwbGFuLT5zb3J0Q29sSWR4LAorCQkJ CQkJIHBsYW4tPnNvcnRPcGVyYXRvcnMsIHBsYW4tPmNvbGxhdGlvbnMsCisJCQkJCQkgcGxh bi0+bnVsbHNGaXJzdCwKKwkJCQkJCSBhbmNlc3RvcnMsIGVzKTsKK30KKwogLyoKICAqIExp a2V3aXNlLCBmb3IgYSBNZXJnZUFwcGVuZCBub2RlLgogICovCkBAIC0zODEyLDYgKzM4NTUs NyBAQCBFeHBsYWluVGFyZ2V0UmVsKFBsYW4gKnBsYW4sIEluZGV4IHJ0aSwgRXhwbGFpblN0 YXRlICplcykKIAkJY2FzZSBUX0ZvcmVpZ25TY2FuOgogCQljYXNlIFRfQ3VzdG9tU2NhbjoK IAkJY2FzZSBUX01vZGlmeVRhYmxlOgorCQljYXNlIFRfQnJpblNvcnQ6CiAJCQkvKiBBc3Nl cnQgaXQncyBvbiBhIHJlYWwgcmVsYXRpb24gKi8KIAkJCUFzc2VydChydGUtPnJ0ZWtpbmQg PT0gUlRFX1JFTEFUSU9OKTsKIAkJCW9iamVjdG5hbWUgPSBnZXRfcmVsX25hbWUocnRlLT5y ZWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi5iY2FhMmNl OGUyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKQEAgLTM4LDYgKzM4LDcgQEAgT0JKUyA9 IFwKIAlub2RlQml0bWFwSGVhcHNjYW4ubyBcCiAJbm9kZUJpdG1hcEluZGV4c2Nhbi5vIFwK IAlub2RlQml0bWFwT3IubyBcCisJbm9kZUJyaW5Tb3J0Lm8gXAogCW5vZGVDdGVzY2FuLm8g XAogCW5vZGVDdXN0b20ubyBcCiAJbm9kZUZvcmVpZ25zY2FuLm8gXApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUHJvY25vZGUuYwppbmRleCAzNjQwNmMzYWY1Ny4uNGE2ZGMzZjI2M2MgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC03OSw2ICs3OSw3IEBACiAj aW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVC aXRtYXBPci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVCcmluU29ydC5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL25vZGVDdGVzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUN1 c3RvbS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVGb3JlaWduc2Nhbi5oIgpAQCAtMjI2 LDYgKzIyNywxMSBAQCBFeGVjSW5pdE5vZGUoUGxhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJCQkJCQkJCQkJCQkJCSBlc3RhdGUsIGVmbGFncyk7CiAJCQlicmVh azsKIAorCQljYXNlIFRfQnJpblNvcnQ6CisJCQlyZXN1bHQgPSAoUGxhblN0YXRlICopIEV4 ZWNJbml0QnJpblNvcnQoKEJyaW5Tb3J0ICopIG5vZGUsCisJCQkJCQkJCQkJCQkJZXN0YXRl LCBlZmxhZ3MpOworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJ CXJlc3VsdCA9IChQbGFuU3RhdGUgKikgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4oKEJpdG1h cEluZGV4U2NhbiAqKSBub2RlLAogCQkJCQkJCQkJCQkJCQkgICBlc3RhdGUsIGVmbGFncyk7 CkBAIC02MzksNiArNjQ1LDEwIEBAIEV4ZWNFbmROb2RlKFBsYW5TdGF0ZSAqbm9kZSkKIAkJ CUV4ZWNFbmRJbmRleE9ubHlTY2FuKChJbmRleE9ubHlTY2FuU3RhdGUgKikgbm9kZSk7CiAJ CQlicmVhazsKIAorCQljYXNlIFRfQnJpblNvcnRTdGF0ZToKKwkJCUV4ZWNFbmRCcmluU29y dCgoQnJpblNvcnRTdGF0ZSAqKSBub2RlKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgVF9CaXRt YXBJbmRleFNjYW5TdGF0ZToKIAkJCUV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oKEJpdG1hcElu ZGV4U2NhblN0YXRlICopIG5vZGUpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQnJpblNvcnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVCcmluU29ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j YTcyYzFlZDIyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVCcmluU29ydC5jCkBAIC0wLDAgKzEsMTU1MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogbm9kZUJyaW5Tb3J0LmMKKyAqCSAgUm91dGluZXMgdG8gc3VwcG9ydCBzb3J0 ZWQgc2NhbiBvZiByZWxhdGlvbnMgdXNpbmcgYSBCUklOIGluZGV4CisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBUaGUgb3ZlcmFsbCBh bGdvcml0aG0gaXMgcm91Z2hseSB0aGlzOgorICoKKyAqIDApIGluaXRpYWxpemUgYSB0dXBs ZXN0b3JlIGFuZCBhIHR1cGxlc29ydAorICoKKyAqIDEpIGZldGNoIGxpc3Qgb2YgcGFnZSBy YW5nZXMgZnJvbSB0aGUgQlJJTiBpbmRleCwgc29ydGVkIGJ5IG1pbnZhbAorICogICAgKHdp dGggdGhlIG5vdC1zdW1tYXJpemVkIHJhbmdlcyBmaXJzdCwgYW5kIGFsbC1udWxsIHJhbmdl cyBsYXN0KQorICoKKyAqIDIpIGZvciBOVUxMUyBGSVJTVCBvcmRlcmluZywgd2FsayBhbGwg cmFuZ2VzIHRoYXQgbWF5IGNvbnRhaW4gTlVMTAorICogICAgdmFsdWVzIGFuZCBvdXRwdXQg dGhlbSAoYW5kIHJldHVybiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0KQorICoKKyAq IDMpIHdoaWxlIHRoZXJlIGFyZSByYW5nZXMgaW4gdGhlIGxpc3QsIGRvIHRoaXM6CisgKgor ICogICBhKSBnZXQgbmV4dCAoZGlzdGluY3QpIG1pbnZhbCBmcm9tIHRoZSBsaXN0LCBjYWxs IGl0IHdhdGVybWFyaworICoKKyAqICAgYikgaWYgdGhlcmUgYXJlIGFueSB0dXBsZXMgaW4g dGhlIHR1cGxlc3RvcmUsIG1vdmUgdGhlbSB0byB0dXBsZXNvcnQKKyAqCisgKiAgIGMpIHBy b2Nlc3MgYWxsIHJhbmdlcyB3aXRoIChtaW52YWwgPCB3YXRlcm1hcmspIC0gcmVhZCB0dXBs ZXMgYW5kIGZlZWQKKyAqICAgICAgdGhlbSBlaXRoZXIgaW50byB0dXBsZXN0b3JlICh3aGVu IHZhbHVlIDwgd2F0ZXJtYXJrKSBvciB0dXBsZXN0b3JlCisgKgorICogICBkKSBzb3J0IHRo ZSB0dXBsZXN0b3JlLCBvdXRwdXQgYWxsIHRoZSB0dXBsZXMKKyAqCisgKiA0KSBpZiBzb21l IHR1cGxlcyByZW1haW4gaW4gdGhlIHR1cGxlc3RvcmUsIHNvcnQgYW5kIG91dHB1dCB0aGVt CisgKgorICogNSkgZm9yIE5VTExTIExBU1Qgb3JkZXJpbmcsIHdhbGsgYWxsIHJhbmdlcyB0 aGF0IG1heSBjb250YWluIE5VTEwKKyAqICAgIHZhbHVlcyBhbmQgb3V0cHV0IHRoZW0gKGFu ZCByZXR1cm4gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCkKKyAqCisgKgorICogRm9y IERFU0Mgb3JkZXJpbmdzIHRoZSBwcm9jZXNzIGlzIGFsbW9zdCB0aGUgc2FtZSwgZXhjZXB0 IHRoYXQgd2UgbG9vaworICogYXQgbWF4dmFsIGFuZCB1c2UgJz4nIG9wZXJhdG9yIChidXQg dGhhdCdzIHRyYW5zcGFyZW50KS4KKyAqCisgKiBUaGVyZSdzIGEgY291cGxlIHBvc3NpYmxl IHRoaW5ncyB0aGF0IG1pZ2h0IGJlIGRvbmUgaW4gZGlmZmVyZW50IHdheXM6CisgKgorICog MSkgTm90IHVzaW5nIHR1cGxlc3RvcmUsIGFuZCBmZWVkaW5nIHR1cGxlcyBvbmx5IHRvIGEg dHVwbGVzb3J0LiBUaGVuCisgKiB3aGlsZSBwcm9kdWNpbmcgdGhlIHR1cGxlcywgd2UnZCBv bmx5IG91dHB1dCB0dXBsZXMgdXAgdG8gdGhlIGN1cnJlbnQKKyAqIHdhdGVybWFyaywgYW5k IHRoZW4gd2UnZCBrZWVwIHRoZSByZW1haW5pbmcgdHVwbGVzIGZvciB0aGUgbmV4dCByb3Vu ZC4KKyAqIEVpdGhlciB3ZSdkIG5lZWQgdG8gdHJhbnNmZXIgdGhlbSBpbnRvIGEgc2Vjb25k IHR1cGxlc29ydCwgb3IgYWxsb3cKKyAqICJyZW9wZW5pbmciIHRoZSB0dXBsZXNvcnQgYW5k IGFkZGluZyBtb3JlIHR1cGxlcy4gQW5kIHRoZW4gb25seSB0aGUKKyAqIHBhcnQgc2luY2Ug dGhlIHdhdGVybWFyayB3b3VsZCBnZXQgc29ydGVkIChwb3NzaWJseSB1c2luZyBhIG1lcmdl LXNvcnQKKyAqIHdpdGggdGhlIGFscmVhZHkgc29ydGVkIHBhcnQpLgorICoKKyAqCisgKiAy KSBUaGUgb3RoZXIgcXVlc3Rpb24gaXMgd2hhdCB0byBkbyB3aXRoIE5VTEwgdmFsdWVzIC0g YXQgdGhlIG1vbWVudCB3ZQorICoganVzdCByZWFkIHRoZSByYW5nZXMsIG91dHB1dCB0aGUg TlVMTCB0dXBsZXMgYW5kIHRoYXQncyBpdCAtIHdlJ3JlIG5vdAorICogcmV0YWluaW5nIGFu eSBub24tTlVMTCB0dXBsZXMsIHNvIHRoYXQgd2UnbGwgcmVhZCB0aGUgcmFuZ2VzIGFnYWlu IGluCisgKiB0aGUgc2Vjb25kIHJhbmdlLiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGVpdGhl ciB0aGVyZSBhcmUgdmVyeSBmZXcKKyAqIHN1Y2ggcmFuZ2VzLCBzbyBpdCdzIHdvbid0IGNv c3QgbXVjaCB0byBqdXN0IHJlLXJlYWQgdGhlbS4gT3IgbWF5YmUKKyAqIHRoZXJlIGFyZSB2 ZXJ5IG1hbnkgc3VjaCByYW5nZXMsIGFuZCB3ZSdkIGRvIGEgbG90IG9mIHNwaWxsaW5nIHRv IHRoZQorICogdHVwbGVzdG9yZSwgYW5kIGl0J3Mgbm90IG11Y2ggbW9yZSBleHBlbnNpdmUg dG8ganVzdCByZS1yZWFkIHRoZSBzb3VyY2UKKyAqIGRhdGEuIFRoZXJlIGFyZSBjb3VudGVy LWV4YW1wbGVzLCB0aG91Z2ggLSBlLmcuLCB0aGVyZSBtaWdodCBiZSBtYW55CisgKiBoYXNf bnVsbHMgcmFuZ2VzLCBidXQgd2l0aCB2ZXJ5IGZldyBub24tTlVMTCB0dXBsZXMuIEluIHRo aXMgY2FzZSBpdAorICogbWlnaHQgYmUgYmV0dGVyIHRvIGFjdHVhbGx5IHNwaWxsIHRoZSB0 dXBsZXMgaW5zdGVhZCBvZiByZS1yZWFkaW5nIGFsbAorICogdGhlIHJhbmdlcy4gTWF5YmUg dGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGRvIGF0IHJ1bi10aW1lLCBvciBtYXliZSB3ZQor ICogY291bGQgZXN0aW1hdGUgdGhpcyBhdCBwbGFubmluZyB0aW1lLiBXZSBkbyBrbm93IHRo ZSBudWxsX2ZyYWMgZm9yIHRoZQorICogY29sdW1uLCBzbyB3ZSBrbm93IHRoZSBudW1iZXIg b2YgTlVMTCByb3dzLiBBbmQgd2UgYWxzbyBrbm93IHRoZSBudW1iZXIKKyAqIG9mIGFsbF9u dWxscyBhbmQgaGFzX251bGxzIHJhbmdlcy4gV2UgY2FuIGVzdGltYXRlIHRoZSBudW1iZXIg b2Ygcm93cworICogcGVyIHJhbmdlLCBhbmQgd2UgY2FuIGVzdGltYXRlIGhvdyBtYW55IG5v bi1OVUxMIHJvd3MgYXJlIGluIHRoZQorICogaGFzX251bGxzIHJhbmdlcyAod2UgZG9uJ3Qg bmVlZCB0byByZS1yZWFkIGFsbC1udWxscyByYW5nZXMpLiBUaGVyZSdzCisgKiBhbHNvIHRo ZSBmaWx0ZXIsIHdoaWNoIG1heSByZWR1Y2UgdGhlIGFtb3VudCBvZiByb3dzIHRvIHN0b3Jl LgorICoKKyAqIFNvIHdlJ2QgbmVlZCB0byBjb21wYXJlIHR3byBtZXRyaWNzIGNhbGN1bGF0 ZWQgcm91Z2hseSBsaWtlIHRoaXM6CisgKgorICogICBjb3N0KHJlLXJlYWRpbmcgaGFzLW51 bGxzIHJhbmdlcykKKyAqICAgICAgPSBjb3N0KHJhbmRvbV9wYWdlX2Nvc3QgKiBuX2hhc19u dWxscyArIHNlcV9wYWdlX2Nvc3QgKiBwYWdlc19wZXJfcmFuZ2UpCisgKgorICogICBjb3N0 KHNwaWxsaW5nIG5vbi1OVUxMIHJvd3MgZnJvbSBoYXMtbnVsbHMgcmFuZ2VzKQorICogICAg ICA9IGNvc3QobnVtcm93cyAqIHdpZHRoIC8gQkxDS1NaICogc2VxX3BhZ2VfY29zdCAqIDIp CisgKgorICogd2hlcmUgbnVtcm93cyBpcyB0aGUgbnVtYmVyIG9mIG5vbi1OVUxMIHJvd3Mg aW4gaGFzX251bGwgcmFuZ2VzLCB3aGljaAorICogY2FuIGJlIGNhbGN1bGF0ZWQgbGlrZSB0 aGlzOgorICoKKyAqICAgLy8gZXN0aW1hdGVkIG51bWJlciBvZiByb3dzIGluIGhhcy1udWxs IHJhbmdlcworICogICByb3dzX2luX2hhc19udWxscyA9IChyZWx0dXBsZXMgLyByZWxwYWdl cykgKiBwYWdlc19wZXJfcmFuZ2UgKiBuX2hhc19udWxscworICoKKyAqICAgLy8gbnVtYmVy IG9mIE5VTEwgcm93cyBpbiB0aGUgaGFzLW51bGxzIHJhbmdlcworICogICBudWxsc19pbl9y YW5nZXMgPSByZWx0dXBsZXMgKiBudWxsX2ZyYWMgLSBuX2FsbF9udWxscyAqIChyZWx0dXBs ZXMgLyByZWxwYWdlcykKKyAqCisgKiAgIC8vIG51bXJvd3MgaXMgdGhlIGRpZmZlcmVuY2Us IG11bHRpcGxpZWQgYnkgc2VsZWN0aXZpdHkgb2YgdGhlIGluZGV4CisgKiAgIC8vIGZpbHRl ciBjb25kaXRpb24gKHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjApCisgKiAgIG51bXJvd3Mg PSAocm93c19pbl9oYXNfbnVsbHMgLSBudWxsc19pbl9yYW5nZXMpICogc2VsZWN0aXZpdHkK KyAqCisgKiBUaGlzIGlnbm9yZXMgbm9uLXN1bW1hcml6ZWQgcmFuZ2VzLCBidXQgdGhlcmUg c2hvdWxkIGJlIG9ubHkgdmVyeSBmZXcgb2YKKyAqIHRob3NlLCBzbyBpdCBzaG91bGQgbm90 IG1ha2UgYSBodWdlIGRpZmZlcmVuY2UuIE90aGVyd2lzZSB3ZSBjYW4gZGl2aWRlCisgKiB0 aGVtIGJldHdlZW4gcmVndWxhciwgaGFzLW51bGxzIGFuZCBhbGwtbnVsbHMgcGFnZXMgdG8g a2VlcCB0aGUgcmF0aW8uCisgKgorICoKKyAqIDMpIEhvdyBsYXJnZSBzdGVwIHRvIG1ha2Ug d2hlbiB1cGRhdGluZyB0aGUgd2F0ZXJtYXJrPworICoKKyAqIFdoZW4gdXBkYXRpbmcgdGhl IHdhdGVybWFyaywgb25lIG9wdGlvbiBpcyB0byBzaW1wbHkgcHJvY2VlZCB0byB0aGUgbmV4 dAorICogZGlzdGluY3QgbWludmFsIHZhbHVlLCB3aGljaCBpcyB0aGUgc21hbGxlc3QgcG9z c2libGUgc3RlcCB3ZSBjYW4gbWFrZS4KKyAqIFRoaXMgbWF5IGJlIGJvdGggZmluZSBhbmQg dmVyeSBpbmVmZmljaWVudCwgZGVwZW5kaW5nIG9uIGhvdyBtYW55IHJvd3MKKyAqIGVuZCB1 cCBpbiB0aGUgdHVwbGVzb3J0IGFuZCBob3cgbWFueSByb3dzIHdlIGVuZCB1cCBzcGlsbGlu ZyAocG9zc2libHkKKyAqIHJlcGVhdGVkbHkgdG8gdGhlIHR1cGxlc3RvcmUpLgorICoKKyAq IFdoZW4gaGF2aW5nIHRvIHNvcnQgbGFyZ2UgbnVtYmVyIG9mIHJvd3MsIGl0J3MgaW5lZmZp Y2llbnQgdG8gcnVuIG1hbnkKKyAqIHRpbnkgc29ydHMsIGV2ZW4gaWYgaXQgcHJvZHVjZXMg Y29ycmVjdCByZXN1bHQuIEZvciBleGFtcGxlIHdoZW4gc29ydGluZworICogMU0gcm93cywg d2UgbWF5IHNwbGl0IHRoaXMgYXMgZWl0aGVyIChhKSAxMDAwMDB4IHNvcnRzIG9mIDEwIHJv d3MsIG9yCisgKiAoYikgMTAwMCBzb3J0cyBvZiAxMDAwIHJvd3MuIFRoZSAoYikgb3B0aW9u IGlzIGFsbW9zdCBjZXJ0YWlubHkgbW9yZQorICogZWZmaWNpZW50LiBNYXliZSBzb3J0cyBv ZiAxMGsgcm93cyB3b3VsZCBiZSBldmVuIGJldHRlciwgaWYgaXQgZml0cworICogaW50byB3 b3JrX21lbS4KKyAqCisgKiBUaGlzIGdldHMgYmFjayB0byBob3cgbGFyZ2UgdGhlIHBhZ2Ug cmFuZ2VzIGFyZSwgYW5kIGlmL2hvdyBtdWNoIHRoZXkKKyAqIG92ZXJsYXAuIFdpdGggdGlu eSByYW5nZXMgKGUuZy4gYSBzaW5nbGUtcGFnZSByYW5nZXMpLCBhIHNpbmdsZSByYW5nZQor ICogY2FuIG9ubHkgYWRkIGFzIG1hbnkgcm93cyBhcyB3ZSBjYW4gZml0IG9uIGEgc2luZ2xl IHBhZ2UuIFNvIHdlIG5lZWQKKyAqIG1vcmUgcmFuZ2VzIGJ5IGRlZmF1bHQgLSBob3cgbWFu eSB3YXRlcm1hcmsgc3RlcHMgdGhhdCBpcyBkZXBlbmRzIG9uCisgKiBob3cgbWFueSBkaXN0 aW5jdCBtaW52YWwgdmFsdWVzIGFyZSB0aGVyZSAuLi4KKyAqCisgKiBUaGVuIHRoZXJlJ3Mg b3ZlcmxhcHMgLSBpZiByYW5nZXMgZG8gbm90IG92ZXJsYXAsIHdlJ3JlIGRvbmUgYW5kIHdl J2xsCisgKiBhZGQgdGhlIHdob2xlIHJhbmdlIGJlY2F1c2UgdGhlIG5leHQgd2F0ZXJtYXJr IGlzIGFib3ZlIG1heHZhbC4gQnV0CisgKiB3aGVuIHRoZSByYW5nZXMgb3ZlcmxhcCwgd2Un bGwgb25seSBhZGQgdGhlIGZpcnN0IHBhcnQgKGFzc3VtaW5nIHRoZQorICogbWludmFsIG9m IHRoZSBuZXh0IHJhbmdlIGlzIHRoZSB3YXRlcm1hcmspLiBBc3N1bWUgMTAgb3ZlcmxhcHBp bmcKKyAqIHJhbmdlcyAtIGltYWdpbmUgZm9yIGV4YW1wbGUgcmFuZ2VzIHNoaWZ0ZWQgYnkg MTAlLCBzbyBzb21ldGhpbmcgbGlrZQorICoKKyAqICAgWzAsMTAwXSBbMTAsMTEwXSwgWzIw LDEyMF0sIFszMCwgMTMwXSwgLi4uLCBbOTAsIDE5MF0KKyAqCisgKiBJbiB0aGUgZmlyc3Qg c3RlcCB3ZSB1c2Ugd2F0ZXJtYXJrPTEwIGFuZCBsb2FkIHRoZSBmaXJzdCByYW5nZSwgd2l0 aAorICogbWF5YmUgMTAwMCByb3dzIGluIHRvdGFsLiBCdXQgYXNzdW1pbmcgdW5pZm9ybSBk aXN0cmlidXRpb24sIG9ubHkgYWJvdXQKKyAqIDEwMCByb3dzIHdpbGwgZ28gaW50byB0aGUg dHVwbGVzb3J0LCB0aGUgcmVtYWluaW5nIDkwMCByb3dzIHdpbGwgZ28gaW50bworICogdGhl IHR1cGxlc3RvcmUgKGFzc3VtaW5nIHVuaWZvcm0gZGlzdHJpYnV0aW9uKS4gVGhlbiBpbiB0 aGUgc2Vjb25kIHN0ZXAKKyAqIHdlIHNvcnQgYW5vdGhlciAxMDAgcm93cyBhbmQgdGhlIHJl bWFpbmluZyA4MDAgcm93cyB3aWxsIGJlIG1vdmVkIGludG8KKyAqIGEgbmV3IHR1cGxlc3Rv cmUuIEFuZCBzbyBvbiBhbmQgc28gb24uCisgKgorICogVGhpcyBtZWFucyB0aGF0IGluY3Jl bWVudGluZyB0aGUgd2F0ZXJtYXJrcyBieSBzaW5nbGUgc3RlcHMgbWF5IGJlCisgKiBxdWl0 ZSBpbmVmZmljaWVudCwgYW5kIHdlIG5lZWQgdG8gcmVmbGVjdCBib3RoIHRoZSByYW5nZSBz aXplIGFuZAorICogaG93IG11Y2ggdGhlIHJhbmdlcyBvdmVybGFwLgorICoKKyAqIEluIGZh Y3QsIG1heWJlIHdlIHNob3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBzdGVwIGFzIG51bWJlciBv ZiBtaW52YWwKKyAqIHZhbHVlcyB0byBza2lwLCBidXQgaG93IG1hbnkgcmFuZ2VzIHdvdWxk IHRoYXQgbWVhbiByZWFkaW5nLiBCZWNhdXNlCisgKiBpZiB3ZSBoYXZlIGEgbWludmFsIHdp dGggbWFueSBkdXBsaWNhdGVzLCB0aGF0IG1heSBsb2FkIG1hbnkgcm93cy4KKyAqIE9yIGV2 ZW4gYmV0dGVyLCB3ZSBjb3VsZCBsb29rIGF0IGhvdyBtYW55IHJvd3Mgd291bGQgdGhhdCBt ZWFuIGxvYWRpbmcKKyAqIGludG8gdGhlIHR1cGxlc3RvcmUgLSBpZiB3ZSB0cmFjayBQKHg8 bWludmFsKSBmb3IgZWFjaCByYW5nZSAoZS5nLiBieQorICogY2FsY3VsYXRpbmcgYXZlcmFn ZSB2YWx1ZSBkdXJpbmcgQU5BTFlaRSwgb3IgcGVyaGFwcyBieSBlc3RpbWF0aW5nCisgKiBp dCBmcm9tIHBlci1jb2x1bW4gc3RhdHMpLCB0aGVuIHdlIGtub3cgdGhlIGluY3JlbWVudCBp cyBnb2luZyB0byBiZQorICogYWJvdXQKKyAqCisgKiAgICAgUCh4IDwgbWludmFsW2ldKSAt IFAoeCA8IG1pbnZhbFtpLTFdKQorICoKKyAqIGFuZCB3ZSBjYW4gc3RvcCBvbmNlIHdlJ2Qg ZXhjZWVkIHdvcmtfbWVtICh3aXRoIHNvbWUgc2xhY2spLiBTZWUgY29tbWVudAorICogZm9y IGJyaW5fbWlubWF4X3N0YXRzKCkgZm9yIG1vcmUgdGhvdWdodHMuCisgKgorICoKKyAqIDQp IExJTUlUL09GRlNFVCB2cy4gZnVsbCBzb3J0CisgKgorICogVGhlcmUncyBvbmUgY2FzZSB3 aGVyZSB2ZXJ5IHNtYWxsIHNvcnRzIG1heSBiZSBhY3R1YWxseSBvcHRpbWFsLCBhbmQKKyAq IHRoYXQncyBxdWVyaWVzIHRoYXQgbmVlZCB0byBwcm9jZXNzIG9ubHkgdmVyeSBmZXcgcm93 cyAtIHNheSwgTElNSVQKKyAqIHF1ZXJpZXMgd2l0aCB2ZXJ5IHNtYWxsIGJvdW5kLgorICoK KyAqCisgKiBGSVhNRSBQcm9qZWN0aW9uIGRvZXMgbm90IHdvcmsgKGZhaWxzIG9uIHByb2pl Y3Rpb24gc2xvdCBleHBlY3RpbmcKKyAqIGJ1ZmZlciBvcHMsIGJ1dCB3ZSdyZSBzZW5kaW5n IGl0IG1pbmltYWwgdHVwbGUgc2xvdCkuCisgKgorICogRklYTUUgVGhlIHRsaXN0cyBhcmUg bm90IHdpcmVkIHF1aXRlIGNvcnJlY3RseSAtIHRoZSBzb3J0Q29sSWR4IGlzIGFuCisgKiBp bmRleCB0byB0aGUgdGxpc3QsIGJ1dCB3ZSBuZWVkIGF0dG51bSBmcm9tIHRoZSBoZWFwIHRh YmxlLCBzbyB0aGF0IHdlCisgKiBjYW4gZmV0Y2ggdGhlIGF0dHJpYnV0ZSBldGMuIE9yIG1h eWJlIGZldGNoaW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSByYXcKKyAqIHR1cGxlIChiZWZvcmUg cHJvamVjdGlvbikgaXMgd3JvbmcgYW5kIG5lZWRzIHRvIGJlIGRvbmUgZGlmZmVyZW50bHku CisgKgorICogRklYTUUgSW5kZXhlcyBvbiBleHByZXNzaW9ucyBkb24ndCB3b3JrIChwb3Nz aWJseSByZWxhdGVkIHRvIHRoZSB0bGlzdAorICogYmVpbmcgZG9uZSBpbmNvcnJlY3RseSku CisgKgorICogRklYTUUgaGFuZGxpbmcgb2Ygb3RoZXIgYnJpbiBvcGNsYXNzZXMgKG1pbm1h eC1tdWx0aSkKKyAqCisgKiBGSVhNRSBpbXByb3ZlIGNvc3RpbmcKKyAqCisgKgorICogSW1w cm92ZW1lbnQgaWRlYXM6CisgKgorICogMSkgbXVsdGlwbGUgdHVwbGVzdG9yZXMgZm9yIG92 ZXJsYXBwaW5nIHJhbmdlcworICoKKyAqIFdoZW4gdGhlcmUgYXJlIG1hbnkgb3ZlcmxhcHBp bmcgcmFuZ2VzIChzbyB0aGF0IG1heHZhbCA+IGN1cnJlbnQubWF4dmFsKSwKKyAqIHdlJ3Jl IGxvYWRpbmcgYWxsIHRoZSAiZnV0dXJlIiB0dXBsZXMgaW50byBhIG5ldyB0dXBsZXN0b3Jl LiBIb3dldmVyLCBpZgorICogdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggcmFuZ2VzIChpbWFn aW5lIHJhbmdlcyAic2hpZnRpbmciIGJ5IDEwJSwgd2hpY2gKKyAqIGdpdmVzIHVzIDkgbW9y ZSByYW5nZXMpLCB3ZSBrbm93IGluIHRoZSBuZXh0IHJvdW5kIHdlJ2xsIG9ubHkgbmVlZCBy b3dzCisgKiB1bnRpbCB0aGUgbmV4dCBtYXh2YWwuIFdlJ2xsIG5vdCBzb3J0IHRoZXNlIHJv d3MsIGJ1dCB3ZSdsbCBzdGlsbCBzaHVmZmxlCisgKiB0aGVtIGFyb3VuZCB1bnRpbCB3ZSBn ZXQgdG8gdGhlIHByb3BlciByYW5nZSAoc28gYWJvdXQgMTB4IGVhY2ggcm93KS4KKyAqIE1h eWJlIHdlIHNob3VsZCBwcmUtYWxsb2NhdGUgdGhlIHR1cGxlc3RvcmVzIChvciBtYXliZSBl dmVuIHR1cGxlc29ydHMpCisgKiBmb3IgZnV0dXJlIHJhbmdlcywgYW5kIHJvdXRlIHRoZSB0 dXBsZXMgdG8gdGhlIGNvcnJlY3Qgb25lPyBNYXliZSB3ZQorICogY291bGQgYmUgYSBiaXQg c21hcnRlciBhbmQgZGlzY2FyZCB0dXBsZXMgb25jZSB3ZSBoYXZlIGVub3VnaCByb3dzIGZv cgorICogdGhlIHByZWNlZGluZyByYW5nZXMgKHNheSwgd2l0aCBMSU1JVCBxdWVyaWVzKS4g V2UnZCBhbHNvIG5lZWQgdG8gd29ycnkKKyAqIGFib3V0IHdvcmtfbWVtLCB0aG91Z2ggLSB3 ZSBjYW4ndCBqdXN0IHVzZSBtYW55IHR1cGxlc3RvcmVzLCBlYWNoIHdpdGgKKyAqIHdob2xl IHdvcmtfbWVtLiBTbyB3ZSdkIHByb2JhYmx5IHVzZSBlLmcuIHdvcmtfbWVtLzIgZm9yIHRo ZSBuZXh0IG9uZSwKKyAqIGFuZCB0aGVuIC80LCAvOCBldGMuIGZvciB0aGUgZm9sbG93aW5n IG9uZXMuIFRoYXQncyB3b3JrX21lbSBpbiB0b3RhbC4KKyAqIEFuZCB0aGVyZSdkIG5lZWQg dG8gYmUgc29tZSBsaW1pdCBvbiBudW1iZXIgb2YgdHVwbGVzdG9yZXMsIEkgZ3Vlc3MuCisg KgorICogMikgaGFuZGxpbmcgTlVMTCB2YWx1ZXMKKyAqCisgKiBXZSBuZWVkIHRvIGhhbmRs ZSBOVUxMUyBGSVJTVCAvIE5VTExTIExBU1QgY2FzZXMuIFRoZSBxdWVzdGlvbiBpcyBob3cK KyAqIHRvIGRvIHRoYXQgLSB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gc2ltcGx5IGRvIGEgc2Vw YXJhdGUgc2NhbiBvZiByYW5nZXMKKyAqIHRoYXQgbWlnaHQgY29udGFpbiBOVUxMIHZhbHVl cywgcHJvY2Vzc2luZyBqdXN0IHJvd3Mgd2l0aCBOVUxMcywgYW5kCisgKiBkaXNjYXJkaW5n IG90aGVyIHJvd3MuIEFuZCB0aGVuIHByb2Nlc3Mgbm9uLU5VTEwgdmFsdWVzIGFzIGN1cnJl bnRseS4KKyAqIFRoZSBOVUxMIHNjYW4gd291bGQgaGFwcGVuIGJlZm9yZS9hZnRlciB0aGlz IHJlZ3VsYXIgcGhhc2UuCisgKgorICogQnl0IG1heWJlIHdlIGNvdWxkIGJlIHNtYXJ0ZXIs IGFuZCBub3QgZG8gc2VwYXJhdGUgc2NhbnMuIFdoZW4gcmVhZGluZworICogYSBwYWdlLCB3 ZSBtaWdodCBzdGFzaCB0aGUgdHVwbGUgaW4gYSB0dXBsZXN0b3JlLCBzbyB0aGF0IHdlIGNh biByZWFkCisgKiBpdCB0aGUgbmV4dCByb3VuZC4gT2J2aW91c2x5LCB0aGlzIG1pZ2h0IGJl IGV4cGVuc2l2ZSBpZiB3ZSBuZWVkIHRvCisgKiBrZWVwIHRvbyBtYW55IHJvd3MsIHNvIHRo ZSB0dXBsZXN0b3JlIHdvdWxkIGdyb3cgdG9vIGxhcmdlIC0gaW4gdGhhdAorICogY2FzZSBp dCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBkbyB0aGUgdHdvIHNjYW5zLgorICoKKyAqIDMp IHBhcmFsbGVsaXNtCisgKgorICogUHJlc3VtYWJseSB3ZSBjb3VsZCBkbyBhIHBhcmFsbGVs IHZlcnNpb24gb2YgdGhpcy4gVGhlIGxlYWRlciBvciBmaXJzdAorICogd29ya2VyIHdvdWxk IHByZXBhcmUgdGhlIHJhbmdlIGluZm9ybWF0aW9uLCBhbmQgdGhlIHdvcmtlcnMgd291bGQg dGhlbgorICogZ3JhYiByYW5nZXMgKGluIGEga2luZGEgcm91bmQgcm9iaW4gbWFubmVyKSwg c29ydCB0aGVtIGluZGVwZW5kZW50bHksCisgKiBhbmQgdGhlbiB0aGUgcmVzdWx0cyB3b3Vs ZCBiZSBtZXJnZWQgYnkgR2F0aGVyIE1lcmdlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKy8qCisgKiBJTlRFUkZBQ0UgUk9VVElORVMKKyAqCQlFeGVj QnJpblNvcnQJCQlzY2FucyBhIHJlbGF0aW9uIHVzaW5nIGFuIGluZGV4CisgKgkJSW5kZXhO ZXh0CQkJCXJldHJpZXZlIG5leHQgdHVwbGUgdXNpbmcgaW5kZXgKKyAqCQlFeGVjSW5pdEJy aW5Tb3J0CQljcmVhdGVzIGFuZCBpbml0aWFsaXplcyBzdGF0ZSBpbmZvLgorICoJCUV4ZWNS ZVNjYW5CcmluU29ydAkJcmVzY2FucyB0aGUgaW5kZXhlZCByZWxhdGlvbi4KKyAqCQlFeGVj RW5kQnJpblNvcnQJCQlyZWxlYXNlcyBhbGwgc3RvcmFnZS4KKyAqCQlFeGVjQnJpblNvcnRN YXJrUG9zCQltYXJrcyBzY2FuIHBvc2l0aW9uLgorICoJCUV4ZWNCcmluU29ydFJlc3RyUG9z CXJlc3RvcmVzIHNjYW4gcG9zaXRpb24uCisgKgkJRXhlY0JyaW5Tb3J0RXN0aW1hdGUJZXN0 aW1hdGVzIERTTSBzcGFjZSBuZWVkZWQgZm9yIHBhcmFsbGVsIGluZGV4IHNjYW4KKyAqCQlF eGVjQnJpblNvcnRJbml0aWFsaXplRFNNIGluaXRpYWxpemUgRFNNIGZvciBwYXJhbGxlbCBC cmluU29ydAorICoJCUV4ZWNCcmluU29ydFJlSW5pdGlhbGl6ZURTTSByZWluaXRpYWxpemUg RFNNIGZvciBmcmVzaCBzY2FuCisgKgkJRXhlY0JyaW5Tb3J0SW5pdGlhbGl6ZVdvcmtlciBh dHRhY2ggdG8gRFNNIGluZm8gaW4gcGFyYWxsZWwgd29ya2VyCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2JyaW4uaCIKKyNpbmNsdWRlICJhY2Nl c3MvYnJpbl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjZGVi dWcuaCIKKyNpbmNsdWRlICJleGVjdXRvci9ub2RlQnJpblNvcnQuaCIKKyNpbmNsdWRlICJs aWIvcGFpcmluZ2hlYXAuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJu b2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUg InV0aWxzL2RhdHVtLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworCitzdGF0 aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4TmV4dChCcmluU29ydFN0YXRlICpub2RlKTsKK3N0 YXRpYyBib29sIEluZGV4UmVjaGVjayhCcmluU29ydFN0YXRlICpub2RlLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CitzdGF0aWMgdm9pZCBFeGVjSW5pdEJyaW5Tb3J0UmFuZ2VzKEJyaW5T b3J0ICpub2RlLCBCcmluU29ydFN0YXRlICpwbGFuc3RhdGUpOworCisjZGVmaW5lIEJSSU5T T1JUX0RFQlVHCisKKy8qIGRvIHZhcmlvdXMgY29uc2lzdGVuY3kgY2hlY2tzICovCitzdGF0 aWMgdm9pZAorQXNzZXJ0Q2hlY2tSYW5nZXMoQnJpblNvcnRTdGF0ZSAqbm9kZSkKK3sKKyNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKyNlbmRpZgorfQorCisvKgorICogYnJpbnNv cnRfc3RhcnRfdGlkc2NhbgorICoJCVN0YXJ0IHNjYW5uaW5nIHR1cGxlcyBmcm9tIGEgZ2l2 ZW4gcGFnZSByYW5nZS4KKyAqCisgKiBXZSBvcGVuIGEgVElEIHJhbmdlIHNjYW4gZm9yIHRo ZSBnaXZlbiByYW5nZSwgYW5kIGluaXRpYWxpemUgdGhlIHR1cGxlc29ydC4KKyAqIE9wdGlv bmFsbHksIHdlIHVwZGF0ZSB0aGUgd2F0ZXJtYXJrICh3aXRoIGVpdGhlciBoaWdoL2xvdyB2 YWx1ZSkuIFdlIG9ubHkKKyAqIG5lZWQgdG8gZG8gdGhpcyBmb3IgdGhlIG1haW4gcGFnZSBy YW5nZSwgbm90IGZvciB0aGUgaW50ZXJzZWN0aW5nIHJhbmdlcy4KKyAqCisgKiBYWFggTWF5 YmUgd2Ugc2hvdWxkIGluaXRpYWxpemUgdGhlIHRpZHNjYW4gb25seSBvbmNlLCBhbmQgdGhl biBkbyByZXNjYW4KKyAqIGZvciB0aGUgZm9sbG93aW5nIHJhbmdlcz8gQW5kIHNpbWlsYXJs eSBmb3IgdGhlIHR1cGxlc29ydD8KKyAqLworc3RhdGljIHZvaWQKK2JyaW5zb3J0X3N0YXJ0 X3RpZHNjYW4oQnJpblNvcnRTdGF0ZSAqbm9kZSkKK3sKKwlCcmluU29ydCAgICpwbGFuID0g KEJyaW5Tb3J0ICopIG5vZGUtPnNzLnBzLnBsYW47CisJRVN0YXRlCSAgICplc3RhdGUgPSBu b2RlLT5zcy5wcy5zdGF0ZTsKKwlCcmluUmFuZ2UgICpyYW5nZSA9IG5vZGUtPmJzX3Jhbmdl OworCisJLyogVGhlcmUgbXVzdCBub3QgYmUgYW55IFRJRCBzY2FuIGluIHByb2dyZXNzIHll dC4gKi8KKwlBc3NlcnQobm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjID09IE5VTEwpOwor CisJLyogSW5pdGlhbGl6ZSB0aGUgVElEIHJhbmdlIHNjYW4sIGZvciB0aGUgcHJvdmlkZWQg YmxvY2sgcmFuZ2UuICovCisJaWYgKG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9PSBO VUxMKQorCXsKKwkJVGFibGVTY2FuRGVzYwkJdHNjYW5kZXNjOworCQlJdGVtUG9pbnRlckRh dGEJCW1pbnRpZCwKKwkJCQkJCQltYXh0aWQ7CisKKwkJSXRlbVBvaW50ZXJTZXRCbG9ja051 bWJlcigmbWludGlkLCByYW5nZS0+Ymxrbm9fc3RhcnQpOworCQlJdGVtUG9pbnRlclNldE9m ZnNldE51bWJlcigmbWludGlkLCAwKTsKKworCQlJdGVtUG9pbnRlclNldEJsb2NrTnVtYmVy KCZtYXh0aWQsIHJhbmdlLT5ibGtub19lbmQpOworCQlJdGVtUG9pbnRlclNldE9mZnNldE51 bWJlcigmbWF4dGlkLCBNYXhIZWFwVHVwbGVzUGVyUGFnZSk7CisKKwkJZWxvZyhERUJVRzEs ICJsb2FkaW5nIHJhbmdlIGJsb2NrcyBbJXUsICV1XSIsCisJCQkgcmFuZ2UtPmJsa25vX3N0 YXJ0LCByYW5nZS0+Ymxrbm9fZW5kKTsKKworCQl0c2NhbmRlc2MgPSB0YWJsZV9iZWdpbnNj YW5fdGlkcmFuZ2Uobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkJCQkg ZXN0YXRlLT5lc19zbmFwc2hvdCwKKwkJCQkJCQkJCQkJICZtaW50aWQsICZtYXh0aWQpOwor CQlub2RlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MgPSB0c2NhbmRlc2M7CisJfQorCisJaWYg KG5vZGUtPmJzX3R1cGxlc29ydHN0YXRlID09IE5VTEwpCisJeworCQlUdXBsZURlc2MJdHVw RGVzYyA9IFJlbGF0aW9uR2V0RGVzY3Iobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKTsK KworCQlub2RlLT5ic190dXBsZXNvcnRzdGF0ZSA9IHR1cGxlc29ydF9iZWdpbl9oZWFwKHR1 cERlc2MsCisJCQkJCQkJCQkJCQkJcGxhbi0+bnVtQ29scywKKwkJCQkJCQkJCQkJCQlwbGFu LT5zb3J0Q29sSWR4LAorCQkJCQkJCQkJCQkJCXBsYW4tPnNvcnRPcGVyYXRvcnMsCisJCQkJ CQkJCQkJCQkJcGxhbi0+Y29sbGF0aW9ucywKKwkJCQkJCQkJCQkJCQlwbGFuLT5udWxsc0Zp cnN0LAorCQkJCQkJCQkJCQkJCXdvcmtfbWVtLAorCQkJCQkJCQkJCQkJCU5VTEwsCisJCQkJ CQkJCQkJCQkJVFVQTEVTT1JUX05PTkUpOworCX0KKworCWlmIChub2RlLT5ic190dXBsZXN0 b3JlID09IE5VTEwpCisJeworCQlub2RlLT5ic190dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9i ZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOworCX0KK30KKworLyoKKyAqIGJy aW5zb3J0X2VuZF90aWRzY2FuCisgKgkJRmluaXNoIHRoZSBUSUQgcmFuZ2Ugc2Nhbi4KKyAq Lworc3RhdGljIHZvaWQKK2JyaW5zb3J0X2VuZF90aWRzY2FuKEJyaW5Tb3J0U3RhdGUgKm5v ZGUpCit7CisJLyogZ2V0IHRoZSBmaXJzdCByYW5nZSwgcmVhZCBhbGwgdHVwbGVzIHVzaW5n IGEgdGlkIHJhbmdlIHNjYW4gKi8KKwlpZiAobm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNj ICE9IE5VTEwpCisJeworCQl0YWJsZV9lbmRzY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRTY2Fu RGVzYyk7CisJCW5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7CisJfQorfQor CisvKgorICogYnJpbnNvcnRfdXBkYXRlX3dhdGVybWFyaworICoJCUFkdmFuY2UgdGhlIHdh dGVybWFyayB0byB0aGUgbmV4dCBtaW52YWwgKG9yIG1heHZhbCBmb3IgREVTQykuCisgKgor ICogV2UgY291bGQgY291bGQgYWN0dWFsbHkgYWR2YW5jZSB0aGUgd2F0ZXJtYXJrIGJ5IG11 bHRpcGxlIHN0ZXBzIChub3QgdG8KKyAqIHRoZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgbWlu dmFsLCBidXQgYSBjb3VwbGUgbW9yZSksIHRvIGFjY3VtdWxhdGUgbW9yZQorICogcm93cyBp biB0aGUgdHVwbGVzb3J0LiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHdlIG1ha2UgY29ycmVsYXRl cyB3aXRoIHRoZQorICogYW1vdW50IG9mIGRhdGEgd2Ugc29ydCBpbiBhIGdpdmVuIHN0ZXAs IGJ1dCB3ZSBkb24ndCBrbm93IGluIGFkdmFuY2UKKyAqIGhvdyBtYW55IHJvd3MgKG9yIGJ5 dGVzKSB3aWxsIHRoYXQgYWN0dWFsbHkgYmUuIFdlIGNvdWxkIGRvIHNvbWUgc2ltcGxlCisg KiBoZXVyaXN0aWNzIChtZWFzdXJlIHBhc3Qgc29ydHMgYW5kIGV4dHJhcG9sYXRlKS4KKyAq Lworc3RhdGljIHZvaWQKK2JyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsoQnJpblNvcnRTdGF0 ZSAqbm9kZSwgYm9vbCBhc2MpCit7CisJaW50CQljbXA7CisJYm9vbAlmb3VuZCA9IGZhbHNl OworCisJdHVwbGVzb3J0X21hcmtwb3Mobm9kZS0+YnNfc2Nhbi0+cmFuZ2VzKTsKKworCXdo aWxlICh0dXBsZXNvcnRfZ2V0dHVwbGVzbG90KG5vZGUtPmJzX3NjYW4tPnJhbmdlcywgdHJ1 ZSwgZmFsc2UsIG5vZGUtPmJzX3NjYW4tPnNsb3QsIE5VTEwpKQorCXsKKwkJYm9vbAlpc251 bGw7CisJCURhdHVtCXZhbHVlOworCQlib29sCWFsbF9udWxsczsKKwkJYm9vbAlub3Rfc3Vt bWFyaXplZDsKKworCQlhbGxfbnVsbHMgPSBEYXR1bUdldEJvb2woc2xvdF9nZXRhdHRyKG5v ZGUtPmJzX3NjYW4tPnNsb3QsIDQsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFpc251bGwpOwor CisJCW5vdF9zdW1tYXJpemVkID0gRGF0dW1HZXRCb29sKHNsb3RfZ2V0YXR0cihub2RlLT5i c19zY2FuLT5zbG90LCA1LCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQkv KiB3ZSBpZ25vcmUgcmFuZ2VzIHRoYXQgYXJlIGVpdGhlciBhbGxfbnVsbHMgb3Igbm90IHN1 bW1hcml6ZWQgKi8KKwkJaWYgKGFsbF9udWxscyB8fCBub3Rfc3VtbWFyaXplZCkKKwkJCWNv bnRpbnVlOworCisJCS8qIHVzZSBlaXRoZXIgbWludmFsIG9yIG1heHZhbCwgZGVwZW5kaW5n IG9uIHRoZSBBU0MgLyBERVNDICovCisJCWlmIChhc2MpCisJCQl2YWx1ZSA9IHNsb3RfZ2V0 YXR0cihub2RlLT5ic19zY2FuLT5zbG90LCA2LCAmaXNudWxsKTsKKwkJZWxzZQorCQkJdmFs dWUgPSBzbG90X2dldGF0dHIobm9kZS0+YnNfc2Nhbi0+c2xvdCwgNywgJmlzbnVsbCk7CisK KwkJaWYgKCFub2RlLT5ic193YXRlcm1hcmtfc2V0KQorCQl7CisJCQlub2RlLT5ic193YXRl cm1hcmtfc2V0ID0gdHJ1ZTsKKwkJCW5vZGUtPmJzX3dhdGVybWFyayA9IHZhbHVlOworCQkJ Y29udGludWU7CisJCX0KKworCQljbXAgPSBBcHBseVNvcnRDb21wYXJhdG9yKG5vZGUtPmJz X3dhdGVybWFyaywgZmFsc2UsIHZhbHVlLCBmYWxzZSwKKwkJCQkJCQkJICAmbm9kZS0+YnNf c29ydHN1cHBvcnQpOworCisJCWlmIChjbXAgPCAwKQorCQl7CisJCQlub2RlLT5ic193YXRl cm1hcmtfc2V0ID0gdHJ1ZTsKKwkJCW5vZGUtPmJzX3dhdGVybWFyayA9IHZhbHVlOworCQkJ Zm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl0dXBsZXNvcnRfcmVzdG9y ZXBvcyhub2RlLT5ic19zY2FuLT5yYW5nZXMpOworCisJbm9kZS0+YnNfd2F0ZXJtYXJrX3Nl dCA9IGZvdW5kOworfQorCisvKgorICogYnJpbnNvcnRfbG9hZF90dXBsZXMKKyAqCQlMb2Fk IHR1cGxlcyBmcm9tIHRoZSBUSUQgcmFuZ2Ugc2NhbiwgYWRkIHRoZW0gdG8gdHVwbGVzb3J0 L3N0b3JlLgorICoKKyAqIFdoZW4gY2FsbGVkIGZvciB0aGUgImN1cnJlbnQiIHJhbmdlLCB3 ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB3YXRlcm1hcmssCisgKiB3ZSBrbm93IHRoZSB0 dXBsZSBnb2VzIGludG8gdGhlIHR1cGxlc29ydC4gU28gd2l0aCBjaGVja193YXRlcm1hcmsg d2UKKyAqIHNraXAgdGhlIGNvbXBhcmF0b3IgY2FsbCB0byBzYXZlIENQVSBjb3N0LgorICov CitzdGF0aWMgdm9pZAorYnJpbnNvcnRfbG9hZF90dXBsZXMoQnJpblNvcnRTdGF0ZSAqbm9k ZSwgYm9vbCBjaGVja193YXRlcm1hcmssIGJvb2wgbnVsbF9wcm9jZXNzaW5nKQoreworCUJy aW5Tb3J0CSAgICpwbGFuID0gKEJyaW5Tb3J0ICopIG5vZGUtPnNzLnBzLnBsYW47CisJVGFi bGVTY2FuRGVzYwlzY2FuOworCUVTdGF0ZQkJICAgKmVzdGF0ZTsKKwlTY2FuRGlyZWN0aW9u CWRpcmVjdGlvbjsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlCcmluUmFuZ2UJICAgKnJh bmdlID0gbm9kZS0+YnNfcmFuZ2U7CisKKwllc3RhdGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsK KwlkaXJlY3Rpb24gPSBlc3RhdGUtPmVzX2RpcmVjdGlvbjsKKworCXNsb3QgPSBub2RlLT5z cy5zc19TY2FuVHVwbGVTbG90OworCisJQXNzZXJ0KG5vZGUtPmJzX3JhbmdlICE9IE5VTEwp OworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgcHJvY2Vzc2lnbiBOVUxMUywgYW5kIHRoaXMg aXMgYWxsLW51bGxzIHJhbmdlLCB3ZSBjYW4KKwkgKiBqdXN0IHNraXAgaXQgLSB3ZSB3b24n dCBmaW5kIGFueSBub24tTlVMTCB0dXBsZXMgaW4gaXQuCisJICoKKwkgKiBYWFggU2hvdWxk bid0IGhhcHBlbiwgdGhhbmtzIHRvIGxvZ2ljIGluIGJyaW5zb3J0X25leHRfcmFuZ2UoKS4K KwkgKi8KKwlpZiAoIW51bGxfcHJvY2Vzc2luZyAmJiByYW5nZS0+YWxsX251bGxzKQorCQly ZXR1cm47CisKKwkvKgorCSAqIFNpbWlsYXJseSwgaWYgd2UncmUgcHJvY2Vzc2luZyBOVUxM cyBhbmQgdGhpcyByYW5nZSBkb2VzIG5vdCBoYXZlCisJICogaGFzX251bGxzIGZsYWcsIHdl IGNhbiBza2lwIGl0LgorCSAqCisJICogWFhYIFNob3VsZG4ndCBoYXBwZW4sIHRoYW5rcyB0 byBsb2dpYyBpbiBicmluc29ydF9uZXh0X3JhbmdlKCkuCisJICovCisJaWYgKG51bGxfcHJv Y2Vzc2luZyAmJiAhKHJhbmdlLT5oYXNfbnVsbHMgfHwgcmFuZ2UtPm5vdF9zdW1tYXJpemVk IHx8IHJhbmdlLT5hbGxfbnVsbHMpKQorCQlyZXR1cm47CisKKwlicmluc29ydF9zdGFydF90 aWRzY2FuKG5vZGUpOworCisJc2NhbiA9IG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYzsK KworCS8qCisJICogUmVhZCB0dXBsZXMsIGV2YWx1YXRlIHRoZSBmaWxlciAoc28gdGhhdCB3 ZSBkb24ndCBrZWVwIHR1cGxlcyBvbmx5IHRvCisJICogZGlzY2FyZCB0aGVtIGxhdGVyKSwg YW5kIGRlY2lkZSBpZiBpdCBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmFuZ2UKKwkgKiAodHVw bGVzb3J0KSBvciBvdmVyZmxvdyAodHVwbGVzdG9yZSkuCisJICovCisJd2hpbGUgKHRhYmxl X3NjYW5fZ2V0bmV4dHNsb3RfdGlkcmFuZ2Uoc2NhbiwgZGlyZWN0aW9uLCBzbG90KSkKKwl7 CisJCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwkJRXhwclN0YXRlICAqcXVhbDsKKworCQkv KgorCQkgKiBGZXRjaCBkYXRhIGZyb20gbm9kZQorCQkgKi8KKwkJcXVhbCA9IG5vZGUtPmJz X3F1YWw7CisJCWVjb250ZXh0ID0gbm9kZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisKKwkJ LyoKKwkJICogcGxhY2UgdGhlIGN1cnJlbnQgdHVwbGUgaW50byB0aGUgZXhwciBjb250ZXh0 CisJCSAqLworCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OworCisJCS8qCisJ CSAqIGNoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdHVwbGUgc2F0aXNmaWVzIHRoZSBxdWFsLWNs YXVzZQorCQkgKgorCQkgKiBjaGVjayBmb3Igbm9uLW51bGwgcXVhbCBoZXJlIHRvIGF2b2lk IGEgZnVuY3Rpb24gY2FsbCB0byBFeGVjUXVhbCgpCisJCSAqIHdoZW4gdGhlIHF1YWwgaXMg bnVsbCAuLi4gc2F2ZXMgb25seSBhIGZldyBjeWNsZXMsIGJ1dCB0aGV5IGFkZCB1cAorCQkg KiAuLi4KKwkJICoKKwkJICogWFhYIERvbmUgaGVyZSwgYmVjYXVzZSBpbiBFeGVjU2NhbiB3 ZSdsbCBnZXQgZGlmZmVyZW50IHNsb3QgdHlwZQorCQkgKiAobWluaW1hbCB0dXBsZSB2cy4g YnVmZmVyZWQgdHVwbGUpLiBTY2FuIGV4cGVjdHMgc2xvdCB3aGlsZSByZWFkaW5nCisJCSAq IGZyb20gdGhlIHRhYmxlIChsaWtlIGhlcmUpLCBidXQgd2UncmUgc3Rhc2hpbmcgaXQgaW50 byBhIHR1cGxlc29ydC4KKwkJICoKKwkJICogWFhYIE1heWJlIHdlIGNvdWxkIGVsaW1pbmF0 ZSBtYW55IHR1cGxlcyBieSBsZXZlcmFnaW5nIHRoZSBCUklOCisJCSAqIHJhbmdlLCBieSBl eGVjdXRpbmcgdGhlIGNvbnNpc3RlbnQgZnVuY3Rpb24uIEJ1dCB3ZSBkb24ndCBoYXZlCisJ CSAqIHRoZSBxdWFsIGluIGFwcHJvcHJpYXRlIGZvcm1hdCBhdCB0aGUgbW9tZW50LCBzbyB3 ZSdkIHByZXByb2Nlc3MKKwkJICogdGhlIGtleXMgc2ltaWxhcmx5IHRvIGJyaW5nZXRiaXRt YXAoKS4gSW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQKKwkJICogcHJvYmFibHkgZXZhbHVhdGUg dGhlIHN0dWZmIHdoaWxlIGJ1aWxkaW5nIHRoZSByYW5nZXM/IEFsdGhvdWdoLAorCQkgKiBp ZiB0aGUgImNvbnNpc3RlbnQiIGZ1bmN0aW9uIGlzIGV4cGVuc2l2ZSwgaXQgbWlnaHQgYmUg Y2hlYXBlcgorCQkgKiB0byBkbyB0aGF0IGluY3JlbWVudGFsbHksIGFzIHdlIG5lZWQgdGhl IHJhbmdlcy4gV291bGQgYmUgYSB3aW4KKwkJICogZm9yIExJTUlUIHF1ZXJpZXMsIGZvciBl eGFtcGxlLgorCQkgKgorCQkgKiBYWFggSG93ZXZlciwgbWF5YmUgd2UgY291bGQgYWxzbyBs ZXZlcmFnZSBvdGhlciBiaXRtYXAgaW5kZXhlcywKKwkJICogcGFydGljdWxhcmx5IGZvciBC UklOIGluZGV4ZXMgYmVjYXVzZSB0aGF0IG1ha2VzIGl0IHNpbXBsZXIgdG8KKwkJICogZWxp bWluYWdlIHRoZSByYW5nZXMgaW5jcmVtZW50YWxseSAtIHdlIGtub3cgd2hpY2ggcmFuZ2Vz IHRvCisJCSAqIGxvYWQgZnJvbSB0aGUgaW5kZXgsIHdoaWxlIGZvciBvdGhlciBpbmRleGVz IChlLmcuIGJ0cmVlKSB3ZQorCQkgKiBoYXZlIHRvIHJlYWQgdGhlIHdob2xlIGluZGV4IGFu ZCBidWlsZCBhIGJpdG1hcCBpbiBvcmRlciB0byBoYXZlCisJCSAqIGEgYml0bWFwIGZvciBh bnkgcmFuZ2UuIEFsdGhvdWdoLCBpZiB0aGUgY29uZGl0aW9uIGlzIHZlcnkKKwkJICogc2Vs ZWN0aXZlLCB3ZSBtYXkgbmVlZCB0byByZWFkIG9ubHkgYSBzbWFsbCBmcmFjdGlvbiBvZiB0 aGUKKwkJICogaW5kZXgsIHNvIG1heWJlIHRoYXQncyBPSy4KKwkJICovCisJCWlmIChxdWFs ID09IE5VTEwgfHwgRXhlY1F1YWwocXVhbCwgZWNvbnRleHQpKQorCQl7CisJCQlpbnQJCWNt cCA9IDA7CS8qIG1hdHRlcnMgZm9yIGNoZWNrX3dhdGVybWFyaz1mYWxzZSAqLworCQkJRGF0 dW0JdmFsdWU7CisJCQlib29sCWlzbnVsbDsKKworCQkJdmFsdWUgPSBzbG90X2dldGF0dHIo c2xvdCwgcGxhbi0+c29ydENvbElkeFswXSwgJmlzbnVsbCk7CisKKwkJCS8qCisJCQkgKiBG SVhNRSBOb3QgaGFuZGxpbmcgTlVMTFMgZm9yIG5vdywgd2UgbmVlZCB0byBzdGFzaCB0aGVt IGludG8KKwkJCSAqIGEgc2VwYXJhdGUgdHVwbGVzdG9yZSAoc28gdGhhdCB3ZSBjYW4gb3V0 cHV0IHRoZW0gZmlyc3Qgb3IKKwkJCSAqIGxhc3QpLCBhbmQgdGhlbiBza2lwIHRoZW0gaW4g dGhlIHJlZ3VsYXIgcHJvY2Vzc2luZz8KKwkJCSAqLworCQkJaWYgKG51bGxfcHJvY2Vzc2lu ZykKKwkJCXsKKwkJCQkvKiBTdGFzaCBpdCB0byB0aGUgdHVwbGVzdG9yZSAod2hlbiBOVUxM LCBvciBpZ25vcmUKKwkJCQkgKiBpdCAod2hlbiBub3QtTlVMTCkuICovCisJCQkJaWYgKGlz bnVsbCkKKwkJCQkJdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3Qobm9kZS0+YnNfdHVwbGVzdG9y ZSwgc2xvdCk7CisKKwkJCQkvKiBOVUxMIG9yIG5vdCwgd2UncmUgZG9uZSAqLworCQkJCWNv bnRpbnVlOworCQkJfQorCisJCQkvKiB3ZSdyZSBub3QgcHJvY2Vzc2luZyBOVUxMIHZhbHVl cywgc28gaWdub3JlIE5VTExzICovCisJCQlpZiAoaXNudWxsKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKgorCQkJICogT3RoZXJ3aXNlIGNvbXBhcmUgdG8gd2F0ZXJtYXJrLCBhbmQgc3Rh c2ggaXQgZWl0aGVyIHRvIHRoZQorCQkJICogdHVwbGVzb3J0IG9yIHR1cGxlc3RvcmUuCisJ CQkgKi8KKwkJCWlmIChjaGVja193YXRlcm1hcmsgJiYgbm9kZS0+YnNfd2F0ZXJtYXJrX3Nl dCkKKwkJCQljbXAgPSBBcHBseVNvcnRDb21wYXJhdG9yKHZhbHVlLCBmYWxzZSwKKwkJCQkJ CQkJCQkgIG5vZGUtPmJzX3dhdGVybWFyaywgZmFsc2UsCisJCQkJCQkJCQkJICAmbm9kZS0+ YnNfc29ydHN1cHBvcnQpOworCisJCQlpZiAoY21wIDw9IDApCisJCQkJdHVwbGVzb3J0X3B1 dHR1cGxlc2xvdChub2RlLT5ic190dXBsZXNvcnRzdGF0ZSwgc2xvdCk7CisJCQllbHNlCisJ CQkJdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3Qobm9kZS0+YnNfdHVwbGVzdG9yZSwgc2xvdCk7 CisJCX0KKworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwl9CisKKwlFeGVjQ2xlYXJUdXBs ZShzbG90KTsKKworCWJyaW5zb3J0X2VuZF90aWRzY2FuKG5vZGUpOworfQorCisvKgorICog YnJpbnNvcnRfbG9hZF9zcGlsbF90dXBsZXMKKyAqCQlMb2FkIHR1cGxlcyBmcm9tIHRoZSBz cGlsbCB0dXBsZXN0b3JlLCBhbmQgZWl0aGVyIHN0YXNoIHRoZW0gaW50bworICoJCWEgdHVw bGVzb3J0IG9yIGEgbmV3IHR1cGxlc3RvcmUuCisgKgorICogQWZ0ZXIgcHJvY2Vzc2luZyB0 aGUgbGFzdCByYW5nZSwgd2Ugd2FudCB0byBwcm9jZXNzIGFsbCByZW1haW5pbmcgcmFuZ2Vz LAorICogc28gd2l0aCBjaGVja193YXRlcm1hcms9ZmFsc2Ugd2Ugc2tpcCB0aGUgY2hlY2su CisgKi8KK3N0YXRpYyB2b2lkCiticmluc29ydF9sb2FkX3NwaWxsX3R1cGxlcyhCcmluU29y dFN0YXRlICpub2RlLCBib29sIGNoZWNrX3dhdGVybWFyaykKK3sKKwlCcmluU29ydCAgICpw bGFuID0gKEJyaW5Tb3J0ICopIG5vZGUtPnNzLnBzLnBsYW47CisJVHVwbGVzdG9yZXN0YXRl ICp0dXBzdG9yZTsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKworCWlmIChub2RlLT5ic190 dXBsZXN0b3JlID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIHN0YXJ0IHNjYW5uaW5nIHRo ZSBleGlzdGluZyB0dXBsZXN0b3JlIChYWFggbmVlZGVkPykgKi8KKwl0dXBsZXN0b3JlX3Jl c2Nhbihub2RlLT5ic190dXBsZXN0b3JlKTsKKworCS8qCisJICogQ3JlYXRlIGEgbmV3IHR1 cGxlc3RvcmUsIGZvciB0dXBsZXMgdGhhdCBleGNlZWQgdGhlIHdhdGVybWFyayBhbmQgc28K KwkgKiBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IHNvcnQuCisJICov CisJdHVwc3RvcmUgPSB0dXBsZXN0b3JlX2JlZ2luX2hlYXAoZmFsc2UsIGZhbHNlLCB3b3Jr X21lbSk7CisKKwkvKgorCSAqIFdlIG5lZWQgYSBzbG90IGZvciBtaW5pbWFsIHR1cGxlcy4g VGhlIHNjYW4gc2xvdCB1c2VzIGJ1ZmZlcmVkIHR1cGxlcywKKwkgKiBzbyBpdCdkIHRyaWdn ZXIgYW4gZXJyb3IgaW4gdGhlIGxvb3AuCisJICovCisJc2xvdCA9IE1ha2VTaW5nbGVUdXBs ZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlv biksCisJCQkJCQkJCQkmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCXdoaWxlICh0dXBsZXN0 b3JlX2dldHR1cGxlc2xvdChub2RlLT5ic190dXBsZXN0b3JlLCB0cnVlLCB0cnVlLCBzbG90 KSkKKwl7CisJCWludAkJY21wID0gMDsJLyogbWF0dGVycyBmb3IgY2hlY2tfd2F0ZXJtYXJr PWZhbHNlICovCisJCWJvb2wJaXNudWxsOworCQlEYXR1bQl2YWx1ZTsKKworCQl2YWx1ZSA9 IHNsb3RfZ2V0YXR0cihzbG90LCBwbGFuLT5zb3J0Q29sSWR4WzBdLCAmaXNudWxsKTsKKwor CQkvKiBXZSBzaG91bGRuJ3QgaGF2ZSBOVUxMIHZhbHVlcyBpbiB0aGUgc3BpbGwsIGF0IGxl YXN0IG5vdCBub3cuICovCisJCUFzc2VydCghaXNudWxsKTsKKworCQlpZiAoY2hlY2tfd2F0 ZXJtYXJrICYmIG5vZGUtPmJzX3dhdGVybWFya19zZXQpCisJCQljbXAgPSBBcHBseVNvcnRD b21wYXJhdG9yKHZhbHVlLCBmYWxzZSwKKwkJCQkJCQkJCSAgbm9kZS0+YnNfd2F0ZXJtYXJr LCBmYWxzZSwKKwkJCQkJCQkJCSAgJm5vZGUtPmJzX3NvcnRzdXBwb3J0KTsKKworCQlpZiAo Y21wIDw9IDApCisJCQl0dXBsZXNvcnRfcHV0dHVwbGVzbG90KG5vZGUtPmJzX3R1cGxlc29y dHN0YXRlLCBzbG90KTsKKwkJZWxzZQorCQkJdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3QodHVw c3RvcmUsIHNsb3QpOworCX0KKworCS8qCisJICogRGlzY2FyZCB0aGUgZXhpc3RpbmcgdHVw bGVzdG9yZSAodGhhdCB3ZSBqdXN0IHByb2Nlc3NlZCksIHVzZSB0aGUgbmV3CisJICogb25l IGluc3RlYWQuCisJICovCisJdHVwbGVzdG9yZV9lbmQobm9kZS0+YnNfdHVwbGVzdG9yZSk7 CisJbm9kZS0+YnNfdHVwbGVzdG9yZSA9IHR1cHN0b3JlOworCisJRXhlY0Ryb3BTaW5nbGVU dXBsZVRhYmxlU2xvdChzbG90KTsKK30KKworc3RhdGljIGJvb2wKK2JyaW5zb3J0X25leHRf cmFuZ2UoQnJpblNvcnRTdGF0ZSAqbm9kZSwgYm9vbCBhc2MpCit7CisJLyogRklYTUUgZnJl ZSB0aGUgY3VycmVudCBic19yYW5nZSwgaWYgYW55ICovCisJbm9kZS0+YnNfcmFuZ2UgPSBO VUxMOworCisJLyoKKwkgKiBNYXJrIHRoZSBwb3NpdGlvbiwgc28gdGhhdCB3ZSBjYW4gcmVz dG9yZSBpdCBpbiBjYXNlIHdlIHJlYWNoIHRoZQorCSAqIGN1cnJlbnQgd2F0ZXJtYXJrLgor CSAqLworCXR1cGxlc29ydF9tYXJrcG9zKG5vZGUtPmJzX3NjYW4tPnJhbmdlcyk7CisKKwkv KgorCSAqIEdldCB0aGUgbmV4dCByYW5nZSBhbmQgcmV0dXJuIGl0LCB1bmxlc3Mgd2UgY2Fu IHByb3ZlIGl0J3MgdGhlIGxhc3QKKwkgKiByYW5nZSB0aGF0IGNhbiBwb3NzaWJseSBtYXRj aCB0aGUgY3VycmVudCBjb25kaXRvbiAodGhhbmtzIHRvIGhvdyB3ZQorCSAqIG9yZGVyIHRo ZSByYW5nZXMpLgorCSAqCisJICogQWxzbyBza2lwIHJhbmdlcyB0aGF0IGNhbid0IHBvc3Np Ymx5IG1hdGNoIChlLmcuIGJlY2F1c2Ugd2UgYXJlIGluCisJICogTlVMTCBwcm9jZXNzaW5n LCBhbmQgdGhlIHJhbmdlIGhhcyBubyBOVUxMcykuCisJICovCisJd2hpbGUgKHR1cGxlc29y dF9nZXR0dXBsZXNsb3Qobm9kZS0+YnNfc2Nhbi0+cmFuZ2VzLCB0cnVlLCBmYWxzZSwgbm9k ZS0+YnNfc2Nhbi0+c2xvdCwgTlVMTCkpCisJeworCQlib29sCQlpc251bGw7CisJCURhdHVt CQl2YWx1ZTsKKworCQlCcmluUmFuZ2UgICpyYW5nZSA9IChCcmluUmFuZ2UgKikgcGFsbG9j KHNpemVvZihCcmluUmFuZ2UpKTsKKworCQlyYW5nZS0+Ymxrbm9fc3RhcnQgPSBzbG90X2dl dGF0dHIobm9kZS0+YnNfc2Nhbi0+c2xvdCwgMSwgJmlzbnVsbCk7CisJCXJhbmdlLT5ibGtu b19lbmQgPSBzbG90X2dldGF0dHIobm9kZS0+YnNfc2Nhbi0+c2xvdCwgMiwgJmlzbnVsbCk7 CisJCXJhbmdlLT5oYXNfbnVsbHMgPSBzbG90X2dldGF0dHIobm9kZS0+YnNfc2Nhbi0+c2xv dCwgMywgJmlzbnVsbCk7CisJCXJhbmdlLT5hbGxfbnVsbHMgPSBzbG90X2dldGF0dHIobm9k ZS0+YnNfc2Nhbi0+c2xvdCwgNCwgJmlzbnVsbCk7CisJCXJhbmdlLT5ub3Rfc3VtbWFyaXpl ZCA9IHNsb3RfZ2V0YXR0cihub2RlLT5ic19zY2FuLT5zbG90LCA1LCAmaXNudWxsKTsKKwkJ cmFuZ2UtPm1pbl92YWx1ZSA9IHNsb3RfZ2V0YXR0cihub2RlLT5ic19zY2FuLT5zbG90LCA2 LCAmaXNudWxsKTsKKwkJcmFuZ2UtPm1heF92YWx1ZSA9IHNsb3RfZ2V0YXR0cihub2RlLT5i c19zY2FuLT5zbG90LCA3LCAmaXNudWxsKTsKKworCQkvKgorCQkgKiBOb3Qtc3VtbWFyaXpl ZCByYW5nZXMgbWF0Y2ggaXJyZXNwZWN0ZWRseSBvZiB0aGUgd2F0ZXJtYXJrIChpZgorCQkg KiBpdCdzIHNldCBhdCBhbGwpLgorCQkgKi8KKwkJaWYgKHJhbmdlLT5ub3Rfc3VtbWFyaXpl ZCkKKwkJeworCQkJbm9kZS0+YnNfcmFuZ2UgPSByYW5nZTsKKwkJCXJldHVybiB0cnVlOwor CQl9CisKKwkJLyoKKwkJICogVGhlIHJhbmdlIGlzIHN1bW1hcml6ZWQsIGJ1dCBtYXliZSB0 aGUgd2F0ZXJtYXJrIGlzIG5vdD8gVGhhdAorCQkgKiB3b3VsZCBtZWFuIHdlJ3JlIHByb2Nl c3NpbmcgTlVMTCB2YWx1ZXMsIHNvIHdlIHNraXAgcmFuZ2VzIHRoYXQKKwkJICogY2FuJ3Qg cG9zc2libHkgbWF0Y2ggKGkuZS4gd2l0aCBhbGxfbnVsbHM9aGFzX251bGxzPWZhbHNlKS4K KwkJICovCisJCWlmICghbm9kZS0+YnNfd2F0ZXJtYXJrX3NldCkKKwkJeworCQkJaWYgKHJh bmdlLT5hbGxfbnVsbHMgfHwgcmFuZ2UtPmhhc19udWxscykKKwkJCXsKKwkJCQlub2RlLT5i c19yYW5nZSA9IHJhbmdlOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCisJCQkvKiB1cGRh dGUgdGhlIHBvc2l0aW9uIGFuZCB0cnkgdGhlIG5leHQgcmFuZ2UgKi8KKwkJCXR1cGxlc29y dF9tYXJrcG9zKG5vZGUtPmJzX3NjYW4tPnJhbmdlcyk7CisJCQlwZnJlZShyYW5nZSk7CisK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU28gbm93IHdlIGhhdmUgYSBzdW1t YXJpemVkIHJhbmdlLCBhbmQgd2Uga25vdyB0aGUgd2F0ZXJtYXJrCisJCSAqIGlzIHNldCB0 b28gKHNvIHdlJ3JlIG5vdCBwcm9jZXNzaW5nIE5VTExzKS4gV2UgcGxhY2UgdGhlIHJhbmdl cworCQkgKiB3aXRoIG9ubHkgbnVsbHMgbGFzdCwgc28gb25jZSB3ZSBoaXQgb25lIHdlJ3Jl IGRvbmUuCisJCSAqLworCQlpZiAocmFuZ2UtPmFsbF9udWxscykKKwkJeworCQkJcGZyZWUo cmFuZ2UpOworCQkJcmV0dXJuIGZhbHNlOwkvKiBubyBtb3JlIG1hdGNoaW5nIHJhbmdlcyAq LworCQl9CisKKwkJLyoKKwkJICogQ29tcGFyZSB0aGUgcmFuZ2UgdG8gdGhlIHdhdGVybWFy aywgdXNpbmcgZWl0aGVyIHRoZSBtaW52YWwgb3IKKwkJICogbWF4dmFsLCBkZXBlbmRpbmcg b24gQVNDL0RFU0Mgb3JkZXJpbmcuIElmIHRoZSByYW5nZSBwcmVjZWRlcyB0aGUKKwkJICog d2F0ZXJtYXJrLCByZXR1cm4gaXQuIE90aGVyd2lzZSBhYm9ydCwgYWxsIHRoZSBmdXR1cmUg cmFuZ2VzIGFyZQorCQkgKiBlaXRoZXIgbm90IG1hdGNoaW5nIHRoZSB3YXRlcm1hcmsgKHRo YW5rcyB0byBvcmRlcmluZykgb3IgY29udGFpbgorCQkgKiBvbmx5IE5VTEwgdmFsdWVzLgor CQkgKi8KKworCQkvKiB1c2UgbWludmFsIG9yIG1heHZhbCwgZGVwZW5kaW5nIG9uIEFTQyAv IERFU0MgKi8KKwkJdmFsdWUgPSAoYXNjKSA/IHJhbmdlLT5taW5fdmFsdWUgOiByYW5nZS0+ bWF4X3ZhbHVlOworCisJCS8qCisJCSAqIGNvbXBhcmUgaXQgdG8gdGhlIGN1cnJlbnQgd2F0 ZXJtYXJrIChpZiBzZXQpCisJCSAqCisJCSAqIFhYWCBXZSBkb24ndCB1c2UgKC4uLiA8PSAw KSBoZXJlLCBiZWNhdXNlIHRoZW4gd2UnZCBsb2FkIHJhbmdlcworCQkgKiB3aXRoIHRoYXQg bWludmFsIChhbmQgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUpLCBidXQgbW9zdCBvZiB0aGUK KwkJICogcm93cyB3b3VsZCBnbyBpbnRvIHRoZSB0dXBsZXN0b3JlLCBiZWNhdXNlIG9ubHkg cm93cyBtYXRjaGluZyB0aGUKKwkJICogbWludmFsIGV4YWN0bHkgd291bGQgYmUgbG9hZGVk IGludG8gdHVwbGVzb3J0LgorCQkgKi8KKwkJaWYgKEFwcGx5U29ydENvbXBhcmF0b3IodmFs dWUsIGZhbHNlLAorCQkJCQkJCQkgbm9kZS0+YnNfd2F0ZXJtYXJrLCBmYWxzZSwKKwkJCQkJ CQkJICZub2RlLT5ic19zb3J0c3VwcG9ydCkgPCAwKQorCQl7CisJCQlub2RlLT5ic19yYW5n ZSA9IHJhbmdlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlwZnJlZShyYW5nZSk7CisJ CWJyZWFrOworCX0KKworCS8qIG5vdCBhIG1hdGNoaW5nIHJhbmdlLCB3ZSdyZSBkb25lICov CisJdHVwbGVzb3J0X3Jlc3RvcmVwb3Mobm9kZS0+YnNfc2Nhbi0+cmFuZ2VzKTsKKworCXJl dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK2JyaW5zb3J0X3JhbmdlX3dpdGhfbnVs bHMoQnJpblNvcnRTdGF0ZSAqbm9kZSkKK3sKKwlCcmluUmFuZ2UgKnJhbmdlID0gbm9kZS0+ YnNfcmFuZ2U7CisKKwlpZiAocmFuZ2UtPmFsbF9udWxscyB8fCByYW5nZS0+aGFzX251bGxz IHx8IHJhbmdlLT5ub3Rfc3VtbWFyaXplZCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCiticmluc29ydF9yZXNjYW4oQnJpblNvcnRTdGF0 ZSAqbm9kZSkKK3sKKwl0dXBsZXNvcnRfcmVzY2FuKG5vZGUtPmJzX3NjYW4tPnJhbmdlcyk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlJbmRleE5leHQKKyAqCisgKgkJUmV0cmlldmUg YSB0dXBsZSBmcm9tIHRoZSBCcmluU29ydCBub2RlJ3MgY3VycmVudFJlbGF0aW9uCisgKgkJ dXNpbmcgdGhlIGluZGV4IHNwZWNpZmllZCBpbiB0aGUgQnJpblNvcnRTdGF0ZSBpbmZvcm1h dGlvbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIFR1cGxlVGFibGVTbG90ICoKK0lu ZGV4TmV4dChCcmluU29ydFN0YXRlICpub2RlKQoreworCUJyaW5Tb3J0ICAgKnBsYW4gPSAo QnJpblNvcnQgKikgbm9kZS0+c3MucHMucGxhbjsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCVR1 cGxlVGFibGVTbG90ICpzbG90OworCWJvb2wJCW51bGxzRmlyc3Q7CisJYm9vbAkJYXNjOwor CisJLyoKKwkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNj YW4gbm9kZQorCSAqLworCWVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOworCWRpcmVjdGlv biA9IGVzdGF0ZS0+ZXNfZGlyZWN0aW9uOworCisJLyogZmxpcCBkaXJlY3Rpb24gaWYgdGhp cyBpcyBhbiBvdmVyYWxsIGJhY2t3YXJkIHNjYW4gKi8KKwkvKiBYWFggRm9yIEJSSU4gaW5k ZXhlcyB0aGlzIGlzIGFsd2F5cyBmb3J3YXJkIGRpcmVjdGlvbiAqLworCS8vIGlmIChTY2Fu RGlyZWN0aW9uSXNCYWNrd2FyZCgoKEJyaW5Tb3J0ICopIG5vZGUtPnNzLnBzLnBsYW4pLT5p bmRleG9yZGVyZGlyKSkKKwlpZiAoZmFsc2UpCisJeworCQlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQkJZGlyZWN0aW9uID0gQmFja3dhcmRTY2FuRGlyZWN0 aW9uOworCQllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXJlY3Rpb24pKQor CQkJZGlyZWN0aW9uID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisJfQorCXNjYW5kZXNjID0g bm9kZS0+aXNzX1NjYW5EZXNjOworCXNsb3QgPSBub2RlLT5zcy5zc19TY2FuVHVwbGVTbG90 OworCisJbnVsbHNGaXJzdCA9IHBsYW4tPm51bGxzRmlyc3RbMF07CisJYXNjID0gU2NhbkRp cmVjdGlvbklzRm9yd2FyZChwbGFuLT5pbmRleG9yZGVyZGlyKTsKKworCWlmIChzY2FuZGVz YyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogV2UgcmVhY2ggaGVyZSBpZiB0aGUgaW5kZXgg c2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlmIHdlJ3JlCisJCSAqIHNlcmlhbGx5IGV4ZWN1 dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCisJ CSAqLworCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24sCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2Fu S2V5cywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzKTsKKworCQlub2Rl LT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKKworCQkvKgorCQkgKiBJZiBubyBydW4tdGlt ZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCisJ CSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KKwkJICovCisJCWlmIChu b2RlLT5pc3NfTnVtUnVudGltZUtleXMgPT0gMCB8fCBub2RlLT5pc3NfUnVudGltZUtleXNS ZWFkeSkKKwkJCWluZGV4X3Jlc2NhbihzY2FuZGVzYywKKwkJCQkJCSBub2RlLT5pc3NfU2Nh bktleXMsIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKKwkJCQkJCSBub2RlLT5pc3NfT3JkZXJC eUtleXMsIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CisKKwkJLyoKKwkJICogTG9hZCBp bmZvIGFib3V0IEJSSU4gcmFuZ2VzLCBzb3J0IHRoZW0gdG8gbWF0Y2ggdGhlIGRlc2lyZWQg b3JkZXJpbmcuCisJCSAqLworCQlFeGVjSW5pdEJyaW5Tb3J0UmFuZ2VzKHBsYW4sIG5vZGUp OworCQlub2RlLT5ic19waGFzZSA9IEJSSU5TT1JUX1NUQVJUOworCX0KKworCS8qCisJICog b2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBs ZS4KKwkgKi8KKwl3aGlsZSAobm9kZS0+YnNfcGhhc2UgIT0gQlJJTlNPUlRfRklOSVNIRUQp CisJeworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCWVsb2coREVCVUcxLCAicGhh c2UgPSAlZCIsIG5vZGUtPmJzX3BoYXNlKTsKKworCQlBc3NlcnRDaGVja1Jhbmdlcyhub2Rl KTsKKworCQlzd2l0Y2ggKG5vZGUtPmJzX3BoYXNlKQorCQl7CisJCQljYXNlIEJSSU5TT1JU X1NUQVJUOgorCisJCQkJZWxvZyhERUJVRzEsICJwaGFzZSA9IFNUQVJUIik7CisKKwkJCQkv KgorCQkJCSAqIElmIHdlIGhhdmUgTlVMTFMgRklSU1QsIG1vdmUgdG8gdGhhdCBzdGFnZS4g T3RoZXJ3aXNlCisJCQkJICogc3RhcnQgc2Nhbm5pbmcgcmVndWxhciByYW5nZXMuCisJCQkJ ICovCisJCQkJaWYgKG51bGxzRmlyc3QpCisJCQkJCW5vZGUtPmJzX3BoYXNlID0gQlJJTlNP UlRfTE9BRF9OVUxMUzsKKwkJCQllbHNlCisJCQkJeworCQkJCQlub2RlLT5ic19waGFzZSA9 IEJSSU5TT1JUX0xPQURfUkFOR0U7CisKKwkJCQkJLyogc2V0IHRoZSBmaXJzdCB3YXRlcm1h cmsgKi8KKwkJCQkJYnJpbnNvcnRfdXBkYXRlX3dhdGVybWFyayhub2RlLCBhc2MpOworCQkJ CX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIEJSSU5TT1JUX0xPQURfUkFOR0U6CisJCQkJ eworCQkJCQllbG9nKERFQlVHMSwgInBoYXNlID0gTE9BRF9SQU5HRSIpOworCisJCQkJCS8q CisJCQkJCSAqIExvYWQgdHVwbGVzIG1hdGNoaW5nIHRoZSBuZXcgd2F0ZXJtYXJrIGZyb20g dGhlIGV4aXN0aW5nCisJCQkJCSAqIHNwaWxsIHR1cGxlc3RvcmUuIFdlIGRvIHRoaXMgYmVm b3JlIGxvYWRpbmcgdHVwbGVzIGZyb20KKwkJCQkJICogdGhlIG5leHQgY2h1bmsgb2YgcmFu Z2VzLCBiZWNhdXNlIHRob3NlIHdpbGwgYWRkIHR1cGxlcworCQkJCQkgKiB0byB0aGUgc3Bp bGwsIGFuZCB3ZSdkIGVuZCB1cCBwcm9jZXNzaW5nIHRob3NlIHR3aWNlLgorCQkJCQkgKi8K KwkJCQkJYnJpbnNvcnRfbG9hZF9zcGlsbF90dXBsZXMobm9kZSwgdHJ1ZSk7CisKKwkJCQkJ LyoKKwkJCQkJICogTG9hZCB0dXBsZXMgZnJvbSByYW5nZXMsIHVudGlsIHdlIGZpbmQgYSBy YW5nZSB0aGF0IGhhcworCQkJCQkgKiBtaW5fdmFsdWUgPj0gd2F0ZXJtYXJrLgorCQkJCQkg KgorCQkJCQkgKiBYWFggSW4gZmFjdCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gZmluZCBhbiBl eGFjdCBtYXRjaAorCQkJCQkgKiBmb3IgdGhlIHdhdGVybWFyaywgYmVjYXVzZSBvZiBob3cg d2UgcGljayB0aGUgd2F0ZXJtYXJrLgorCQkJCQkgKi8KKwkJCQkJd2hpbGUgKGJyaW5zb3J0 X25leHRfcmFuZ2Uobm9kZSwgYXNjKSkKKwkJCQkJCWJyaW5zb3J0X2xvYWRfdHVwbGVzKG5v ZGUsIHRydWUsIGZhbHNlKTsKKworCQkJCQkvKgorCQkJCQkgKiBJZiB3ZSBoYXZlIGxvYWRl ZCBhbnkgdHVwbGVzIGludG8gdGhlIHR1cGxlc29ydCwgdHJ5CisJCQkJCSAqIHNvcnRpbmcg aXQgYW5kIG1vdmUgdG8gcHJvZHVjaW5nIHRoZSB0dXBsZXMuCisJCQkJCSAqCisJCQkJCSAq IFhYWCBUaGUgcmFuZ2UgbWlnaHQgaGF2ZSBubyByb3dzIG1hdGNoaW5nIHRoZSBjdXJyZW50 CisJCQkJCSAqIHdhdGVybWFyaywgaW4gd2hpY2ggY2FzZSB0aGUgdHVwbGVzb3J0IGlzIGVt cHR5LgorCQkJCQkgKi8KKwkJCQkJaWYgKG5vZGUtPmJzX3R1cGxlc29ydHN0YXRlKQorCQkJ CQl7CisJCQkJCQl0dXBsZXNvcnRfcGVyZm9ybXNvcnQobm9kZS0+YnNfdHVwbGVzb3J0c3Rh dGUpOworI2lmZGVmIEJSSU5TT1JUX0RFQlVHCisJCQkJCQl7CisJCQkJCQkJVHVwbGVzb3J0 SW5zdHJ1bWVudGF0aW9uIHN0YXRzOworCisJCQkJCQkJdHVwbGVzb3J0X2dldF9zdGF0cyhu b2RlLT5ic190dXBsZXNvcnRzdGF0ZSwgJnN0YXRzKTsKKworCQkJCQkJCWVsb2coREVCVUcx LCAibWV0aG9kOiAlcyAgc3BhY2U6ICVsZCBrQiAoJXMpIiwKKwkJCQkJCQkJIHR1cGxlc29y dF9tZXRob2RfbmFtZShzdGF0cy5zb3J0TWV0aG9kKSwKKwkJCQkJCQkJIHN0YXRzLnNwYWNl VXNlZCwKKwkJCQkJCQkJIHR1cGxlc29ydF9zcGFjZV90eXBlX25hbWUoc3RhdHMuc3BhY2VU eXBlKSk7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJfQorCisJCQkJCW5vZGUtPmJzX3BoYXNl ID0gQlJJTlNPUlRfUFJPQ0VTU19SQU5HRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlj YXNlIEJSSU5TT1JUX1BST0NFU1NfUkFOR0U6CisKKwkJCQllbG9nKERFQlVHMSwgInBoYXNl IEJSSU5TT1JUX1BST0NFU1NfUkFOR0UiKTsKKworCQkJCXNsb3QgPSBub2RlLT5zcy5wcy5w c19SZXN1bHRUdXBsZVNsb3Q7CisKKwkJCQkvKiByZWFkIHR1cGxlcyBmcm9tIHRoZSB0dXBs ZXNvcnQgcmFuZ2UsIGFuZCBvdXRwdXQgdGhlbSAqLworCQkJCWlmIChub2RlLT5ic190dXBs ZXNvcnRzdGF0ZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJaWYgKHR1cGxlc29ydF9nZXR0dXBs ZXNsb3Qobm9kZS0+YnNfdHVwbGVzb3J0c3RhdGUsCisJCQkJCQkJCQkJU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXJlY3Rpb24pLAorCQkJCQkJCQkJCWZhbHNlLCBzbG90LCBOVUxMKSkK KwkJCQkJCXJldHVybiBzbG90OworCisJCQkJCS8qIG9uY2Ugd2UncmUgZG9uZSB3aXRoIHRo ZSB0dXBsZXNvcnQsIHJlc2V0IGl0ICovCisJCQkJCXR1cGxlc29ydF9yZXNldChub2RlLT5i c190dXBsZXNvcnRzdGF0ZSk7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBOb3cgdGhhdCB3 ZSBwcm9jZXNzZWQgdHVwbGVzIGZyb20gdGhlIGxhc3QgcmFuZ2UgYmF0Y2gsCisJCQkJICog c2VlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBpZiB3ZSBzaG91bGQgdHJ5IHVwZGF0aW5n CisJCQkJICogdGhlIHdhdGVybWFyayBvbmNlIGFnYWluLiBJZiB0aGUgd2F0ZXJtYXJrIGlz IG5vdCBzZXQsCisJCQkJICogd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIGxhc3QgcmFu Z2UuCisJCQkJICovCisJCQkJaWYgKCFub2RlLT5ic193YXRlcm1hcmtfc2V0KQorCQkJCXsK KwkJCQkJaWYgKG51bGxzRmlyc3QpCisJCQkJCQlub2RlLT5ic19waGFzZSA9IEJSSU5TT1JU X0ZJTklTSEVEOworCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWJyaW5zb3J0X3Jlc2Nhbihu b2RlKTsKKwkJCQkJCW5vZGUtPmJzX3BoYXNlID0gQlJJTlNPUlRfTE9BRF9OVUxMUzsKKwkJ CQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiB1cGR0ZSB0aGUgd2F0ZXJt YXJrIGFuZCB0cnkgcmVhZGluZyBtb3JlIHJhbmdlcyAqLworCQkJCQlub2RlLT5ic19waGFz ZSA9IEJSSU5TT1JUX0xPQURfUkFOR0U7CisJCQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1h cmsobm9kZSwgYXNjKTsKKwkJCQl9CisKKwkJCQlicmVhazsKKworCQkJY2FzZSBCUklOU09S VF9MT0FEX05VTExTOgorCQkJCXsKKwkJCQkJZWxvZyhERUJVRzEsICJwaGFzZSA9IExPQURf TlVMTFMiKTsKKworCQkJCQkvKgorCQkJCQkgKiBUcnkgbG9hZGluZyBhbm90aGVyIHJhbmdl LiBJZiB0aGVyZSBhcmUgbm8gbW9yZSByYW5nZXMsCisJCQkJCSAqIHdlJ3JlIGRvbmUgYW5k IHdlIG1vdmUgZWl0aGVyIHRvIGxvYWRpbmcgcmVndWxhciByYW5nZXMuCisJCQkJCSAqIE90 aGVyd2lzZSBjaGVjayBpZiB0aGlzIHJhbmdlIGNhbiBjb250YWluIAorCQkJCQkgKi8KKwkJ CQkJd2hpbGUgKHRydWUpCisJCQkJCXsKKwkJCQkJCS8qIG5vIG1vcmUgcmFuZ2VzIC0gdGVy bWluYXRlIG9yIGxvYWQgcmVndWxhciByYW5nZXMgKi8KKwkJCQkJCWlmICghYnJpbnNvcnRf bmV4dF9yYW5nZShub2RlLCBhc2MpKQorCQkJCQkJeworCQkJCQkJCWlmIChudWxsc0ZpcnN0 KQorCQkJCQkJCXsKKwkJCQkJCQkJYnJpbnNvcnRfcmVzY2FuKG5vZGUpOworCQkJCQkJCQlu b2RlLT5ic19waGFzZSA9IEJSSU5TT1JUX0xPQURfUkFOR0U7CisJCQkJCQkJCWJyaW5zb3J0 X3VwZGF0ZV93YXRlcm1hcmsobm9kZSwgYXNjKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQor CQkJCQkJCQlub2RlLT5ic19waGFzZSA9IEJSSU5TT1JUX0ZJTklTSEVEOworCisJCQkJCQkJ YnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCS8qIElmIHRoaXMgcmFuZ2UgKG1heSkgaGF2ZSBu dWxscywgcHJvY2VzIHRoZW0gKi8KKwkJCQkJCWlmIChicmluc29ydF9yYW5nZV93aXRoX251 bGxzKG5vZGUpKQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaWYgKG5vZGUtPmJz X3JhbmdlID09IE5VTEwpCisJCQkJCQlicmVhazsKKworCQkJCQkvKgorCQkJCQkgKiBUaGVy ZSBzaG91bGQgYmUgbm90aGluZyBsZWZ0IGluIHRoZSB0dXBsZXN0b3JlLCBiZWNhdXNlCisJ CQkJCSAqIHdlIGZsdXNoIHRoYXQgYXQgdGhlIGVuZCBvZiBwcm9jZXNzaW5nIHJlZ3VsYXIg dHVwbGVzLAorCQkJCQkgKiBhbmQgd2UgZG9uJ3QgcmV0YWluIHR1cGxlcyBiZXR3ZWVuIE5V TEwgcmFuZ2VzLgorCQkJCQkgKi8KKwkJCQkJLy8gQXNzZXJ0KG5vZGUtPmJzX3R1cGxlc3Rv cmUgPT0gTlVMTCk7CisKKwkJCQkJLyoKKwkJCQkJICogTG9hZCB0aGUgbmV4dCB1bnByb2Nl c3NlZCAvIE5VTEwgcmFuZ2UuIFdlIGRvbid0IG5lZWQgdG8KKwkJCQkJICogY2hlY2sgd2F0 ZXJtYXJrIHdoaWxlIHByb2Nlc3NpbmcgTlVMTFMuCisJCQkJCSAqLworCQkJCQlicmluc29y dF9sb2FkX3R1cGxlcyhub2RlLCBmYWxzZSwgdHJ1ZSk7CisKKwkJCQkJbm9kZS0+YnNfcGhh c2UgPSBCUklOU09SVF9QUk9DRVNTX05VTExTOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJ CQlicmVhazsKKworCQkJY2FzZSBCUklOU09SVF9QUk9DRVNTX05VTExTOgorCisJCQkJZWxv ZyhERUJVRzEsICJwaGFzZSA9IExPQURfTlVMTFMiKTsKKworCQkJCXNsb3QgPSBub2RlLT5z cy5wcy5wc19SZXN1bHRUdXBsZVNsb3Q7CisKKwkJCQlBc3NlcnQobm9kZS0+YnNfdHVwbGVz dG9yZSAhPSBOVUxMKTsKKworCQkJCS8qIHJlYWQgdHVwbGVzIGZyb20gdGhlIHR1cGxlc29y dCByYW5nZSwgYW5kIG91dHB1dCB0aGVtICovCisJCQkJaWYgKG5vZGUtPmJzX3R1cGxlc3Rv cmUgIT0gTlVMTCkKKwkJCQl7CisKKwkJCQkJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVz bG90KG5vZGUtPmJzX3R1cGxlc3RvcmUsIHRydWUsIHRydWUsIHNsb3QpKQorCQkJCQkJcmV0 dXJuIHNsb3Q7CisKKwkJCQkJdHVwbGVzdG9yZV9lbmQobm9kZS0+YnNfdHVwbGVzdG9yZSk7 CisJCQkJCW5vZGUtPmJzX3R1cGxlc3RvcmUgPSBOVUxMOworCisJCQkJCW5vZGUtPmJzX3Bo YXNlID0gQlJJTlNPUlRfTE9BRF9OVUxMUzsJLyogbG9hZCBuZXh0IHJhbmdlICovCisJCQkJ fQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQlJJTlNPUlRfRklOSVNIRUQ6CisJCQkJZWxv ZyhFUlJPUiwgInVuZXhwZWN0ZWQgQnJpblNvcnQgcGhhc2U6IEZJTklTSEVEIik7CisJCQkJ YnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIGlmIHdlIGdldCBoZXJlIGl0IG1lYW5zIHRo ZSBpbmRleCBzY2FuIGZhaWxlZCBzbyB3ZSBhcmUgYXQgdGhlIGVuZCBvZgorCSAqIHRoZSBz Y2FuLi4KKwkgKi8KKwlub2RlLT5pc3NfUmVhY2hlZEVuZCA9IHRydWU7CisJcmV0dXJuIEV4 ZWNDbGVhclR1cGxlKHNsb3QpOworfQorCisvKgorICogSW5kZXhSZWNoZWNrIC0tIGFjY2Vz cyBtZXRob2Qgcm91dGluZSB0byByZWNoZWNrIGEgdHVwbGUgaW4gRXZhbFBsYW5RdWFsCisg Ki8KK3N0YXRpYyBib29sCitJbmRleFJlY2hlY2soQnJpblNvcnRTdGF0ZSAqbm9kZSwgVHVw bGVUYWJsZVNsb3QgKnNsb3QpCit7CisJRXhwckNvbnRleHQgKmVjb250ZXh0OworCisJLyoK KwkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQorCSAqLworCWVjb250ZXh0ID0gbm9kZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisKKwkv KiBEb2VzIHRoZSB0dXBsZSBtZWV0IHRoZSBpbmRleHF1YWwgY29uZGl0aW9uPyAqLworCWVj b250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CisJcmV0dXJuIEV4ZWNRdWFsQW5kUmVz ZXQobm9kZS0+aW5kZXhxdWFsb3JpZywgZWNvbnRleHQpOworfQorCisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCQlFeGVjQnJpblNvcnQobm9kZSkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGlj IFR1cGxlVGFibGVTbG90ICoKK0V4ZWNCcmluU29ydChQbGFuU3RhdGUgKnBzdGF0ZSkKK3sK KwlCcmluU29ydFN0YXRlICpub2RlID0gY2FzdE5vZGUoQnJpblNvcnRTdGF0ZSwgcHN0YXRl KTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBydW50aW1lIGtleXMgYW5kIHRoZXkndmUgbm90 IGFscmVhZHkgYmVlbiBzZXQgdXAsIGRvIGl0IG5vdy4KKwkgKi8KKwlpZiAobm9kZS0+aXNz X051bVJ1bnRpbWVLZXlzICE9IDAgJiYgIW5vZGUtPmlzc19SdW50aW1lS2V5c1JlYWR5KQor CQlFeGVjUmVTY2FuKChQbGFuU3RhdGUgKikgbm9kZSk7CisKKwlyZXR1cm4gRXhlY1NjYW4o Jm5vZGUtPnNzLAorCQkJCQkoRXhlY1NjYW5BY2Nlc3NNdGQpIEluZGV4TmV4dCwKKwkJCQkJ KEV4ZWNTY2FuUmVjaGVja010ZCkgSW5kZXhSZWNoZWNrKTsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoJCUV4ZWNSZVNjYW5CcmluU29ydChub2RlKQorICoKKyAqCQlSZWNhbGN1bGF0ZXMg dGhlIHZhbHVlcyBvZiBhbnkgc2NhbiBrZXlzIHdob3NlIHZhbHVlIGRlcGVuZHMgb24KKyAq CQlpbmZvcm1hdGlvbiBrbm93biBhdCBydW50aW1lLCB0aGVuIHJlc2NhbnMgdGhlIGluZGV4 ZWQgcmVsYXRpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitFeGVjUmVTY2Fu QnJpblNvcnQoQnJpblNvcnRTdGF0ZSAqbm9kZSkKK3sKKwkvKgorCSAqIElmIHdlIGFyZSBk b2luZyBydW50aW1lIGtleSBjYWxjdWxhdGlvbnMgKGllLCBhbnkgb2YgdGhlIGluZGV4IGtl eQorCSAqIHZhbHVlcyB3ZXJlbid0IHNpbXBsZSBDb25zdHMpLCBjb21wdXRlIHRoZSBuZXcg a2V5IHZhbHVlcy4gIEJ1dCBmaXJzdCwKKwkgKiByZXNldCB0aGUgY29udGV4dCBzbyB3ZSBk b24ndCBsZWFrIG1lbW9yeSBhcyBlYWNoIG91dGVyIHR1cGxlIGlzCisJICogc2Nhbm5lZC4g IE5vdGUgdGhpcyBhc3N1bWVzIHRoYXQgd2Ugd2lsbCByZWNhbGN1bGF0ZSAqYWxsKiBydW50 aW1lIGtleXMKKwkgKiBvbiBlYWNoIGNhbGwuCisJICovCisJaWYgKG5vZGUtPmlzc19OdW1S dW50aW1lS2V5cyAhPSAwKQorCXsKKwkJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbm9kZS0+ aXNzX1J1bnRpbWVDb250ZXh0OworCisJCVJlc2V0RXhwckNvbnRleHQoZWNvbnRleHQpOwor CQlFeGVjSW5kZXhFdmFsUnVudGltZUtleXMoZWNvbnRleHQsCisJCQkJCQkJCSBub2RlLT5p c3NfUnVudGltZUtleXMsCisJCQkJCQkJCSBub2RlLT5pc3NfTnVtUnVudGltZUtleXMpOwor CX0KKwlub2RlLT5pc3NfUnVudGltZUtleXNSZWFkeSA9IHRydWU7CisKKwkvKiByZXNldCBp bmRleCBzY2FuICovCisJaWYgKG5vZGUtPmlzc19TY2FuRGVzYykKKwkJaW5kZXhfcmVzY2Fu KG5vZGUtPmlzc19TY2FuRGVzYywKKwkJCQkJIG5vZGUtPmlzc19TY2FuS2V5cywgbm9kZS0+ aXNzX051bVNjYW5LZXlzLAorCQkJCQkgbm9kZS0+aXNzX09yZGVyQnlLZXlzLCBub2RlLT5p c3NfTnVtT3JkZXJCeUtleXMpOworCW5vZGUtPmlzc19SZWFjaGVkRW5kID0gZmFsc2U7CisK KwlFeGVjU2NhblJlU2Nhbigmbm9kZS0+c3MpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CQlFeGVjRW5kQnJpblNvcnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorRXhlY0VuZEJy aW5Tb3J0KEJyaW5Tb3J0U3RhdGUgKm5vZGUpCit7CisJUmVsYXRpb24JaW5kZXhSZWxhdGlv bkRlc2M7CisJSW5kZXhTY2FuRGVzYyBJbmRleFNjYW5EZXNjOworCisJLyoKKwkgKiBleHRy YWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIG5vZGUKKwkgKi8KKwlpbmRleFJlbGF0aW9uRGVz YyA9IG5vZGUtPmlzc19SZWxhdGlvbkRlc2M7CisJSW5kZXhTY2FuRGVzYyA9IG5vZGUtPmlz c19TY2FuRGVzYzsKKworCS8qCisJICogY2xlYXIgb3V0IHR1cGxlIHRhYmxlIHNsb3RzCisJ ICovCisJaWYgKG5vZGUtPnNzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCkKKwkJRXhlY0NsZWFy VHVwbGUobm9kZS0+c3MucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwlFeGVjQ2xlYXJUdXBs ZShub2RlLT5zcy5zc19TY2FuVHVwbGVTbG90KTsKKworCS8qCisJICogY2xvc2UgdGhlIGlu ZGV4IHJlbGF0aW9uIChuby1vcCBpZiB3ZSBkaWRuJ3Qgb3BlbiBpdCkKKwkgKi8KKwlpZiAo SW5kZXhTY2FuRGVzYykKKwkJaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjKTsKKwlpZiAo aW5kZXhSZWxhdGlvbkRlc2MpCisJCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb25EZXNjLCBO b0xvY2spOworCisJaWYgKG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyAhPSBOVUxMKQor CQl0YWJsZV9lbmRzY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyk7CisKKwlpZiAo bm9kZS0+YnNfdHVwbGVzdG9yZSAhPSBOVUxMKQorCQl0dXBsZXN0b3JlX2VuZChub2RlLT5i c190dXBsZXN0b3JlKTsKKwlub2RlLT5ic190dXBsZXN0b3JlID0gTlVMTDsKKworCWlmIChu b2RlLT5ic190dXBsZXNvcnRzdGF0ZSAhPSBOVUxMKQorCQl0dXBsZXNvcnRfZW5kKG5vZGUt PmJzX3R1cGxlc29ydHN0YXRlKTsKKwlub2RlLT5ic190dXBsZXNvcnRzdGF0ZSA9IE5VTEw7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjQnJpblNvcnRNYXJrUG9zCisgKgorICog Tm90ZTogd2UgYXNzdW1lIHRoYXQgbm8gY2FsbGVyIGF0dGVtcHRzIHRvIHNldCBhIG1hcmsg YmVmb3JlIGhhdmluZyByZWFkCisgKiBhdCBsZWFzdCBvbmUgdHVwbGUuICBPdGhlcndpc2Us IGlzc19TY2FuRGVzYyBtaWdodCBzdGlsbCBiZSBOVUxMLgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov Cit2b2lkCitFeGVjQnJpblNvcnRNYXJrUG9zKEJyaW5Tb3J0U3RhdGUgKm5vZGUpCit7CisJ RVN0YXRlCSAgICplc3RhdGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsKKwlFUFFTdGF0ZSAgICpl cHFzdGF0ZSA9IGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZTsKKworCWlmIChlcHFzdGF0ZSAhPSBO VUxMKQorCXsKKwkJLyoKKwkJICogV2UgYXJlIGluc2lkZSBhbiBFdmFsUGxhblF1YWwgcmVj aGVjay4gIElmIGEgdGVzdCB0dXBsZSBleGlzdHMgZm9yCisJCSAqIHRoaXMgcmVsYXRpb24s IHRoZW4gd2Ugc2hvdWxkbid0IGFjY2VzcyB0aGUgaW5kZXggYXQgYWxsLiAgV2Ugd291bGQK KwkJICogaW5zdGVhZCBuZWVkIHRvIHNhdmUsIGFuZCBsYXRlciByZXN0b3JlLCB0aGUgc3Rh dGUgb2YgdGhlCisJCSAqIHJlbHN1YnNfZG9uZSBmbGFnLCBzbyB0aGF0IHJlLWZldGNoaW5n IHRoZSB0ZXN0IHR1cGxlIGlzIHBvc3NpYmxlLgorCQkgKiBIb3dldmVyLCBnaXZlbiB0aGUg YXNzdW1wdGlvbiB0aGF0IG5vIGNhbGxlciBzZXRzIGEgbWFyayBhdCB0aGUKKwkJICogc3Rh cnQgb2YgdGhlIHNjYW4sIHdlIGNhbiBvbmx5IGdldCBoZXJlIHdpdGggcmVsc3Vic19kb25l W2ldCisJCSAqIGFscmVhZHkgc2V0LCBhbmQgc28gbm8gc3RhdGUgbmVlZCBiZSBzYXZlZC4K KwkJICovCisJCUluZGV4CQlzY2FucmVsaWQgPSAoKFNjYW4gKikgbm9kZS0+c3MucHMucGxh biktPnNjYW5yZWxpZDsKKworCQlBc3NlcnQoc2NhbnJlbGlkID4gMCk7CisJCWlmIChlcHFz dGF0ZS0+cmVsc3Vic19zbG90W3NjYW5yZWxpZCAtIDFdICE9IE5VTEwgfHwKKwkJCWVwcXN0 YXRlLT5yZWxzdWJzX3Jvd21hcmtbc2NhbnJlbGlkIC0gMV0gIT0gTlVMTCkKKwkJeworCQkJ LyogVmVyaWZ5IHRoZSBjbGFpbSBhYm92ZSAqLworCQkJaWYgKCFlcHFzdGF0ZS0+cmVsc3Vi c19kb25lW3NjYW5yZWxpZCAtIDFdKQorCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIEV4 ZWNCcmluU29ydE1hcmtQb3MgY2FsbCBpbiBFUFEgcmVjaGVjayIpOworCQkJcmV0dXJuOwor CQl9CisJfQorCisJaW5kZXhfbWFya3Bvcyhub2RlLT5pc3NfU2NhbkRlc2MpOworfQorCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgkJRXhlY0luZGV4UmVzdHJQb3MKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq Lwordm9pZAorRXhlY0JyaW5Tb3J0UmVzdHJQb3MoQnJpblNvcnRTdGF0ZSAqbm9kZSkKK3sK KwlFU3RhdGUJICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOworCUVQUVN0YXRlICAg KmVwcXN0YXRlID0gZXN0YXRlLT5lc19lcHFfYWN0aXZlOworCisJaWYgKGVzdGF0ZS0+ZXNf ZXBxX2FjdGl2ZSAhPSBOVUxMKQorCXsKKwkJLyogU2VlIGNvbW1lbnRzIGluIEV4ZWNJbmRl eE1hcmtQb3MgKi8KKwkJSW5kZXgJCXNjYW5yZWxpZCA9ICgoU2NhbiAqKSBub2RlLT5zcy5w cy5wbGFuKS0+c2NhbnJlbGlkOworCisJCUFzc2VydChzY2FucmVsaWQgPiAwKTsKKwkJaWYg KGVwcXN0YXRlLT5yZWxzdWJzX3Nsb3Rbc2NhbnJlbGlkIC0gMV0gIT0gTlVMTCB8fAorCQkJ ZXBxc3RhdGUtPnJlbHN1YnNfcm93bWFya1tzY2FucmVsaWQgLSAxXSAhPSBOVUxMKQorCQl7 CisJCQkvKiBWZXJpZnkgdGhlIGNsYWltIGFib3ZlICovCisJCQlpZiAoIWVwcXN0YXRlLT5y ZWxzdWJzX2RvbmVbc2NhbnJlbGlkIC0gMV0pCisJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgRXhlY0JyaW5Tb3J0UmVzdHJQb3MgY2FsbCBpbiBFUFEgcmVjaGVjayIpOworCQkJcmV0 dXJuOworCQl9CisJfQorCisJaW5kZXhfcmVzdHJwb3Mobm9kZS0+aXNzX1NjYW5EZXNjKTsK K30KKworLyoKKyAqIHNvbWV3aGF0IGNyaXBwbGVkIHZlcnNvbiBvZiBicmluZ2V0Yml0bWFw CisgKgorICogWFhYIFdlIGRvbid0IGNhbGwgY29uc2lzdGVudCBmdW5jdGlvbiAob3IgYW55 IG90aGVyIGZ1bmN0aW9uKSwgc28gdW5saWtlCisgKiBicmluZ2V0Yml0bWFwIHdlIGRvbid0 IHNldCBhIHNlcGFyYXRlIG1lbW9yeSBjb250ZXh0LiBJZiB3ZSBlbmQgdXAgZmlsdGVyaW5n CisgKiB0aGUgcmFuZ2VzIHNvbWVob3cgKGUuZy4gYnkgV0hFUkUgY29uZGl0aW9ucyksIHRo aXMgbWlnaHQgYmUgbmVjZXNzYXJ5LgorICoKKyAqIFhYWCBTaG91bGQgYmUgcGFydCBvZiBv cGNsYXNzLCB0byBzb21ld2hlcmUgaW4gYnJpbl9taW5tYXguYyBldGMuCisgKi8KK3N0YXRp YyB2b2lkCitFeGVjSW5pdEJyaW5Tb3J0UmFuZ2VzKEJyaW5Tb3J0ICpub2RlLCBCcmluU29y dFN0YXRlICpwbGFuc3RhdGUpCit7CisJSW5kZXhTY2FuRGVzYwlzY2FuID0gcGxhbnN0YXRl LT5pc3NfU2NhbkRlc2M7CisJUmVsYXRpb24JaW5kZXhSZWwgPSBwbGFuc3RhdGUtPmlzc19S ZWxhdGlvbkRlc2M7CisJaW50CQkJYXR0bm87CisJRm1nckluZm8gICAqcmFuZ2Vwcm9jOwor CUJyaW5SYW5nZVNjYW5EZXNjICpicnNjYW47CisJYm9vbAkJYXNjOworCisJLyogQlJJTiBT b3J0IG9ubHkgYWxsb3dzIE9SREVSIEJZIHVzaW5nIGEgc2luZ2xlIGNvbHVtbiAqLworCUFz c2VydChub2RlLT5udW1Db2xzID09IDEpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgaW5kZXgg YXR0bnVtIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFRoZSBzb3J0Q29sSWR4IGhhcyBhdHRudW1z CisJICogZnJvbSB0aGUgdGFibGUsIGJ1dCB3ZSBuZWVkIGluZGV4IGF0dG51bSBzbyB0aGF0 IHdlIGNhbiBmZXRjaCB0aGUgcmlnaHQKKwkgKiByYW5nZSBzdW1tYXJ5LgorCSAqCisJICog WFhYIE1heWJlIHdlIGNvdWxkL3Nob3VsZCBhcnJhbmdlIHRoZSB0bGlzdHMgZGlmZmVyZW50 bHksIHNvIHRoYXQgdGhpcworCSAqIGlzIG5vdCBuZWNlc3Nhcnk/CisJICoKKwkgKiBGSVhN RSBUaGlzIGlzIGJyb2tlbiwgbm9kZS0+c29ydENvbElkeFswXSBpcyBhbiBpbmRleCBpbnRv IHRoZSB0YXJnZXQKKwkgKiBsaXN0LCBub3QgdGFibGUgYXR0bnVtLgorCSAqCisJICogRklY TUUgQWxzbyB0aGUgcHJvamVjdGlvbiBpcyBicm9rZW4uCisJICovCisJYXR0bm8gPSAwOwor CWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRuYXR0czsgaSsr KQorCXsKKwkJaWYgKGluZGV4UmVsLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXSA9PSBu b2RlLT5zb3J0Q29sSWR4WzBdKQorCQl7CisJCQlhdHRubyA9IChpICsgMSk7CisJCQlicmVh azsKKwkJfQorCX0KKworCS8qIG1ha2Ugc3VyZSB3ZSBtYXRjaGVkIHRoZSBhcmd1bWVudCAq LworCUFzc2VydChhdHRubyA+IDApOworCisJLyogZ2V0IHByb2NlZHVyZSB0byBnZW5lcmF0 ZSBzb3J0IHJhbmdlcyAqLworCXJhbmdlcHJvYyA9IGluZGV4X2dldHByb2NpbmZvKGluZGV4 UmVsLCBhdHRubywgQlJJTl9QUk9DTlVNX1JBTkdFUyk7CisKKwkvKgorCSAqIFNob3VsZCBu b3QgZ2V0IGhlcmUgd2l0aG91dCBhIHByb2MsIHRoYW5rcyB0byB0aGUgY2hlY2sgYmVmb3Jl CisJICogYnVpbGRpbmcgdGhlIEJyaW5Tb3J0IHBhdGguCisJICovCisJQXNzZXJ0KHJhbmdl cHJvYyAhPSBOVUxMKTsKKworCW1lbXNldCgmcGxhbnN0YXRlLT5ic19zb3J0c3VwcG9ydCwg MCwgc2l6ZW9mKFNvcnRTdXBwb3J0RGF0YSkpOworCVByZXBhcmVTb3J0U3VwcG9ydEZyb21P cmRlcmluZ09wKG5vZGUtPnNvcnRPcGVyYXRvcnNbMF0sICZwbGFuc3RhdGUtPmJzX3NvcnRz dXBwb3J0KTsKKworCS8qCisJICogRGV0ZXJtaW5lIGlmIHRoaXMgQVNDIG9yIERFU0Mgc29y dCwgc28gdGhhdCB3ZSBjYW4gcmVxdWVzdCB0aGUKKwkgKiByYW5nZXMgaW4gdGhlIGFwcHJv cHJpYXRlIG9yZGVyIChvcmRlcmVkIGVpdGhlciBieSBtaW52YWwgZm9yCisJICogQVNDLCBv ciBieSBtYXh2YWwgZm9yIERFU0MpLgorCSAqLworCWFzYyA9IFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQobm9kZS0+aW5kZXhvcmRlcmRpcik7CisKKwkvKgorCSAqIEFzayB0aGUgb3BjbGFz cyB0byBwcm9kdWNlIHJhbmdlcyBpbiBhcHByb3ByaWF0ZSBvcmRlcmluZy4KKwkgKgorCSAq IFhYWCBQYXNzIGluZm8gYWJvdXQgQVNDL0RFU0MsIE5VTExTIEZJUlNUL0xBU1QuCisJICov CisJYnJzY2FuID0gKEJyaW5SYW5nZVNjYW5EZXNjICopIERhdHVtR2V0UG9pbnRlcihGdW5j dGlvbkNhbGwzQ29sbChyYW5nZXByb2MsCisJCQkJCQkJCQkJCUludmFsaWRPaWQsCS8qIEZJ WE1FIHVzZSBwcm9wZXIgY29sbGF0aW9uKi8KKwkJCQkJCQkJCQkJUG9pbnRlckdldERhdHVt KHNjYW4pLAorCQkJCQkJCQkJCQlJbnQxNkdldERhdHVtKGF0dG5vKSwKKwkJCQkJCQkJCQkJ Qm9vbEdldERhdHVtKGFzYykpKTsKKworCS8qIGFsbG9jYXRlIGZvciBzcGFjZSwgYW5kIGFs c28gZm9yIHRoZSBhbHRlcm5hdGl2ZSBvcmRlcmluZyAqLworCXBsYW5zdGF0ZS0+YnNfc2Nh biA9IGJyc2NhbjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWNJbml0QnJpblNvcnQK KyAqCisgKgkJSW5pdGlhbGl6ZXMgdGhlIGluZGV4IHNjYW4ncyBzdGF0ZSBpbmZvcm1hdGlv biwgY3JlYXRlcworICoJCXNjYW4ga2V5cywgYW5kIG9wZW5zIHRoZSBiYXNlIGFuZCBpbmRl eCByZWxhdGlvbnMuCisgKgorICoJCU5vdGU6IGluZGV4IHNjYW5zIGhhdmUgMiBzZXRzIG9m IHN0YXRlIGluZm9ybWF0aW9uIGJlY2F1c2UKKyAqCQkJICB3ZSBoYXZlIHRvIGtlZXAgdHJh Y2sgb2YgdGhlIGJhc2UgcmVsYXRpb24gYW5kIHRoZQorICoJCQkgIGluZGV4IHJlbGF0aW9u LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCitCcmluU29ydFN0YXRlICoKK0V4ZWNJbml0QnJpblNv cnQoQnJpblNvcnQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQoreworCUJy aW5Tb3J0U3RhdGUgKmluZGV4c3RhdGU7CisJUmVsYXRpb24JY3VycmVudFJlbGF0aW9uOwor CUxPQ0tNT0RFCWxvY2ttb2RlOworCisJLyoKKwkgKiBjcmVhdGUgc3RhdGUgc3RydWN0dXJl CisJICovCisJaW5kZXhzdGF0ZSA9IG1ha2VOb2RlKEJyaW5Tb3J0U3RhdGUpOworCWluZGV4 c3RhdGUtPnNzLnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCWluZGV4c3RhdGUtPnNzLnBz LnN0YXRlID0gZXN0YXRlOworCWluZGV4c3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNCcmluU29ydDsKKworCS8qCisJICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgor CSAqCisJICogY3JlYXRlIGV4cHJlc3Npb24gY29udGV4dCBmb3Igbm9kZQorCSAqLworCUV4 ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsICZpbmRleHN0YXRlLT5zcy5wcyk7CisKKwkv KgorCSAqIG9wZW4gdGhlIHNjYW4gcmVsYXRpb24KKwkgKi8KKwljdXJyZW50UmVsYXRpb24g PSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBl ZmxhZ3MpOworCisJaW5kZXhzdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uID0gY3VycmVu dFJlbGF0aW9uOworCWluZGV4c3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7 CS8qIG5vIGhlYXAgc2NhbiBoZXJlICovCisKKwkvKgorCSAqIGdldCB0aGUgc2NhbiB0eXBl IGZyb20gdGhlIHJlbGF0aW9uIGRlc2NyaXB0b3IuCisJICovCisJRXhlY0luaXRTY2FuVHVw bGVTbG90KGVzdGF0ZSwgJmluZGV4c3RhdGUtPnNzLAorCQkJCQkJICBSZWxhdGlvbkdldERl c2NyKGN1cnJlbnRSZWxhdGlvbiksCisJCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1 cnJlbnRSZWxhdGlvbikpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFu ZCBwcm9qZWN0aW9uLgorCSAqLworCUV4ZWNJbml0UmVzdWx0VHlwZVRMKCZpbmRleHN0YXRl LT5zcy5wcyk7CisJRXhlY0Fzc2lnblNjYW5Qcm9qZWN0aW9uSW5mbygmaW5kZXhzdGF0ZS0+ c3MpOworCisJLyoKKwkgKiBpbml0aWFsaXplIGNoaWxkIGV4cHJlc3Npb25zCisJICoKKwkg KiBOb3RlOiB3ZSBkb24ndCBpbml0aWFsaXplIGFsbCBvZiB0aGUgaW5kZXhxdWFsIGV4cHJl c3Npb24sIG9ubHkgdGhlCisJICogc3ViLXBhcnRzIGNvcnJlc3BvbmRpbmcgdG8gcnVudGlt ZSBrZXlzIChzZWUgYmVsb3cpLiAgTGlrZXdpc2UgZm9yCisJICogaW5kZXhvcmRlcmJ5LCBp ZiBhbnkuICBCdXQgdGhlIGluZGV4cXVhbG9yaWcgZXhwcmVzc2lvbiBpcyBhbHdheXMKKwkg KiBpbml0aWFsaXplZCBldmVuIHRob3VnaCBpdCB3aWxsIG9ubHkgYmUgdXNlZCBpbiBzb21l IHVuY29tbW9uIGNhc2VzIC0tLQorCSAqIHdvdWxkIGJlIG5pY2UgdG8gaW1wcm92ZSB0aGF0 LiAgKFByb2JsZW0gaXMgdGhhdCBhbnkgU3ViUGxhbnMgcHJlc2VudAorCSAqIGluIHRoZSBl eHByZXNzaW9uIG11c3QgYmUgZm91bmQgbm93Li4uKQorCSAqLworCWluZGV4c3RhdGUtPnNz LnBzLnF1YWwgPQorCQlFeGVjSW5pdFF1YWwobm9kZS0+c2Nhbi5wbGFuLnF1YWwsIChQbGFu U3RhdGUgKikgaW5kZXhzdGF0ZSk7CisJaW5kZXhzdGF0ZS0+aW5kZXhxdWFsb3JpZyA9CisJ CUV4ZWNJbml0UXVhbChub2RlLT5pbmRleHF1YWxvcmlnLCAoUGxhblN0YXRlICopIGluZGV4 c3RhdGUpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUganVzdCBkb2luZyBFWFBMQUlOIChpZSwg YXJlbid0IGdvaW5nIHRvIHJ1biB0aGUgcGxhbiksIHN0b3AKKwkgKiBoZXJlLiAgVGhpcyBh bGxvd3MgYW4gaW5kZXgtYWR2aXNvciBwbHVnaW4gdG8gRVhQTEFJTiBhIHBsYW4gY29udGFp bmluZworCSAqIHJlZmVyZW5jZXMgdG8gbm9uZXhpc3RlbnQgaW5kZXhlcy4KKwkgKi8KKwlp ZiAoZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKKwkJcmV0dXJuIGluZGV4c3Rh dGU7CisKKwkvKiBPcGVuIHRoZSBpbmRleCByZWxhdGlvbi4gKi8KKwlsb2NrbW9kZSA9IGV4 ZWNfcnRfZmV0Y2gobm9kZS0+c2Nhbi5zY2FucmVsaWQsIGVzdGF0ZSktPnJlbGxvY2ttb2Rl OworCWluZGV4c3RhdGUtPmlzc19SZWxhdGlvbkRlc2MgPSBpbmRleF9vcGVuKG5vZGUtPmlu ZGV4aWQsIGxvY2ttb2RlKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBpbmRleC1zcGVjaWZp YyBzY2FuIHN0YXRlCisJICovCisJaW5kZXhzdGF0ZS0+aXNzX1J1bnRpbWVLZXlzUmVhZHkg PSBmYWxzZTsKKwlpbmRleHN0YXRlLT5pc3NfUnVudGltZUtleXMgPSBOVUxMOworCWluZGV4 c3RhdGUtPmlzc19OdW1SdW50aW1lS2V5cyA9IDA7CisKKwkvKgorCSAqIGJ1aWxkIHRoZSBp bmRleCBzY2FuIGtleXMgZnJvbSB0aGUgaW5kZXggcXVhbGlmaWNhdGlvbgorCSAqLworCUV4 ZWNJbmRleEJ1aWxkU2NhbktleXMoKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlLAorCQkJCQkJ ICAgaW5kZXhzdGF0ZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCSAgIG5vZGUtPmluZGV4 cXVhbCwKKwkJCQkJCSAgIGZhbHNlLAorCQkJCQkJICAgJmluZGV4c3RhdGUtPmlzc19TY2Fu S2V5cywKKwkJCQkJCSAgICZpbmRleHN0YXRlLT5pc3NfTnVtU2NhbktleXMsCisJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+aXNzX1J1bnRpbWVLZXlzLAorCQkJCQkJICAgJmluZGV4c3RhdGUt Pmlzc19OdW1SdW50aW1lS2V5cywKKwkJCQkJCSAgIE5VTEwsCS8qIG5vIEFycmF5S2V5cyAq LworCQkJCQkJICAgTlVMTCk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgcnVudGltZSBrZXlz LCB3ZSBuZWVkIGFuIEV4cHJDb250ZXh0IHRvIGV2YWx1YXRlIHRoZW0uIFRoZQorCSAqIG5v ZGUncyBzdGFuZGFyZCBjb250ZXh0IHdvbid0IGRvIGJlY2F1c2Ugd2Ugd2FudCB0byByZXNl dCB0aGF0IGNvbnRleHQKKwkgKiBmb3IgZXZlcnkgdHVwbGUuICBTbywgYnVpbGQgYW5vdGhl ciBjb250ZXh0IGp1c3QgbGlrZSB0aGUgb3RoZXIgb25lLi4uCisJICogLXRnbCA3LzExLzAw CisJICovCisJaWYgKGluZGV4c3RhdGUtPmlzc19OdW1SdW50aW1lS2V5cyAhPSAwKQorCXsK KwkJRXhwckNvbnRleHQgKnN0ZGVjb250ZXh0ID0gaW5kZXhzdGF0ZS0+c3MucHMucHNfRXhw ckNvbnRleHQ7CisKKwkJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgJmluZGV4c3Rh dGUtPnNzLnBzKTsKKwkJaW5kZXhzdGF0ZS0+aXNzX1J1bnRpbWVDb250ZXh0ID0gaW5kZXhz dGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisJCWluZGV4c3RhdGUtPnNzLnBzLnBzX0V4 cHJDb250ZXh0ID0gc3RkZWNvbnRleHQ7CisJfQorCWVsc2UKKwl7CisJCWluZGV4c3RhdGUt Pmlzc19SdW50aW1lQ29udGV4dCA9IE5VTEw7CisJfQorCisJaW5kZXhzdGF0ZS0+YnNfdHVw bGVzb3J0c3RhdGUgPSBOVUxMOworCWluZGV4c3RhdGUtPmJzX3F1YWwgPSBpbmRleHN0YXRl LT5zcy5wcy5xdWFsOworCWluZGV4c3RhdGUtPnNzLnBzLnF1YWwgPSBOVUxMOworCUV4ZWNJ bml0UmVzdWx0VHVwbGVTbG90VEwoJmluZGV4c3RhdGUtPnNzLnBzLCAmVFRTT3BzTWluaW1h bFR1cGxlKTsKKworCS8qCisJICogYWxsIGRvbmUuCisJICovCisJcmV0dXJuIGluZGV4c3Rh dGU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJCQkJUGFyYWxsZWwgU2NhbiBTdXBwb3J0 CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWNCcmluU29y dEVzdGltYXRlCisgKgorICoJCUNvbXB1dGUgdGhlIGFtb3VudCBvZiBzcGFjZSB3ZSdsbCBu ZWVkIGluIHRoZSBwYXJhbGxlbAorICoJCXF1ZXJ5IERTTSwgYW5kIGluZm9ybSBwY3h0LT5l c3RpbWF0b3IgYWJvdXQgb3VyIG5lZWRzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitF eGVjQnJpblNvcnRFc3RpbWF0ZShCcmluU29ydFN0YXRlICpub2RlLAorCQkJCQkgIFBhcmFs bGVsQ29udGV4dCAqcGN4dCkKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBz LnN0YXRlOworCisJbm9kZS0+aXNzX1BzY2FuTGVuID0gaW5kZXhfcGFyYWxsZWxzY2FuX2Vz dGltYXRlKG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCQkJIGVzdGF0ZS0+ ZXNfc25hcHNob3QpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRv ciwgbm9kZS0+aXNzX1BzY2FuTGVuKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQt PmVzdGltYXRvciwgMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjQnJpblNvcnRJ bml0aWFsaXplRFNNCisgKgorICoJCVNldCB1cCBhIHBhcmFsbGVsIGluZGV4IHNjYW4gZGVz Y3JpcHRvci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorRXhlY0JyaW5Tb3J0SW5pdGlh bGl6ZURTTShCcmluU29ydFN0YXRlICpub2RlLAorCQkJCQkJICAgUGFyYWxsZWxDb250ZXh0 ICpwY3h0KQoreworCUVTdGF0ZQkgICAqZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CisJ UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBpc2NhbjsKKworCXBpc2NhbiA9IHNobV90b2NfYWxs b2NhdGUocGN4dC0+dG9jLCBub2RlLT5pc3NfUHNjYW5MZW4pOworCWluZGV4X3BhcmFsbGVs c2Nhbl9pbml0aWFsaXplKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKKwkJCQkJCQkJ ICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNo b3QsCisJCQkJCQkJCSAgcGlzY2FuKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIG5v ZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgcGlzY2FuKTsKKwlub2RlLT5pc3NfU2Nh bkRlc2MgPQorCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVu dFJlbGF0aW9uLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJ IG5vZGUtPmlzc19OdW1TY2FuS2V5cywKKwkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5 S2V5cywKKwkJCQkJCQkJIHBpc2Nhbik7CisKKwkvKgorCSAqIElmIG5vIHJ1bi10aW1lIGtl eXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwor CSAqIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCisJICovCisJaWYgKG5vZGUtPmlz c19OdW1SdW50aW1lS2V5cyA9PSAwIHx8IG5vZGUtPmlzc19SdW50aW1lS2V5c1JlYWR5KQor CQlpbmRleF9yZXNjYW4obm9kZS0+aXNzX1NjYW5EZXNjLAorCQkJCQkgbm9kZS0+aXNzX1Nj YW5LZXlzLCBub2RlLT5pc3NfTnVtU2NhbktleXMsCisJCQkJCSBub2RlLT5pc3NfT3JkZXJC eUtleXMsIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCQlFeGVjQnJpblNvcnRSZUluaXRpYWxpemVEU00KKyAqCisgKgkJUmVzZXQgc2hhcmVk IHN0YXRlIGJlZm9yZSBiZWdpbm5pbmcgYSBmcmVzaCBzY2FuLgorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCit2b2lkCitFeGVjQnJpblNvcnRSZUluaXRpYWxpemVEU00oQnJpblNvcnRTdGF0ZSAq bm9kZSwKKwkJCQkJCQkgUGFyYWxsZWxDb250ZXh0ICpwY3h0KQoreworCWluZGV4X3BhcmFs bGVscmVzY2FuKG5vZGUtPmlzc19TY2FuRGVzYyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CQlFeGVjQnJpblNvcnRJbml0aWFsaXplV29ya2VyCisgKgorICoJCUNvcHkgcmVsZXZhbnQg aW5mb3JtYXRpb24gZnJvbSBUT0MgaW50byBwbGFuc3RhdGUuCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KK3ZvaWQKK0V4ZWNCcmluU29ydEluaXRpYWxpemVXb3JrZXIoQnJpblNvcnRTdGF0ZSAq bm9kZSwKKwkJCQkJCQkgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpCit7CisJUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBpc2NhbjsKKworCXBpc2NhbiA9IHNobV90b2NfbG9va3Vw KHB3Y3h0LT50b2MsIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwor CW5vZGUtPmlzc19TY2FuRGVzYyA9CisJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2Rl LT5zcy5zc19jdXJyZW50UmVsYXRpb24sCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAorCQkJCQkJCQkgbm9kZS0+ aXNzX051bU9yZGVyQnlLZXlzLAorCQkJCQkJCQkgcGlzY2FuKTsKKworCS8qCisJICogSWYg bm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFo ZWFkIGFuZCBwYXNzCisJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KKwkgKi8K KwlpZiAobm9kZS0+aXNzX051bVJ1bnRpbWVLZXlzID09IDAgfHwgbm9kZS0+aXNzX1J1bnRp bWVLZXlzUmVhZHkpCisJCWluZGV4X3Jlc2Nhbihub2RlLT5pc3NfU2NhbkRlc2MsCisJCQkJ CSBub2RlLT5pc3NfU2NhbktleXMsIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKKwkJCQkJIG5v ZGUtPmlzc19PcmRlckJ5S2V5cywgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDRjNmIxZDFmNTViLi42 NGQxMDNiMTllOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBA IC03OTAsNiArNzkwLDI2MCBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsIGRvdWJsZSBsb29wX2NvdW50LAogCXBhdGgtPnBhdGgudG90YWxfY29z dCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQogCit2b2lkCitjb3N0X2JyaW5zb3J0 KEJyaW5Tb3J0UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIGRvdWJsZSBsb29wX2Nv dW50LAorCQkgICBib29sIHBhcnRpYWxfcGF0aCkKK3sKKwlJbmRleE9wdEluZm8gKmluZGV4 ID0gcGF0aC0+aXBhdGguaW5kZXhpbmZvOworCVJlbE9wdEluZm8gKmJhc2VyZWwgPSBpbmRl eC0+cmVsOworCWFtY29zdGVzdGltYXRlX2Z1bmN0aW9uIGFtY29zdGVzdGltYXRlOworCUxp c3QJICAgKnFwcXVhbHM7CisJQ29zdAkJc3RhcnR1cF9jb3N0ID0gMDsKKwlDb3N0CQlydW5f Y29zdCA9IDA7CisJQ29zdAkJY3B1X3J1bl9jb3N0ID0gMDsKKwlDb3N0CQlpbmRleFN0YXJ0 dXBDb3N0OworCUNvc3QJCWluZGV4VG90YWxDb3N0OworCVNlbGVjdGl2aXR5IGluZGV4U2Vs ZWN0aXZpdHk7CisJZG91YmxlCQlpbmRleENvcnJlbGF0aW9uLAorCQkJCWNzcXVhcmVkOwor CWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3QsCisJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7 CisJQ29zdAkJbWluX0lPX2Nvc3QsCisJCQkJbWF4X0lPX2Nvc3Q7CisJUXVhbENvc3QJcXBx dWFsX2Nvc3Q7CisJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwlkb3VibGUJCXR1cGxlc19mZXRj aGVkOworCWRvdWJsZQkJcGFnZXNfZmV0Y2hlZDsKKwlkb3VibGUJCXJhbmRfaGVhcF9wYWdl czsKKwlkb3VibGUJCWluZGV4X3BhZ2VzOworCisJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGll ZCB0byBiYXNlIHJlbGF0aW9ucyAqLworCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5m bykgJiYKKwkJICAgSXNBKGluZGV4LCBJbmRleE9wdEluZm8pKTsKKwlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKKwlBc3NlcnQoYmFzZXJlbC0+cnRla2luZCA9PSBSVEVfUkVMQVRJ T04pOworCisJLyoKKwkgKiBNYXJrIHRoZSBwYXRoIHdpdGggdGhlIGNvcnJlY3Qgcm93IGVz dGltYXRlLCBhbmQgaWRlbnRpZnkgd2hpY2ggcXVhbHMKKwkgKiB3aWxsIG5lZWQgdG8gYmUg ZW5mb3JjZWQgYXMgcXBxdWFscy4gIFdlIG5lZWQgbm90IGNoZWNrIGFueSBxdWFscyB0aGF0 CisJICogYXJlIGltcGxpZWQgYnkgdGhlIGluZGV4J3MgcHJlZGljYXRlLCBzbyB3ZSBjYW4g dXNlIGluZHJlc3RyaWN0aW5mbyBub3QKKwkgKiBiYXNlcmVzdHJpY3RpbmZvIGFzIHRoZSBs aXN0IG9mIHJlbGV2YW50IHJlc3RyaWN0aW9uIGNsYXVzZXMgZm9yIHRoZQorCSAqIHJlbC4K KwkgKi8KKwlpZiAocGF0aC0+aXBhdGgucGF0aC5wYXJhbV9pbmZvKQorCXsKKwkJcGF0aC0+ aXBhdGgucGF0aC5yb3dzID0gcGF0aC0+aXBhdGgucGF0aC5wYXJhbV9pbmZvLT5wcGlfcm93 czsKKwkJLyogcXBxdWFscyBjb21lIGZyb20gdGhlIHJlbCdzIHJlc3RyaWN0aW9uIGNsYXVz ZXMgYW5kIHBwaV9jbGF1c2VzICovCisJCXFwcXVhbHMgPSBsaXN0X2NvbmNhdChleHRyYWN0 X25vbmluZGV4X2NvbmRpdGlvbnMocGF0aC0+aXBhdGguaW5kZXhpbmZvLT5pbmRyZXN0cmlj dGluZm8sCisJCQkJCQkJCQkJCQkJCSAgcGF0aC0+aXBhdGguaW5kZXhjbGF1c2VzKSwKKwkJ CQkJCQkgIGV4dHJhY3Rfbm9uaW5kZXhfY29uZGl0aW9ucyhwYXRoLT5pcGF0aC5wYXRoLnBh cmFtX2luZm8tPnBwaV9jbGF1c2VzLAorCQkJCQkJCQkJCQkJCQkgIHBhdGgtPmlwYXRoLmlu ZGV4Y2xhdXNlcykpOworCX0KKwllbHNlCisJeworCQlwYXRoLT5pcGF0aC5wYXRoLnJvd3Mg PSBiYXNlcmVsLT5yb3dzOworCQkvKiBxcHF1YWxzIGNvbWUgZnJvbSBqdXN0IHRoZSByZWwn cyByZXN0cmljdGlvbiBjbGF1c2VzICovCisJCXFwcXVhbHMgPSBleHRyYWN0X25vbmluZGV4 X2NvbmRpdGlvbnMocGF0aC0+aXBhdGguaW5kZXhpbmZvLT5pbmRyZXN0cmljdGluZm8sCisJ CQkJCQkJCQkJCSAgcGF0aC0+aXBhdGguaW5kZXhjbGF1c2VzKTsKKwl9CisKKwlpZiAoIWVu YWJsZV9pbmRleHNjYW4pCisJCXN0YXJ0dXBfY29zdCArPSBkaXNhYmxlX2Nvc3Q7CisJLyog d2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlbmFibGVfaW5kZXhvbmx5c2NhbjsgaW5keHBhdGgu YyBkb2VzIHRoYXQgKi8KKworCS8qCisJICogQ2FsbCBpbmRleC1hY2Nlc3MtbWV0aG9kLXNw ZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUgdGhlIHByb2Nlc3NpbmcgY29zdAorCSAqIGZvciBz Y2FubmluZyB0aGUgaW5kZXgsIGFzIHdlbGwgYXMgdGhlIHNlbGVjdGl2aXR5IG9mIHRoZSBp bmRleCAoaWUsCisJICogdGhlIGZyYWN0aW9uIG9mIG1haW4tdGFibGUgdHVwbGVzIHdlIHdp bGwgaGF2ZSB0byByZXRyaWV2ZSkgYW5kIGl0cworCSAqIGNvcnJlbGF0aW9uIHRvIHRoZSBt YWluLXRhYmxlIHR1cGxlIG9yZGVyLiAgV2UgbmVlZCBhIGNhc3QgaGVyZSBiZWNhdXNlCisJ ICogcGF0aG5vZGVzLmggdXNlcyBhIHdlYWsgZnVuY3Rpb24gdHlwZSB0byBhdm9pZCBpbmNs dWRpbmcgYW1hcGkuaC4KKwkgKi8KKwlhbWNvc3Rlc3RpbWF0ZSA9IChhbWNvc3Rlc3RpbWF0 ZV9mdW5jdGlvbikgaW5kZXgtPmFtY29zdGVzdGltYXRlOworCWFtY29zdGVzdGltYXRlKHJv b3QsICZwYXRoLT5pcGF0aCwgbG9vcF9jb3VudCwKKwkJCQkgICAmaW5kZXhTdGFydHVwQ29z dCwgJmluZGV4VG90YWxDb3N0LAorCQkJCSAgICZpbmRleFNlbGVjdGl2aXR5LCAmaW5kZXhD b3JyZWxhdGlvbiwKKwkJCQkgICAmaW5kZXhfcGFnZXMpOworCisJLyoKKwkgKiBTYXZlIGFt Y29zdGVzdGltYXRlJ3MgcmVzdWx0cyBmb3IgcG9zc2libGUgdXNlIGluIGJpdG1hcCBzY2Fu IHBsYW5uaW5nLgorCSAqIFdlIGRvbid0IGJvdGhlciB0byBzYXZlIGluZGV4U3RhcnR1cENv c3Qgb3IgaW5kZXhDb3JyZWxhdGlvbiwgYmVjYXVzZSBhCisJICogYml0bWFwIHNjYW4gZG9l c24ndCBjYXJlIGFib3V0IGVpdGhlci4KKwkgKi8KKwlwYXRoLT5pcGF0aC5pbmRleHRvdGFs Y29zdCA9IGluZGV4VG90YWxDb3N0OworCXBhdGgtPmlwYXRoLmluZGV4c2VsZWN0aXZpdHkg PSBpbmRleFNlbGVjdGl2aXR5OworCisJLyogYWxsIGNvc3RzIGZvciB0b3VjaGluZyBpbmRl eCBpdHNlbGYgaW5jbHVkZWQgaGVyZSAqLworCXN0YXJ0dXBfY29zdCArPSBpbmRleFN0YXJ0 dXBDb3N0OworCXJ1bl9jb3N0ICs9IGluZGV4VG90YWxDb3N0IC0gaW5kZXhTdGFydHVwQ29z dDsKKworCS8qIGVzdGltYXRlIG51bWJlciBvZiBtYWluLXRhYmxlIHR1cGxlcyBmZXRjaGVk ICovCisJdHVwbGVzX2ZldGNoZWQgPSBjbGFtcF9yb3dfZXN0KGluZGV4U2VsZWN0aXZpdHkg KiBiYXNlcmVsLT50dXBsZXMpOworCisJLyogZmV0Y2ggZXN0aW1hdGVkIHBhZ2UgY29zdHMg Zm9yIHRhYmxlc3BhY2UgY29udGFpbmluZyB0YWJsZSAqLworCWdldF90YWJsZXNwYWNlX3Bh Z2VfY29zdHMoYmFzZXJlbC0+cmVsdGFibGVzcGFjZSwKKwkJCQkJCQkgICZzcGNfcmFuZG9t X3BhZ2VfY29zdCwKKwkJCQkJCQkgICZzcGNfc2VxX3BhZ2VfY29zdCk7CisKKwkvKi0tLS0t LS0tLS0KKwkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgbWFpbi10YWJsZSBwYWdlcyBmZXRjaGVk LCBhbmQgY29tcHV0ZSBJL08gY29zdC4KKwkgKgorCSAqIFdoZW4gdGhlIGluZGV4IG9yZGVy aW5nIGlzIHVuY29ycmVsYXRlZCB3aXRoIHRoZSB0YWJsZSBvcmRlcmluZywKKwkgKiB3ZSB1 c2UgYW4gYXBwcm94aW1hdGlvbiBwcm9wb3NlZCBieSBNYWNrZXJ0IGFuZCBMb2htYW4gKHNl ZQorCSAqIGluZGV4X3BhZ2VzX2ZldGNoZWQoKSBmb3IgZGV0YWlscykgdG8gY29tcHV0ZSB0 aGUgbnVtYmVyIG9mIHBhZ2VzCisJICogZmV0Y2hlZCwgYW5kIHRoZW4gY2hhcmdlIHNwY19y YW5kb21fcGFnZV9jb3N0IHBlciBwYWdlIGZldGNoZWQuCisJICoKKwkgKiBXaGVuIHRoZSBp bmRleCBvcmRlcmluZyBpcyBleGFjdGx5IGNvcnJlbGF0ZWQgd2l0aCB0aGUgdGFibGUgb3Jk ZXJpbmcKKwkgKiAoanVzdCBhZnRlciBhIENMVVNURVIsIGZvciBleGFtcGxlKSwgdGhlIG51 bWJlciBvZiBwYWdlcyBmZXRjaGVkIHNob3VsZAorCSAqIGJlIGV4YWN0bHkgc2VsZWN0aXZp dHkgKiB0YWJsZV9zaXplLiAgV2hhdCdzIG1vcmUsIGFsbCBidXQgdGhlIGZpcnN0CisJICog d2lsbCBiZSBzZXF1ZW50aWFsIGZldGNoZXMsIG5vdCB0aGUgcmFuZG9tIGZldGNoZXMgdGhh dCBvY2N1ciBpbiB0aGUKKwkgKiB1bmNvcnJlbGF0ZWQgY2FzZS4gIFNvIGlmIHRoZSBudW1i ZXIgb2YgcGFnZXMgaXMgbW9yZSB0aGFuIDEsIHdlCisJICogb3VnaHQgdG8gY2hhcmdlCisJ ICoJCXNwY19yYW5kb21fcGFnZV9jb3N0ICsgKHBhZ2VzX2ZldGNoZWQgLSAxKSAqIHNwY19z ZXFfcGFnZV9jb3N0CisJICogRm9yIHBhcnRpYWxseS1jb3JyZWxhdGVkIGluZGV4ZXMsIHdl IG91Z2h0IHRvIGNoYXJnZSBzb21ld2hlcmUgYmV0d2VlbgorCSAqIHRoZXNlIHR3byBlc3Rp bWF0ZXMuICBXZSBjdXJyZW50bHkgaW50ZXJwb2xhdGUgbGluZWFybHkgYmV0d2VlbiB0aGUK KwkgKiBlc3RpbWF0ZXMgYmFzZWQgb24gdGhlIGNvcnJlbGF0aW9uIHNxdWFyZWQgKFhYWCBp cyB0aGF0IGFwcHJvcHJpYXRlPykuCisJICoKKwkgKiBJZiBpdCdzIGFuIGluZGV4LW9ubHkg c2NhbiwgdGhlbiB3ZSB3aWxsIG5vdCBuZWVkIHRvIGZldGNoIGFueSBoZWFwCisJICogcGFn ZXMgZm9yIHdoaWNoIHRoZSB2aXNpYmlsaXR5IG1hcCBzaG93cyBhbGwgdHVwbGVzIGFyZSB2 aXNpYmxlLgorCSAqIEhlbmNlLCByZWR1Y2UgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgaGVh cCBmZXRjaGVzIGFjY29yZGluZ2x5LgorCSAqIFdlIHVzZSB0aGUgbWVhc3VyZWQgZnJhY3Rp b24gb2YgdGhlIGVudGlyZSBoZWFwIHRoYXQgaXMgYWxsLXZpc2libGUsCisJICogd2hpY2gg bWlnaHQgbm90IGJlIHBhcnRpY3VsYXJseSByZWxldmFudCB0byB0aGUgc3Vic2V0IG9mIHRo ZSBoZWFwCisJICogdGhhdCB0aGlzIHF1ZXJ5IHdpbGwgZmV0Y2g7IGJ1dCBpdCdzIG5vdCBj bGVhciBob3cgdG8gZG8gYmV0dGVyLgorCSAqLS0tLS0tLS0tLQorCSAqLworCWlmIChsb29w X2NvdW50ID4gMSkKKwl7CisJCS8qCisJCSAqIEZvciByZXBlYXRlZCBpbmRleHNjYW5zLCB0 aGUgYXBwcm9wcmlhdGUgZXN0aW1hdGUgZm9yIHRoZQorCQkgKiB1bmNvcnJlbGF0ZWQgY2Fz ZSBpcyB0byBzY2FsZSB1cCB0aGUgbnVtYmVyIG9mIHR1cGxlcyBmZXRjaGVkIGluCisJCSAq IHRoZSBNYWNrZXJ0IGFuZCBMb2htYW4gZm9ybXVsYSBieSB0aGUgbnVtYmVyIG9mIHNjYW5z LCBzbyB0aGF0IHdlCisJCSAqIGVzdGltYXRlIHRoZSBudW1iZXIgb2YgcGFnZXMgZmV0Y2hl ZCBieSBhbGwgdGhlIHNjYW5zOyB0aGVuCisJCSAqIHByby1yYXRlIHRoZSBjb3N0cyBmb3Ig b25lIHNjYW4uICBJbiB0aGlzIGNhc2Ugd2UgYXNzdW1lIGFsbCB0aGUKKwkJICogZmV0Y2hl cyBhcmUgcmFuZG9tIGFjY2Vzc2VzLgorCQkgKi8KKwkJcGFnZXNfZmV0Y2hlZCA9IGluZGV4 X3BhZ2VzX2ZldGNoZWQodHVwbGVzX2ZldGNoZWQgKiBsb29wX2NvdW50LAorCQkJCQkJCQkJ CQliYXNlcmVsLT5wYWdlcywKKwkJCQkJCQkJCQkJKGRvdWJsZSkgaW5kZXgtPnBhZ2VzLAor CQkJCQkJCQkJCQlyb290KTsKKworCQlyYW5kX2hlYXBfcGFnZXMgPSBwYWdlc19mZXRjaGVk OworCisJCW1heF9JT19jb3N0ID0gKHBhZ2VzX2ZldGNoZWQgKiBzcGNfcmFuZG9tX3BhZ2Vf Y29zdCkgLyBsb29wX2NvdW50OworCisJCS8qCisJCSAqIEluIHRoZSBwZXJmZWN0bHkgY29y cmVsYXRlZCBjYXNlLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvdWNoZWQgYnkKKwkJICogZWFj aCBzY2FuIGlzIHNlbGVjdGl2aXR5ICogdGFibGVfc2l6ZSwgYW5kIHdlIGNhbiB1c2UgdGhl IE1hY2tlcnQKKwkJICogYW5kIExvaG1hbiBmb3JtdWxhIGF0IHRoZSBwYWdlIGxldmVsIHRv IGVzdGltYXRlIGhvdyBtdWNoIHdvcmsgaXMKKwkJICogc2F2ZWQgYnkgY2FjaGluZyBhY3Jv c3Mgc2NhbnMuICBXZSBzdGlsbCBhc3N1bWUgYWxsIHRoZSBmZXRjaGVzIGFyZQorCQkgKiBy YW5kb20sIHRob3VnaCwgd2hpY2ggaXMgYW4gb3ZlcmVzdGltYXRlIHRoYXQncyBoYXJkIHRv IGNvcnJlY3QgZm9yCisJCSAqIHdpdGhvdXQgZG91YmxlLWNvdW50aW5nIHRoZSBjYWNoZSBl ZmZlY3RzLiAgKEJ1dCBpbiBtb3N0IGNhc2VzCisJCSAqIHdoZXJlIHN1Y2ggYSBwbGFuIGlz IGFjdHVhbGx5IGludGVyZXN0aW5nLCBvbmx5IG9uZSBwYWdlIHdvdWxkIGdldAorCQkgKiBm ZXRjaGVkIHBlciBzY2FuIGFueXdheSwgc28gaXQgc2hvdWxkbid0IG1hdHRlciBtdWNoLikK KwkJICovCisJCXBhZ2VzX2ZldGNoZWQgPSBjZWlsKGluZGV4U2VsZWN0aXZpdHkgKiAoZG91 YmxlKSBiYXNlcmVsLT5wYWdlcyk7CisKKwkJcGFnZXNfZmV0Y2hlZCA9IGluZGV4X3BhZ2Vz X2ZldGNoZWQocGFnZXNfZmV0Y2hlZCAqIGxvb3BfY291bnQsCisJCQkJCQkJCQkJCWJhc2Vy ZWwtPnBhZ2VzLAorCQkJCQkJCQkJCQkoZG91YmxlKSBpbmRleC0+cGFnZXMsCisJCQkJCQkJ CQkJCXJvb3QpOworCisJCW1pbl9JT19jb3N0ID0gKHBhZ2VzX2ZldGNoZWQgKiBzcGNfcmFu ZG9tX3BhZ2VfY29zdCkgLyBsb29wX2NvdW50OworCX0KKwllbHNlCisJeworCQkvKgorCQkg KiBOb3JtYWwgY2FzZTogYXBwbHkgdGhlIE1hY2tlcnQgYW5kIExvaG1hbiBmb3JtdWxhLCBh bmQgdGhlbgorCQkgKiBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoYXQgYW5kIHRoZSBjb3JyZWxh dGlvbi1kZXJpdmVkIHJlc3VsdC4KKwkJICovCisJCXBhZ2VzX2ZldGNoZWQgPSBpbmRleF9w YWdlc19mZXRjaGVkKHR1cGxlc19mZXRjaGVkLAorCQkJCQkJCQkJCQliYXNlcmVsLT5wYWdl cywKKwkJCQkJCQkJCQkJKGRvdWJsZSkgaW5kZXgtPnBhZ2VzLAorCQkJCQkJCQkJCQlyb290 KTsKKworCQlyYW5kX2hlYXBfcGFnZXMgPSBwYWdlc19mZXRjaGVkOworCisJCS8qIG1heF9J T19jb3N0IGlzIGZvciB0aGUgcGVyZmVjdGx5IHVuY29ycmVsYXRlZCBjYXNlIChjc3F1YXJl ZD0wKSAqLworCQltYXhfSU9fY29zdCA9IHBhZ2VzX2ZldGNoZWQgKiBzcGNfcmFuZG9tX3Bh Z2VfY29zdDsKKworCQkvKiBtaW5fSU9fY29zdCBpcyBmb3IgdGhlIHBlcmZlY3RseSBjb3Jy ZWxhdGVkIGNhc2UgKGNzcXVhcmVkPTEpICovCisJCXBhZ2VzX2ZldGNoZWQgPSBjZWlsKGlu ZGV4U2VsZWN0aXZpdHkgKiAoZG91YmxlKSBiYXNlcmVsLT5wYWdlcyk7CisKKwkJaWYgKHBh Z2VzX2ZldGNoZWQgPiAwKQorCQl7CisJCQltaW5fSU9fY29zdCA9IHNwY19yYW5kb21fcGFn ZV9jb3N0OworCQkJaWYgKHBhZ2VzX2ZldGNoZWQgPiAxKQorCQkJCW1pbl9JT19jb3N0ICs9 IChwYWdlc19mZXRjaGVkIC0gMSkgKiBzcGNfc2VxX3BhZ2VfY29zdDsKKwkJfQorCQllbHNl CisJCQltaW5fSU9fY29zdCA9IDA7CisJfQorCisJaWYgKHBhcnRpYWxfcGF0aCkKKwl7CisJ CS8qCisJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgd29ya2VycyByZXF1 aXJlZCB0byBzY2FuIGluZGV4LiBVc2UKKwkJICogdGhlIG51bWJlciBvZiBoZWFwIHBhZ2Vz IGNvbXB1dGVkIGNvbnNpZGVyaW5nIGhlYXAgZmV0Y2hlcyB3b24ndCBiZQorCQkgKiBzZXF1 ZW50aWFsIGFzIGZvciBwYXJhbGxlbCBzY2FucyB0aGUgcGFnZXMgYXJlIGFjY2Vzc2VkIGlu IHJhbmRvbQorCQkgKiBvcmRlci4KKwkJICovCisJCXBhdGgtPmlwYXRoLnBhdGgucGFyYWxs ZWxfd29ya2VycyA9IGNvbXB1dGVfcGFyYWxsZWxfd29ya2VyKGJhc2VyZWwsCisJCQkJCQkJ CQkJCQkJCQkgIHJhbmRfaGVhcF9wYWdlcywKKwkJCQkJCQkJCQkJCQkJCSAgaW5kZXhfcGFn ZXMsCisJCQkJCQkJCQkJCQkJCQkgIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIp OworCisJCS8qCisJCSAqIEZhbGwgb3V0IGlmIHdvcmtlcnMgY2FuJ3QgYmUgYXNzaWduZWQg Zm9yIHBhcmFsbGVsIHNjYW4sIGJlY2F1c2UgaW4KKwkJICogc3VjaCBhIGNhc2UgdGhpcyBw YXRoIHdpbGwgYmUgcmVqZWN0ZWQuICBTbyB0aGVyZSBpcyBubyBiZW5lZml0IGluCisJCSAq IGRvaW5nIGV4dHJhIGNvbXB1dGF0aW9uLgorCQkgKi8KKwkJaWYgKHBhdGgtPmlwYXRoLnBh dGgucGFyYWxsZWxfd29ya2VycyA8PSAwKQorCQkJcmV0dXJuOworCisJCXBhdGgtPmlwYXRo LnBhdGgucGFyYWxsZWxfYXdhcmUgPSB0cnVlOworCX0KKworCS8qCisJICogTm93IGludGVy cG9sYXRlIGJhc2VkIG9uIGVzdGltYXRlZCBpbmRleCBvcmRlciBjb3JyZWxhdGlvbiB0byBn ZXQgdG90YWwKKwkgKiBkaXNrIEkvTyBjb3N0IGZvciBtYWluIHRhYmxlIGFjY2Vzc2VzLgor CSAqLworCWNzcXVhcmVkID0gaW5kZXhDb3JyZWxhdGlvbiAqIGluZGV4Q29ycmVsYXRpb247 CisKKwlydW5fY29zdCArPSBtYXhfSU9fY29zdCArIGNzcXVhcmVkICogKG1pbl9JT19jb3N0 IC0gbWF4X0lPX2Nvc3QpOworCisJLyoKKwkgKiBFc3RpbWF0ZSBDUFUgY29zdHMgcGVyIHR1 cGxlLgorCSAqCisJICogV2hhdCB3ZSB3YW50IGhlcmUgaXMgY3B1X3R1cGxlX2Nvc3QgcGx1 cyB0aGUgZXZhbHVhdGlvbiBjb3N0cyBvZiBhbnkKKwkgKiBxdWFsIGNsYXVzZXMgdGhhdCB3 ZSBoYXZlIHRvIGV2YWx1YXRlIGFzIHFwcXVhbHMuCisJICovCisJY29zdF9xdWFsX2V2YWwo JnFwcXVhbF9jb3N0LCBxcHF1YWxzLCByb290KTsKKworCXN0YXJ0dXBfY29zdCArPSBxcHF1 YWxfY29zdC5zdGFydHVwOworCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFw cXVhbF9jb3N0LnBlcl90dXBsZTsKKworCWNwdV9ydW5fY29zdCArPSBjcHVfcGVyX3R1cGxl ICogdHVwbGVzX2ZldGNoZWQ7CisKKwkvKiB0bGlzdCBldmFsIGNvc3RzIGFyZSBwYWlkIHBl ciBvdXRwdXQgcm93LCBub3QgcGVyIHR1cGxlIHNjYW5uZWQgKi8KKwlzdGFydHVwX2Nvc3Qg Kz0gcGF0aC0+aXBhdGgucGF0aC5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CisJY3B1X3J1 bl9jb3N0ICs9IHBhdGgtPmlwYXRoLnBhdGgucGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUg KiBwYXRoLT5pcGF0aC5wYXRoLnJvd3M7CisKKwkvKiBBZGp1c3QgY29zdGluZyBmb3IgcGFy YWxsZWxpc20sIGlmIHVzZWQuICovCisJaWYgKHBhdGgtPmlwYXRoLnBhdGgucGFyYWxsZWxf d29ya2VycyA+IDApCisJeworCQlkb3VibGUJCXBhcmFsbGVsX2Rpdmlzb3IgPSBnZXRfcGFy YWxsZWxfZGl2aXNvcigmcGF0aC0+aXBhdGgucGF0aCk7CisKKwkJcGF0aC0+aXBhdGgucGF0 aC5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5pcGF0aC5wYXRoLnJvd3MgLyBwYXJhbGxl bF9kaXZpc29yKTsKKworCQkvKiBUaGUgQ1BVIGNvc3QgaXMgZGl2aWRlZCBhbW9uZyBhbGwg dGhlIHdvcmtlcnMuICovCisJCWNwdV9ydW5fY29zdCAvPSBwYXJhbGxlbF9kaXZpc29yOwor CX0KKworCXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKKworCXBhdGgtPmlwYXRoLnBhdGgu c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OworCXBhdGgtPmlwYXRoLnBhdGgudG90YWxf Y29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OworfQorCiAvKgogICogZXh0cmFjdF9u b25pbmRleF9jb25kaXRpb25zCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKaW5kZXggYzMxZmNjOTE3ZGYuLjE4YjYyNTQ2MGViIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTE3LDEyICsxNywxNiBAQAogCiAjaW5jbHVk ZSA8bWF0aC5oPgogCisjaW5jbHVkZSAiYWNjZXNzL2JyaW5faW50ZXJuYWwuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIK ICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL3N1cHBvcnRub2Rlcy5oIgpAQCAtMzIsMTAgKzM2LDEzIEBA CiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3By ZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCisjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvc2VsZnVuY3MuaCIKIAogCitib29sCQllbmFibGVfYnJpbnNvcnQgPSB0cnVlOwor CiAvKiBYWFggc2VlIFBhcnRDb2xsTWF0Y2hlc0V4cHJDb2xsICovCiAjZGVmaW5lIEluZGV4 Q29sbE1hdGNoZXNFeHByQ29sbChpZHhjb2xsYXRpb24sIGV4cHJjb2xsYXRpb24pIFwKIAko KGlkeGNvbGxhdGlvbikgPT0gSW52YWxpZE9pZCB8fCAoaWR4Y29sbGF0aW9uKSA9PSAoZXhw cmNvbGxhdGlvbikpCkBAIC0xMTI3LDYgKzExMzQsMTg1IEBAIGJ1aWxkX2luZGV4X3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCX0KIAl9CiAKKwkvKgor CSAqIElmIHRoaXMgaXMgYSBCUklOIGluZGV4IHdpdGggc3VpdGFibGUgb3BjbGFzcyAobWlu bWF4IG9yIHN1Y2gpLCB3ZSBtYXkKKwkgKiB0cnkgZG9pbmcgQlJJTiBzb3J0LiBCUklOIGlu ZGV4ZXMgYXJlIG5vdCBvcmRlcmVkIGFuZCBhbWNhbm9yZGVyYnlvcAorCSAqIGlzIHNldCB0 byBmYWxzZSwgc28gd2UgcHJvYmFibHkgd2lsbCBuZWVkIHNvbWUgbmV3IG9wY2xhc3MgZmxh ZyB0bworCSAqIG1hcmsgaW5kZXhlcyB0aGF0IHN1cHBvcnQgdGhpcy4KKwkgKi8KKwlpZiAo ZW5hYmxlX2JyaW5zb3J0ICYmIHBhdGhrZXlzX3Bvc3NpYmx5X3VzZWZ1bCkKKwl7CisJCUxp c3RDZWxsICpsYzsKKwkJUmVsYXRpb24gcmVsMiA9IHJlbGF0aW9uX29wZW4oaW5kZXgtPmlu ZGV4b2lkLCBOb0xvY2spOworCQlpbnQJCSBpZHg7CisKKwkJLyoKKwkJICogVHJ5IGdlbmVy YXRpbmcgc29ydGVkIHBhdGhzIGZvciBlYWNoIGtleSB3aXRoIHRoZSByaWdodCBvcGNsYXNz LgorCQkgKi8KKwkJaWR4ID0gLTE7CisJCWZvcmVhY2gobGMsIGluZGV4LT5pbmRleHRsaXN0 KQorCQl7CisJCQlUYXJnZXRFbnRyeQkgICAqaW5kZXh0bGUgPSAoVGFyZ2V0RW50cnkgKikg bGZpcnN0KGxjKTsKKwkJCUJyaW5Tb3J0UGF0aCAgICpicGF0aDsKKwkJCU9pZAkJCQlyYW5n ZXByb2M7CisJCQlBdHRyTnVtYmVyCQlhdHRudW07CisKKwkJCWlkeCsrOworCQkJYXR0bnVt ID0gKGlkeCArIDEpOworCisJCQkvKiBza2lwIGV4cHJlc3Npb25zIGZvciBub3cgKi8KKwkJ CWlmICghQXR0cmlidXRlTnVtYmVySXNWYWxpZChpbmRleC0+aW5kZXhrZXlzW2lkeF0pKQor CQkJCWNvbnRpbnVlOworCisJCQkvKiBYWFggaWdub3JlIG5vbi1CUklOIGluZGV4ZXMgKi8K KwkJCWlmIChyZWwyLT5yZF9yZWwtPnJlbGFtICE9IEJSSU5fQU1fT0lEKQorCQkJCWNvbnRp bnVlOworCisJCQkvKgorCQkJICogWFhYIElnbm9yZSBrZXlzIG5vdCB1c2luZyBhbiBvcGNs YXNzIHdpdGggdGhlICJyYW5nZXMiIHByb2MuCisJCQkgKiBGb3Igbm93IHdlIG9ubHkgZG8g dGhpcyBmb3Igc29tZSBtaW5tYXggb3BjbGFzc2VzLCBidXQgYWRkaW5nCisJCQkgKiBpdCB0 byBhbGwgbWlubWF4IGlzIHNpbXBsZSwgYW5kIGFkZGluZyBpdCB0byBtaW5tYXgtbXVsdGkK KwkJCSAqIHNob3VsZCBub3QgYmUgdmVyeSBoYXJkLgorCQkJICovCisJCQlyYW5nZXByb2Mg PSBpbmRleF9nZXRwcm9jaWQocmVsMiwgYXR0bnVtLCBCUklOX1BST0NOVU1fUkFOR0VTKTsK KwkJCWlmICghT2lkSXNWYWxpZChyYW5nZXByb2MpKQorCQkJCWNvbnRpbnVlOworCisJCQkv KgorCQkJICogWFhYIHN0dWZmIGV4dHJhY3RlZCBmcm9tIGJ1aWxkX2luZGV4X3BhdGhrZXlz LCBleGNlcHQgdGhhdCB3ZQorCQkJICogb25seSBkZWFsIHdpdGggYSBzaW5nbGUgaW5kZXgg a2V5IChwcm9kdWNpbmcgYSBzaW5nbGUgcGF0aGtleSksCisJCQkgKiBzbyB3ZSBvbmx5IHNv cnQgb24gYSBzaW5nbGUgY29sdW1uLiBJIGd1ZXNzIHdlIGNvdWxkIHVzZSBtb3JlCisJCQkg KiBpbmRleCBrZXlzIGFuZCBzb3J0IG9uIG1vcmUgZXhwcmVzc2lvbnM/IFdvdWxkIHRoYXQg bWVhbiB0aGVzZQorCQkJICoga2V5cyBuZWVkIHRvIGJlIHJhdGhlciB3ZWxsIGNvcnJlbGF0 ZWQ/IEluIGFueSBjYXNlLCBpdCBzZWVtcworCQkJICogcmF0aGVyIGNvbXBsZXggdG8gaW1w bGVtZW50LCBzbyBJIGxlYXZlIGl0IGFzIGEgcG9zc2libGUKKwkJCSAqIGZ1dHVyZSBpbXBy b3ZlbWVudC4KKwkJCSAqCisJCQkgKiBYWFggVGhpcyBjb3VsZCBhbHNvIHVzZSB0aGUgb3Ro ZXIgQlJJTiBrZXlzIChldmVuIGZyb20gb3RoZXIKKwkJCSAqIGluZGV4ZXMpIGluIGEgZGlm ZmVyZW50IHdheSAtIHdlIG1pZ2h0IHVzZSB0aGUgb3RoZXIgcmFuZ2VzCisJCQkgKiB0byBx dWlja2x5IGVsaW1pbmF0ZSBzb21lIG9mIHRoZSBjaHVua3MsIGVzc2VudGlhbGx5IGxpa2Ug YQorCQkJICogYml0bWFwLCBidXQgbWF5YmUgd2l0aG91dCB1c2luZyB0aGUgYml0bWFwLiBP ciB3ZSBtaWdodCB1c2UKKwkJCSAqIG90aGVyIGluZGV4ZXMgdGhyb3VnaCBiaXRtYXBzLgor CQkJICoKKwkJCSAqIFhYWCBUaGlzIGZha2VzIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIGJl Y2F1c2Ugd2UgZG9uJ3Qgc3RvcmUKKwkJCSAqIHRoZSBidHJlZSBvcGNsYXNzIGluIHRoZSBp bmRleCwgaW5zdGVhZCB3ZSB1c2UgdGhlIGRlZmF1bHQKKwkJCSAqIG9uZSBmb3IgdGhlIGtl eSBkYXRhIHR5cGUuIEFuZCBCUklOIGRvZXMgbm90IGFsbG93IHNwZWNpZnlpbmcKKwkJCSAq CisJCQkgKiBYWFggV2UgZG9uJ3QgYWRkIHRoZSBwYXRoIHRvIHJlc3VsdCwgYmVjYXVzZSB0 aGlzIGZ1bmN0aW9uIGlzCisJCQkgKiBzdXBwb3NlZCB0byBnZW5lcmF0ZSBJbmRleFBhdGhz LiBJbnN0ZWFkLCB3ZSBqdXN0IGFkZCB0aGUgcGF0aAorCQkJICogdXNpbmcgYWRkX3BhdGgo KS4gV2Ugc2hvdWxkIGJlIGJ1aWxkaW5nIHRoaXMgaW4gYSBkaWZmZXJlbnQKKwkJCSAqIHBs YWNlLCBwZXJoYXBzIGluIGNyZWF0ZV9pbmRleF9wYXRocygpIG9yIHNvLgorCQkJICoKKwkJ CSAqIFhYWCBCeSBidWlsZGluZyBpdCBlbHNld2hlcmUsIHdlIGNvdWxkIGFsc28gbGV2ZXJh Z2UgdGhlIGluZGV4CisJCQkgKiBwYXRocyB3ZSd2ZSBidWlsdCBoZXJlLCBwYXJ0aWN1bGFy bHkgdGhlIGJpdG1hcCBpbmRleCBwYXRocywKKwkJCSAqIHdoaWNoIHdlIGNvdWxkIHVzZSB0 byBlbGltaW5hdGUgbWFueSBvZiB0aGUgcmFuZ2VzLgorCQkJICoKKwkJCSAqIFhYWCBXZSBk b24ndCBoYXZlIGFueSBleHBsaWNpdCBvcmRlcmluZyBhc3NvY2lhdGVkIHdpdGggdGhlCisJ CQkgKiBCUklOIGluZGV4LCBlLmcuIHdlIGRvbid0IGhhdmUgQVNDL0RFU0MgYW5kIE5VTExT IEZJUlNUL0xBU1QuCisJCQkgKiBTbyB0aGlzIGlzIG5vdCBlbmNvZGVkIGluIHRoZSBpbmRl eCwgYW5kIHdlIGNhbiBzYXRpc2Z5IGFsbAorCQkJICogdGhlc2UgY2FzZXMgLSBidXQgd2Ug bmVlZCB0byBhZGQgcGF0aHMgZm9yIGVhY2ggY29tYmluYXRpb24uCisJCQkgKiBJIHdvbmRl ciBpZiB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLgorCQkJICovCisKKwkJCS8q IEFTQyBOVUxMUyBMQVNUICovCisJCQlpbmRleF9wYXRoa2V5cyA9IGJ1aWxkX2luZGV4X3Bh dGhrZXlzX2JyaW4ocm9vdCwgaW5kZXgsIGluZGV4dGxlLAorCQkJCQkJCQkJCQkJCSAgIGlk eCwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSwJLyogcmV2ZXJzZV9zb3J0ICovCisJCQkJCQkJ CQkJCQkJICAgZmFsc2UpOwkvKiBudWxsc19maXJzdCAqLworCisJCQl1c2VmdWxfcGF0aGtl eXMgPSB0cnVuY2F0ZV91c2VsZXNzX3BhdGhrZXlzKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkJ CQkJaW5kZXhfcGF0aGtleXMpOworCisJCQlpZiAodXNlZnVsX3BhdGhrZXlzICE9IE5JTCkK KwkJCXsKKwkJCQlicGF0aCA9IGNyZWF0ZV9icmluc29ydF9wYXRoKHJvb3QsIGluZGV4LAor CQkJCQkJCQkJCQkgaW5kZXhfY2xhdXNlcywKKwkJCQkJCQkJCQkJIHVzZWZ1bF9wYXRoa2V5 cywKKwkJCQkJCQkJCQkJIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgaW5k ZXhfb25seV9zY2FuLAorCQkJCQkJCQkJCQkgb3V0ZXJfcmVsaWRzLAorCQkJCQkJCQkJCQkg bG9vcF9jb3VudCwKKwkJCQkJCQkJCQkJIGZhbHNlKTsKKworCQkJCS8qIGNoZWF0IGFuZCBh ZGQgaXQgYW55d2F5ICovCisJCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBicGF0aCk7CisJ CQl9CisKKwkJCS8qIERFU0MgTlVMTFMgTEFTVCAqLworCQkJaW5kZXhfcGF0aGtleXMgPSBi dWlsZF9pbmRleF9wYXRoa2V5c19icmluKHJvb3QsIGluZGV4LCBpbmRleHRsZSwKKwkJCQkJ CQkJCQkJCQkgICBpZHgsCisJCQkJCQkJCQkJCQkJICAgdHJ1ZSwJLyogcmV2ZXJzZV9zb3J0 ICovCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpOwkvKiBudWxsc19maXJzdCAqLworCisJCQl1 c2VmdWxfcGF0aGtleXMgPSB0cnVuY2F0ZV91c2VsZXNzX3BhdGhrZXlzKHJvb3QsIHJlbCwK KwkJCQkJCQkJCQkJCQkJaW5kZXhfcGF0aGtleXMpOworCisJCQlpZiAodXNlZnVsX3BhdGhr ZXlzICE9IE5JTCkKKwkJCXsKKwkJCQlicGF0aCA9IGNyZWF0ZV9icmluc29ydF9wYXRoKHJv b3QsIGluZGV4LAorCQkJCQkJCQkJCQkgaW5kZXhfY2xhdXNlcywKKwkJCQkJCQkJCQkJIHVz ZWZ1bF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJIEJhY2t3YXJkU2NhbkRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkJIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCQkJCQkJIG91dGVyX3JlbGlkcywK KwkJCQkJCQkJCQkJIGxvb3BfY291bnQsCisJCQkJCQkJCQkJCSBmYWxzZSk7CisKKwkJCQkv KiBjaGVhdCBhbmQgYWRkIGl0IGFueXdheSAqLworCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGgg KikgYnBhdGgpOworCQkJfQorCisJCQkvKiBBU0MgTlVMTFMgRklSU1QgKi8KKwkJCWluZGV4 X3BhdGhrZXlzID0gYnVpbGRfaW5kZXhfcGF0aGtleXNfYnJpbihyb290LCBpbmRleCwgaW5k ZXh0bGUsCisJCQkJCQkJCQkJCQkJICAgaWR4LAorCQkJCQkJCQkJCQkJCSAgIGZhbHNlLAkv KiByZXZlcnNlX3NvcnQgKi8KKwkJCQkJCQkJCQkJCQkgICB0cnVlKTsJLyogbnVsbHNfZmly c3QgKi8KKworCQkJdXNlZnVsX3BhdGhrZXlzID0gdHJ1bmNhdGVfdXNlbGVzc19wYXRoa2V5 cyhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJCWluZGV4X3BhdGhrZXlzKTsKKworCQkJaWYg KHVzZWZ1bF9wYXRoa2V5cyAhPSBOSUwpCisJCQl7CisJCQkJYnBhdGggPSBjcmVhdGVfYnJp bnNvcnRfcGF0aChyb290LCBpbmRleCwKKwkJCQkJCQkJCQkJIGluZGV4X2NsYXVzZXMsCisJ CQkJCQkJCQkJCSB1c2VmdWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCSBGb3J3YXJkU2NhbkRp cmVjdGlvbiwKKwkJCQkJCQkJCQkJIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCQkJCQkJIG91 dGVyX3JlbGlkcywKKwkJCQkJCQkJCQkJIGxvb3BfY291bnQsCisJCQkJCQkJCQkJCSBmYWxz ZSk7CisKKwkJCQkvKiBjaGVhdCBhbmQgYWRkIGl0IGFueXdheSAqLworCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgYnBhdGgpOworCQkJfQorCisJCQkvKiBERVNDIE5VTExTIEZJUlNU ICovCisJCQlpbmRleF9wYXRoa2V5cyA9IGJ1aWxkX2luZGV4X3BhdGhrZXlzX2JyaW4ocm9v dCwgaW5kZXgsIGluZGV4dGxlLAorCQkJCQkJCQkJCQkJCSAgIGlkeCwKKwkJCQkJCQkJCQkJ CQkgICB0cnVlLAkvKiByZXZlcnNlX3NvcnQgKi8KKwkJCQkJCQkJCQkJCQkgICB0cnVlKTsJ LyogbnVsbHNfZmlyc3QgKi8KKworCQkJdXNlZnVsX3BhdGhrZXlzID0gdHJ1bmNhdGVfdXNl bGVzc19wYXRoa2V5cyhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJCWluZGV4X3BhdGhrZXlz KTsKKworCQkJaWYgKHVzZWZ1bF9wYXRoa2V5cyAhPSBOSUwpCisJCQl7CisJCQkJYnBhdGgg PSBjcmVhdGVfYnJpbnNvcnRfcGF0aChyb290LCBpbmRleCwKKwkJCQkJCQkJCQkJIGluZGV4 X2NsYXVzZXMsCisJCQkJCQkJCQkJCSB1c2VmdWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCSBC YWNrd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJCSBpbmRleF9vbmx5X3NjYW4sCisJ CQkJCQkJCQkJCSBvdXRlcl9yZWxpZHMsCisJCQkJCQkJCQkJCSBsb29wX2NvdW50LAorCQkJ CQkJCQkJCQkgZmFsc2UpOworCisJCQkJLyogY2hlYXQgYW5kIGFkZCBpdCBhbnl3YXkgKi8K KwkJCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGJwYXRoKTsKKwkJCX0KKwkJfQorCisJCXJl bGF0aW9uX2Nsb3NlKHJlbDIsIE5vTG9jayk7CisJfQorCiAJcmV0dXJuIHJlc3VsdDsKIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKaW5kZXggYTk5NDNjZDZl MDEuLjgzZGRlNmYyMmViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9wYXRoa2V5cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlz LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNp bmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKIAogc3RhdGljIGJv b2wgcGF0aGtleV9pc19yZWR1bmRhbnQoUGF0aEtleSAqbmV3X3BhdGhrZXksIExpc3QgKnBh dGhrZXlzKTsKQEAgLTYzMCw2ICs2MzEsNTUgQEAgYnVpbGRfaW5kZXhfcGF0aGtleXMoUGxh bm5lckluZm8gKnJvb3QsCiAJcmV0dXJuIHJldHZhbDsKIH0KIAorCitMaXN0ICoKK2J1aWxk X2luZGV4X3BhdGhrZXlzX2JyaW4oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkgIEluZGV4 T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkgIFRhcmdldEVudHJ5ICAqdGxlLAorCQkJCQkJICBp bnQgaWR4LAorCQkJCQkJICBib29sIHJldmVyc2Vfc29ydCwKKwkJCQkJCSAgYm9vbCBudWxs c19maXJzdCkKK3sKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGU7CisJUGF0aEtleQkJICAg KmNwYXRoa2V5OworCU9pZAkJCQlzb3J0b3BmYW1pbHk7CisKKwkvKgorCSAqIEdldCBkZWZh dWx0IGJ0cmVlIG9wZmFtaWx5IGZvciB0aGUgdHlwZSwgZXh0cmFjdGVkIGZyb20gdGhlCisJ ICogZW50cnkgaW4gaW5kZXggdGFyZ2V0bGlzdC4KKwkgKgorCSAqIFhYWCBJcyB0aGVyZSBh IGJldHRlciAvIG1vcmUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcz8KKwkgKi8KKwl0eXBjYWNo ZSA9IGxvb2t1cF90eXBlX2NhY2hlKGV4cHJUeXBlKChOb2RlICopIHRsZS0+ZXhwciksCisJ CQkJCQkJCSBUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCXNvcnRvcGZhbWlseSA9IHR5 cGNhY2hlLT5idHJlZV9vcGY7CisKKwkvKgorCSAqIE9LLCB0cnkgdG8gbWFrZSBhIGNhbm9u aWNhbCBwYXRoa2V5IGZvciB0aGlzIHNvcnQga2V5LiAgTm90ZSB3ZSdyZQorCSAqIHVuZGVy bmVhdGggYW55IG91dGVyIGpvaW5zLCBzbyBudWxsYWJsZV9yZWxpZHMgc2hvdWxkIGJlIE5V TEwuCisJICovCisJY3BhdGhrZXkgPSBtYWtlX3BhdGhrZXlfZnJvbV9zb3J0aW5mbyhyb290 LAorCQkJCQkJCQkJCSAgdGxlLT5leHByLAorCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJ CQkgIHNvcnRvcGZhbWlseSwKKwkJCQkJCQkJCQkgIGluZGV4LT5vcGNpbnR5cGVbaWR4XSwK KwkJCQkJCQkJCQkgIGluZGV4LT5pbmRleGNvbGxhdGlvbnNbaWR4XSwKKwkJCQkJCQkJCQkg IHJldmVyc2Vfc29ydCwKKwkJCQkJCQkJCQkgIG51bGxzX2ZpcnN0LAorCQkJCQkJCQkJCSAg MCwKKwkJCQkJCQkJCQkgIGluZGV4LT5yZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkgIGZhbHNl KTsKKworCS8qCisJICogVGhlcmUgbWF5IGJlIG5vIHBhdGhrZXkgaWYgd2UgaGF2ZW4ndCBt YXRjaGVkIGFueSBzb3J0a2V5LCBpbiB3aGljaAorCSAqIGNhc2UgaWdub3JlIGl0LgorCSAq LworCWlmICghY3BhdGhrZXkpCisJCXJldHVybiBOSUw7CisKKwlyZXR1cm4gbGlzdF9tYWtl MShjcGF0aGtleSk7Cit9CisKIC8qCiAgKiBwYXJ0a2V5X2lzX2Jvb2xfY29uc3RhbnRfZm9y X3F1ZXJ5CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IGFjODZjZTkwMDMzLi4zOTVjNjMyZjQzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTI0LDYgKzEyNCw4IEBAIHN0YXRpYyBTYW1wbGVT Y2FuICpjcmVhdGVfc2FtcGxlc2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpi ZXN0X3BhdGgsCiAJCQkJCQkJCQkJICBMaXN0ICp0bGlzdCwgTGlzdCAqc2Nhbl9jbGF1c2Vz KTsKIHN0YXRpYyBTY2FuICpjcmVhdGVfaW5kZXhzY2FuX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIEluZGV4UGF0aCAqYmVzdF9wYXRoLAogCQkJCQkJCQkgICBMaXN0ICp0bGlzdCwgTGlz dCAqc2Nhbl9jbGF1c2VzLCBib29sIGluZGV4b25seSk7CitzdGF0aWMgQnJpblNvcnQgKmNy ZWF0ZV9icmluc29ydF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBCcmluU29ydFBhdGggKmJl c3RfcGF0aCwKKwkJCQkJCQkJCSAgTGlzdCAqdGxpc3QsIExpc3QgKnNjYW5fY2xhdXNlcyk7 CiBzdGF0aWMgQml0bWFwSGVhcFNjYW4gKmNyZWF0ZV9iaXRtYXBfc2Nhbl9wbGFuKFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkgICBCaXRtYXBIZWFwUGF0aCAqYmVzdF9wYXRo LAogCQkJCQkJCQkJCQkgICBMaXN0ICp0bGlzdCwgTGlzdCAqc2Nhbl9jbGF1c2VzKTsKQEAg LTE5MSw2ICsxOTMsOSBAQCBzdGF0aWMgSW5kZXhPbmx5U2NhbiAqbWFrZV9pbmRleG9ubHlz Y2FuKExpc3QgKnFwdGxpc3QsIExpc3QgKnFwcXVhbCwKIAkJCQkJCQkJCQkgTGlzdCAqaW5k ZXhvcmRlcmJ5LAogCQkJCQkJCQkJCSBMaXN0ICppbmRleHRsaXN0LAogCQkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcik7CitzdGF0aWMgQnJpblNvcnQgKm1ha2VfYnJp bnNvcnQoTGlzdCAqcXB0bGlzdCwgTGlzdCAqcXBxdWFsLCBJbmRleCBzY2FucmVsaWQsCisJ CQkJCQkJICAgT2lkIGluZGV4aWQsIExpc3QgKmluZGV4cXVhbCwgTGlzdCAqaW5kZXhxdWFs b3JpZywKKwkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcik7CiBzdGF0aWMg Qml0bWFwSW5kZXhTY2FuICptYWtlX2JpdG1hcF9pbmRleHNjYW4oSW5kZXggc2NhbnJlbGlk LCBPaWQgaW5kZXhpZCwKIAkJCQkJCQkJCQkJICBMaXN0ICppbmRleHF1YWwsCiAJCQkJCQkJ CQkJCSAgTGlzdCAqaW5kZXhxdWFsb3JpZyk7CkBAIC00MTAsNiArNDE1LDkgQEAgY3JlYXRl X3BsYW5fcmVjdXJzZShQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqYmVzdF9wYXRoLCBpbnQg ZmxhZ3MpCiAJCWNhc2UgVF9DdXN0b21TY2FuOgogCQkJcGxhbiA9IGNyZWF0ZV9zY2FuX3Bs YW4ocm9vdCwgYmVzdF9wYXRoLCBmbGFncyk7CiAJCQlicmVhazsKKwkJY2FzZSBUX0JyaW5T b3J0OgorCQkJcGxhbiA9IGNyZWF0ZV9zY2FuX3BsYW4ocm9vdCwgYmVzdF9wYXRoLCBmbGFn cyk7CisJCQlicmVhazsKIAkJY2FzZSBUX0hhc2hKb2luOgogCQljYXNlIFRfTWVyZ2VKb2lu OgogCQljYXNlIFRfTmVzdExvb3A6CkBAIC03NzYsNiArNzg0LDEzIEBAIGNyZWF0ZV9zY2Fu X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQog CQkJCQkJCQkJCQkJICAgc2Nhbl9jbGF1c2VzKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9C cmluU29ydDoKKwkJCXBsYW4gPSAoUGxhbiAqKSBjcmVhdGVfYnJpbnNvcnRfcGxhbihyb290 LAorCQkJCQkJCQkJCQkJIChCcmluU29ydFBhdGggKikgYmVzdF9wYXRoLAorCQkJCQkJCQkJ CQkJIHRsaXN0LAorCQkJCQkJCQkJCQkJIHNjYW5fY2xhdXNlcyk7CisJCQlicmVhazsKKwog CQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVk IiwKIAkJCQkgKGludCkgYmVzdF9wYXRoLT5wYXRodHlwZSk7CkBAIC0zMTgwLDYgKzMxOTUs MTU0IEBAIGNyZWF0ZV9pbmRleHNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAlyZXR1 cm4gc2Nhbl9wbGFuOwogfQogCisvKgorICogY3JlYXRlX2JyaW5zb3J0X3BsYW4KKyAqCSAg UmV0dXJucyBhIGJyaW5zb3J0IHBsYW4gZm9yIHRoZSBiYXNlIHJlbGF0aW9uIHNjYW5uZWQg YnkgJ2Jlc3RfcGF0aCcKKyAqCSAgd2l0aCByZXN0cmljdGlvbiBjbGF1c2VzICdzY2FuX2Ns YXVzZXMnIGFuZCB0YXJnZXRsaXN0ICd0bGlzdCcuCisgKgorICogVGhpcyBpcyBtb3N0bHkg YSBzbGlnaGx5IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBjcmVhdGVfaW5kZXhzY2FuX3BsYW4s IHdpdGgKKyAqIHRoZSB1bmVjZXNzYXJ5IHBhcnRzIHJlbW92ZWQgKHdlIGRvbid0IHN1cHBv cnQgaW5kZXhvbmx5IHNjYW5zLCBvciByZW9yZGVyaW5nCisgKiBhbmQgc2ltaWxhciBzdHVm ZikuCisgKi8KK3N0YXRpYyBCcmluU29ydCAqCitjcmVhdGVfYnJpbnNvcnRfcGxhbihQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJIEJyaW5Tb3J0UGF0aCAqYmVzdF9wYXRoLAorCQkJCQkg TGlzdCAqdGxpc3QsCisJCQkJCSBMaXN0ICpzY2FuX2NsYXVzZXMpCit7CisJQnJpblNvcnQg ICAqYnJpbnNvcnRfcGxhbjsKKwlMaXN0CSAgICppbmRleGNsYXVzZXMgPSBiZXN0X3BhdGgt PmlwYXRoLmluZGV4Y2xhdXNlczsKKwlJbmRleAkJYmFzZXJlbGlkID0gYmVzdF9wYXRoLT5p cGF0aC5wYXRoLnBhcmVudC0+cmVsaWQ7CisJSW5kZXhPcHRJbmZvICppbmRleGluZm8gPSBi ZXN0X3BhdGgtPmlwYXRoLmluZGV4aW5mbzsKKwlPaWQJCQlpbmRleG9pZCA9IGluZGV4aW5m by0+aW5kZXhvaWQ7CisJTGlzdAkgICAqcXBxdWFsOworCUxpc3QJICAgKnN0cmlwcGVkX2lu ZGV4cXVhbHM7CisJTGlzdAkgICAqZml4ZWRfaW5kZXhxdWFsczsKKwlMaXN0Q2VsbCAgICps OworCisJTGlzdAkgICAqcGF0aGtleXMgPSBiZXN0X3BhdGgtPmlwYXRoLnBhdGgucGF0aGtl eXM7CisKKwkvKiBpdCBzaG91bGQgYmUgYSBiYXNlIHJlbC4uLiAqLworCUFzc2VydChiYXNl cmVsaWQgPiAwKTsKKwlBc3NlcnQoYmVzdF9wYXRoLT5pcGF0aC5wYXRoLnBhcmVudC0+cnRl a2luZCA9PSBSVEVfUkVMQVRJT04pOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBpbmRleCBx dWFsIGV4cHJlc3Npb25zIChzdHJpcHBlZCBvZiBSZXN0cmljdEluZm9zKSBmcm9tIHRoZQor CSAqIEluZGV4Q2xhdXNlcyBsaXN0LCBhbmQgcHJlcGFyZSBhIGNvcHkgd2l0aCBpbmRleCBW YXJzIHN1YnN0aXR1dGVkIGZvcgorCSAqIHRhYmxlIFZhcnMuICAoVGhpcyBzdGVwIGFsc28g ZG9lcyByZXBsYWNlX25lc3Rsb29wX3BhcmFtcyBvbiB0aGUKKwkgKiBmaXhlZF9pbmRleHF1 YWxzLikKKwkgKi8KKwlmaXhfaW5kZXhxdWFsX3JlZmVyZW5jZXMocm9vdCwgJmJlc3RfcGF0 aC0+aXBhdGgsCisJCQkJCQkJICZzdHJpcHBlZF9pbmRleHF1YWxzLAorCQkJCQkJCSAmZml4 ZWRfaW5kZXhxdWFscyk7CisKKwkvKgorCSAqIFRoZSBxcHF1YWwgbGlzdCBtdXN0IGNvbnRh aW4gYWxsIHJlc3RyaWN0aW9ucyBub3QgYXV0b21hdGljYWxseSBoYW5kbGVkCisJICogYnkg dGhlIGluZGV4LCBvdGhlciB0aGFuIHBzZXVkb2NvbnN0YW50IGNsYXVzZXMgd2hpY2ggd2ls bCBiZSBoYW5kbGVkCisJICogYnkgYSBzZXBhcmF0ZSBnYXRpbmcgcGxhbiBub2RlLiAgQWxs IHRoZSBwcmVkaWNhdGVzIGluIHRoZSBpbmRleHF1YWxzCisJICogd2lsbCBiZSBjaGVja2Vk IChlaXRoZXIgYnkgdGhlIGluZGV4IGl0c2VsZiwgb3IgYnkgbm9kZUluZGV4c2Nhbi5jKSwK KwkgKiBidXQgaWYgdGhlcmUgYXJlIGFueSAic3BlY2lhbCIgb3BlcmF0b3JzIGludm9sdmVk IHRoZW4gdGhleSBtdXN0IGJlCisJICogaW5jbHVkZWQgaW4gcXBxdWFsLiAgVGhlIHVwc2hv dCBpcyB0aGF0IHFwcXVhbCBtdXN0IGNvbnRhaW4KKwkgKiBzY2FuX2NsYXVzZXMgbWludXMg d2hhdGV2ZXIgYXBwZWFycyBpbiBpbmRleHF1YWxzLgorCSAqCisJICogaXNfcmVkdW5kYW50 X3dpdGhfaW5kZXhjbGF1c2VzKCkgZGV0ZWN0cyBjYXNlcyB3aGVyZSBhIHNjYW4gY2xhdXNl IGlzCisJICogcHJlc2VudCBpbiB0aGUgaW5kZXhjbGF1c2VzIGxpc3Qgb3IgaXMgZ2VuZXJh dGVkIGZyb20gdGhlIHNhbWUKKwkgKiBFcXVpdmFsZW5jZUNsYXNzIGFzIHNvbWUgaW5kZXhj bGF1c2UsIGFuZCBpcyB0aGVyZWZvcmUgcmVkdW5kYW50IHdpdGgKKwkgKiBpdCwgdGhvdWdo IG5vdCBlcXVhbC4gIChUaGUgbGF0dGVyIGhhcHBlbnMgd2hlbiBpbmR4cGF0aC5jIHByZWZl cnMgYQorCSAqIGRpZmZlcmVudCBkZXJpdmVkIGVxdWFsaXR5IHRoYW4gd2hhdCBnZW5lcmF0 ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcworCSAqIHBpY2tlZCBmb3IgYSBwYXJhbWV0ZXJp emVkIHNjYW4ncyBwcGlfY2xhdXNlcy4pICBOb3RlIHRoYXQgaXQgd2lsbCBub3QKKwkgKiBt YXRjaCB0byBsb3NzeSBpbmRleCBjbGF1c2VzLCB3aGljaCBpcyBjcml0aWNhbCBiZWNhdXNl IHdlIGhhdmUgdG8KKwkgKiBpbmNsdWRlIHRoZSBvcmlnaW5hbCBjbGF1c2UgaW4gcXBxdWFs IGluIHRoYXQgY2FzZS4KKwkgKgorCSAqIEluIHNvbWUgc2l0dWF0aW9ucyAocGFydGljdWxh cmx5IHdpdGggT1InZCBpbmRleCBjb25kaXRpb25zKSB3ZSBtYXkKKwkgKiBoYXZlIHNjYW5f Y2xhdXNlcyB0aGF0IGFyZSBub3QgZXF1YWwgdG8sIGJ1dCBhcmUgbG9naWNhbGx5IGltcGxp ZWQgYnksCisJICogdGhlIGluZGV4IHF1YWxzOyBzbyB3ZSBhbHNvIHRyeSBhIHByZWRpY2F0 ZV9pbXBsaWVkX2J5KCkgY2hlY2sgdG8gc2VlCisJICogaWYgd2UgY2FuIGRpc2NhcmQgcXVh bHMgdGhhdCB3YXkuICAocHJlZGljYXRlX2ltcGxpZWRfYnkgYXNzdW1lcyBpdHMKKwkgKiBm aXJzdCBpbnB1dCBjb250YWlucyBvbmx5IGltbXV0YWJsZSBmdW5jdGlvbnMsIHNvIHdlIGhh dmUgdG8gY2hlY2sKKwkgKiB0aGF0LikKKwkgKgorCSAqIE5vdGU6IGlmIHlvdSBjaGFuZ2Ug dGhpcyBiaXQgb2YgY29kZSB5b3Ugc2hvdWxkIGFsc28gbG9vayBhdAorCSAqIGV4dHJhY3Rf bm9uaW5kZXhfY29uZGl0aW9ucygpIGluIGNvc3RzaXplLmMuCisJICovCisJcXBxdWFsID0g TklMOworCWZvcmVhY2gobCwgc2Nhbl9jbGF1c2VzKQorCXsKKwkJUmVzdHJpY3RJbmZvICpy aW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbCk7CisKKwkJaWYgKHJpbmZvLT5w c2V1ZG9jb25zdGFudCkKKwkJCWNvbnRpbnVlOwkJCS8qIHdlIG1heSBkcm9wIHBzZXVkb2Nv bnN0YW50cyBoZXJlICovCisJCWlmIChpc19yZWR1bmRhbnRfd2l0aF9pbmRleGNsYXVzZXMo cmluZm8sIGluZGV4Y2xhdXNlcykpCisJCQljb250aW51ZTsJCQkvKiBkdXAgb3IgZGVyaXZl ZCBmcm9tIHNhbWUgRXF1aXZhbGVuY2VDbGFzcyAqLworCQlpZiAoIWNvbnRhaW5fbXV0YWJs ZV9mdW5jdGlvbnMoKE5vZGUgKikgcmluZm8tPmNsYXVzZSkgJiYKKwkJCXByZWRpY2F0ZV9p bXBsaWVkX2J5KGxpc3RfbWFrZTEocmluZm8tPmNsYXVzZSksIHN0cmlwcGVkX2luZGV4cXVh bHMsCisJCQkJCQkJCSBmYWxzZSkpCisJCQljb250aW51ZTsJCQkvKiBwcm92YWJseSBpbXBs aWVkIGJ5IGluZGV4cXVhbHMgKi8KKwkJcXBxdWFsID0gbGFwcGVuZChxcHF1YWwsIHJpbmZv KTsKKwl9CisKKwkvKiBTb3J0IGNsYXVzZXMgaW50byBiZXN0IGV4ZWN1dGlvbiBvcmRlciAq LworCXFwcXVhbCA9IG9yZGVyX3F1YWxfY2xhdXNlcyhyb290LCBxcHF1YWwpOworCisJLyog UmVkdWNlIFJlc3RyaWN0SW5mbyBsaXN0IHRvIGJhcmUgZXhwcmVzc2lvbnM7IGlnbm9yZSBw c2V1ZG9jb25zdGFudHMgKi8KKwlxcHF1YWwgPSBleHRyYWN0X2FjdHVhbF9jbGF1c2VzKHFw cXVhbCwgZmFsc2UpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHJlcGxhY2UgYW55IG91dGVy LXJlbGF0aW9uIHZhcmlhYmxlcyB3aXRoIG5lc3Rsb29wIHBhcmFtcyBpbgorCSAqIHRoZSBp bmRleHF1YWxvcmlnLCBxcHF1YWwsIGFuZCBpbmRleG9yZGVyYnlvcmlnIGV4cHJlc3Npb25z LiAgQSBiaXQKKwkgKiBhbm5veWluZyB0byBoYXZlIHRvIGRvIHRoaXMgc2VwYXJhdGVseSBm cm9tIHRoZSBwcm9jZXNzaW5nIGluCisJICogZml4X2luZGV4cXVhbF9yZWZlcmVuY2VzIC0t LSByZXRoaW5rIHRoaXMgd2hlbiBnZW5lcmFsaXppbmcgdGhlIGlubmVyCisJICogaW5kZXhz Y2FuIHN1cHBvcnQuICBCdXQgbm90ZSB3ZSBjYW4ndCByZWFsbHkgZG8gdGhpcyBlYXJsaWVy IGJlY2F1c2UKKwkgKiBpdCdkIGJyZWFrIHRoZSBjb21wYXJpc29ucyB0byBwcmVkaWNhdGVz IGFib3ZlIC4uLiAob3Igd291bGQgaXQ/ICBUaG9zZQorCSAqIHdvdWxkbid0IGhhdmUgb3V0 ZXIgcmVmcykKKwkgKi8KKwlpZiAoYmVzdF9wYXRoLT5pcGF0aC5wYXRoLnBhcmFtX2luZm8p CisJeworCQlzdHJpcHBlZF9pbmRleHF1YWxzID0gKExpc3QgKikKKwkJCXJlcGxhY2VfbmVz dGxvb3BfcGFyYW1zKHJvb3QsIChOb2RlICopIHN0cmlwcGVkX2luZGV4cXVhbHMpOworCQlx cHF1YWwgPSAoTGlzdCAqKQorCQkJcmVwbGFjZV9uZXN0bG9vcF9wYXJhbXMocm9vdCwgKE5v ZGUgKikgcXBxdWFsKTsKKwl9CisKKwkvKiBGaW5hbGx5IHJlYWR5IHRvIGJ1aWxkIHRoZSBw bGFuIG5vZGUgKi8KKwlicmluc29ydF9wbGFuID0gbWFrZV9icmluc29ydCh0bGlzdCwKKwkJ CQkJCQkJICBxcHF1YWwsCisJCQkJCQkJCSAgYmFzZXJlbGlkLAorCQkJCQkJCQkgIGluZGV4 b2lkLAorCQkJCQkJCQkgIGZpeGVkX2luZGV4cXVhbHMsCisJCQkJCQkJCSAgc3RyaXBwZWRf aW5kZXhxdWFscywKKwkJCQkJCQkJICBiZXN0X3BhdGgtPmlwYXRoLmluZGV4c2NhbmRpcik7 CisKKwlpZiAocGF0aGtleXMgIT0gTklMKQorCXsKKwkJLyoKKwkJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IHRoZSBBcHBlbmQncyB0bGlzdCBhcyBuZWVkZWQu CisJCSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3RfaW5fcGxhY2UgPSB0cnVlLCB3 ZSBtYXkgaWdub3JlIHRoZQorCQkgKiBmdW5jdGlvbiByZXN1bHQ7IGl0IG11c3QgYmUgdGhl IHNhbWUgcGxhbiBub2RlLiAgSG93ZXZlciwgd2UgdGhlbgorCQkgKiBuZWVkIHRvIGRldGVj dCB3aGV0aGVyIGFueSB0bGlzdCBlbnRyaWVzIHdlcmUgYWRkZWQuCisJCSAqLworCQkodm9p ZCkgcHJlcGFyZV9zb3J0X2Zyb21fcGF0aGtleXMoKFBsYW4gKikgYnJpbnNvcnRfcGxhbiwg cGF0aGtleXMsCisJCQkJCQkJCQkJICBiZXN0X3BhdGgtPmlwYXRoLnBhdGgucGFyZW50LT5y ZWxpZHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAgdHJ1ZSwKKwkJCQkJCQkJ CQkgICZicmluc29ydF9wbGFuLT5udW1Db2xzLAorCQkJCQkJCQkJCSAgJmJyaW5zb3J0X3Bs YW4tPnNvcnRDb2xJZHgsCisJCQkJCQkJCQkJICAmYnJpbnNvcnRfcGxhbi0+c29ydE9wZXJh dG9ycywKKwkJCQkJCQkJCQkgICZicmluc29ydF9wbGFuLT5jb2xsYXRpb25zLAorCQkJCQkJ CQkJCSAgJmJyaW5zb3J0X3BsYW4tPm51bGxzRmlyc3QpOworCQkvL3RsaXN0X3dhc19jaGFu Z2VkID0gKG9yaWdfdGxpc3RfbGVuZ3RoICE9IGxpc3RfbGVuZ3RoKHBsYW4tPnBsYW4udGFy Z2V0bGlzdCkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGJyaW5zb3J0X3BsYW4tPm51bUNv bHM7IGkrKykKKwkJCWVsb2coREVCVUcxLCAiJWQgPT4gJWQgJWQgJWQgJWQiLCBpLAorCQkJ CSBicmluc29ydF9wbGFuLT5zb3J0Q29sSWR4W2ldLAorCQkJCSBicmluc29ydF9wbGFuLT5z b3J0T3BlcmF0b3JzW2ldLAorCQkJCSBicmluc29ydF9wbGFuLT5jb2xsYXRpb25zW2ldLAor CQkJCSBicmluc29ydF9wbGFuLT5udWxsc0ZpcnN0W2ldKTsKKwl9CisKKwljb3B5X2dlbmVy aWNfcGF0aF9pbmZvKCZicmluc29ydF9wbGFuLT5zY2FuLnBsYW4sICZiZXN0X3BhdGgtPmlw YXRoLnBhdGgpOworCisJcmV0dXJuIGJyaW5zb3J0X3BsYW47Cit9CisKIC8qCiAgKiBjcmVh dGVfYml0bWFwX3NjYW5fcGxhbgogICoJICBSZXR1cm5zIGEgYml0bWFwIHNjYW4gcGxhbiBm b3IgdGhlIGJhc2UgcmVsYXRpb24gc2Nhbm5lZCBieSAnYmVzdF9wYXRoJwpAQCAtNTUyMyw2 ICs1Njg2LDMxIEBAIG1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsCiAJcmV0dXJuIG5v ZGU7CiB9CiAKK3N0YXRpYyBCcmluU29ydCAqCittYWtlX2JyaW5zb3J0KExpc3QgKnFwdGxp c3QsCisJCQkgICBMaXN0ICpxcHF1YWwsCisJCQkgICBJbmRleCBzY2FucmVsaWQsCisJCQkg ICBPaWQgaW5kZXhpZCwKKwkJCSAgIExpc3QgKmluZGV4cXVhbCwKKwkJCSAgIExpc3QgKmlu ZGV4cXVhbG9yaWcsCisJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcikKK3sKKwlC cmluU29ydCAgKm5vZGUgPSBtYWtlTm9kZShCcmluU29ydCk7CisJUGxhbgkgICAqcGxhbiA9 ICZub2RlLT5zY2FuLnBsYW47CisKKwlwbGFuLT50YXJnZXRsaXN0ID0gcXB0bGlzdDsKKwlw bGFuLT5xdWFsID0gcXBxdWFsOworCXBsYW4tPmxlZnR0cmVlID0gTlVMTDsKKwlwbGFuLT5y aWdodHRyZWUgPSBOVUxMOworCW5vZGUtPnNjYW4uc2NhbnJlbGlkID0gc2NhbnJlbGlkOwor CW5vZGUtPmluZGV4aWQgPSBpbmRleGlkOworCW5vZGUtPmluZGV4cXVhbCA9IGluZGV4cXVh bDsKKwlub2RlLT5pbmRleHF1YWxvcmlnID0gaW5kZXhxdWFsb3JpZzsKKwlub2RlLT5pbmRl eG9yZGVyZGlyID0gaW5kZXhzY2FuZGlyOworCisJcmV0dXJuIG5vZGU7Cit9CisKIHN0YXRp YyBJbmRleE9ubHlTY2FuICoKIG1ha2VfaW5kZXhvbmx5c2NhbihMaXN0ICpxcHRsaXN0LAog CQkJCSAgIExpc3QgKnFwcXVhbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMu YwppbmRleCAxY2IwYWJkYmMxZi4uMjU4NGExZjAzMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTYwOSw2ICs2MDksMjUgQEAgc2V0X3BsYW5fcmVmcyhQ bGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwgaW50IHJ0b2Zmc2V0KQogCQkJCXJldHVy biBzZXRfaW5kZXhvbmx5c2Nhbl9yZWZlcmVuY2VzKHJvb3QsIHNwbGFuLCBydG9mZnNldCk7 CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX0JyaW5Tb3J0OgorCQkJeworCQkJCUJyaW5T b3J0ICAqc3BsYW4gPSAoQnJpblNvcnQgKikgcGxhbjsKKworCQkJCXNwbGFuLT5zY2FuLnNj YW5yZWxpZCArPSBydG9mZnNldDsKKwkJCQlzcGxhbi0+c2Nhbi5wbGFuLnRhcmdldGxpc3Qg PQorCQkJCQlmaXhfc2Nhbl9saXN0KHJvb3QsIHNwbGFuLT5zY2FuLnBsYW4udGFyZ2V0bGlz dCwKKwkJCQkJCQkJICBydG9mZnNldCwgTlVNX0VYRUNfVExJU1QocGxhbikpOworCQkJCXNw bGFuLT5zY2FuLnBsYW4ucXVhbCA9CisJCQkJCWZpeF9zY2FuX2xpc3Qocm9vdCwgc3BsYW4t PnNjYW4ucGxhbi5xdWFsLAorCQkJCQkJCQkgIHJ0b2Zmc2V0LCBOVU1fRVhFQ19RVUFMKHBs YW4pKTsKKwkJCQlzcGxhbi0+aW5kZXhxdWFsID0KKwkJCQkJZml4X3NjYW5fbGlzdChyb290 LCBzcGxhbi0+aW5kZXhxdWFsLAorCQkJCQkJCQkgIHJ0b2Zmc2V0LCAxKTsKKwkJCQlzcGxh bi0+aW5kZXhxdWFsb3JpZyA9CisJCQkJCWZpeF9zY2FuX2xpc3Qocm9vdCwgc3BsYW4tPmlu ZGV4cXVhbG9yaWcsCisJCQkJCQkJCSAgcnRvZmZzZXQsIE5VTV9FWEVDX1FVQUwocGxhbikp OworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46CiAJCQl7CiAJ CQkJQml0bWFwSW5kZXhTY2FuICpzcGxhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxhbjsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDcwZjYxYWU3YjFj Li42NDcxYmJiNWRlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5j CkBAIC0xMDMwLDYgKzEwMzAsNjMgQEAgY3JlYXRlX2luZGV4X3BhdGgoUGxhbm5lckluZm8g KnJvb3QsCiAJcmV0dXJuIHBhdGhub2RlOwogfQogCisKKy8qCisgKiBjcmVhdGVfYnJpbnNv cnRfcGF0aAorICoJICBDcmVhdGVzIGEgcGF0aCBub2RlIGZvciBzb3J0ZWQgYnJpbiBzb3J0 IHNjYW4uCisgKgorICogJ2luZGV4JyBpcyBhIHVzYWJsZSBpbmRleC4KKyAqICdpbmRleGNs YXVzZXMnIGlzIGEgbGlzdCBvZiBJbmRleENsYXVzZSBub2RlcyByZXByZXNlbnRpbmcgY2xh dXNlcworICoJCQl0byBiZSBlbmZvcmNlZCBhcyBxdWFsIGNvbmRpdGlvbnMgaW4gdGhlIHNj YW4uCisgKiAnaW5kZXhvcmRlcmJ5cycgaXMgYSBsaXN0IG9mIGJhcmUgZXhwcmVzc2lvbnMg KG5vIFJlc3RyaWN0SW5mb3MpCisgKgkJCXRvIGJlIHVzZWQgYXMgaW5kZXggb3JkZXJpbmcg b3BlcmF0b3JzIGluIHRoZSBzY2FuLgorICogJ2luZGV4b3JkZXJieWNvbHMnIGlzIGFuIGlu dGVnZXIgbGlzdCBvZiBpbmRleCBjb2x1bW4gbnVtYmVycyAoemVybyBiYXNlZCkKKyAqCQkJ dGhlIG9yZGVyaW5nIG9wZXJhdG9ycyBjYW4gYmUgdXNlZCB3aXRoLgorICogJ3BhdGhrZXlz JyBkZXNjcmliZXMgdGhlIG9yZGVyaW5nIG9mIHRoZSBwYXRoLgorICogJ2luZGV4c2NhbmRp cicgaXMgRm9yd2FyZFNjYW5EaXJlY3Rpb24gb3IgQmFja3dhcmRTY2FuRGlyZWN0aW9uCisg KgkJCWZvciBhbiBvcmRlcmVkIGluZGV4LCBvciBOb01vdmVtZW50U2NhbkRpcmVjdGlvbiBm b3IKKyAqCQkJYW4gdW5vcmRlcmVkIGluZGV4LgorICogJ2luZGV4b25seScgaXMgdHJ1ZSBp ZiBhbiBpbmRleC1vbmx5IHNjYW4gaXMgd2FudGVkLgorICogJ3JlcXVpcmVkX291dGVyJyBp cyB0aGUgc2V0IG9mIG91dGVyIHJlbGlkcyBmb3IgYSBwYXJhbWV0ZXJpemVkIHBhdGguCisg KiAnbG9vcF9jb3VudCcgaXMgdGhlIG51bWJlciBvZiByZXBldGl0aW9ucyBvZiB0aGUgaW5k ZXhzY2FuIHRvIGZhY3RvciBpbnRvCisgKgkJZXN0aW1hdGVzIG9mIGNhY2hpbmcgYmVoYXZp b3IuCisgKiAncGFydGlhbF9wYXRoJyBpcyB0cnVlIGlmIGNvbnN0cnVjdGluZyBhIHBhcmFs bGVsIGluZGV4IHNjYW4gcGF0aC4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgcGF0aCBub2Rl LgorICovCitCcmluU29ydFBhdGggKgorY3JlYXRlX2JyaW5zb3J0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCSBJbmRleE9wdEluZm8gKmluZGV4LAorCQkJCQkgTGlzdCAqaW5k ZXhjbGF1c2VzLAorCQkJCQkgTGlzdCAqcGF0aGtleXMsCisJCQkJCSBTY2FuRGlyZWN0aW9u IGluZGV4c2NhbmRpciwKKwkJCQkJIGJvb2wgaW5kZXhvbmx5LAorCQkJCQkgUmVsaWRzIHJl cXVpcmVkX291dGVyLAorCQkJCQkgZG91YmxlIGxvb3BfY291bnQsCisJCQkJCSBib29sIHBh cnRpYWxfcGF0aCkKK3sKKwlCcmluU29ydFBhdGggICpwYXRobm9kZSA9IG1ha2VOb2RlKEJy aW5Tb3J0UGF0aCk7CisJUmVsT3B0SW5mbyAqcmVsID0gaW5kZXgtPnJlbDsKKworCXBhdGhu b2RlLT5pcGF0aC5wYXRoLnBhdGh0eXBlID0gVF9CcmluU29ydDsKKwlwYXRobm9kZS0+aXBh dGgucGF0aC5wYXJlbnQgPSByZWw7CisJcGF0aG5vZGUtPmlwYXRoLnBhdGgucGF0aHRhcmdl dCA9IHJlbC0+cmVsdGFyZ2V0OworCXBhdGhub2RlLT5pcGF0aC5wYXRoLnBhcmFtX2luZm8g PSBnZXRfYmFzZXJlbF9wYXJhbXBhdGhpbmZvKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkJCQkJ ICByZXF1aXJlZF9vdXRlcik7CisJcGF0aG5vZGUtPmlwYXRoLnBhdGgucGFyYWxsZWxfYXdh cmUgPSBmYWxzZTsKKwlwYXRobm9kZS0+aXBhdGgucGF0aC5wYXJhbGxlbF9zYWZlID0gcmVs LT5jb25zaWRlcl9wYXJhbGxlbDsKKwlwYXRobm9kZS0+aXBhdGgucGF0aC5wYXJhbGxlbF93 b3JrZXJzID0gMDsKKwlwYXRobm9kZS0+aXBhdGgucGF0aC5wYXRoa2V5cyA9IHBhdGhrZXlz OworCisJcGF0aG5vZGUtPmlwYXRoLmluZGV4aW5mbyA9IGluZGV4OworCXBhdGhub2RlLT5p cGF0aC5pbmRleGNsYXVzZXMgPSBpbmRleGNsYXVzZXM7CisJcGF0aG5vZGUtPmlwYXRoLmlu ZGV4c2NhbmRpciA9IGluZGV4c2NhbmRpcjsKKworCWNvc3RfYnJpbnNvcnQocGF0aG5vZGUs IHJvb3QsIGxvb3BfY291bnQsIHBhcnRpYWxfcGF0aCk7CisKKwlyZXR1cm4gcGF0aG5vZGU7 Cit9CisKIC8qCiAgKiBjcmVhdGVfYml0bWFwX2hlYXBfcGF0aAogICoJICBDcmVhdGVzIGEg cGF0aCBub2RlIGZvciBhIGJpdG1hcCBzY2FuLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYwppbmRleCAwNmRmZWI2Y2Q4Yi4uYTVjYTNiZDBjYzQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC05NzcsNiArOTc3LDE2IEBAIHN0cnVjdCBjb25m aWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCWZhbHNlLAogCQlOVUxMLCBOVUxM LCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX2JyaW5zb3J0IiwgUEdDX1VTRVJTRVQsIFFV RVJZX1RVTklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5u ZXIncyB1c2Ugb2YgQlJJTiBzb3J0IHBsYW5zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBM QUlOCisJCX0sCisJCSZlbmFibGVfYnJpbnNvcnQsCisJCWZhbHNlLAorCQlOVUxMLCBOVUxM LCBOVUxMCisJfSwKIAl7CiAJCXsiZ2VxbyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdf R0VRTywKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBnZW5ldGljIHF1ZXJ5IG9wdGltaXph dGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmluZGV4IGE3Y2NjYWM5YzkwLi5iZTA1NTg2ZWM1NyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvYnJpbi5oCkBAIC0zNCw0MSArMzQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCcmlu U3RhdHNEYXRhCiAJQmxvY2tOdW1iZXIgcmV2bWFwTnVtUGFnZXM7CiB9IEJyaW5TdGF0c0Rh dGE7CiAKLS8qCi0gKiBJbmZvIGFib3V0IHJhbmdlcyBmb3IgQlJJTiBTb3J0LgotICovCi10 eXBlZGVmIHN0cnVjdCBCcmluUmFuZ2UKLXsKLQlCbG9ja051bWJlciBibGtub19zdGFydDsK LQlCbG9ja051bWJlciBibGtub19lbmQ7Ci0KLQlEYXR1bQltaW5fdmFsdWU7Ci0JRGF0dW0J bWF4X3ZhbHVlOwotCWJvb2wJaGFzX251bGxzOwotCWJvb2wJYWxsX251bGxzOwotCWJvb2wJ bm90X3N1bW1hcml6ZWQ7Ci0KLQkvKgotCSAqIEluZGV4IG9mIHRoZSByYW5nZSB3aGVuIG9y ZGVyZWQgYnkgbWluX3ZhbHVlIChpZiB0aGVyZSBhcmUgbXVsdGlwbGUKLQkgKiByYW5nZXMg d2l0aCB0aGUgc2FtZSBtaW5fdmFsdWUsIGl0J3MgdGhlIGxvd2VzdCBvbmUpLgotCSAqLwot CXVpbnQzMgltaW5faW5kZXg7Ci0KLQkvKgotCSAqIE1pbmltdW0gbWluX2luZGV4IGZyb20g YWxsIHJhbmdlcyB3aXRoIGhpZ2hlciBtYXhfdmFsdWUgKGkuZS4gd2hlbgotCSAqIHNvcnRl ZCBieSBtYXhfdmFsdWUpLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcmFuZ2VzIHdpdGggdGhl IHNhbWUKLQkgKiBtYXhfdmFsdWUsIGl0IGRlcGVuZHMgb24gdGhlIG9yZGVyaW5nIChpLmUu IHRoZSByYW5nZXMgbWF5IGdldAotCSAqIGRpZmZlcmVudCBtaW5faW5kZXhfbG93ZXN0LCBk ZXBlbmRpbmcgb24gdGhlIGV4YWN0IG9yZGVyaW5nKS4KLQkgKi8KLQl1aW50MzIJbWluX2lu ZGV4X2xvd2VzdDsKLX0gQnJpblJhbmdlOwotCi10eXBlZGVmIHN0cnVjdCBCcmluUmFuZ2Vz Ci17Ci0JaW50CQkJbnJhbmdlczsKLQlCcmluUmFuZ2UJcmFuZ2VzW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07Ci19IEJyaW5SYW5nZXM7Ci0KIHR5cGVkZWYgc3RydWN0IEJyaW5NaW5tYXhT dGF0cwogewogCWludDMyCQl2bF9sZW5fOwkJLyogdmFybGVuYSBoZWFkZXIgKGRvIG5vdCB0 b3VjaCBkaXJlY3RseSEpICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJp bl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5faW50ZXJuYWwuaAppbmRl eCBlZTZjNmY5YjcwOS4uZmNkZDRjYWZkYTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9icmluX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5faW50 ZXJuYWwuaApAQCAtNzQsNiArNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBCcmluRGVzYwogI2Rl ZmluZSBCUklOX01BTkRBVE9SWV9OUFJPQ1MJCTQKICNkZWZpbmUgQlJJTl9QUk9DTlVNX09Q VElPTlMgCQk1CS8qIG9wdGlvbmFsICovCiAjZGVmaW5lIEJSSU5fUFJPQ05VTV9TVEFUSVNU SUNTCQk2CS8qIG9wdGlvbmFsICovCisjZGVmaW5lIEJSSU5fUFJPQ05VTV9SQU5HRVMgCQk3 CS8qIG9wdGlvbmFsICovCiAvKiBwcm9jZWR1cmUgbnVtYmVycyB1cCB0byAxMCBhcmUgcmVz ZXJ2ZWQgZm9yIEJSSU4gZnV0dXJlIGV4cGFuc2lvbiAqLwogI2RlZmluZSBCUklOX0ZJUlNU X09QVElPTkFMX1BST0NOVU0gMTEKICNkZWZpbmUgQlJJTl9MQVNUX09QVElPTkFMX1BST0NO VU0JMTUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1wcm9jLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1wcm9jLmRhdAppbmRleCBlYTNkZTliY2JhMS4u NTYyZjQ4MWFmMTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1wcm9j LmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtcHJvYy5kYXQKQEAgLTgwNiw2 ICs4MDYsOCBAQAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2J5dGVhJywgYW1wcm9jbnVtID0+ ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKIHsgYW1wcm9jZmFtaWx5 ID0+ICdicmluL2J5dGVhX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnYnl0ZWEn LAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2J5dGVhJywgYW1wcm9jbnVtID0+ICc2JywgYW1w cm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmlu L2J5dGVhX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnYnl0ZWEnLAorICBhbXBy b2NyaWdodHR5cGUgPT4gJ2J5dGVhJywgYW1wcm9jbnVtID0+ICc3JywgYW1wcm9jID0+ICdi cmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgYmxvb20gYnl0ZWEKIHsgYW1wcm9jZmFtaWx5 ID0+ICdicmluL2J5dGVhX2Jsb29tX29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdieXRlYScs CkBAIC04MzksNiArODQxLDggQEAKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdjaGFyJywgYW1w cm9jbnVtID0+ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKIHsgYW1w cm9jZmFtaWx5ID0+ICdicmluL2NoYXJfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ ICdjaGFyJywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdjaGFyJywgYW1wcm9jbnVtID0+ICc2 JywgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ ICdicmluL2NoYXJfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdjaGFyJywKKyAg YW1wcm9jcmlnaHR0eXBlID0+ICdjaGFyJywgYW1wcm9jbnVtID0+ICc3JywgYW1wcm9jID0+ ICdicmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgYmxvb20gImNoYXIiCiB7IGFtcHJvY2Zh bWlseSA9PiAnYnJpbi9jaGFyX2Jsb29tX29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdjaGFy JywKQEAgLTg3MCw2ICs4NzQsOCBAQAogICBhbXByb2NyaWdodHR5cGUgPT4gJ25hbWUnLCBh bXByb2NudW0gPT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAogeyBh bXByb2NmYW1pbHkgPT4gJ2JyaW4vbmFtZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUg PT4gJ25hbWUnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ25hbWUnLCBhbXByb2NudW0gPT4g JzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vbmFtZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ25hbWUnLAor ICBhbXByb2NyaWdodHR5cGUgPT4gJ25hbWUnLCBhbXByb2NudW0gPT4gJzcnLCBhbXByb2Mg PT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogIyBibG9vbSBuYW1lCiB7IGFtcHJvY2Zh bWlseSA9PiAnYnJpbi9uYW1lX2Jsb29tX29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICduYW1l JywKQEAgLTkwMSw2ICs5MDcsOCBAQAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDgnLCBh bXByb2NudW0gPT4gJzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAogeyBh bXByb2NmYW1pbHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5 cGUgPT4gJ2ludDgnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDgnLCBhbXByb2NudW0g PT4gJzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1p bHkgPT4gJ2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2lu dDgnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDgnLCBhbXByb2NudW0gPT4gJzcnLCBh bXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogeyBhbXByb2NmYW1pbHkgPT4g J2JyaW4vaW50ZWdlcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2ludDInLAog ICBhbXByb2NyaWdodHR5cGUgPT4gJ2ludDInLCBhbXByb2NudW0gPT4gJzEnLApAQCAtOTE1 LDYgKzkyMyw4IEBACiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnaW50MicsIGFtcHJvY251bSA9 PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCiB7IGFtcHJvY2ZhbWls eSA9PiAnYnJpbi9pbnRlZ2VyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50 MicsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnaW50MicsIGFtcHJvY251bSA9PiAnNicsIGFt cHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJp bi9pbnRlZ2VyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50MicsCisgIGFt cHJvY3JpZ2h0dHlwZSA9PiAnaW50MicsIGFtcHJvY251bSA9PiAnNycsIGFtcHJvYyA9PiAn YnJpbl9taW5tYXhfcmFuZ2VzJyB9LAogCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9pbnRl Z2VyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW50NCcsCiAgIGFtcHJvY3Jp Z2h0dHlwZSA9PiAnaW50NCcsIGFtcHJvY251bSA9PiAnMScsCkBAIC05MjksNiArOTM5LDgg QEAKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdpbnQ0JywgYW1wcm9jbnVtID0+ICc0JywgYW1w cm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmlu L2ludGVnZXJfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdpbnQ0JywKICAgYW1w cm9jcmlnaHR0eXBlID0+ICdpbnQ0JywgYW1wcm9jbnVtID0+ICc2JywgYW1wcm9jID0+ICdi cmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL2ludGVnZXJf bWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdpbnQ0JywKKyAgYW1wcm9jcmlnaHR0 eXBlID0+ICdpbnQ0JywgYW1wcm9jbnVtID0+ICc3JywgYW1wcm9jID0+ICdicmluX21pbm1h eF9yYW5nZXMnIH0sCiAKICMgbWlubWF4IG11bHRpIGludGVnZXI6IGludDIsIGludDQsIGlu dDgKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2ludGVnZXJfbWlubWF4X211bHRpX29wcycs IGFtcHJvY2xlZnR0eXBlID0+ICdpbnQyJywKQEAgLTEwNDgsNiArMTA2MCw4IEBACiAgIGFt cHJvY3JpZ2h0dHlwZSA9PiAndGV4dCcsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAn YnJpbl9taW5tYXhfdW5pb24nIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90ZXh0X21p bm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGV4dCcsCiAgIGFtcHJvY3JpZ2h0dHlw ZSA9PiAndGV4dCcsIGFtcHJvY251bSA9PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhf c3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90ZXh0X21pbm1heF9vcHMnLCBh bXByb2NsZWZ0dHlwZSA9PiAndGV4dCcsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGV4dCcs IGFtcHJvY251bSA9PiAnNycsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfcmFuZ2VzJyB9LAog CiAjIGJsb29tIHRleHQKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL3RleHRfYmxvb21fb3Bz JywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RleHQnLApAQCAtMTA3OCw2ICsxMDkyLDggQEAKICAg YW1wcm9jcmlnaHR0eXBlID0+ICdvaWQnLCBhbXByb2NudW0gPT4gJzQnLCBhbXByb2MgPT4g J2JyaW5fbWlubWF4X3VuaW9uJyB9LAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vb2lkX21p bm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnb2lkJywKICAgYW1wcm9jcmlnaHR0eXBl ID0+ICdvaWQnLCBhbXByb2NudW0gPT4gJzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0 YXRzJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vb2lkX21pbm1heF9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAnb2lkJywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdvaWQnLCBhbXBy b2NudW0gPT4gJzcnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogIyBt aW5tYXggbXVsdGkgb2lkCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9vaWRfbWlubWF4X211 bHRpX29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdvaWQnLApAQCAtMTEyOCw2ICsxMTQ0LDgg QEAKICAgYW1wcm9jcmlnaHR0eXBlID0+ICd0aWQnLCBhbXByb2NudW0gPT4gJzQnLCBhbXBy b2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4v dGlkX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGlkJywKICAgYW1wcm9jcmln aHR0eXBlID0+ICd0aWQnLCBhbXByb2NudW0gPT4gJzYnLCBhbXByb2MgPT4gJ2JyaW5fbWlu bWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGlkX21pbm1heF9vcHMn LCBhbXByb2NsZWZ0dHlwZSA9PiAndGlkJywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICd0aWQn LCBhbXByb2NudW0gPT4gJzcnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwK IAogIyBibG9vbSB0aWQKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL3RpZF9ibG9vbV9vcHMn LCBhbXByb2NsZWZ0dHlwZSA9PiAndGlkJywKQEAgLTExODEsNiArMTE5OSw5IEBACiB7IGFt cHJvY2ZhbWlseSA9PiAnYnJpbi9mbG9hdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUg PT4gJ2Zsb2F0NCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZmxvYXQ0JywgYW1wcm9jbnVt ID0+ICc2JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9j ZmFtaWx5ID0+ICdicmluL2Zsb2F0X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn ZmxvYXQ0JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdmbG9hdDQnLCBhbXByb2NudW0gPT4g JzcnLAorICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogeyBhbXByb2Nm YW1pbHkgPT4gJ2JyaW4vZmxvYXRfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdm bG9hdDgnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2Zsb2F0OCcsIGFtcHJvY251bSA9PiAn MScsCkBAIC0xMTk3LDYgKzEyMTgsOSBAQAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vZmxv YXRfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdmbG9hdDgnLAogICBhbXByb2Ny aWdodHR5cGUgPT4gJ2Zsb2F0OCcsIGFtcHJvY251bSA9PiAnNicsCiAgIGFtcHJvYyA9PiAn YnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9mbG9hdF9t aW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2Zsb2F0OCcsCisgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAnZmxvYXQ4JywgYW1wcm9jbnVtID0+ICc3JywKKyAgYW1wcm9jID0+ICdicmlu X21pbm1heF9yYW5nZXMnIH0sCiAKICMgbWlubWF4IG11bHRpIGZsb2F0CiB7IGFtcHJvY2Zh bWlseSA9PiAnYnJpbi9mbG9hdF9taW5tYXhfbXVsdGlfb3BzJywgYW1wcm9jbGVmdHR5cGUg PT4gJ2Zsb2F0NCcsCkBAIC0xMjg4LDYgKzEzMTIsOSBAQAogeyBhbXByb2NmYW1pbHkgPT4g J2JyaW4vbWFjYWRkcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ21hY2FkZHIn LAogICBhbXByb2NyaWdodHR5cGUgPT4gJ21hY2FkZHInLCBhbXByb2NudW0gPT4gJzYnLAog ICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1pbHkgPT4g J2JyaW4vbWFjYWRkcl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ21hY2FkZHIn LAorICBhbXByb2NyaWdodHR5cGUgPT4gJ21hY2FkZHInLCBhbXByb2NudW0gPT4gJzcnLAor ICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogIyBtaW5tYXggbXVsdGkg bWFjYWRkcgogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vbWFjYWRkcl9taW5tYXhfbXVsdGlf b3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ21hY2FkZHInLApAQCAtMTM0NCw2ICsxMzcxLDkg QEAKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL21hY2FkZHI4X21pbm1heF9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAnbWFjYWRkcjgnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ21hY2Fk ZHI4JywgYW1wcm9jbnVtID0+ICc2JywKICAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0 cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL21hY2FkZHI4X21pbm1heF9vcHMnLCBh bXByb2NsZWZ0dHlwZSA9PiAnbWFjYWRkcjgnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ21h Y2FkZHI4JywgYW1wcm9jbnVtID0+ICc3JywKKyAgYW1wcm9jID0+ICdicmluX21pbm1heF9y YW5nZXMnIH0sCiAKICMgbWlubWF4IG11bHRpIG1hY2FkZHI4CiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9tYWNhZGRyOF9taW5tYXhfbXVsdGlfb3BzJywKQEAgLTEzOTgsNiArMTQyOCw4 IEBACiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnaW5ldCcsIGFtcHJvY251bSA9PiAnNCcsIGFt cHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24nIH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJp bi9uZXR3b3JrX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW5ldCcsCiAgIGFt cHJvY3JpZ2h0dHlwZSA9PiAnaW5ldCcsIGFtcHJvY251bSA9PiAnNicsIGFtcHJvYyA9PiAn YnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9uZXR3b3Jr X21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnaW5ldCcsCisgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAnaW5ldCcsIGFtcHJvY251bSA9PiAnNycsIGFtcHJvYyA9PiAnYnJpbl9taW5t YXhfcmFuZ2VzJyB9LAogCiAjIG1pbm1heCBtdWx0aSBpbmV0CiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9uZXR3b3JrX21pbm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn aW5ldCcsCkBAIC0xNDcxLDYgKzE1MDMsOSBAQAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4v YnBjaGFyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnYnBjaGFyJywKICAgYW1w cm9jcmlnaHR0eXBlID0+ICdicGNoYXInLCBhbXByb2NudW0gPT4gJzYnLAogICBhbXByb2Mg PT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vYnBj aGFyX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnYnBjaGFyJywKKyAgYW1wcm9j cmlnaHR0eXBlID0+ICdicGNoYXInLCBhbXByb2NudW0gPT4gJzcnLAorICBhbXByb2MgPT4g J2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogIyBibG9vbSBjaGFyYWN0ZXIKIHsgYW1wcm9j ZmFtaWx5ID0+ICdicmluL2JwY2hhcl9ibG9vbV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn YnBjaGFyJywKQEAgLTE1MDQsNiArMTUzOSw4IEBACiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAn dGltZScsIGFtcHJvY251bSA9PiAnNCcsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfdW5pb24n IH0sCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90aW1lX21pbm1heF9vcHMnLCBhbXByb2Ns ZWZ0dHlwZSA9PiAndGltZScsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGltZScsIGFtcHJv Y251bSA9PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJv Y2ZhbWlseSA9PiAnYnJpbi90aW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn dGltZScsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndGltZScsIGFtcHJvY251bSA9PiAnNycs IGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfcmFuZ2VzJyB9LAogCiAjIG1pbm1heCBtdWx0aSB0 aW1lIHdpdGhvdXQgdGltZSB6b25lCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi90aW1lX21p bm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGltZScsCkBAIC0xNTU3LDYg KzE1OTQsOSBAQAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vZGF0ZXRpbWVfbWlubWF4X29w cycsIGFtcHJvY2xlZnR0eXBlID0+ICd0aW1lc3RhbXAnLAogICBhbXByb2NyaWdodHR5cGUg PT4gJ3RpbWVzdGFtcCcsIGFtcHJvY251bSA9PiAnNicsCiAgIGFtcHJvYyA9PiAnYnJpbl9t aW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9kYXRldGltZV9taW5t YXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpbWVzdGFtcCcsCisgIGFtcHJvY3JpZ2h0 dHlwZSA9PiAndGltZXN0YW1wJywgYW1wcm9jbnVtID0+ICc3JywKKyAgYW1wcm9jID0+ICdi cmluX21pbm1heF9yYW5nZXMnIH0sCiAKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2RhdGV0 aW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAndGltZXN0YW1wdHonLAogICBh bXByb2NyaWdodHR5cGUgPT4gJ3RpbWVzdGFtcHR6JywgYW1wcm9jbnVtID0+ICcxJywKQEAg LTE1NzMsNiArMTYxMyw5IEBACiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9kYXRldGltZV9t aW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpbWVzdGFtcHR6JywKICAgYW1wcm9j cmlnaHR0eXBlID0+ICd0aW1lc3RhbXB0eicsIGFtcHJvY251bSA9PiAnNicsCiAgIGFtcHJv YyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9k YXRldGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3RpbWVzdGFtcHR6JywK KyAgYW1wcm9jcmlnaHR0eXBlID0+ICd0aW1lc3RhbXB0eicsIGFtcHJvY251bSA9PiAnNycs CisgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfcmFuZ2VzJyB9LAogCiB7IGFtcHJvY2ZhbWls eSA9PiAnYnJpbi9kYXRldGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2Rh dGUnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2RhdGUnLCBhbXByb2NudW0gPT4gJzEnLApA QCAtMTU4Nyw2ICsxNjMwLDggQEAKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdkYXRlJywgYW1w cm9jbnVtID0+ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicgfSwKIHsgYW1w cm9jZmFtaWx5ID0+ICdicmluL2RhdGV0aW1lX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlw ZSA9PiAnZGF0ZScsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnZGF0ZScsIGFtcHJvY251bSA9 PiAnNicsIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2ZhbWls eSA9PiAnYnJpbi9kYXRldGltZV9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2Rh dGUnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2RhdGUnLCBhbXByb2NudW0gPT4gJzcnLCBh bXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwKIAogIyBtaW5tYXggbXVsdGkgZGF0 ZXRpbWUgKGRhdGUsIHRpbWVzdGFtcCwgdGltZXN0YW1wdHopCiB7IGFtcHJvY2ZhbWlseSA9 PiAnYnJpbi9kYXRldGltZV9taW5tYXhfbXVsdGlfb3BzJywKQEAgLTE3MTYsNiArMTc2MSw5 IEBACiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9pbnRlcnZhbF9taW5tYXhfb3BzJywgYW1w cm9jbGVmdHR5cGUgPT4gJ2ludGVydmFsJywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdpbnRl cnZhbCcsIGFtcHJvY251bSA9PiAnNicsCiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3Rh dHMnIH0sCit7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9pbnRlcnZhbF9taW5tYXhfb3BzJywg YW1wcm9jbGVmdHR5cGUgPT4gJ2ludGVydmFsJywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICdp bnRlcnZhbCcsIGFtcHJvY251bSA9PiAnNycsCisgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhf cmFuZ2VzJyB9LAogCiAjIG1pbm1heCBtdWx0aSBpbnRlcnZhbAogeyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vaW50ZXJ2YWxfbWlubWF4X211bHRpX29wcycsCkBAIC0xNzcyLDYgKzE4MjAs OSBAQAogeyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGltZXR6X21pbm1heF9vcHMnLCBhbXBy b2NsZWZ0dHlwZSA9PiAndGltZXR6JywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICd0aW1ldHon LCBhbXByb2NudW0gPT4gJzYnLAogICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9 LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdGltZXR6X21pbm1heF9vcHMnLCBhbXByb2Ns ZWZ0dHlwZSA9PiAndGltZXR6JywKKyAgYW1wcm9jcmlnaHR0eXBlID0+ICd0aW1ldHonLCBh bXByb2NudW0gPT4gJzcnLAorICBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycgfSwK IAogIyBtaW5tYXggbXVsdGkgdGltZSB3aXRoIHRpbWUgem9uZQogeyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vdGltZXR6X21pbm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn dGltZXR6JywKQEAgLTE4MjQsNiArMTg3NSw4IEBACiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAn Yml0JywgYW1wcm9jbnVtID0+ICc0JywgYW1wcm9jID0+ICdicmluX21pbm1heF91bmlvbicg fSwKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL2JpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVm dHR5cGUgPT4gJ2JpdCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnYml0JywgYW1wcm9jbnVt ID0+ICc2JywgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFt aWx5ID0+ICdicmluL2JpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2JpdCcs CisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnYml0JywgYW1wcm9jbnVtID0+ICc3JywgYW1wcm9j ID0+ICdicmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgbWlubWF4IGJpdCB2YXJ5aW5nCiB7 IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi92YXJiaXRfbWlubWF4X29wcycsIGFtcHJvY2xlZnR0 eXBlID0+ICd2YXJiaXQnLApAQCAtMTg0MSw2ICsxODk0LDkgQEAKIHsgYW1wcm9jZmFtaWx5 ID0+ICdicmluL3ZhcmJpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3ZhcmJp dCcsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndmFyYml0JywgYW1wcm9jbnVtID0+ICc2JywK ICAgYW1wcm9jID0+ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ ICdicmluL3ZhcmJpdF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3ZhcmJpdCcs CisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAndmFyYml0JywgYW1wcm9jbnVtID0+ICc3JywKKyAg YW1wcm9jID0+ICdicmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgbWlubWF4IG51bWVyaWMK IHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL251bWVyaWNfbWlubWF4X29wcycsIGFtcHJvY2xl ZnR0eXBlID0+ICdudW1lcmljJywKQEAgLTE4NTgsNiArMTkxNCw5IEBACiB7IGFtcHJvY2Zh bWlseSA9PiAnYnJpbi9udW1lcmljX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn bnVtZXJpYycsCiAgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnbnVtZXJpYycsIGFtcHJvY251bSA9 PiAnNicsCiAgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfc3RhdHMnIH0sCit7IGFtcHJvY2Zh bWlseSA9PiAnYnJpbi9udW1lcmljX21pbm1heF9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAn bnVtZXJpYycsCisgIGFtcHJvY3JpZ2h0dHlwZSA9PiAnbnVtZXJpYycsIGFtcHJvY251bSA9 PiAnNycsCisgIGFtcHJvYyA9PiAnYnJpbl9taW5tYXhfcmFuZ2VzJyB9LAogCiAjIG1pbm1h eCBtdWx0aSBudW1lcmljCiB7IGFtcHJvY2ZhbWlseSA9PiAnYnJpbi9udW1lcmljX21pbm1h eF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnbnVtZXJpYycsCkBAIC0xOTEyLDYg KzE5NzEsOCBAQAogICBhbXByb2NyaWdodHR5cGUgPT4gJ3V1aWQnLCBhbXByb2NudW0gPT4g JzQnLCBhbXByb2MgPT4gJ2JyaW5fbWlubWF4X3VuaW9uJyB9LAogeyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vdXVpZF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3V1aWQnLAog ICBhbXByb2NyaWdodHR5cGUgPT4gJ3V1aWQnLCBhbXByb2NudW0gPT4gJzYnLCBhbXByb2Mg PT4gJ2JyaW5fbWlubWF4X3N0YXRzJyB9LAoreyBhbXByb2NmYW1pbHkgPT4gJ2JyaW4vdXVp ZF9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3V1aWQnLAorICBhbXByb2NyaWdo dHR5cGUgPT4gJ3V1aWQnLCBhbXByb2NudW0gPT4gJzcnLCBhbXByb2MgPT4gJ2JyaW5fbWlu bWF4X3JhbmdlcycgfSwKIAogIyBtaW5tYXggbXVsdGkgdXVpZAogeyBhbXByb2NmYW1pbHkg PT4gJ2JyaW4vdXVpZF9taW5tYXhfbXVsdGlfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3V1 aWQnLApAQCAtMTk4OCw2ICsyMDQ5LDkgQEAKIHsgYW1wcm9jZmFtaWx5ID0+ICdicmluL3Bn X2xzbl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3BnX2xzbicsCiAgIGFtcHJv Y3JpZ2h0dHlwZSA9PiAncGdfbHNuJywgYW1wcm9jbnVtID0+ICc2JywKICAgYW1wcm9jID0+ ICdicmluX21pbm1heF9zdGF0cycgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdicmluL3BnX2xz bl9taW5tYXhfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ3BnX2xzbicsCisgIGFtcHJvY3Jp Z2h0dHlwZSA9PiAncGdfbHNuJywgYW1wcm9jbnVtID0+ICc3JywKKyAgYW1wcm9jID0+ICdi cmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgbWlubWF4IG11bHRpIHBnX2xzbgogeyBhbXBy b2NmYW1pbHkgPT4gJ2JyaW4vcGdfbHNuX21pbm1heF9tdWx0aV9vcHMnLCBhbXByb2NsZWZ0 dHlwZSA9PiAncGdfbHNuJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDFkZDkx NzdiMDFjLi4xOGUwODI0YTA4ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04 NDExLDYgKzg0MTEsOSBAQAogICBwcm9uYW1lID0+ICdicmluX21pbm1heF9zdGF0cycsIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLAogICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgaW50ZXJu YWwgaW50MiBpbnQyIGludGVybmFsIGludDQnLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4 X3N0YXRzJyB9LAoreyBvaWQgPT4gJzk5ODAnLCBkZXNjciA9PiAnQlJJTiBtaW5tYXggc3Vw cG9ydCcsCisgIHByb25hbWUgPT4gJ2JyaW5fbWlubWF4X3JhbmdlcycsIHByb3JldHR5cGUg PT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgaW50MiBib29sJywgcHJv c3JjID0+ICdicmluX21pbm1heF9yYW5nZXMnIH0sCiAKICMgQlJJTiBtaW5tYXggbXVsdGkK IHsgb2lkID0+ICc0NjE2JywgZGVzY3IgPT4gJ0JSSU4gbXVsdGkgbWlubWF4IHN1cHBvcnQn LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUJyaW5Tb3J0LmggYi9z cmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQnJpblNvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMmM4NjBkOTI2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQnJpblNvcnQuaApAQCAtMCwwICsxLDQ3IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBub2RlQnJpblNvcnQuaAorICoKKyAqCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9p bmNsdWRlL2V4ZWN1dG9yL25vZGVCcmluU29ydC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgTk9ERUJyaW5Tb3J0X0gKKyNkZWZpbmUgTk9ERUJyaW5Tb3J0 X0gKKworI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9wYXJh bGxlbC5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorCitleHRlcm4gQnJpblNv cnRTdGF0ZSAqRXhlY0luaXRCcmluU29ydChCcmluU29ydCAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpOworZXh0ZXJuIHZvaWQgRXhlY0VuZEJyaW5Tb3J0KEJyaW5Tb3J0 U3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY0JyaW5Tb3J0TWFya1BvcyhCcmluU29y dFN0YXRlICpub2RlKTsKK2V4dGVybiB2b2lkIEV4ZWNCcmluU29ydFJlc3RyUG9zKEJyaW5T b3J0U3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY1JlU2NhbkJyaW5Tb3J0KEJyaW5T b3J0U3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY0JyaW5Tb3J0RXN0aW1hdGUoQnJp blNvcnRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKK2V4dGVybiB2b2lk IEV4ZWNCcmluU29ydEluaXRpYWxpemVEU00oQnJpblNvcnRTdGF0ZSAqbm9kZSwgUGFyYWxs ZWxDb250ZXh0ICpwY3h0KTsKK2V4dGVybiB2b2lkIEV4ZWNCcmluU29ydFJlSW5pdGlhbGl6 ZURTTShCcmluU29ydFN0YXRlICpub2RlLCBQYXJhbGxlbENvbnRleHQgKnBjeHQpOworZXh0 ZXJuIHZvaWQgRXhlY0JyaW5Tb3J0SW5pdGlhbGl6ZVdvcmtlcihCcmluU29ydFN0YXRlICpu b2RlLAorCQkJCQkJCQkJCSAgUGFyYWxsZWxXb3JrZXJDb250ZXh0ICpwd2N4dCk7CisKKy8q CisgKiBUaGVzZSByb3V0aW5lcyBhcmUgZXhwb3J0ZWQgdG8gc2hhcmUgY29kZSB3aXRoIG5v ZGVJbmRleG9ubHlzY2FuLmMgYW5kCisgKiBub2RlQml0bWFwQnJpblNvcnQuYworICovCitl eHRlcm4gdm9pZCBFeGVjSW5kZXhCdWlsZFNjYW5LZXlzKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJICAgTGlzdCAqcXVhbHMsIGJvb2wgaXNvcmRl cmJ5LAorCQkJCQkJCQkgICBTY2FuS2V5ICpzY2FuS2V5cywgaW50ICpudW1TY2FuS2V5cywK KwkJCQkJCQkJICAgSW5kZXhSdW50aW1lS2V5SW5mbyAqKnJ1bnRpbWVLZXlzLCBpbnQgKm51 bVJ1bnRpbWVLZXlzLAorCQkJCQkJCQkgICBJbmRleEFycmF5S2V5SW5mbyAqKmFycmF5S2V5 cywgaW50ICpudW1BcnJheUtleXMpOworZXh0ZXJuIHZvaWQgRXhlY0luZGV4RXZhbFJ1bnRp bWVLZXlzKEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJCSBJbmRleFJ1bnRpbWVL ZXlJbmZvICpydW50aW1lS2V5cywgaW50IG51bVJ1bnRpbWVLZXlzKTsKK2V4dGVybiBib29s IEV4ZWNJbmRleEV2YWxBcnJheUtleXMoRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJ CQkgICBJbmRleEFycmF5S2V5SW5mbyAqYXJyYXlLZXlzLCBpbnQgbnVtQXJyYXlLZXlzKTsK K2V4dGVybiBib29sIEV4ZWNJbmRleEFkdmFuY2VBcnJheUtleXMoSW5kZXhBcnJheUtleUlu Zm8gKmFycmF5S2V5cywgaW50IG51bUFycmF5S2V5cyk7CisKKyNlbmRpZgkJCQkJCQkvKiBO T0RFQnJpblNvcnRfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAwMWIxNzI3ZmMw OS4uMzgxYzJmY2QzZDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNTQ5LDYgKzE1 NDksMTA5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJU2l6ZQkJaXNzX1Bz Y2FuTGVuOwogfSBJbmRleFNjYW5TdGF0ZTsKIAordHlwZWRlZiBlbnVtIHsKKwlCUklOU09S VF9TVEFSVCwKKwlCUklOU09SVF9MT0FEX1JBTkdFLAorCUJSSU5TT1JUX1BST0NFU1NfUkFO R0UsCisJQlJJTlNPUlRfTE9BRF9OVUxMUywKKwlCUklOU09SVF9QUk9DRVNTX05VTExTLAor CUJSSU5TT1JUX0ZJTklTSEVECit9IEJyaW5Tb3J0UGhhc2U7CisKK3R5cGVkZWYgc3RydWN0 IEJyaW5SYW5nZVNjYW5EZXNjCit7CisJLyogcmFuZ2UgaW5mbyB0dXBsZSBkZXNjcmlwdG9y ICovCisJVHVwbGVEZXNjCQl0ZGVzYzsKKworCS8qIHJhbmdlcywgc29ydGVkIGJ5IG1pbnZh bCwgYmxrbm9fc3RhcnQgKi8KKwlUdXBsZXNvcnRzdGF0ZSAqcmFuZ2VzOworCisJLyogZGlz dGluY3QgbWludmFsIChzb3J0ZWQpICovCisJVHVwbGVzdG9yZXN0YXRlICptaW52YWxzOwor CisJLyogc2xvdCBmb3IgYWNjZXNzaW5nIHRoZSB0dXBsZXNvcnQvdHVwbGVzdG9yZSAqLwor CVR1cGxlVGFibGVTbG90ICAqc2xvdDsKKworfSBCcmluUmFuZ2VTY2FuRGVzYzsKKworLyoK KyAqIEluZm8gYWJvdXQgcmFuZ2VzIGZvciBCUklOIFNvcnQuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJyaW5SYW5nZQoreworCUJsb2NrTnVtYmVyIGJsa25vX3N0YXJ0OworCUJsb2NrTnVt YmVyIGJsa25vX2VuZDsKKworCURhdHVtCW1pbl92YWx1ZTsKKwlEYXR1bQltYXhfdmFsdWU7 CisJYm9vbAloYXNfbnVsbHM7CisJYm9vbAlhbGxfbnVsbHM7CisJYm9vbAlub3Rfc3VtbWFy aXplZDsKKworCS8qCisJICogSW5kZXggb2YgdGhlIHJhbmdlIHdoZW4gb3JkZXJlZCBieSBt aW5fdmFsdWUgKGlmIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAqIHJhbmdlcyB3aXRoIHRoZSBz YW1lIG1pbl92YWx1ZSwgaXQncyB0aGUgbG93ZXN0IG9uZSkuCisJICovCisJdWludDMyCW1p bl9pbmRleDsKKworCS8qCisJICogTWluaW11bSBtaW5faW5kZXggZnJvbSBhbGwgcmFuZ2Vz IHdpdGggaGlnaGVyIG1heF92YWx1ZSAoaS5lLiB3aGVuCisJICogc29ydGVkIGJ5IG1heF92 YWx1ZSkuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByYW5nZXMgd2l0aCB0aGUgc2FtZQorCSAq IG1heF92YWx1ZSwgaXQgZGVwZW5kcyBvbiB0aGUgb3JkZXJpbmcgKGkuZS4gdGhlIHJhbmdl cyBtYXkgZ2V0CisJICogZGlmZmVyZW50IG1pbl9pbmRleF9sb3dlc3QsIGRlcGVuZGluZyBv biB0aGUgZXhhY3Qgb3JkZXJpbmcpLgorCSAqLworCXVpbnQzMgltaW5faW5kZXhfbG93ZXN0 OworfSBCcmluUmFuZ2U7CisKK3R5cGVkZWYgc3RydWN0IEJyaW5SYW5nZXMKK3sKKwlpbnQJ CQlucmFuZ2VzOworCUJyaW5SYW5nZQlyYW5nZXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsK K30gQnJpblJhbmdlczsKKwordHlwZWRlZiBzdHJ1Y3QgQnJpblNvcnRTdGF0ZQoreworCVNj YW5TdGF0ZQlzczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KKwlFeHBy U3RhdGUgICppbmRleHF1YWxvcmlnOworCUxpc3QJICAgKmluZGV4b3JkZXJieW9yaWc7CisJ c3RydWN0IFNjYW5LZXlEYXRhICppc3NfU2NhbktleXM7CisJaW50CQkJaXNzX051bVNjYW5L ZXlzOworCXN0cnVjdCBTY2FuS2V5RGF0YSAqaXNzX09yZGVyQnlLZXlzOworCWludAkJCWlz c19OdW1PcmRlckJ5S2V5czsKKwlJbmRleFJ1bnRpbWVLZXlJbmZvICppc3NfUnVudGltZUtl eXM7CisJaW50CQkJaXNzX051bVJ1bnRpbWVLZXlzOworCWJvb2wJCWlzc19SdW50aW1lS2V5 c1JlYWR5OworCUV4cHJDb250ZXh0ICppc3NfUnVudGltZUNvbnRleHQ7CisJUmVsYXRpb24J aXNzX1JlbGF0aW9uRGVzYzsKKwlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzc19TY2Fu RGVzYzsKKworCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHJlLWNoZWNraW5nIE9SREVSIEJZ IGV4cHIgb3JkZXJpbmcgKi8KKwlwYWlyaW5naGVhcCAqaXNzX1Jlb3JkZXJRdWV1ZTsKKwli b29sCQlpc3NfUmVhY2hlZEVuZDsKKwlEYXR1bQkgICAqaXNzX09yZGVyQnlWYWx1ZXM7CisJ Ym9vbAkgICAqaXNzX09yZGVyQnlOdWxsczsKKwlTb3J0U3VwcG9ydCBpc3NfU29ydFN1cHBv cnQ7CisJYm9vbAkgICAqaXNzX09yZGVyQnlUeXBCeVZhbHM7CisJaW50MTYJICAgKmlzc19P cmRlckJ5VHlwTGVuczsKKwlTaXplCQlpc3NfUHNjYW5MZW47CisKKwkvKiAqLworCUJyaW5S YW5nZVNjYW5EZXNjICpic19zY2FuOworCUJyaW5SYW5nZQkgICAqYnNfcmFuZ2U7CisJRXhw clN0YXRlCSAgICpic19xdWFsOworCURhdHVtCQkJYnNfd2F0ZXJtYXJrOworCWJvb2wJCQli c193YXRlcm1hcmtfc2V0OworCUJyaW5Tb3J0UGhhc2UJYnNfcGhhc2U7CisJU29ydFN1cHBv cnREYXRhCWJzX3NvcnRzdXBwb3J0OworCisJLyoKKwkgKiBXZSBuZWVkIHR3byB0dXBsZXNv cnQgaW5zdGFuY2VzIC0gb25lIGZvciBjdXJyZW50IHJhbmdlLCBvbmUgZm9yCisJICogc3Bp bGwtb3ZlciB0dXBsZXMgZnJvbSB0aGUgb3ZlcmxhcHBpbmcgcmFuZ2VzCisJICovCisJdm9p ZAkJICAgKmJzX3R1cGxlc29ydHN0YXRlOworCVR1cGxlc3RvcmVzdGF0ZSAqYnNfdHVwbGVz dG9yZTsKK30gQnJpblNvcnRTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIElu ZGV4T25seVNjYW5TdGF0ZSBpbmZvcm1hdGlvbgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK aW5kZXggNmJkYTM4M2JlYWQuLmU3OWM5MDRhOGZjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aApAQCAtMTU5Niw2ICsxNTk2LDE3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4UGF0aAogCVNl bGVjdGl2aXR5IGluZGV4c2VsZWN0aXZpdHk7CiB9IEluZGV4UGF0aDsKIAorLyoKKyAqIHJl YWQgc29ydGVkIGRhdGEgZnJvbSBicmluIGluZGV4CisgKgorICogV2UgdXNlIEluZGV4UGF0 aCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCBhbWNvc3Rlc3RpbWF0ZSBpcyBleHBlY3RpbmcsIGJ1 dAorICogd2UgdHlwZWRlZiBpdCBhcyBhIHNlcGFyYXRlIHN0cnVjdC4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgQnJpblNvcnRQYXRoCit7CisJSW5kZXhQYXRoCWlwYXRoOworfSBCcmluU29y dFBhdGg7CisKIC8qCiAgKiBFYWNoIEluZGV4Q2xhdXNlIHJlZmVyZW5jZXMgYSBSZXN0cmlj dEluZm8gbm9kZSBmcm9tIHRoZSBxdWVyeSdzIFdIRVJFCiAgKiBvciBKT0lOIGNvbmRpdGlv bnMsIGFuZCBzaG93cyBob3cgdGhhdCByZXN0cmljdGlvbiBjYW4gYmUgYXBwbGllZCB0bwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAyMWU2NDJhNjRjNC4uYzRlZjUzNjJhY2MgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC00OTUsNiArNDk1LDMyIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4T25seVNjYW4KIAlTY2FuRGlyZWN0aW9uIGluZGV4b3JkZXJkaXI7CS8qIGZv cndhcmQgb3IgYmFja3dhcmQgb3IgZG9uJ3QgY2FyZSAqLwogfSBJbmRleE9ubHlTY2FuOwog CisKK3R5cGVkZWYgc3RydWN0IEJyaW5Tb3J0Cit7CisJU2NhbgkJc2NhbjsKKwlPaWQJCQlp bmRleGlkOwkJLyogT0lEIG9mIGluZGV4IHRvIHNjYW4gKi8KKwlMaXN0CSAgICppbmRleHF1 YWw7CQkvKiBsaXN0IG9mIGluZGV4IHF1YWxzICh1c3VhbGx5IE9wRXhwcnMpICovCisJTGlz dAkgICAqaW5kZXhxdWFsb3JpZzsJLyogdGhlIHNhbWUgaW4gb3JpZ2luYWwgZm9ybSAqLwor CVNjYW5EaXJlY3Rpb24gaW5kZXhvcmRlcmRpcjsJLyogZm9yd2FyZCBvciBiYWNrd2FyZCBv ciBkb24ndCBjYXJlICovCisKKwkvKiBudW1iZXIgb2Ygc29ydC1rZXkgY29sdW1ucyAqLwor CWludAkJCW51bUNvbHM7CisKKwkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlz dCAqLworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo bnVtQ29scykpOworCisJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICov CisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1D b2xzKSk7CisKKwkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KKwlPaWQJCSAgICpjb2xsYXRp b25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKKworCS8qIE5VTExTIEZJ UlNUL0xBU1QgZGlyZWN0aW9ucyAqLworCWJvb2wJICAgKm51bGxzRmlyc3QgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobnVtQ29scykpOworCit9IEJyaW5Tb3J0OworCiAvKiAtLS0tLS0t LS0tLS0tLS0tCiAgKgkJYml0bWFwIGluZGV4IHNjYW4gbm9kZQogICoKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oCmluZGV4IDIwNGU5NGI2ZDEwLi5iNzc0NDA3MjhkMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oCkBAIC02OSw2ICs2OSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9wYXJhbGxlbF9hcHBlbmQ7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcGFy YWxsZWxfaGFzaDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9wYXJ0aXRpb25f cHJ1bmluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBlbmQ7 CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYnJpbnNvcnQ7CiBleHRlcm4gUEdE TExJTVBPUlQgaW50IGNvbnN0cmFpbnRfZXhjbHVzaW9uOwogCiBleHRlcm4gZG91YmxlIGlu ZGV4X3BhZ2VzX2ZldGNoZWQoZG91YmxlIHR1cGxlc19mZXRjaGVkLCBCbG9ja051bWJlciBw YWdlcywKQEAgLTc5LDYgKzgwLDggQEAgZXh0ZXJuIHZvaWQgY29zdF9zYW1wbGVzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCQkJ CQkJCVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm8pOwogZXh0ZXJuIHZvaWQgY29zdF9pbmRl eChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkgICBkb3VibGUg bG9vcF9jb3VudCwgYm9vbCBwYXJ0aWFsX3BhdGgpOworZXh0ZXJuIHZvaWQgY29zdF9icmlu c29ydChCcmluU29ydFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJICBk b3VibGUgbG9vcF9jb3VudCwgYm9vbCBwYXJ0aWFsX3BhdGgpOwogZXh0ZXJuIHZvaWQgY29z dF9iaXRtYXBfaGVhcF9zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpiYXNlcmVsLAogCQkJCQkJCQkgIFBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm8s CiAJCQkJCQkJCSAgUGF0aCAqYml0bWFwcXVhbCwgZG91YmxlIGxvb3BfY291bnQpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCAwNTBmMDBlNzlhNC4uMTFjYWFkM2VjNTEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC00OSw2ICs0OSwxNSBAQCBleHRl cm4gSW5kZXhQYXRoICpjcmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJCVJlbGlkcyByZXF1aXJlZF9vdXRlciwKIAkJCQkJCQkJCWRvdWJsZSBsb29wX2Nv dW50LAogCQkJCQkJCQkJYm9vbCBwYXJ0aWFsX3BhdGgpOworZXh0ZXJuIEJyaW5Tb3J0UGF0 aCAqY3JlYXRlX2JyaW5zb3J0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQlJ bmRleE9wdEluZm8gKmluZGV4LAorCQkJCQkJCQkJTGlzdCAqaW5kZXhjbGF1c2VzLAorCQkJ CQkJCQkJTGlzdCAqcGF0aGtleXMsCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGluZGV4c2Nh bmRpciwKKwkJCQkJCQkJCWJvb2wgaW5kZXhvbmx5LAorCQkJCQkJCQkJUmVsaWRzIHJlcXVp cmVkX291dGVyLAorCQkJCQkJCQkJZG91YmxlIGxvb3BfY291bnQsCisJCQkJCQkJCQlib29s IHBhcnRpYWxfcGF0aCk7CiBleHRlcm4gQml0bWFwSGVhcFBhdGggKmNyZWF0ZV9iaXRtYXBf aGVhcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkgICBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJCQkJCQkJCSAgIFBhdGggKmJpdG1hcHF1YWwsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9w YXRocy5oCmluZGV4IDQxZjc2NWQzNDIyLi42YWE1MDI1NzczMCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmgKQEAgLTIxMyw2ICsyMTMsOSBAQCBleHRlcm4gUGF0aCAqZ2V0X2NoZWFwZXN0 X2ZyYWN0aW9uYWxfcGF0aF9mb3JfcGF0aGtleXMoTGlzdCAqcGF0aHMsCiBleHRlcm4gUGF0 aCAqZ2V0X2NoZWFwZXN0X3BhcmFsbGVsX3NhZmVfdG90YWxfaW5uZXIoTGlzdCAqcGF0aHMp OwogZXh0ZXJuIExpc3QgKmJ1aWxkX2luZGV4X3BhdGhrZXlzKFBsYW5uZXJJbmZvICpyb290 LCBJbmRleE9wdEluZm8gKmluZGV4LAogCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gc2NhbmRp cik7CitleHRlcm4gTGlzdCAqYnVpbGRfaW5kZXhfcGF0aGtleXNfYnJpbihQbGFubmVySW5m byAqcm9vdCwgSW5kZXhPcHRJbmZvICppbmRleCwKKwkJCQkJCQkJICBUYXJnZXRFbnRyeSAq dGxlLCBpbnQgaWR4LAorCQkJCQkJCQkgIGJvb2wgcmV2ZXJzZV9zb3J0LCBib29sIG51bGxz X2ZpcnN0KTsKIGV4dGVybiBMaXN0ICpidWlsZF9wYXJ0aXRpb25fcGF0aGtleXMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcnRyZWwsCiAJCQkJCQkJCQkgIFNjYW5EaXJl Y3Rpb24gc2NhbmRpciwgYm9vbCAqcGFydGlhbGtleXMpOwogZXh0ZXJuIExpc3QgKmJ1aWxk X2V4cHJlc3Npb25fcGF0aGtleShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwKLS0g CjIuMzcuMwoK --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0003-wip-brinsort-explain-stats-20221022.patch" Content-Disposition: attachment; filename="0003-wip-brinsort-explain-stats-20221022.patch" Content-Transfer-Encoding: base64 RnJvbSA0OWQ5MDU4ZWFiMWQ0MDA5ZGU4ZTgyZWIxYTg3YWQ0OTM3MmYyOTdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAyMSBPY3QgMjAyMiAxNTozMzoxNiArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMy82XSB3aXA6IGJyaW5zb3J0IGV4cGxhaW4gc3RhdHMKClNob3cgc29t ZSBpbnRlcm5hbCBzdGF0cyBhYm91dCBCUklOIFNvcnQgaW4gRVhQTEFJTiBvdXRwdXQuCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgfCAxMTUgKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJyaW5Tb3J0 LmMgfCAgMzUgKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAg ICB8ICAzMyArKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxODMgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBlMTViMjkyNDZiMS4uYzVhY2UwMmExMGQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTg3LDYgKzg3LDggQEAgc3RhdGljIHZv aWQgc2hvd19pbmNyZW1lbnRhbF9zb3J0X2tleXMoSW5jcmVtZW50YWxTb3J0U3RhdGUgKmlu Y3Jzb3J0c3RhdGUsCiAJCQkJCQkJCQkgICBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19icmluc29ydF9rZXlzKEJyaW5Tb3J0U3RhdGUg KnNvcnRzdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAq ZXMpOworc3RhdGljIHZvaWQgc2hvd19icmluc29ydF9zdGF0cyhCcmluU29ydFN0YXRlICpz b3J0c3RhdGUsIExpc3QgKmFuY2VzdG9ycywKKwkJCQkJCQkJRXhwbGFpblN0YXRlICplcyk7 CiBzdGF0aWMgdm9pZCBzaG93X21lcmdlX2FwcGVuZF9rZXlzKE1lcmdlQXBwZW5kU3RhdGUg Km1zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVz KTsKIHN0YXRpYyB2b2lkIHNob3dfYWdnX2tleXMoQWdnU3RhdGUgKmFzdGF0ZSwgTGlzdCAq YW5jZXN0b3JzLApAQCAtMTgxNCw2ICsxODE2LDcgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRl ICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUs IGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKHBsYW4tPnF1YWwsICJGaWx0ZXIiLCBwbGFuc3Rh dGUsIGFuY2VzdG9ycywgZXMpOwogCQkJc2hvd19icmluc29ydF9rZXlzKGNhc3ROb2RlKEJy aW5Tb3J0U3RhdGUsIHBsYW5zdGF0ZSksIGFuY2VzdG9ycywgZXMpOworCQkJc2hvd19icmlu c29ydF9zdGF0cyhjYXN0Tm9kZShCcmluU29ydFN0YXRlLCBwbGFuc3RhdGUpLCBhbmNlc3Rv cnMsIGVzKTsKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9u X2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFu c3RhdGUsIGVzKTsKQEAgLTI0MzIsNiArMjQzNSwxMTggQEAgc2hvd19icmluc29ydF9rZXlz KEJyaW5Tb3J0U3RhdGUgKnNvcnRzdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3Rh dGUgKmVzKQogCQkJCQkJIGFuY2VzdG9ycywgZXMpOwogfQogCitzdGF0aWMgdm9pZAorc2hv d19icmluc29ydF9zdGF0cyhCcmluU29ydFN0YXRlICpzb3J0c3RhdGUsIExpc3QgKmFuY2Vz dG9ycywgRXhwbGFpblN0YXRlICplcykKK3sKKwlCcmluU29ydFN0YXRzICAqc3RhdHMgPSAm c29ydHN0YXRlLT5ic19zdGF0czsKKworCWlmIChzdGF0cy0+c29ydF9jb3VudCA+IDApCisJ eworCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJSYW5nZXMgUHJvY2Vzc2VkIiwgTlVMTCwg KGludDY0KQorCQkJCQkJCSAgIHN0YXRzLT5yYW5nZV9jb3VudCwgZXMpOworCisJCWlmIChl cy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCXsKKwkJCUV4cGxhaW5Qcm9w ZXJ0eUludGVnZXIoIlNvcnRzIiwgTlVMTCwgKGludDY0KQorCQkJCQkJCQkgICBzdGF0cy0+ c29ydF9jb3VudCwgZXMpOworCisJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQlhcHBl bmRTdHJpbmdJbmZvKGVzLT5zdHIsICJUdXBsZXMgU29ydGVkOiAiIElOVDY0X0ZPUk1BVCAi ICBQZXItc29ydDogIiBJTlQ2NF9GT1JNQVQgICIgIERpcmVjdDogIiBJTlQ2NF9GT1JNQVQg IiAgU3BpbGxlZDogIiBJTlQ2NF9GT1JNQVQgIiAgUmVzcGlsbGVkOiAiIElOVDY0X0ZPUk1B VCAiXG4iLAorCQkJCQkJCSBzdGF0cy0+bnR1cGxlc190dXBsZXNvcnRfYWxsLAorCQkJCQkJ CSBzdGF0cy0+bnR1cGxlc190dXBsZXNvcnRfYWxsIC8gc3RhdHMtPnNvcnRfY291bnQsCisJ CQkJCQkJIHN0YXRzLT5udHVwbGVzX3R1cGxlc29ydF9kaXJlY3QsCisJCQkJCQkJIHN0YXRz LT5udHVwbGVzX3NwaWxsZWQsCisJCQkJCQkJIHN0YXRzLT5udHVwbGVzX3Jlc3BpbGxlZCk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlFeHBsYWluT3Blbkdyb3VwKCJTb3J0cyIsICJTb3J0 cyIsIHRydWUsIGVzKTsKKworCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiQ291bnQiLCBO VUxMLCAoaW50NjQpCisJCQkJCQkJCSAgIHN0YXRzLT5zb3J0X2NvdW50LCBlcyk7CisKKwkJ CUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlR1cGxlcyBwZXIgc29ydCIsIE5VTEwsIChpbnQ2 NCkKKwkJCQkJCQkJICAgc3RhdHMtPm50dXBsZXNfdHVwbGVzb3J0X2FsbCAvIHN0YXRzLT5z b3J0X2NvdW50LCBlcyk7CisKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlNvcnRlZCB0 dXBsZXMgKGFsbCkiLCBOVUxMLCAoaW50NjQpCisJCQkJCQkJCSAgIHN0YXRzLT5udHVwbGVz X3R1cGxlc29ydF9hbGwsIGVzKTsKKworCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiU29y dGVkIHR1cGxlcyAoZGlyZWN0KSIsIE5VTEwsIChpbnQ2NCkKKwkJCQkJCQkJICAgc3RhdHMt Pm50dXBsZXNfdHVwbGVzb3J0X2RpcmVjdCwgZXMpOworCisJCQlFeHBsYWluUHJvcGVydHlJ bnRlZ2VyKCJTcGlsbGVkIHR1cGxlcyIsIE5VTEwsIChpbnQ2NCkKKwkJCQkJCQkJICAgc3Rh dHMtPm50dXBsZXNfc3BpbGxlZCwgZXMpOworCisJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2Vy KCJSZXNwaWxsZWQgdHVwbGVzIiwgTlVMTCwgKGludDY0KQorCQkJCQkJCQkgICBzdGF0cy0+ bnR1cGxlc19yZXNwaWxsZWQsIGVzKTsKKworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIlNvcnRz IiwgIlNvcnRzIiwgdHJ1ZSwgZXMpOworCQl9CisJfQorCisJaWYgKHN0YXRzLT5zb3J0X2Nv dW50X2luX21lbW9yeSA+IDApCisJeworCQlpZiAoZXMtPmZvcm1hdCA9PSBFWFBMQUlOX0ZP Uk1BVF9URVhUKQorCQl7CisJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQlhcHBlbmRT dHJpbmdJbmZvKGVzLT5zdHIsICJTb3J0cyAoaW4tbWVtb3J5KSAgQ291bnQ6ICIgSU5UNjRf Rk9STUFUICIgIFNwYWNlIFRvdGFsOiAiIElOVDY0X0ZPUk1BVCAgIiBrQiAgTWF4aW11bTog IiBJTlQ2NF9GT1JNQVQgIiBrQiAgQXZlcmFnZTogIiBJTlQ2NF9GT1JNQVQgIiBrQlxuIiwK KwkJCQkJCQkgc3RhdHMtPnNvcnRfY291bnRfaW5fbWVtb3J5LAorCQkJCQkJCSBzdGF0cy0+ dG90YWxfc3BhY2VfdXNlZF9pbl9tZW1vcnksCisJCQkJCQkJIHN0YXRzLT5tYXhfc3BhY2Vf dXNlZF9pbl9tZW1vcnksCisJCQkJCQkJIHN0YXRzLT50b3RhbF9zcGFjZV91c2VkX2luX21l bW9yeSAvIHN0YXRzLT5zb3J0X2NvdW50X2luX21lbW9yeSk7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlFeHBsYWluT3Blbkdyb3VwKCJJbi1NZW1vcnkgU29ydHMiLCAiSW4tTWVtb3J5IFNv cnRzIiwgdHJ1ZSwgZXMpOworCisJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJDb3VudCIs IE5VTEwsIChpbnQ2NCkKKwkJCQkJCQkJICAgc3RhdHMtPnNvcnRfY291bnRfaW5fbWVtb3J5 LCBlcyk7CisKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkF2ZXJhZ2Ugc3BhY2UiLCAi a0IiLCAoaW50NjQpCisJCQkJCQkJCSAgIHN0YXRzLT50b3RhbF9zcGFjZV91c2VkX2luX21l bW9yeSAvIHN0YXRzLT5zb3J0X2NvdW50X2luX21lbW9yeSwgZXMpOworCisJCQlFeHBsYWlu UHJvcGVydHlJbnRlZ2VyKCJNYXhpbXVtIHNwYWNlIiwgImtCIiwgKGludDY0KQorCQkJCQkJ CQkgICBzdGF0cy0+bWF4X3NwYWNlX3VzZWRfaW5fbWVtb3J5LCBlcyk7CisKKwkJCUV4cGxh aW5Qcm9wZXJ0eUludGVnZXIoIlRvdGFsIHNwYWNlIiwgImtCIiwgKGludDY0KQorCQkJCQkJ CQkgICBzdGF0cy0+dG90YWxfc3BhY2VfdXNlZF9pbl9tZW1vcnksIGVzKTsKKworCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkluLU1lbW9yeSBTb3J0cyIsICJJbi1NZW1vcnkgU29ydHMiLCB0 cnVlLCBlcyk7CisJCX0KKwl9CisKKwlpZiAoc3RhdHMtPnNvcnRfY291bnRfb25fZGlzayA+ IDApCisJeworCQlpZiAoZXMtPmZvcm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQl7 CisJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5z dHIsICJTb3J0cyAob24tZGlzaykgIENvdW50OiAiIElOVDY0X0ZPUk1BVCAiICBTcGFjZSBU b3RhbDogIiBJTlQ2NF9GT1JNQVQgICIga0IgIE1heGltdW06ICIgSU5UNjRfRk9STUFUICIg a0IgIEF2ZXJhZ2U6ICIgSU5UNjRfRk9STUFUICIga0JcbiIsCisJCQkJCQkJIHN0YXRzLT5z b3J0X2NvdW50X29uX2Rpc2ssCisJCQkJCQkJIHN0YXRzLT50b3RhbF9zcGFjZV91c2VkX29u X2Rpc2ssCisJCQkJCQkJIHN0YXRzLT5tYXhfc3BhY2VfdXNlZF9vbl9kaXNrLAorCQkJCQkJ CSBzdGF0cy0+dG90YWxfc3BhY2VfdXNlZF9vbl9kaXNrIC8gc3RhdHMtPnNvcnRfY291bnRf b25fZGlzayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlFeHBsYWluT3Blbkdyb3VwKCJPbi1E aXNrIFNvcnRzIiwgIk9uLURpc2sgU29ydHMiLCB0cnVlLCBlcyk7CisKKwkJCUV4cGxhaW5Q cm9wZXJ0eUludGVnZXIoIkNvdW50IiwgTlVMTCwgKGludDY0KQorCQkJCQkJCQkgICBzdGF0 cy0+c29ydF9jb3VudF9vbl9kaXNrLCBlcyk7CisKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVn ZXIoIkF2ZXJhZ2Ugc3BhY2UiLCAia0IiLCAoaW50NjQpCisJCQkJCQkJCSAgIHN0YXRzLT50 b3RhbF9zcGFjZV91c2VkX29uX2Rpc2sgLyBzdGF0cy0+c29ydF9jb3VudF9vbl9kaXNrLCBl cyk7CisKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIk1heGltdW0gc3BhY2UiLCAia0Ii LCAoaW50NjQpCisJCQkJCQkJCSAgIHN0YXRzLT5tYXhfc3BhY2VfdXNlZF9vbl9kaXNrLCBl cyk7CisKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlRvdGFsIHNwYWNlIiwgImtCIiwg KGludDY0KQorCQkJCQkJCQkgICBzdGF0cy0+dG90YWxfc3BhY2VfdXNlZF9vbl9kaXNrLCBl cyk7CisKKwkJCUV4cGxhaW5DbG9zZUdyb3VwKCJPbi1EaXNrIFNvcnRzIiwgIk9uLURpc2sg U29ydHMiLCB0cnVlLCBlcyk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBMaWtld2lzZSwgZm9y IGEgTWVyZ2VBcHBlbmQgbm9kZS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJyaW5Tb3J0LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQnJpblNv cnQuYwppbmRleCBjYTcyYzFlZDIyZC4uYzdkNDE3ZDZlNTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVCcmluU29ydC5jCkBAIC00NTQsNiArNDU0LDggQEAgYnJpbnNvcnRfbG9hZF90 dXBsZXMoQnJpblNvcnRTdGF0ZSAqbm9kZSwgYm9vbCBjaGVja193YXRlcm1hcmssIGJvb2wg bnVsbF9wcm9jZXMKIAlpZiAobnVsbF9wcm9jZXNzaW5nICYmICEocmFuZ2UtPmhhc19udWxs cyB8fCByYW5nZS0+bm90X3N1bW1hcml6ZWQgfHwgcmFuZ2UtPmFsbF9udWxscykpCiAJCXJl dHVybjsKIAorCW5vZGUtPmJzX3N0YXRzLnJhbmdlX2NvdW50Kys7CisKIAlicmluc29ydF9z dGFydF90aWRzY2FuKG5vZGUpOwogCiAJc2NhbiA9IG5vZGUtPnNzLnNzX2N1cnJlbnRTY2Fu RGVzYzsKQEAgLTUyNiw3ICs1MjgsMTAgQEAgYnJpbnNvcnRfbG9hZF90dXBsZXMoQnJpblNv cnRTdGF0ZSAqbm9kZSwgYm9vbCBjaGVja193YXRlcm1hcmssIGJvb2wgbnVsbF9wcm9jZXMK IAkJCQkvKiBTdGFzaCBpdCB0byB0aGUgdHVwbGVzdG9yZSAod2hlbiBOVUxMLCBvciBpZ25v cmUKIAkJCQkgKiBpdCAod2hlbiBub3QtTlVMTCkuICovCiAJCQkJaWYgKGlzbnVsbCkKKwkJ CQl7CiAJCQkJCXR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KG5vZGUtPmJzX3R1cGxlc3RvcmUs IHNsb3QpOworCQkJCQlub2RlLT5ic19zdGF0cy5udHVwbGVzX3NwaWxsZWQrKzsKKwkJCQl9 CiAKIAkJCQkvKiBOVUxMIG9yIG5vdCwgd2UncmUgZG9uZSAqLwogCQkJCWNvbnRpbnVlOwpA QCAtNTQ2LDkgKzU1MSwxNiBAQCBicmluc29ydF9sb2FkX3R1cGxlcyhCcmluU29ydFN0YXRl ICpub2RlLCBib29sIGNoZWNrX3dhdGVybWFyaywgYm9vbCBudWxsX3Byb2NlcwogCQkJCQkJ CQkJCSAgJm5vZGUtPmJzX3NvcnRzdXBwb3J0KTsKIAogCQkJaWYgKGNtcCA8PSAwKQorCQkJ ewogCQkJCXR1cGxlc29ydF9wdXR0dXBsZXNsb3Qobm9kZS0+YnNfdHVwbGVzb3J0c3RhdGUs IHNsb3QpOworCQkJCW5vZGUtPmJzX3N0YXRzLm50dXBsZXNfdHVwbGVzb3J0X2RpcmVjdCsr OworCQkJCW5vZGUtPmJzX3N0YXRzLm50dXBsZXNfdHVwbGVzb3J0X2FsbCsrOworCQkJfQog CQkJZWxzZQorCQkJewogCQkJCXR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KG5vZGUtPmJzX3R1 cGxlc3RvcmUsIHNsb3QpOworCQkJCW5vZGUtPmJzX3N0YXRzLm50dXBsZXNfc3BpbGxlZCsr OworCQkJfQogCQl9CiAKIAkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CkBAIC02MTAsOSArNjIy LDE1IEBAIGJyaW5zb3J0X2xvYWRfc3BpbGxfdHVwbGVzKEJyaW5Tb3J0U3RhdGUgKm5vZGUs IGJvb2wgY2hlY2tfd2F0ZXJtYXJrKQogCQkJCQkJCQkJICAmbm9kZS0+YnNfc29ydHN1cHBv cnQpOwogCiAJCWlmIChjbXAgPD0gMCkKKwkJewogCQkJdHVwbGVzb3J0X3B1dHR1cGxlc2xv dChub2RlLT5ic190dXBsZXNvcnRzdGF0ZSwgc2xvdCk7CisJCQlub2RlLT5ic19zdGF0cy5u dHVwbGVzX3R1cGxlc29ydF9hbGwrKzsKKwkJfQogCQllbHNlCisJCXsKIAkJCXR1cGxlc3Rv cmVfcHV0dHVwbGVzbG90KHR1cHN0b3JlLCBzbG90KTsKKwkJCW5vZGUtPmJzX3N0YXRzLm50 dXBsZXNfcmVzcGlsbGVkKys7CisJCX0KIAl9CiAKIAkvKgpAQCAtODkwLDEyICs5MDgsMjkg QEAgSW5kZXhOZXh0KEJyaW5Tb3J0U3RhdGUgKm5vZGUpCiAJCQkJCWlmIChub2RlLT5ic190 dXBsZXNvcnRzdGF0ZSkKIAkJCQkJewogCQkJCQkJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KG5v ZGUtPmJzX3R1cGxlc29ydHN0YXRlKTsKKwkJCQkJCW5vZGUtPmJzX3N0YXRzLnNvcnRfY291 bnQrKzsKKwogI2lmZGVmIEJSSU5TT1JUX0RFQlVHCiAJCQkJCQl7CiAJCQkJCQkJVHVwbGVz b3J0SW5zdHJ1bWVudGF0aW9uIHN0YXRzOwogCiAJCQkJCQkJdHVwbGVzb3J0X2dldF9zdGF0 cyhub2RlLT5ic190dXBsZXNvcnRzdGF0ZSwgJnN0YXRzKTsKIAorCQkJCQkJCWlmIChzdGF0 cy5zcGFjZVR5cGUgPT0gU09SVF9TUEFDRV9UWVBFX0RJU0spCisJCQkJCQkJeworCQkJCQkJ CQlub2RlLT5ic19zdGF0cy5zb3J0X2NvdW50X29uX2Rpc2srKzsKKwkJCQkJCQkJbm9kZS0+ YnNfc3RhdHMudG90YWxfc3BhY2VfdXNlZF9vbl9kaXNrICs9IHN0YXRzLnNwYWNlVXNlZDsK KwkJCQkJCQkJbm9kZS0+YnNfc3RhdHMubWF4X3NwYWNlX3VzZWRfb25fZGlzayA9IE1heChu b2RlLT5ic19zdGF0cy5tYXhfc3BhY2VfdXNlZF9vbl9kaXNrLAorCQkJCQkJCQkJCQkJCQkJ CQkJCXN0YXRzLnNwYWNlVXNlZCk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgaWYgKHN0YXRz LnNwYWNlVHlwZSA9PSBTT1JUX1NQQUNFX1RZUEVfTUVNT1JZKQorCQkJCQkJCXsKKwkJCQkJ CQkJbm9kZS0+YnNfc3RhdHMuc29ydF9jb3VudF9pbl9tZW1vcnkrKzsKKwkJCQkJCQkJbm9k ZS0+YnNfc3RhdHMudG90YWxfc3BhY2VfdXNlZF9pbl9tZW1vcnkgKz0gc3RhdHMuc3BhY2VV c2VkOworCQkJCQkJCQlub2RlLT5ic19zdGF0cy5tYXhfc3BhY2VfdXNlZF9pbl9tZW1vcnkg PSBNYXgobm9kZS0+YnNfc3RhdHMubWF4X3NwYWNlX3VzZWRfaW5fbWVtb3J5LAorCQkJCQkJ CQkJCQkJCQkJCQkJCSAgc3RhdHMuc3BhY2VVc2VkKTsKKwkJCQkJCQl9CisKIAkJCQkJCQll bG9nKERFQlVHMSwgIm1ldGhvZDogJXMgIHNwYWNlOiAlbGQga0IgKCVzKSIsCiAJCQkJCQkJ CSB0dXBsZXNvcnRfbWV0aG9kX25hbWUoc3RhdHMuc29ydE1ldGhvZCksCiAJCQkJCQkJCSBz dGF0cy5zcGFjZVVzZWQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDM4MWMyZmNkM2Q2 Li5lOGY3YjI1NTQ5ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2MDksNiArMTYw OSwzOCBAQCB0eXBlZGVmIHN0cnVjdCBCcmluUmFuZ2VzCiAJQnJpblJhbmdlCXJhbmdlc1tG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBCcmluUmFuZ2VzOwogCit0eXBlZGVmIHN0cnVj dCBCcmluU29ydFN0YXRzCit7CisJLyogbnVtYmVyIG9mIHNvcnRzICovCisJaW50NjQJc29y dF9jb3VudDsKKworCS8qIG51bWJlciBvZiByYW5nZXMgbG9hZGVkICovCisJaW50NjQJcmFu Z2VfY291bnQ7CisKKwkvKiB0dXBsZXMgd3JpdHRlbiBkaXJlY3RseSB0byB0dXBsZXNvcnQg Ki8KKwlpbnQ2NAludHVwbGVzX3R1cGxlc29ydF9kaXJlY3Q7CisKKwkvKiB0dXBsZXMgd3Jp dHRlbiB0byB0dXBsZXNvcnQgKGFsbCkgKi8KKwlpbnQ2NAludHVwbGVzX3R1cGxlc29ydF9h bGw7CisKKwkvKiB0dXBsZXMgd3JpdHRlbiB0byB0dXBsZXN0b3JlICovCisJaW50NjQJbnR1 cGxlc19zcGlsbGVkOworCisJLyogdHVwbGVzIGNvcGllZCBmcm9tIG9sZCB0byBuZXcgdHVw bGVzdG9yZSAqLworCWludDY0CW50dXBsZXNfcmVzcGlsbGVkOworCisJLyogbnVtYmVyIG9m IGluLW1lbW9yeS9vbi1kaXNrIHNvcnRzICovCisJaW50NjQJc29ydF9jb3VudF9pbl9tZW1v cnk7CisJaW50NjQJc29ydF9jb3VudF9vbl9kaXNrOworCisJLyogdG90YWwvbWF4aW11bSBh bW91bnQgb2Ygc3BhY2UgdXNlZCBieSBlaXRoZXIgc29ydCAqLworCWludDY0CXRvdGFsX3Nw YWNlX3VzZWRfaW5fbWVtb3J5OworCWludDY0CXRvdGFsX3NwYWNlX3VzZWRfb25fZGlzazsK KwlpbnQ2NAltYXhfc3BhY2VfdXNlZF9pbl9tZW1vcnk7CisJaW50NjQJbWF4X3NwYWNlX3Vz ZWRfb25fZGlzazsKKworfSBCcmluU29ydFN0YXRzOworCiB0eXBlZGVmIHN0cnVjdCBCcmlu U29ydFN0YXRlCiB7CiAJU2NhblN0YXRlCXNzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMg Tm9kZVRhZyAqLwpAQCAtMTY0Myw2ICsxNjc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQnJpblNv cnRTdGF0ZQogCWJvb2wJCQlic193YXRlcm1hcmtfc2V0OwogCUJyaW5Tb3J0UGhhc2UJYnNf cGhhc2U7CiAJU29ydFN1cHBvcnREYXRhCWJzX3NvcnRzdXBwb3J0OworCUJyaW5Tb3J0U3Rh dHMJYnNfc3RhdHM7CiAKIAkvKgogCSAqIFdlIG5lZWQgdHdvIHR1cGxlc29ydCBpbnN0YW5j ZXMgLSBvbmUgZm9yIGN1cnJlbnQgcmFuZ2UsIG9uZSBmb3IKLS0gCjIuMzcuMwoK --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0004-wip-multiple-watermark-steps-20221022.patch" Content-Disposition: attachment; filename="0004-wip-multiple-watermark-steps-20221022.patch" Content-Transfer-Encoding: base64 RnJvbSBhZDlmNzMwMDViNDI1ZmYxNWYyZmYyNjg3YTIzZjJiMDI0ZGI1NmIyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyMCBPY3QgMjAyMiAxMzowMzowMCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggNC82XSB3aXA6IG11bHRpcGxlIHdhdGVybWFyayBzdGVwcwoKQWxsb3cg aW5jcmVtZW50aW5nIHRoZSBtaW52YWwgd2F0ZXJtYXJrIGZhc3RlciwgYnkgc2tpcHBpbmcg c29tZSBtaW52YWwKdmFsdWVzLiBUaGlzIGFsbG93cyBzb3J0aW5nIG1vcmUgZGF0YSBhdCBv bmNlIChpbnN0ZWFkIG9mIG1hbnkgdGlueQpzb3J0cywgd2hpY2ggaXMgaW5lZmZpY2llbnQp LiBUaGlzIGFsc28gcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHJvd3Mgd2UKbmVlZCB0byBzcGls bCAoYW5kIHBvc3NpYmx5IHRyYW5zZmVyIG11bHRpcGxlIHRpbWVzKS4KClRvIHVzZSBhIGRp ZmZlcmVudCB3YXRlcm1hcmsgc3RlcCwgdXNlIGEgbmV3IEdVQzoKCiAgU0VUIGJyaW5zb3J0 X3dhdGVybWFya19zdGVwID0gMTYKLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQnJp blNvcnQuYyB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyB8IDExICsrKysrKwogMiBmaWxlcyBjaGFuZ2Vk LCA2NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJyaW5Tb3J0LmMKaW5kZXggYzdkNDE3ZDZlNTcuLjM1NjNiZjNjMWFkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQnJpblNvcnQuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQnJpblNvcnQuYwpAQCAtMjU3LDYgKzI1NywxNCBAQCBzdGF0 aWMgdm9pZCBFeGVjSW5pdEJyaW5Tb3J0UmFuZ2VzKEJyaW5Tb3J0ICpub2RlLCBCcmluU29y dFN0YXRlICpwbGFuc3RhdGUpOwogCiAjZGVmaW5lIEJSSU5TT1JUX0RFQlVHCiAKKy8qCisg KiBIb3cgbWFueSBkaXN0aW5jdCBtaW52YWwgdmFsdWVzIHRvIGxvb2sgZm9yd2FyZCBmb3Ig dGhlIG5leHQgd2F0ZXJtYXJrPworICoKKyAqIFRoZSBzbWFsbGVzdCBzdGVwIHdlIGNhbiBk byBpcyAxLCB3aGljaCBtZWFucyB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgKiAod2hp bGUgZGlzdGluY3QpIG1pbnZhbC4KKyAqLworaW50IGJyaW5zb3J0X3dhdGVybWFya19zdGVw ID0gMTsKKwogLyogZG8gdmFyaW91cyBjb25zaXN0ZW5jeSBjaGVja3MgKi8KIHN0YXRpYyB2 b2lkCiBBc3NlcnRDaGVja1JhbmdlcyhCcmluU29ydFN0YXRlICpub2RlKQpAQCAtMzU3LDEx ICszNjUsMjQgQEAgYnJpbnNvcnRfZW5kX3RpZHNjYW4oQnJpblNvcnRTdGF0ZSAqbm9kZSkK ICAqIGhldXJpc3RpY3MgKG1lYXN1cmUgcGFzdCBzb3J0cyBhbmQgZXh0cmFwb2xhdGUpLgog ICovCiBzdGF0aWMgdm9pZAotYnJpbnNvcnRfdXBkYXRlX3dhdGVybWFyayhCcmluU29ydFN0 YXRlICpub2RlLCBib29sIGFzYykKK2JyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsoQnJpblNv cnRTdGF0ZSAqbm9kZSwgYm9vbCBmaXJzdCwgYm9vbCBhc2MsIGludCBzdGVwcykKIHsKIAlp bnQJCWNtcDsKKworCS8qIGFzc3VtZSB3ZSBoYXZlbid0IGZvdW5kIGEgd2F0ZXJtYXJrICov CiAJYm9vbAlmb3VuZCA9IGZhbHNlOwogCisJQXNzZXJ0KHN0ZXBzID4gMCk7CisKKwkvKgor CSAqIElmIHRoZSB3YXRlcm1hcmsgaXMgbm90IHNldCwgZWl0aGVyIHRoaXMgaXMgdGhlIGZp cnN0IGNhbGwgKGluCisJICogd2hpY2ggY2FzZSB3ZSBqdXN0IHVzZSB0aGUgZmlyc3QgKG9y IHJhdGhlciBzZWNvbmQpIHZhbHVlLgorCSAqIE90aGVyd2lzZSBpdCBtZWFucyB3ZSd2ZSBy ZWFjaGVkIHRoZSBlbmQsIHNvIG5vIHBvaW50IGluIGxvb2tpbmcKKwkgKiBmb3IgbW9yZSB3 YXRlcm1hcmtzLgorCSAqLworCWlmICghbm9kZS0+YnNfd2F0ZXJtYXJrX3NldCAmJiAhZmly c3QpCisJCXJldHVybjsKKwogCXR1cGxlc29ydF9tYXJrcG9zKG5vZGUtPmJzX3NjYW4tPnJh bmdlcyk7CiAKIAl3aGlsZSAodHVwbGVzb3J0X2dldHR1cGxlc2xvdChub2RlLT5ic19zY2Fu LT5yYW5nZXMsIHRydWUsIGZhbHNlLCBub2RlLT5ic19zY2FuLT5zbG90LCBOVUxMKSkKQEAg LTM4NywyMiArNDA4LDQ4IEBAIGJyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsoQnJpblNvcnRT dGF0ZSAqbm9kZSwgYm9vbCBhc2MpCiAJCWVsc2UKIAkJCXZhbHVlID0gc2xvdF9nZXRhdHRy KG5vZGUtPmJzX3NjYW4tPnNsb3QsIDcsICZpc251bGwpOwogCisJCS8qCisJCSAqIEhhcyB0 byBiZSB0aGUgZmlyc3QgY2FsbCAob3RoZXJ3aXNlIHdlIHdvdWxkIG5vdCBnZXQgaGVyZSwg YmVjYXVzZSB3ZQorCQkgKiB0ZXJtaW5hdGUgYWZ0ZXIgYnNfd2F0ZXJtYXJrX3NldCBnZXRz IGZsaXBwZWQgYmFjayB0byBmYWxzZSksIHNvIHdlCisJCSAqIGp1c3Qgc2V0IHRoZSB2YWx1 ZS4gQnV0IHdlIGRvbid0IGNvdW50IHRoaXMgYXMgYSBzdGVwLCBiZWNhdXNlIHRoYXQKKwkJ ICoganVzdCBwaWNrcyB0aGUgZmlyc3QgbWludmFsIHZhbHVlLCBhcyB3ZSBjZXJ0YWlubHkg bmVlZCB0byBkbyBhdCBsZWFzdAorCQkgKiBvbmUgbW9yZSBzdGVwLgorCQkgKgorCQkgKiBY WFggQWN0dWFsbHksIGRvIHdlIG5lZWQgdG8gbWFrZSBhbm90aGVyIHN0ZXA/IE1heWJlIHRo ZXJlIGFyZSBlbm91Z2gKKwkJICogbm90LXN1bW1hcml6ZWQgcmFuZ2VzPyBBbHRob3VnaCwg d2UgZG9uJ3Qga25vdyB3aGF0IHZhbHVlcyBhcmUgaW4KKwkJICogdGhvc2UsIHJhbmdlcywg YW5kIHdpdGggaW5jcmVhc2luZyBkYXRhIHdlIG1pZ2h0IGVhc2lseSBlbmQgdXAganVzdAor CQkgKiB3cml0aW5nIGFsbCBvZiBpdCBpbnRvIHRoZSBzcGlsbCB0dXBsZXN0b3JlLiBTbyBt YWtpbmcgb25lIG1vcmUgc3RlcAorCQkgKiBzZWVtcyBsaWtlIGEgYmV0dGVyIGlkZWEgLSB3 ZSdsbCBhdCBsZXN0IGJlIGFibGUgdG8gcHJvZHVjZSBzb21ldGhpbmcKKwkJICogd2hpY2gg aXMgZ29vZCBmb3IgTElNSVQgcXVlcmllcy4KKwkJICovCiAJCWlmICghbm9kZS0+YnNfd2F0 ZXJtYXJrX3NldCkKIAkJeworCQkJQXNzZXJ0KGZpcnN0KTsKIAkJCW5vZGUtPmJzX3dhdGVy bWFya19zZXQgPSB0cnVlOwogCQkJbm9kZS0+YnNfd2F0ZXJtYXJrID0gdmFsdWU7CisJCQlm b3VuZCA9IHRydWU7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWNtcCA9IEFwcGx5U29ydENv bXBhcmF0b3Iobm9kZS0+YnNfd2F0ZXJtYXJrLCBmYWxzZSwgdmFsdWUsIGZhbHNlLAogCQkJ CQkJCQkgICZub2RlLT5ic19zb3J0c3VwcG9ydCk7CiAKLQkJaWYgKGNtcCA8IDApCisJCS8q CisJCSAqIFZhbHVlcyBzaG91bGQgbm90IGRlY3JlYXNlIChvciB3aGF0ZXZlciB0aGUgb3Bl cmF0b3Igc2F5cywgbWlnaHQKKwkJICogYmUgYSBERVNDIHNvcnQpLgorCQkgKi8KKwkJQXNz ZXJ0KGNtcCA8PSAwKTsKKworCQlpZiAoY21wIDwgMCkJLyogbmV3IHdhdGVybWFyayB2YWx1 ZSAqLwogCQl7CiAJCQlub2RlLT5ic193YXRlcm1hcmtfc2V0ID0gdHJ1ZTsKIAkJCW5vZGUt PmJzX3dhdGVybWFyayA9IHZhbHVlOwogCQkJZm91bmQgPSB0cnVlOwotCQkJYnJlYWs7CisK KwkJCXN0ZXBzLS07CisKKwkJCWlmIChzdGVwcyA9PSAwKQorCQkJCWJyZWFrOwogCQl9CiAJ fQogCkBAIC04NzEsNyArOTE4LDcgQEAgSW5kZXhOZXh0KEJyaW5Tb3J0U3RhdGUgKm5vZGUp CiAJCQkJCW5vZGUtPmJzX3BoYXNlID0gQlJJTlNPUlRfTE9BRF9SQU5HRTsKIAogCQkJCQkv KiBzZXQgdGhlIGZpcnN0IHdhdGVybWFyayAqLwotCQkJCQlicmluc29ydF91cGRhdGVfd2F0 ZXJtYXJrKG5vZGUsIGFzYyk7CisJCQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsobm9k ZSwgdHJ1ZSwgYXNjLCBicmluc29ydF93YXRlcm1hcmtfc3RlcCk7CiAJCQkJfQogCiAJCQkJ YnJlYWs7CkBAIC05ODEsNyArMTAyOCw3IEBAIEluZGV4TmV4dChCcmluU29ydFN0YXRlICpu b2RlKQogCQkJCXsKIAkJCQkJLyogdXBkdGUgdGhlIHdhdGVybWFyayBhbmQgdHJ5IHJlYWRp bmcgbW9yZSByYW5nZXMgKi8KIAkJCQkJbm9kZS0+YnNfcGhhc2UgPSBCUklOU09SVF9MT0FE X1JBTkdFOwotCQkJCQlicmluc29ydF91cGRhdGVfd2F0ZXJtYXJrKG5vZGUsIGFzYyk7CisJ CQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsobm9kZSwgZmFsc2UsIGFzYywgYnJpbnNv cnRfd2F0ZXJtYXJrX3N0ZXApOwogCQkJCX0KIAogCQkJCWJyZWFrOwpAQCAtMTAwNCw3ICsx MDUxLDcgQEAgSW5kZXhOZXh0KEJyaW5Tb3J0U3RhdGUgKm5vZGUpCiAJCQkJCQkJewogCQkJ CQkJCQlicmluc29ydF9yZXNjYW4obm9kZSk7CiAJCQkJCQkJCW5vZGUtPmJzX3BoYXNlID0g QlJJTlNPUlRfTE9BRF9SQU5HRTsKLQkJCQkJCQkJYnJpbnNvcnRfdXBkYXRlX3dhdGVybWFy ayhub2RlLCBhc2MpOworCQkJCQkJCQlicmluc29ydF91cGRhdGVfd2F0ZXJtYXJrKG5vZGUs IHRydWUsIGFzYywgYnJpbnNvcnRfd2F0ZXJtYXJrX3N0ZXApOwogCQkJCQkJCX0KIAkJCQkJ CQllbHNlCiAJCQkJCQkJCW5vZGUtPmJzX3BoYXNlID0gQlJJTlNPUlRfRklOSVNIRUQ7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IGE1Y2EzYmQwY2M0Li5jN2Fi ZGFkZTQ5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTk1LDYg Kzk1LDcgQEAgZXh0ZXJuIGNoYXIgKnRlbXBfdGFibGVzcGFjZXM7CiBleHRlcm4gYm9vbCBp Z25vcmVfY2hlY2tzdW1fZmFpbHVyZTsKIGV4dGVybiBib29sIGlnbm9yZV9pbnZhbGlkX3Bh Z2VzOwogZXh0ZXJuIGJvb2wgc3luY2hyb25pemVfc2Vxc2NhbnM7CitleHRlcm4gaW50CWJy aW5zb3J0X3dhdGVybWFya19zdGVwOwogCiAjaWZkZWYgVFJBQ0VfU1lOQ1NDQU4KIGV4dGVy biBib29sIHRyYWNlX3N5bmNzY2FuOwpAQCAtMzQyNSw2ICszNDI2LDE2IEBAIHN0cnVjdCBj b25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKIAorCXsKKwkJeyJicmluc29ydF93YXRlcm1hcmtfc3RlcCIsIFBHQ19VU0VSU0VULCBE RVZFTE9QRVJfT1BUSU9OUywKKwkJCWdldHRleHRfbm9vcCgic2V0cyB0aGUgc3RlcCBmb3Ig YnJpbnNvcnQgd2F0ZXJtYXJrIGluY3JlbWVudHMiKSwKKwkJCU5VTEwKKwkJfSwKKwkJJmJy aW5zb3J0X3dhdGVybWFya19zdGVwLAorCQkxLCAxLCBJTlRfTUFYLAorCQlOVUxMLCBOVUxM LCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsKIAkJe05VTEws IDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMCi0t IAoyLjM3LjMKCg== --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0005-wip-adjust-watermark-step-20221022.patch" Content-Disposition: attachment; filename="0005-wip-adjust-watermark-step-20221022.patch" Content-Transfer-Encoding: base64 RnJvbSAyMjMwMzdlYWZmMWE1YjAwOGJlMzIzMGY3MTM4NzVhNGIwNWYwNDUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU2F0LCAyMiBPY3QgMjAyMiAwMDowNjoyOCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggNS82XSB3aXA6IGFkanVzdCB3YXRlcm1hcmsgc3RlcAoKTG9vayBhdCBh dmFpbGFibGUgc3RhdGlzdGljcyAtIG51bWJlciBvZiBwb3NzaWJsZSB3YXRlcm1hcmsgdmFs dWVzLApudW1iZXIgb2Ygcm93cywgd29ya19tZW0sIGV0Yy4gYW5kIHBpY2sgYSBnb29kIHdh dGVybWFya19zdGVwIHZhbHVlLgoKVG8gY2FsY3VsYXRlIHN0ZXAgdXNpbmcgc3RhdGlzdGlj cywgc2V0IHRoZSBHVUMgdG8gMDoKCiAgIFNFVCBicmluc29ydF93YXRlcm1hcmtfc3RlcCA9 IDA7Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgIHwgIDQg KysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jICAgICB8IDIwICsrKy0t LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8IDcwICsrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICAgfCAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAg MyArKwogNiBmaWxlcyBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYzVhY2UwMmExMGQuLjExNDg0NmVi ZTBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0yNDM5LDYgKzI0MzksMTAgQEAg c3RhdGljIHZvaWQKIHNob3dfYnJpbnNvcnRfc3RhdHMoQnJpblNvcnRTdGF0ZSAqc29ydHN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0ZSAqZXMpCiB7CiAJQnJpblNvcnRT dGF0cyAgKnN0YXRzID0gJnNvcnRzdGF0ZS0+YnNfc3RhdHM7CisJQnJpblNvcnQgICAqcGxh biA9IChCcmluU29ydCAqKSBzb3J0c3RhdGUtPnNzLnBzLnBsYW47CisKKwlFeHBsYWluUHJv cGVydHlJbnRlZ2VyKCJTdGVwIiwgTlVMTCwgKGludDY0KQorCQkJCQkJICAgcGxhbi0+d2F0 ZXJtYXJrX3N0ZXAsIGVzKTsKIAogCWlmIChzdGF0cy0+c29ydF9jb3VudCA+IDApCiAJewpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJyaW5Tb3J0LmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQnJpblNvcnQuYwppbmRleCAzNTYzYmYzYzFhZC4uMmY4 ZTkyNzUzY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29y dC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jCkBAIC0yNTcs MTQgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIEV4ZWNJbml0QnJpblNvcnRSYW5nZXMoQnJpblNv cnQgKm5vZGUsIEJyaW5Tb3J0U3RhdGUgKnBsYW5zdGF0ZSk7CiAKICNkZWZpbmUgQlJJTlNP UlRfREVCVUcKIAotLyoKLSAqIEhvdyBtYW55IGRpc3RpbmN0IG1pbnZhbCB2YWx1ZXMgdG8g bG9vayBmb3J3YXJkIGZvciB0aGUgbmV4dCB3YXRlcm1hcms/Ci0gKgotICogVGhlIHNtYWxs ZXN0IHN0ZXAgd2UgY2FuIGRvIGlzIDEsIHdoaWNoIG1lYW5zIHRoZSBpbW1lZGlhdGVseSBm b2xsb3dpbmcKLSAqICh3aGlsZSBkaXN0aW5jdCkgbWludmFsLgotICovCi1pbnQgYnJpbnNv cnRfd2F0ZXJtYXJrX3N0ZXAgPSAxOwotCiAvKiBkbyB2YXJpb3VzIGNvbnNpc3RlbmN5IGNo ZWNrcyAqLwogc3RhdGljIHZvaWQKIEFzc2VydENoZWNrUmFuZ2VzKEJyaW5Tb3J0U3RhdGUg Km5vZGUpCkBAIC0zNjUsOSArMzU3LDExIEBAIGJyaW5zb3J0X2VuZF90aWRzY2FuKEJyaW5T b3J0U3RhdGUgKm5vZGUpCiAgKiBoZXVyaXN0aWNzIChtZWFzdXJlIHBhc3Qgc29ydHMgYW5k IGV4dHJhcG9sYXRlKS4KICAqLwogc3RhdGljIHZvaWQKLWJyaW5zb3J0X3VwZGF0ZV93YXRl cm1hcmsoQnJpblNvcnRTdGF0ZSAqbm9kZSwgYm9vbCBmaXJzdCwgYm9vbCBhc2MsIGludCBz dGVwcykKK2JyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsoQnJpblNvcnRTdGF0ZSAqbm9kZSwg Ym9vbCBmaXJzdCwgYm9vbCBhc2MpCiB7CiAJaW50CQljbXA7CisJQnJpblNvcnQgICAqcGxh biA9IChCcmluU29ydCAqKSBub2RlLT5zcy5wcy5wbGFuOworCWludAkJCXN0ZXBzID0gcGxh bi0+d2F0ZXJtYXJrX3N0ZXA7CiAKIAkvKiBhc3N1bWUgd2UgaGF2ZW4ndCBmb3VuZCBhIHdh dGVybWFyayAqLwogCWJvb2wJZm91bmQgPSBmYWxzZTsKQEAgLTkxOCw3ICs5MTIsNyBAQCBJ bmRleE5leHQoQnJpblNvcnRTdGF0ZSAqbm9kZSkKIAkJCQkJbm9kZS0+YnNfcGhhc2UgPSBC UklOU09SVF9MT0FEX1JBTkdFOwogCiAJCQkJCS8qIHNldCB0aGUgZmlyc3Qgd2F0ZXJtYXJr ICovCi0JCQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsobm9kZSwgdHJ1ZSwgYXNjLCBi cmluc29ydF93YXRlcm1hcmtfc3RlcCk7CisJCQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1h cmsobm9kZSwgdHJ1ZSwgYXNjKTsKIAkJCQl9CiAKIAkJCQlicmVhazsKQEAgLTk3OCw3ICs5 NzIsNyBAQCBJbmRleE5leHQoQnJpblNvcnRTdGF0ZSAqbm9kZSkKIAkJCQkJCQkJCQkJCQkJ CQkJCQkgIHN0YXRzLnNwYWNlVXNlZCk7CiAJCQkJCQkJfQogCi0JCQkJCQkJZWxvZyhERUJV RzEsICJtZXRob2Q6ICVzICBzcGFjZTogJWxkIGtCICglcykiLAorCQkJCQkJCWVsb2coV0FS TklORywgIm1ldGhvZDogJXMgIHNwYWNlOiAlbGQga0IgKCVzKSIsCiAJCQkJCQkJCSB0dXBs ZXNvcnRfbWV0aG9kX25hbWUoc3RhdHMuc29ydE1ldGhvZCksCiAJCQkJCQkJCSBzdGF0cy5z cGFjZVVzZWQsCiAJCQkJCQkJCSB0dXBsZXNvcnRfc3BhY2VfdHlwZV9uYW1lKHN0YXRzLnNw YWNlVHlwZSkpOwpAQCAtMTAyOCw3ICsxMDIyLDcgQEAgSW5kZXhOZXh0KEJyaW5Tb3J0U3Rh dGUgKm5vZGUpCiAJCQkJewogCQkJCQkvKiB1cGR0ZSB0aGUgd2F0ZXJtYXJrIGFuZCB0cnkg cmVhZGluZyBtb3JlIHJhbmdlcyAqLwogCQkJCQlub2RlLT5ic19waGFzZSA9IEJSSU5TT1JU X0xPQURfUkFOR0U7Ci0JCQkJCWJyaW5zb3J0X3VwZGF0ZV93YXRlcm1hcmsobm9kZSwgZmFs c2UsIGFzYywgYnJpbnNvcnRfd2F0ZXJtYXJrX3N0ZXApOworCQkJCQlicmluc29ydF91cGRh dGVfd2F0ZXJtYXJrKG5vZGUsIGZhbHNlLCBhc2MpOwogCQkJCX0KIAogCQkJCWJyZWFrOwpA QCAtMTA1MSw3ICsxMDQ1LDcgQEAgSW5kZXhOZXh0KEJyaW5Tb3J0U3RhdGUgKm5vZGUpCiAJ CQkJCQkJewogCQkJCQkJCQlicmluc29ydF9yZXNjYW4obm9kZSk7CiAJCQkJCQkJCW5vZGUt PmJzX3BoYXNlID0gQlJJTlNPUlRfTE9BRF9SQU5HRTsKLQkJCQkJCQkJYnJpbnNvcnRfdXBk YXRlX3dhdGVybWFyayhub2RlLCB0cnVlLCBhc2MsIGJyaW5zb3J0X3dhdGVybWFya19zdGVw KTsKKwkJCQkJCQkJYnJpbnNvcnRfdXBkYXRlX3dhdGVybWFyayhub2RlLCB0cnVlLCBhc2Mp OwogCQkJCQkJCX0KIAkJCQkJCQllbHNlCiAJCQkJCQkJCW5vZGUtPmJzX3BoYXNlID0gQlJJ TlNPUlRfRklOSVNIRUQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKaW5kZXggMzk1YzYzMmY0MzAuLjk5N2MyNzJkZWMwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRl IDxtYXRoLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgogI2luY2x1ZGUgImFjY2Vz cy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUg ImZvcmVpZ24vZmR3YXBpLmgiCkBAIC0zMjEsNiArMzIyLDE0IEBAIHN0YXRpYyBHYXRoZXJN ZXJnZSAqY3JlYXRlX2dhdGhlcl9tZXJnZV9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCQkgR2F0aGVyTWVyZ2VQYXRoICpiZXN0X3BhdGgpOwogCiAKKy8qCisgKiBIb3cg bWFueSBkaXN0aW5jdCBtaW52YWwgdmFsdWVzIHRvIGxvb2sgZm9yd2FyZCBmb3IgdGhlIG5l eHQgd2F0ZXJtYXJrPworICoKKyAqIFRoZSBzbWFsbGVzdCBzdGVwIHdlIGNhbiBkbyBpcyAx LCB3aGljaCBtZWFucyB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgKiAod2hpbGUgZGlz dGluY3QpIG1pbnZhbC4KKyAqLworaW50IGJyaW5zb3J0X3dhdGVybWFya19zdGVwID0gMDsK KwogLyoKICAqIGNyZWF0ZV9wbGFuCiAgKgkgIENyZWF0ZXMgdGhlIGFjY2VzcyBwbGFuIGZv ciBhIHF1ZXJ5IGJ5IHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlCkBAIC0zMzQwLDYgKzMz NDksNjcgQEAgY3JlYXRlX2JyaW5zb3J0X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAKIAlj b3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZicmluc29ydF9wbGFuLT5zY2FuLnBsYW4sICZiZXN0 X3BhdGgtPmlwYXRoLnBhdGgpOwogCisJLyoKKwkgKiBkZXRlcm1pbmUgd2F0ZXJtYXJrIHN0 ZXAgKGhvdyBmYXN0IHRvIGFkdmFuY2UpCisJICoKKwkgKiBJZiB0aGUgYnJpbnNvcnRfd2F0 ZXJtYXJrX3N0ZXAgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHdlIGp1c3QgdXNlCisJ ICogdGhhdCB2YWx1ZSBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlIHBpY2sgYSB2YWx1ZSB1c2lu ZyBzb21lIHNpbXBsZQorCSAqIGhldXJpc3RpY3MgaGV1cmlzdGljcyAtIHdlIGRvbid0IHdh bnQgdGhlIHJvd3MgdG8gZXhjZWVkIHdvcmtfbWVtLCBhbmQKKwkgKiB3ZSBsZWF2ZSBhIGJp dCBzbGFjayAoYmVjYXVzZSB3ZSdyZSBhZGRpbmcgYmF0Y2hlcyBvZiByb3dzLCBub3Qgcm93 CisJICogYnkgcm93KS4KKwkgKgorCSAqIFRoaXMgaGFzIGEgd2Vha25lc3MsIGJlY2F1c2Ug aXQgYXNzdW1lcyB3ZSBpbmNyZW1lbnRhbGx5IGFkZCB0aGUgc2FtZQorCSAqIG51bWJlciBv ZiByb3dzIGludG8gdGhlICJzb3J0IiBzZXQgLSBidXQgaW1hZ2luZSB2ZXJ5IHdpZGUgb3Zl cmxhcHBpbmcKKwkgKiByYW5nZXMgKGUuZy4gcmFuZG9tIGRhdGEgb24gdGhlIHNhbWUgZG9t YWluKS4gTW9zdCBvZiB0aGVtIHdpbGwgaGF2ZQorCSAqIGFib3V0IHRoZSBzYW1lIG1pbnZh bCwgc28gdGhlIHNvcnQgZ3Jvd3Mgb25seSB2ZXJ5IHNsb3dseS4gVW50aWwgdGhlCisJICog dmVyeSBsYXN0IHJhbmdlLCB0aGF0IHJlbW92ZXMgdGhlIHdhdGVybWFyayBhbmQgb25seSB0 aGVuIGRvIG1vc3Qgb2YKKwkgKiB0aGUgcm93cyBnZXQgdG8gdGhlIHR1cGxlc29ydC4KKwkg KgorCSAqIFhYWCBCdXQgbWF5YmUgd2UgY2FuIGxvb2sgYXQgdGhlIG90aGVyIHN0YXRpc3Rp Y3Mgd2UgaGF2ZSwgbGlrZSBudW1iZXIKKwkgKiBvZiBvdmVybGFwcyBhbmQgYXZlcmFnZSBy YW5nZSBzZWxlY3Rpdml0eSAoJSBvZiB0dXBsZXMgbWF0Y2hpbmcpLCBhbmQKKwkgKiBkZWR1 Y2Ugc29tZXRoaW5nIGZyb20gdGhhdD8KKwkgKgorCSAqIFhYWCBDb3VsZCB3ZSBtYXliZSBh ZGp1c3QgdGhlIHdhdGVybWFyayBzdGVwIGFkYXB0aXZlbHkgYXQgcnVudGltZT8KKwkgKiBU aGF0IGlzLCB3aGVuIHdlIGdldCB0byB0aGUgInNvcnQiIHN0ZXAsIG1heWJlIGNoZWNrIGhv dyBtYW55IHJvd3MKKwkgKiBhcmUgdGhlcmUsIGFuZCBpZiB0aGVyZSBhcmUgb25seSBmZXcg dGhlbiB0cnkgaW5jcmVhc2luZyB0aGUgc3RlcD8KKwkgKi8KKwlicmluc29ydF9wbGFuLT53 YXRlcm1hcmtfc3RlcCA9IGJyaW5zb3J0X3dhdGVybWFya19zdGVwOworCisJaWYgKGJyaW5z b3J0X3BsYW4tPndhdGVybWFya19zdGVwID09IDApCisJeworCQlCcmluTWlubWF4U3RhdHMg KmFtc3RhdHM7CisKKwkJLyoqLworCQlDYXJkaW5hbGl0eQkJcm93cyA9IGJyaW5zb3J0X3Bs YW4tPnNjYW4ucGxhbi5wbGFuX3Jvd3M7CisKKwkJLyogZXN0aW1hdGUgcm93c2l6ZSBpbiB0 aGUgdHVwbGVzb3J0ICovCisJCWludAkJCQl3aWR0aCA9IGJyaW5zb3J0X3BsYW4tPnNjYW4u cGxhbi5wbGFuX3dpZHRoOworCQlpbnQJCQkJdHVwd2lkdGggPSAoTUFYQUxJR04od2lkdGgp ICsgTUFYQUxJR04oU2l6ZW9mSGVhcFR1cGxlSGVhZGVyKSk7CisKKwkJLyogRG9uJ3Qgb3Zl cmZsb3cgd29ya19tZW0gKHVzZSBvbmx5IGhhbGYgdG8gYWJzb3JiIHZhcmlhdGlvbnMuICov CisJCWludAkJCQltYXhyb3dzID0gKHdvcmtfbWVtICogMTAyNEwgLyB0dXB3aWR0aCAvIDIp OworCisJCS8qIElmIHRoaXMgaXMgYSBMSU1JVCBxdWVyeSwgYWltIG9ubHkgZm9yIHRoZSBy ZXF1aXJlZCBudW1iZXIgb2Ygcm93cy4gKi8KKwkJaWYgKHJvb3QtPmxpbWl0X3R1cGxlcyA+ IDApCisJCQltYXhyb3dzID0gTWluKG1heHJvd3MsIHJvb3QtPmxpbWl0X3R1cGxlcyk7CisK KwkJLyogRklYTUUgaGFyZC1jb2RlZCBhdHRudW0gKi8KKwkJYW1zdGF0cyA9IChCcmluTWlu bWF4U3RhdHMgKikgZ2V0X2F0dGluZGV4YW0oYnJpbnNvcnRfcGxhbi0+aW5kZXhpZCwgMSk7 CisKKwkJaWYgKGFtc3RhdHMpCisJCXsKKwkJCWRvdWJsZQlyb3dzX3Blcl9zdGVwID0gcm93 cyAvIGFtc3RhdHMtPm1pbnZhbF9uZGlzdGluY3Q7CisJCQllbG9nKFdBUk5JTkcsICJyb3dz X3Blcl9zdGVwID0gJWYiLCByb3dzX3Blcl9zdGVwKTsKKworCQkJYnJpbnNvcnRfcGxhbi0+ d2F0ZXJtYXJrX3N0ZXAgPSAoaW50KSAobWF4cm93cyAvIHJvd3NfcGVyX3N0ZXApOworCisJ CQllbG9nKFdBUk5JTkcsICJjYWxjdWxhdGVkIHN0ZXAgPSAlZCIsIGJyaW5zb3J0X3BsYW4t PndhdGVybWFya19zdGVwKTsKKwkJfQorCisJCWJyaW5zb3J0X3BsYW4tPndhdGVybWFya19z dGVwID0gTWF4KGJyaW5zb3J0X3BsYW4tPndhdGVybWFya19zdGVwLCAxKTsKKwkJYnJpbnNv cnRfcGxhbi0+d2F0ZXJtYXJrX3N0ZXAgPSBNaW4oYnJpbnNvcnRfcGxhbi0+d2F0ZXJtYXJr X3N0ZXAsIDEwMjQpOworCX0KKwogCXJldHVybiBicmluc29ydF9wbGFuOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IGM3YWJkYWRlNDk2Li45YWI1MWEy MmRiNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTM0MzIsNyAr MzQzMiw3IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQkJ TlVMTAogCQl9LAogCQkmYnJpbnNvcnRfd2F0ZXJtYXJrX3N0ZXAsCi0JCTEsIDEsIElOVF9N QVgsCisJCTAsIDAsIElOVF9NQVgsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGU4ZjdiMjU1NDlmLi44Njg3OWJlZDJmNCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2NzEsNiArMTY3MSw3IEBAIHR5cGVkZWYgc3RydWN0 IEJyaW5Tb3J0U3RhdGUKIAlCcmluUmFuZ2VTY2FuRGVzYyAqYnNfc2NhbjsKIAlCcmluUmFu Z2UJICAgKmJzX3JhbmdlOwogCUV4cHJTdGF0ZQkgICAqYnNfcXVhbDsKKwlpbnQJCQkJYnNf d2F0ZXJtYXJrX3N0ZXA7CiAJRGF0dW0JCQlic193YXRlcm1hcms7CiAJYm9vbAkJCWJzX3dh dGVybWFya19zZXQ7CiAJQnJpblNvcnRQaGFzZQlic19waGFzZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmgKaW5kZXggYzRlZjUzNjJhY2MuLjlmOWFkOTdhYzJkIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaApAQCAtNTE5LDYgKzUxOSw5IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5Tb3J0CiAJ LyogTlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCiAJYm9vbAkgICAqbnVsbHNGaXJz dCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKKwkvKiBudW1iZXIgb2Yg d2F0ZXJtYXJrIHN0ZXBzIHRvIG1ha2UgKi8KKwlpbnQJCQl3YXRlcm1hcmtfc3RlcDsKKwog fSBCcmluU29ydDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQotLSAKMi4zNy4zCgo= --------------8VOkXIVw7iOMRvbSwLeCpy0A Content-Type: text/x-patch; charset=UTF-8; name="0006-wip-adaptive-watermark-step-20221022.patch" Content-Disposition: attachment; filename="0006-wip-adaptive-watermark-step-20221022.patch" Content-Transfer-Encoding: base64 RnJvbSAzYWZhMTE0OGZlMTdhNWM0NzI2Nzg1M2U0Y2IzY2FjMDNiZDU5NWIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU2F0LCAyMiBPY3QgMjAyMiAwMTozOTozOSArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggNi82XSB3aXA6IGFkYXB0aXZlIHdhdGVybWFyayBzdGVwCgpBbm90aGVy IG9wdGlvbiBpdCB0byBhZGp1c3QgdGhlIHdhdGVybWFyayBzdGVwIGJhc2VkIG9uIHBhc3Qg dHVwbGVzb3J0CmV4ZWN1dGlvbnMsIGFuZCBlaXRoZXIgaW5jcmVhc2Ugb3IgZGVjcmVhc2Ug dGhlIHN0ZXAsIGJhc2VkIG9uIHdoZXRoZXIKdGhlIHNvcnQgd2FzIGluLW1lbW9yeSBvciBv bi1kaXNrLCBldGMuCgpUbyBkbyB0aGlzLCBzZXQgdGhlIEdVQyB0byAtMToKCiAgU0VUIGJy aW5zb3J0X3dhdGVybWFya19zdGVwID0gLTE7Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJyaW5Tb3J0LmMgICAgIHwgNTEgKysrKysrKysrKysrKysrKysrKysrKystLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgIDcgKy0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMgICAgICB8IDEyICsrKysrKwogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3R1cGxlc29ydC5oICAgICAgICAgICB8ICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgNjQgaW5z ZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUJyaW5Tb3J0LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQnJp blNvcnQuYwppbmRleCAyZjhlOTI3NTNjZC4uMmJmNzVmZDYwM2EgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCcmluU29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVCcmluU29ydC5jCkBAIC0yNTUsNiArMjU1LDggQEAgc3RhdGljIFR1cGxl VGFibGVTbG90ICpJbmRleE5leHQoQnJpblNvcnRTdGF0ZSAqbm9kZSk7CiBzdGF0aWMgYm9v bCBJbmRleFJlY2hlY2soQnJpblNvcnRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOwogc3RhdGljIHZvaWQgRXhlY0luaXRCcmluU29ydFJhbmdlcyhCcmluU29ydCAqbm9k ZSwgQnJpblNvcnRTdGF0ZSAqcGxhbnN0YXRlKTsKIAorZXh0ZXJuIGludCBicmluc29ydF93 YXRlcm1hcmtfc3RlcDsKKwogI2RlZmluZSBCUklOU09SVF9ERUJVRwogCiAvKiBkbyB2YXJp b3VzIGNvbnNpc3RlbmN5IGNoZWNrcyAqLwpAQCAtODE0LDYgKzgxNiw0MiBAQCBicmluc29y dF9yZXNjYW4oQnJpblNvcnRTdGF0ZSAqbm9kZSkKIAl0dXBsZXNvcnRfcmVzY2FuKG5vZGUt PmJzX3NjYW4tPnJhbmdlcyk7CiB9CiAKKy8qCisgKiBMb29rIGF0IHRoZSB0dXBsZXNvcnQg c3RhdGlzdGljcywgYW5kIG1heWJlIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZQorICogd2F0 ZXJtYXJrIHN0ZXAuIElmIHRoZSBsYXN0IHNvcnQgd2FzIGluLW1lbW9yeSwgd2UgZGVjcmVh c2UgdGhlIHN0ZXAuCisgKiBJZiB0aGUgc29ydCB3YXMgaW4tbWVtb3J5LCBidXQgd2UgdXNl ZCBsZXNzIHRoYW4gd29ya19tZW0vMywgaW5jcmVtZW50CisgKiB0aGUgc3RlcCB2YWx1ZS4K KyAqCisgKiBYWFggVGhpcyBzaG91bGQgcHJvYmFibHkgYmVoYXZlIGRpZmZlcmVudGx5IGZv ciBMSU1JVCBxdWVyaWVzLCBzbyB0aGF0CisgKiB3ZSBkb24ndCBsb2FkIHRvbyBtYW55IHJv d3MgdW5uZWNlc3NhcmlseS4gV2UgYWxyZWFkeSBjb25zaWRlciB0aGF0IGluCisgKiBjcmVh dGVfYnJpbnNvcnRfcGxhbiwgYnV0IG1heWJlIHdlIHNob3VsZCBsaW1pdCBpbmNyZW1lbnRz IHRvIHRoZSBzdGUKKyAqIHZhbHVlIGhlcmUgdG9vIC0gc2F5LCBieSB0cmFja2luZyBob3cg bWFueSByb3dzIGFyZSB3ZSBzdXBwb3NlZCB0bworICogcHJvZHVjZSwgYW5kIGxpbWl0aW5n IHRoZSB3YXRlcm1hcmsgc28gdGhhdCB3ZSBkb24ndCBwcm9jZXNzIHRvbyBtYW55CisgKiBy b3dzIGluIGZ1dHVyZSBzdGVwcy4KKyAqCisgKiBYWFggV2UgbWlnaHQgYWxzbyB0cmFjayB0 aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNvcnQgYW5kIHNwYWNlIHVzZWQsCisgKiB0byBj YWxjdWxhdGUgbW9yZSBhY2N1cmF0ZSBlc3RpbWF0ZSBvZiByb3cgd2lkdGguIEFuZCB0aGVu IHVzZSB0aGF0IHRvCisgKiBjYWxjdWxhdGUgbnVtYmVyIG9mIHJvd3MgdGhhdCBmaXQgaW50 byB3b3JrX21lbS4gQnV0IHRoZSBudW1iZXIgb2Ygcm93cworICogdGhhdCBnbyBpbnRvIHR1 cGxlc29ydCAocGVyIHJhbmdlKSBhZGRlZCB3b3VsZCBzdGlsbCByZW1haW4gZmFpcmx5Cisg KiBpbmFjY3VyYXRlLCBzbyBub3Qgc3VyZSBob3cgZ29vZCB0aGlzIHdvdWQgYmUuCisgKi8K K3N0YXRpYyB2b2lkCiticmluc29ydF9hZGp1c3Rfd2F0ZXJtYXJrX3N0ZXAoQnJpblNvcnRT dGF0ZSAqbm9kZSwgVHVwbGVzb3J0SW5zdHJ1bWVudGF0aW9uICpzdGF0cykKK3sKKwlCcmlu U29ydCAgICpwbGFuID0gKEJyaW5Tb3J0ICopIG5vZGUtPnNzLnBzLnBsYW47CisKKwlpZiAo YnJpbnNvcnRfd2F0ZXJtYXJrX3N0ZXAgIT0gLTEpCisJCXJldHVybjsKKworCWlmIChzdGF0 cy0+c3BhY2VUeXBlID09IFNPUlRfU1BBQ0VfVFlQRV9ESVNLKQorCQlwbGFuLT53YXRlcm1h cmtfc3RlcC0tOworCWVsc2UgaWYgKHN0YXRzLT5zcGFjZVVzZWQgPCB3b3JrX21lbSAvIDMp CisJCXBsYW4tPndhdGVybWFya19zdGVwKys7CisKKwlwbGFuLT53YXRlcm1hcmtfc3RlcCA9 IE1heCgxLCBwbGFuLT53YXRlcm1hcmtfc3RlcCk7CisJcGxhbi0+d2F0ZXJtYXJrX3N0ZXAg PSBNaW4oMTAyNCwgcGxhbi0+d2F0ZXJtYXJrX3N0ZXApOworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKgkJSW5kZXhOZXh0CiAgKgpAQCAtOTQ4LDE1ICs5ODYsMjAgQEAgSW5kZXhOZXh0KEJy aW5Tb3J0U3RhdGUgKm5vZGUpCiAJCQkJCSAqLwogCQkJCQlpZiAobm9kZS0+YnNfdHVwbGVz b3J0c3RhdGUpCiAJCQkJCXsKKwkJCQkJCVR1cGxlc29ydEluc3RydW1lbnRhdGlvbiBzdGF0 czsKKworCQkJCQkJdHVwbGVzb3J0X3Jlc2V0X3N0YXRzKG5vZGUtPmJzX3R1cGxlc29ydHN0 YXRlKTsKKwogCQkJCQkJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KG5vZGUtPmJzX3R1cGxlc29y dHN0YXRlKTsKIAkJCQkJCW5vZGUtPmJzX3N0YXRzLnNvcnRfY291bnQrKzsKIAotI2lmZGVm IEJSSU5TT1JUX0RFQlVHCi0JCQkJCQl7Ci0JCQkJCQkJVHVwbGVzb3J0SW5zdHJ1bWVudGF0 aW9uIHN0YXRzOworCQkJCQkJbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKFR1cGxlc29ydElu c3RydW1lbnRhdGlvbikpOworCQkJCQkJdHVwbGVzb3J0X2dldF9zdGF0cyhub2RlLT5ic190 dXBsZXNvcnRzdGF0ZSwgJnN0YXRzKTsKIAotCQkJCQkJCXR1cGxlc29ydF9nZXRfc3RhdHMo bm9kZS0+YnNfdHVwbGVzb3J0c3RhdGUsICZzdGF0cyk7CisJCQkJCQlicmluc29ydF9hZGp1 c3Rfd2F0ZXJtYXJrX3N0ZXAobm9kZSwgJnN0YXRzKTsKIAorI2lmZGVmIEJSSU5TT1JUX0RF QlVHCisJCQkJCQl7CiAJCQkJCQkJaWYgKHN0YXRzLnNwYWNlVHlwZSA9PSBTT1JUX1NQQUNF X1RZUEVfRElTSykKIAkJCQkJCQl7CiAJCQkJCQkJCW5vZGUtPmJzX3N0YXRzLnNvcnRfY291 bnRfb25fZGlzaysrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j CmluZGV4IDk5N2MyNzJkZWMwLi5kYzBhMzY2OWRmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMzM3NSw3ICszMzc1LDcgQEAgY3JlYXRlX2Jy aW5zb3J0X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJYnJpbnNvcnRfcGxhbi0+ d2F0ZXJtYXJrX3N0ZXAgPSBicmluc29ydF93YXRlcm1hcmtfc3RlcDsKIAotCWlmIChicmlu c29ydF9wbGFuLT53YXRlcm1hcmtfc3RlcCA9PSAwKQorCWlmIChicmluc29ydF9wbGFuLT53 YXRlcm1hcmtfc3RlcCA8PSAwKQogCXsKIAkJQnJpbk1pbm1heFN0YXRzICphbXN0YXRzOwog CkBAIC0zMzk4LDEyICszMzk4LDkgQEAgY3JlYXRlX2JyaW5zb3J0X3BsYW4oUGxhbm5lcklu Zm8gKnJvb3QsCiAKIAkJaWYgKGFtc3RhdHMpCiAJCXsKLQkJCWRvdWJsZQlyb3dzX3Blcl9z dGVwID0gcm93cyAvIGFtc3RhdHMtPm1pbnZhbF9uZGlzdGluY3Q7Ci0JCQllbG9nKFdBUk5J TkcsICJyb3dzX3Blcl9zdGVwID0gJWYiLCByb3dzX3Blcl9zdGVwKTsKKwkJCWRvdWJsZQly b3dzX3Blcl9zdGVwID0gTWF4KDEuMCwgKHJvd3MgLyBhbXN0YXRzLT5taW52YWxfbmRpc3Rp bmN0KSk7CiAKIAkJCWJyaW5zb3J0X3BsYW4tPndhdGVybWFya19zdGVwID0gKGludCkgKG1h eHJvd3MgLyByb3dzX3Blcl9zdGVwKTsKLQotCQkJZWxvZyhXQVJOSU5HLCAiY2FsY3VsYXRl ZCBzdGVwID0gJWQiLCBicmluc29ydF9wbGFuLT53YXRlcm1hcmtfc3RlcCk7CiAJCX0KIAog CQlicmluc29ydF9wbGFuLT53YXRlcm1hcmtfc3RlcCA9IE1heChicmluc29ydF9wbGFuLT53 YXRlcm1hcmtfc3RlcCwgMSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmlu ZGV4IDlhYjUxYTIyZGI3Li5iNmQ0MTg2MjQxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfdGFibGVzLmMKQEAgLTM0MzIsNyArMzQzMiw3IEBAIHN0cnVjdCBjb25maWdfaW50IENv bmZpZ3VyZU5hbWVzSW50W10gPQogCQkJTlVMTAogCQl9LAogCQkmYnJpbnNvcnRfd2F0ZXJt YXJrX3N0ZXAsCi0JCTAsIDAsIElOVF9NQVgsCisJCTAsIC0xLCBJTlRfTUFYLAogCQlOVUxM LCBOVUxMLCBOVUxMCiAJfSwKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29y dC90dXBsZXNvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKaW5k ZXggNDE2ZjAyYmEzY2IuLmM2MWYyN2I2ZmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVw bGVzb3J0LmMKQEAgLTI1NzQsNiArMjU3NCwxOCBAQCB0dXBsZXNvcnRfZ2V0X3N0YXRzKFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwKIAl9CiB9CiAKKy8qCisgKiB0dXBsZXNvcnRfcmVzZXRf c3RhdHMgLSByZXNldCBzdW1tYXJ5IHN0YXRpc3RpY3MKKyAqCisgKiBUaGlzIGNhbiBiZSBj YWxsZWQgYmVmb3JlIHR1cGxlc29ydF9wZXJmb3Jtc29ydCgpIHN0YXJ0cy4KKyAqLwordm9p ZAordHVwbGVzb3J0X3Jlc2V0X3N0YXRzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSkKK3sKKwlz dGF0ZS0+aXNNYXhTcGFjZURpc2sgPSBmYWxzZTsKKwlzdGF0ZS0+bWF4U3BhY2UgPSAwOwor fQorCiAvKgogICogQ29udmVydCBUdXBsZXNvcnRNZXRob2QgdG8gYSBzdHJpbmcuCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggODY4NzliZWQyZjQuLjQ4NWI3YjJlZWIzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTY4Miw3ICsxNjgyLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgQnJpblNvcnRTdGF0ZQogCSAqIFdlIG5lZWQgdHdvIHR1cGxlc29ydCBpbnN0YW5j ZXMgLSBvbmUgZm9yIGN1cnJlbnQgcmFuZ2UsIG9uZSBmb3IKIAkgKiBzcGlsbC1vdmVyIHR1 cGxlcyBmcm9tIHRoZSBvdmVybGFwcGluZyByYW5nZXMKIAkgKi8KLQl2b2lkCQkgICAqYnNf dHVwbGVzb3J0c3RhdGU7CisJVHVwbGVzb3J0c3RhdGUgICpic190dXBsZXNvcnRzdGF0ZTsK IAlUdXBsZXN0b3Jlc3RhdGUgKmJzX3R1cGxlc3RvcmU7CiB9IEJyaW5Tb3J0U3RhdGU7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvdHVwbGVzb3J0LmgKaW5kZXggNDQ0MTI3NDk5MDYuLjg5N2RmZWIyNzRmIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy90dXBsZXNvcnQuaApAQCAtMzY3LDYgKzM2Nyw3IEBAIGV4dGVybiB2b2lk IHR1cGxlc29ydF9yZXNldChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpOwogCiBleHRlcm4gdm9p ZCB0dXBsZXNvcnRfZ2V0X3N0YXRzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwKIAkJCQkJCQkJ VHVwbGVzb3J0SW5zdHJ1bWVudGF0aW9uICpzdGF0cyk7CitleHRlcm4gdm9pZCB0dXBsZXNv cnRfcmVzZXRfc3RhdHMoVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKIGV4dGVybiBjb25zdCBj aGFyICp0dXBsZXNvcnRfbWV0aG9kX25hbWUoVHVwbGVzb3J0TWV0aG9kIG0pOwogZXh0ZXJu IGNvbnN0IGNoYXIgKnR1cGxlc29ydF9zcGFjZV90eXBlX25hbWUoVHVwbGVzb3J0U3BhY2VU eXBlIHQpOwogCi0tIAoyLjM3LjMKCg== --------------8VOkXIVw7iOMRvbSwLeCpy0A--