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 1nZ1LG-0002KE-7S for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 02:12:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nZ1LF-0002Do-3U for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 02:12:17 +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 1nZ1LE-0002Df-LX for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 02:12:16 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nZ1L5-0000v4-SO for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 02:12:16 +0000 Received: by mail-lj1-x22a.google.com with SMTP id g24so21624713lja.7 for ; Mon, 28 Mar 2022 19:12:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=JS+v1AnygqlYQPD9TISXPpJKGx6wwPejZF+WfQEkUfo=; b=pRdlUAzk4dHyZ+YMs4LAAUu64iVbDM7Bib2yxXbYMUFLb55AwQ0hst0ih5jbaVZq0r BqbJ5LyBjV7aAboYNolNLqZ8jpFVFltHdz/N0rykqK33sFNJtaaYTFWTUBcmXKNBJQe5 b2ch8b5Kocj/a+60mo5uT6alx+YyRqdO+wgvxxoHKsG1kDxv9lDJfsz8ekI4YsbH1YHH 5/r1FEb0kTtWk0vFWKc/RW6mI26DREuNdJ3OFQoOIBVX3F4RJBZA3Ghyrld75LSnzJCE R4fJ4mmldLNZ0m3WTBXHQHNu/XuLmlq9tTPC8ov4s/DD21yDUV56MYbqGJJAvcBEs89v /UiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=JS+v1AnygqlYQPD9TISXPpJKGx6wwPejZF+WfQEkUfo=; b=ax9UlH2Fh4nD77lRpfqFBcviRLKOctt1UhWZ/8r+PjbKopjzknZslQN/9ffxF9Yysh QS+v7fatSdwbuGsJQwU4ruEJYrojVE83vX0Qkl95UU9lTU3MdVU85DpIY0ioTAwbyzyo ZfM/NwENLmXlDatDMbTppyhByQwfT1OHmUREDYM+347Xasxg0bfU9CbIK38O/Ggwuewx aXs0u6iB9e/xMjPVltA5mmgxVbbw3j7HGhyi4sS52nMqnb4CRlP0dOcN5rl/C938L1Ak HCrMqRqEVtRkbHgy3cOylVTOZ84QNDErJoaK9GlAypYyKslUaqlGr169guIeCdEZs7JV roxA== X-Gm-Message-State: AOAM530v0NRr2n4Cwmn/8Ie9hFkUyNTCezy4OJV//1fSdGTqyJu5yw8n 5PcLhYKdVaMW0SjL7cogE4XJvpZafparkfmKTj/VTq00MwkwKQ== X-Google-Smtp-Source: ABdhPJxoJA8NMd+NQTzTZ3NOFxwVComDpqXU0Hzd/8rwGEg48+jPOYjfH4F2/MCs8R1h/7iO9gRaage/eCyLnTcyqdw= X-Received: by 2002:a05:651c:1213:b0:247:e2d9:cdda with SMTP id i19-20020a05651c121300b00247e2d9cddamr441739lja.443.1648519927100; Mon, 28 Mar 2022 19:12:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Tue, 29 Mar 2022 15:11:52 +1300 Message-ID: Subject: Re: Window Function "Run Conditions" To: Andy Fan Cc: Zhihong Yu , PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000a90dae05db51f4fa" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a90dae05db51f4fa Content-Type: text/plain; charset="UTF-8" On Wed, 23 Mar 2022 at 16:30, David Rowley wrote: > > On Wed, 23 Mar 2022 at 11:24, David Rowley wrote: > > I think it's safer to just disable the optimisation when there are > > multiple window clauses. Multiple matching clauses are merged > > already, so it's perfectly valid to have multiple window functions, > > it's just they must share the same window clause. I don't think > > that's terrible as with the major use case that I have in mind for > > this, the window function is only added to limit the number of rows. > > In most cases I can imagine, there'd be no reason to have an > > additional window function with different frame options. > > I've not looked into the feasibility of it, but I had a thought that > we could just accumulate all the run-conditions in a new field in the > PlannerInfo then just tag them onto the top-level WindowAgg when > building the plan. > > I'm just not sure it would be any more useful than what the v3 patch > is currently doing as intermediate WindowAggs would still need to > process all rows. I think it would only save the window function > evaluation of the top-level WindowAgg for rows that don't match the > run-condition. All the supported window functions are quite cheap, so > it's not a huge saving. I'd bet there would be example cases where it > would be measurable though. Another way of doing this that seems better is to make it so only the top-level WindowAgg will stop processing when the run condition becomes false. Any intermediate WindowAggs must continue processing tuples, but may skip evaluation of their WindowFuncs. Doing things this way also allows us to handle cases where there is a PARTITION BY clause, however, in this case, the top-level WindowAgg must not stop processing and return NULL, instead, it can just act as if it were an intermediate WindowAgg and just stop evaluating WindowFuncs. The top-level WindowAgg must continue processing the tuples so that the other partitions are also processed. I made the v4 patch do things this way and tested the performance of it vs current master. Test 1 and 2 have PARTITION BY clauses. There's a small performance increase from not evaluating the row_number() function once rn <= 2 is no longer true. Test 3 shows the same speedup as the original patch where we just stop processing any further tuples when the run condition is no longer true and there is no PARTITION BY clause. Setup: create table xy (x int, y int); insert into xy select x,y from generate_series(1,1000)x, generate_Series(1,1000)y; create index on xy(x,y); vacuum analyze xy; Test 1: explain analyze select * from (select x,y,row_number() over (partition by x order by y) rn from xy) as xy where rn <= 2; Master: Execution Time: 359.553 ms Execution Time: 354.235 ms Execution Time: 357.646 ms v4 patch: Execution Time: 346.641 ms Execution Time: 337.131 ms Execution Time: 336.531 ms (5% faster) Test 2: explain analyze select * from (select x,y,row_number() over (partition by x order by y) rn from xy) as xy where rn = 1; Master: Execution Time: 359.046 ms Execution Time: 357.601 ms Execution Time: 357.977 ms v4 patch: Execution Time: 336.540 ms Execution Time: 337.024 ms Execution Time: 342.706 ms (5.7% faster) Test 3: explain analyze select * from (select x,y,row_number() over (order by x,y) rn from xy) as xy where rn <= 2; Master: Execution Time: 362.322 ms Execution Time: 348.812 ms Execution Time: 349.471 ms v4 patch: Execution Time: 0.060 ms Execution Time: 0.037 ms Execution Time: 0.037 ms (~8000x faster) One thing which I'm not sure about with the patch is how I'm handling the evaluation of the runcondition in nodeWindowAgg.c. Instead of having ExecQual() evaluate an OpExpr such as "row_number() over (...) <= 10", I'm replacing the WindowFunc with the Var in the targetlist that corresponds to the given WindowFunc. This saves having to double evaluate the WindowFunc. Instead, the value of the Var can be taken directly from the slot. I don't know of anywhere else we do things quite like that. The runcondition is slightly similar to HAVING clauses, but HAVING clauses don't work this way. Maybe they would have if slots had existed back then. Or maybe it's a bad idea to set a precedent that the targetlist Vars must be evaluated already. Does anyone have any thoughts on this part? v4 patch attached. David --000000000000a90dae05db51f4fa Content-Type: text/plain; charset="US-ASCII"; name="v4-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Disposition: attachment; filename="v4-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1bi3t5r0 RnJvbSA0MGRjNWIzZDUyMWJjMzQ5MDM5NmJiNmMzYzJmYjc4NzE0ZWY1MjQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCA4IE1heSAyMDIxIDIzOjQzOjI1ICsxMjAwClN1YmplY3Q6IFtQQVRDSCB2NF0gVGVh Y2ggcGxhbm5lciBhbmQgZXhlY3V0b3IgYWJvdXQgbW9ub3RvbmljIHdpbmRvdyBmdW5jcwoKV2lu ZG93IGZ1bmN0aW9ucyBzdWNoIGFzIHJvd19udW1iZXIoKSBhbHdheXMgcmV0dXJuIGEgdmFsdWUg aGlnaGVyIHRoYW4KdGhlIG9uZSBwcmV2aW91c2x5IGluIGFueSBnaXZlbiBwYXJ0aXRpb24uICBJ ZiBhIHF1ZXJ5IHdlcmUgdG8gb25seQpyZXF1ZXN0IHRoZSBmaXJzdCBmZXcgcm93IG51bWJlcnMs IHRoZW4gdHJhZGl0aW9uYWxseSB3ZSB3b3VsZCBjb250aW51ZQpldmFsdWF0aW5nIHRoZSBXaW5k b3dBZ2cgbm9kZSB1bnRpbCBhbGwgdHVwbGVzIGFyZSBleGhhdXN0ZWQuICBIb3dldmVyLCBpdApp cyBwb3NzaWJsZSBpZiBzb21lb25lLCBzYXkgb25seSB3YW50ZWQgYWxsIHJvdyBudW1iZXJzIDw9 IDEwLCB0aGVuIHdlCmNvdWxkIGp1c3Qgc3RvcCBvbmNlIHdlIGdldCBudW1iZXIgMTEuCgpIZXJl IHdlIGltcGxlbWVudCBtZWFucyB0byBkbyBqdXN0IHRoYXQuICBUaGlzIGlzIGRvbmUgYnkgd2F5 IG9mIGFkZGluZyBhCnBnX3Byb2MucHJvc3VwcG9ydCBmdW5jdGlvbiB0byB2YXJpb3VzIG9mIHRo ZSBidWlsdC1pbiB3aW5kb3cgZnVuY3Rpb25zCmFuZCBhZGRpbmcgc3VwcG9ydGluZyBjb2RlIHRv IGFsbG93IHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIGluZm9ybSB0aGUKcGxhbm5lciBpZiB0aGUg ZnVuY3Rpb24gaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLCBtb25vdG9uaWNhbGx5CmRlY3Jl YXNpbmcsIGJvdGggb3IgbmVpdGhlci4gIFRoZSBwbGFubmVyIGlzIHRoZW4gYWJsZSB0byBtYWtl IHVzZSBvZiB0aGF0CmluZm9ybWF0aW9uIGFuZCBwb3NzaWJseSBhbGxvdyB0aGUgZXhlY3V0b3Ig dG8gc2hvcnQtY2lyY3VpdCBleGVjdXRpb24gYnkKd2F5IG9mIGFkZGluZyBhICJydW4gY29uZGl0 aW9uIiB0byB0aGUgV2luZG93QWdnIHRvIGluc3RydWN0IGl0IHRvIHJ1bgp3aGlsZSB0aGlzIGNv bmRpdGlvbiBpcyB0cnVlIGFuZCBzdG9wIHdoZW4gaXQgYmVjb21lcyBmYWxzZS4KCldoZW4gdGhl cmUgYXJlIG11bHRpcGxlIFdpbmRvd0FnZyBub2RlcyB0byBldmFsdWF0ZSB0aGVuIHRoaXMgY29t cGxpY2F0ZXMKdGhlIHNpdHVhdGlvbiBhcyBpZiB3ZSB3ZXJlIHRvIHN0b3AgZXhlY3V0aW9uIG9u IGEgbG93ZXItbGV2ZWwgV2luZG93QWdnCnRoZW4gYW4gdXBwZXItbGV2ZWwgV2luZG93QWdnIG1h eSBub3QgcmVjZWl2ZSBhbGwgb2YgdGhlIHR1cGxlcyBpdCBzaG91bGQuClRoaXMgbWF5IGxlYWQg dG8gaW5jb3JyZWN0IHF1ZXJ5IHJlc3VsdHMuICBUbyBnZXQgYXJvdW5kIHRoaXMgcHJvYmxlbSBh bGwKbm9uLXRvcC1sZXZlbCBXaW5kb3dBZ2dzIGdvIGludG8gInBhc3N0aHJvdWdoIiBtb2RlIHdo ZW4gdGhlaXIKcnVuY29uZGl0aW9uIGlzIG5vIGxvbmdlciB0cnVlLiAgVGhpcyBtZWFucyB0aGF0 IHRoZXkgY29udGludWUgdG8gcHVsbAp0dXBsZXMgZnJvbSB0aGVpciBzdWJub2RlIGJ1dCBubyBs b25nZXIgZXZhbHVhdGUgdGhlaXIgd2luZG93IGZ1bmN0aW9ucy4KT25seSB0aGUgdG9wLWxldmVs IFdpbmRvd0FnZyBub2RlIG1heSBzdG9wIHdoZW4gdGhlIHJ1bmNvbmRpdGlvbiBpcyBubwpsb25n ZXIgdHJ1ZS4KCkhlcmUgd2UgYWRkIHByb3N1cHBvcnQgZnVuY3Rpb25zIHRvIGFsbG93IHRoaXMg dG8gd29yayBmb3I7IHJvd19udW1iZXIoKSwKcmFuaygpLCBkZW5zZV9yYW5rKCksIGNvdW50KCop IGFuZCBjb3VudChleHByKS4gIEl0IGFwcGVhcnMgdGVjaG5pY2FsbHkKcG9zc2libGUgdG8gZG8g dGhlIHNhbWUgZm9yIG1pbigpIGFuZCBtYXgoKSwgaG93ZXZlciwgaXQgc2VlbXMgdW5saWtlbHkg dG8KYmUgdXNlZnVsIGVub3VnaCwgc28gdGhhdCdzIG5vdCBkb25lIGhlcmUuCgpBdXRob3I6IERh dmlkIFJvd2xleQpSZXZpZXdlZC1ieTogQW5keSBGYW4sIFpoaWhvbmcgWXUKRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUFwSER2cXZwM0F0OCsreUY4aWowNnNkY29vMVNfYjJZb2FU OUQ0TmYrTU9ienNyTFFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRv d0FnZy5jICAgIHwgIDk1ICsrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAg ICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgICAgICAgICAg fCAgIDIgKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgIHwgICA2ICsK IHNyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAyOTcgKysrKysrKysrKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8ICAxMiArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDE4ICstCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgfCAxMDIgKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvaW50OC5jICAgICAgICAgICAgfCAgNDUgKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvd2lu ZG93ZnVuY3MuYyAgICAgfCAgNjMgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICAgICB8ICAzNSArKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICB8ICAyMCArLQogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgfCAgIDIgKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAyMyArKwogc3JjL2luY2x1ZGUvbm9k ZXMvc3VwcG9ydG5vZGVzLmggICAgICAgIHwgIDY0ICsrKystCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaCAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv d2luZG93Lm91dCAgICB8IDM1OSArKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3dpbmRvdy5zcWwgICAgICAgICB8IDE4NiArKysrKysrKysrKysKIDIzIGZpbGVz IGNoYW5nZWQsIDEzMTIgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jCmluZGV4IGNiMTMyMjdkYjEuLjU5MzYwOTNhYjIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKQEAgLTE5ODgsNiArMTk4OCwxMCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJS b3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsK IAkJCWJyZWFrOworCQljYXNlIFRfV2luZG93QWdnOgorCQkJc2hvd191cHBlcl9xdWFsKCgoV2lu ZG93QWdnICopIHBsYW4pLT5ydW5Db25kaXRpb25PcmlnLAorCQkJCQkJCSJSdW4gQ29uZGl0aW9u IiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfR3JvdXA6 CiAJCQlzaG93X2dyb3VwX2tleXMoY2FzdE5vZGUoR3JvdXBTdGF0ZSwgcGxhbnN0YXRlKSwgYW5j ZXN0b3JzLCBlcyk7CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBs YW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMK aW5kZXggMDhjZTA1Y2E1YS4uNjUwNTFlYjllYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5k b3dBZ2cuYwpAQCAtMjAyMywxMyArMjAyMywxNCBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgog RXhlY1dpbmRvd0FnZyhQbGFuU3RhdGUgKnBzdGF0ZSkKIHsKIAlXaW5kb3dBZ2dTdGF0ZSAqd2lu c3RhdGUgPSBjYXN0Tm9kZShXaW5kb3dBZ2dTdGF0ZSwgcHN0YXRlKTsKKwlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKIAlFeHByQ29udGV4dCAqZWNvbnRleHQ7CiAJaW50CQkJaTsKIAlpbnQJCQludW1m dW5jczsKIAogCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQlpZiAod2luc3RhdGUtPmFsbF9k b25lKQorCWlmICh3aW5zdGF0ZS0+c3RhdHVzID09IFdJTkRPV0FHR19ET05FKQogCQlyZXR1cm4g TlVMTDsKIAogCS8qCkBAIC0yMTMxLDEwICsyMTMyLDE0IEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0 YXRlICpwc3RhdGUpCiAJCXsKIAkJCWJlZ2luX3BhcnRpdGlvbih3aW5zdGF0ZSk7CiAJCQlBc3Nl cnQod2luc3RhdGUtPnNwb29sZWRfcm93cyA+IDApOworCisJCQkvKiBDb21lIG91dCBvZiBwYXNz LXRocm91Z2ggbW9kZSB3aGVuIGNoYW5naW5nIHBhcnRpdGlvbiAqLworCQkJd2luc3RhdGUtPnN0 YXR1cyA9IFdJTkRPV0FHR19SVU47CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQl3aW5zdGF0ZS0+YWxs X2RvbmUgPSB0cnVlOworCQkJLyogTm8gZnVydGhlciBwYXJ0aXRpb25zPyAgV2UncmUgZG9uZSAq LworCQkJd2luc3RhdGUtPnN0YXR1cyA9IFdJTkRPV0FHR19ET05FOwogCQkJcmV0dXJuIE5VTEw7 CiAJCX0KIAl9CkBAIC0yMTg1LDI2ICsyMTkwLDMwIEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0YXRl ICpwc3RhdGUpCiAJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgdHVwbGVzdG9yZSIp OwogCX0KIAotCS8qCi0JICogRXZhbHVhdGUgdHJ1ZSB3aW5kb3cgZnVuY3Rpb25zCi0JICovCi0J bnVtZnVuY3MgPSB3aW5zdGF0ZS0+bnVtZnVuY3M7Ci0JZm9yIChpID0gMDsgaSA8IG51bWZ1bmNz OyBpKyspCisJLyogZG9uJ3QgZXZhbHVhdGUgdGhlIHdpbmRvdyBmdW5jdGlvbnMgd2hlbiB3ZSdy ZSBpbiBwYXNzLXRocm91Z2ggbW9kZSAqLworCWlmICh3aW5zdGF0ZS0+c3RhdHVzID09IFdJTkRP V0FHR19SVU4pCiAJewotCQlXaW5kb3dTdGF0ZVBlckZ1bmMgcGVyZnVuY3N0YXRlID0gJih3aW5z dGF0ZS0+cGVyZnVuY1tpXSk7CisJCS8qCisJCQkqIEV2YWx1YXRlIHRydWUgd2luZG93IGZ1bmN0 aW9ucworCQkJKi8KKwkJbnVtZnVuY3MgPSB3aW5zdGF0ZS0+bnVtZnVuY3M7CisJCWZvciAoaSA9 IDA7IGkgPCBudW1mdW5jczsgaSsrKQorCQl7CisJCQlXaW5kb3dTdGF0ZVBlckZ1bmMgcGVyZnVu Y3N0YXRlID0gJih3aW5zdGF0ZS0+cGVyZnVuY1tpXSk7CiAKLQkJaWYgKHBlcmZ1bmNzdGF0ZS0+ cGxhaW5fYWdnKQotCQkJY29udGludWU7Ci0JCWV2YWxfd2luZG93ZnVuY3Rpb24od2luc3RhdGUs IHBlcmZ1bmNzdGF0ZSwKLQkJCQkJCQkmKGVjb250ZXh0LT5lY3h0X2FnZ3ZhbHVlc1twZXJmdW5j c3RhdGUtPndmdW5jc3RhdGUtPndmdW5jbm9dKSwKLQkJCQkJCQkmKGVjb250ZXh0LT5lY3h0X2Fn Z251bGxzW3BlcmZ1bmNzdGF0ZS0+d2Z1bmNzdGF0ZS0+d2Z1bmNub10pKTsKLQl9CisJCQlpZiAo cGVyZnVuY3N0YXRlLT5wbGFpbl9hZ2cpCisJCQkJY29udGludWU7CisJCQlldmFsX3dpbmRvd2Z1 bmN0aW9uKHdpbnN0YXRlLCBwZXJmdW5jc3RhdGUsCisJCQkJJihlY29udGV4dC0+ZWN4dF9hZ2d2 YWx1ZXNbcGVyZnVuY3N0YXRlLT53ZnVuY3N0YXRlLT53ZnVuY25vXSksCisJCQkJJihlY29udGV4 dC0+ZWN4dF9hZ2dudWxsc1twZXJmdW5jc3RhdGUtPndmdW5jc3RhdGUtPndmdW5jbm9dKSk7CisJ CX0KIAotCS8qCi0JICogRXZhbHVhdGUgYWdncmVnYXRlcwotCSAqLwotCWlmICh3aW5zdGF0ZS0+ bnVtYWdncyA+IDApCi0JCWV2YWxfd2luZG93YWdncmVnYXRlcyh3aW5zdGF0ZSk7CisJCS8qCisJ CQkqIEV2YWx1YXRlIGFnZ3JlZ2F0ZXMKKwkJCSovCisJCWlmICh3aW5zdGF0ZS0+bnVtYWdncyA+ IDApCisJCQlldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMod2luc3RhdGUpOworCX0KIAogCS8qCiAJICog SWYgd2UgaGF2ZSBjcmVhdGVkIGF1eGlsaWFyeSByZWFkIHBvaW50ZXJzIGZvciB0aGUgZnJhbWUg b3IgZ3JvdXAKQEAgLTIyMzUsNyArMjI0NCwzMyBAQCBFeGVjV2luZG93QWdnKFBsYW5TdGF0ZSAq cHN0YXRlKQogCSAqLwogCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSB3aW5zdGF0ZS0+c3Mu c3NfU2NhblR1cGxlU2xvdDsKIAotCXJldHVybiBFeGVjUHJvamVjdCh3aW5zdGF0ZS0+c3MucHMu cHNfUHJvakluZm8pOworCXNsb3QgPSBFeGVjUHJvamVjdCh3aW5zdGF0ZS0+c3MucHMucHNfUHJv akluZm8pOworCisJLyoKKwkgKiBOb3cgZXZhbHVhdGUgdGhlIHJ1biBjb25kaXRpb24gdG8gc2Vl IGlmIG5lZWQgdG8gY29udGludWUgZXZhbHVhdGluZworCSAqIHdpbmRvdyBmdW5jdGlvbiBvciBp ZiB3ZSBjYW4gc3RvcCBjb21wbGV0ZWx5LgorCSAqLworCWVjb250ZXh0LT5lY3h0X3NjYW50dXBs ZSA9IHNsb3Q7CisJaWYgKHdpbnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX1JVTiAmJgorCQkh RXhlY1F1YWwod2luc3RhdGUtPnJ1bmNvbmRpdGlvbiwgZWNvbnRleHQpKQorCXsKKwkJLyoKKwkJ ICogV2hlbiB0aGUgcnVuY29uZGl0aW9uIGlzIG5vIGxvbmdlciB0cnVlIHdlIGNhbiBlaXRoZXIg YWJvcnQKKwkJICogZXhlY3V0aW9uIG9yIGdvIGludG8gcGFzcy10aHJvdWdoIG1vZGUgc28gdGhh dCB3ZSBjb250aW51ZSB0byBwdWxsCisJCSAqIHR1cGxlcyBmcm9tIG91ciBzdWJub2RlIGJ1dCBq dXN0IHNraXAgZXZhbHVhdGlvbiBvZiB0aGUgd2luZG93CisJCSAqIGZ1bmN0aW9ucy4gIFdoaWNo IG9mIHRoZXNlIHdlIHBlcmZvcm0gZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlCisJCSAqIHVz ZV9wYXNzX3Rocm91Z2ggZmllbGQuCisJCSAqLworCQlpZiAod2luc3RhdGUtPnVzZV9wYXNzX3Ro cm91Z2gpCisJCQl3aW5zdGF0ZS0+c3RhdHVzID0gV0lORE9XQUdHX1BBU1NUSFJPVUdIOworCQll bHNlCisJCXsKKwkJCXdpbnN0YXRlLT5zdGF0dXMgPSBXSU5ET1dBR0dfRE9ORTsKKwkJCXJldHVy biBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIHNsb3Q7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tCkBAIC0yMzA3LDYgKzIzNDIsMjEgQEAgRXhlY0luaXRXaW5kb3dBZ2coV2luZG93QWdnICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlBc3NlcnQobm9kZS0+cGxhbi5xdWFs ID09IE5JTCk7CiAJd2luc3RhdGUtPnNzLnBzLnF1YWwgPSBOVUxMOwogCisJLyoKKwkgKiBTZXR1 cCB0aGUgcnVuIGNvbmRpdGlvbiwgaWYgd2UgcmVjZWl2ZWQgb25lIGZyb20gdGhlIHF1ZXJ5IHBs YW5uZXIuCisJICogV2hlbiBzZXQsIHRoaXMgbWF5IGFsbG93IHVzIHRvIG1vdmUgaW50byBwYXNz LXRocm91Z2ggbW9kZSBzbyB0aGF0IHdlCisJICogZG9uJ3QgaGF2ZSB0byBwZXJmb3JtIGFueSBm dXJ0aGVyIGV2YWx1YXRpb24gb2YgV2luZG93RnVuY3MgaW4gdGhlCisJICogY3VycmVudCBwYXJ0 aXRpb24gb3IgcG9zc2libHkgc3RvcCByZXR1cm5pbmcgdHVwbGVzIGFsdG9nZXRoZXIgd2hlbiBh bGwKKwkgKiB0dXBsZXMgYXJlIGluIHRoZSBzYW1lIHBhcnRpdGlvbi4KKwkgKi8KKwlpZiAobm9k ZS0+cnVuQ29uZGl0aW9uICE9IE5JTCkKKwkJd2luc3RhdGUtPnJ1bmNvbmRpdGlvbiA9IEV4ZWNJ bml0UXVhbChub2RlLT5ydW5Db25kaXRpb24sCisJCQkJCQkJCQkJCSAgKFBsYW5TdGF0ZSAqKSB3 aW5zdGF0ZSk7CisJZWxzZQorCQl3aW5zdGF0ZS0+cnVuY29uZGl0aW9uID0gTlVMTDsKKworCXdp bnN0YXRlLT51c2VfcGFzc190aHJvdWdoID0gbm9kZS0+dXNlUGFzc1Rocm91Z2g7CisKIAkvKgog CSAqIGluaXRpYWxpemUgY2hpbGQgbm9kZXMKIAkgKi8KQEAgLTI1MDAsNiArMjU1MCw5IEBAIEV4 ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpCiAJCXdpbnN0YXRlLT5hZ2dfd2lub2JqID0gYWdnX3dpbm9iajsKIAl9CiAKKwkvKiBTZXQg dGhlIHN0YXR1cyB0byBydW5uaW5nICovCisJd2luc3RhdGUtPnN0YXR1cyA9IFdJTkRPV0FHR19S VU47CisKIAkvKiBjb3B5IGZyYW1lIG9wdGlvbnMgdG8gc3RhdGUgbm9kZSBmb3IgZWFzeSBhY2Nl c3MgKi8KIAl3aW5zdGF0ZS0+ZnJhbWVPcHRpb25zID0gZnJhbWVPcHRpb25zOwogCkBAIC0yNTc5 LDcgKzI2MzIsNyBAQCBFeGVjUmVTY2FuV2luZG93QWdnKFdpbmRvd0FnZ1N0YXRlICpub2RlKQog CVBsYW5TdGF0ZSAgKm91dGVyUGxhbiA9IG91dGVyUGxhblN0YXRlKG5vZGUpOwogCUV4cHJDb250 ZXh0ICplY29udGV4dCA9IG5vZGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OwogCi0Jbm9kZS0+YWxs X2RvbmUgPSBmYWxzZTsKKwlub2RlLT5zdGF0dXMgPSBXSU5ET1dBR0dfUlVOOwogCW5vZGUtPmFs bF9maXJzdCA9IHRydWU7CiAKIAkvKiByZWxlYXNlIHR1cGxlc3RvcmUgZXQgYWwgKi8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMKaW5kZXggY2I0YjRkMDFmOC4uYTU0NGQyZjkxOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1 bmNzLmMKQEAgLTExMDMsMTEgKzExMDMsMTQgQEAgX2NvcHlXaW5kb3dBZ2coY29uc3QgV2luZG93 QWdnICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJQ09QWV9OT0RF X0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT1BZX05PREVfRklFTEQoZW5kT2Zmc2V0KTsKKwlDT1BZ X05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKKwlDT1BZX05PREVfRklFTEQocnVuQ29uZGl0aW9u T3JpZyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoc3RhcnRJblJhbmdlRnVuYyk7CiAJQ09QWV9TQ0FM QVJfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGluUmFuZ2VDb2xs KTsKIAlDT1BZX1NDQUxBUl9GSUVMRChpblJhbmdlQXNjKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChp blJhbmdlTnVsbHNGaXJzdCk7CisJQ09QWV9TQ0FMQVJfRklFTEQodXNlUGFzc1Rocm91Z2gpOwog CiAJcmV0dXJuIG5ld25vZGU7CiB9CkBAIC0yNzg5LDYgKzI3OTIsOCBAQCBfY29weVdpbmRvd0Ns YXVzZShjb25zdCBXaW5kb3dDbGF1c2UgKmZyb20pCiAJQ09QWV9TQ0FMQVJfRklFTEQoZnJhbWVP cHRpb25zKTsKIAlDT1BZX05PREVfRklFTEQoc3RhcnRPZmZzZXQpOwogCUNPUFlfTk9ERV9GSUVM RChlbmRPZmZzZXQpOworCUNPUFlfTk9ERV9GSUVMRChydW5Db25kaXRpb24pOworCUNPUFlfTk9E RV9GSUVMRChydW5Db25kaXRpb25PcmlnKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChzdGFydEluUmFu Z2VGdW5jKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJQ09QWV9TQ0FM QVJfRklFTEQoaW5SYW5nZUNvbGwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1 YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IDA4NGQ5OGIz NGMuLmQ4ZjQ4NjFlYjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAgLTMwNDEsNiArMzA0MSw4 IEBAIF9lcXVhbFdpbmRvd0NsYXVzZShjb25zdCBXaW5kb3dDbGF1c2UgKmEsIGNvbnN0IFdpbmRv d0NsYXVzZSAqYikKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChmcmFtZU9wdGlvbnMpOwogCUNPTVBB UkVfTk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKGVuZE9mZnNl dCk7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKHJ1bkNvbmRpdGlvbik7CisJQ09NUEFSRV9OT0RFX0ZJ RUxEKHJ1bkNvbmRpdGlvbk9yaWcpOwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKHN0YXJ0SW5SYW5n ZUZ1bmMpOwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGVuZEluUmFuZ2VGdW5jKTsKIAlDT01QQVJF X1NDQUxBUl9GSUVMRChpblJhbmdlQ29sbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCAyNzhlODcy NTlkLi4yOWRmNDAxMmI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTgyOCwxMSArODI4LDE0IEBA IF9vdXRXaW5kb3dBZ2coU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpbmRvd0FnZyAqbm9kZSkKIAlX UklURV9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHN0YXJ0T2Zm c2V0KTsKIAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJV1JJVEVfTk9ERV9GSUVMRChy dW5Db25kaXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVuQ29uZGl0aW9uT3JpZyk7CiAJV1JJ VEVfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChlbmRJblJh bmdlRnVuYyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKIAlXUklURV9CT09MX0ZJ RUxEKGluUmFuZ2VBc2MpOwogCVdSSVRFX0JPT0xfRklFTEQoaW5SYW5nZU51bGxzRmlyc3QpOwor CVdSSVRFX0JPT0xfRklFTEQodXNlUGFzc1Rocm91Z2gpOwogfQogCiBzdGF0aWMgdm9pZApAQCAt MjE5OCw2ICsyMjAxLDcgQEAgX291dFdpbmRvd0FnZ1BhdGgoU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IFdpbmRvd0FnZ1BhdGggKm5vZGUpCiAKIAlXUklURV9OT0RFX0ZJRUxEKHN1YnBhdGgpOwogCVdS SVRFX05PREVfRklFTEQod2luY2xhdXNlKTsKKwlXUklURV9CT09MX0ZJRUxEKHVzZXBhc3N0aHJv dWdoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMyMDgsNiArMzIxMiw4IEBAIF9vdXRXaW5kb3dD bGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpbmRvd0NsYXVzZSAqbm9kZSkKIAlXUklURV9J TlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsK IAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJV1JJVEVfTk9ERV9GSUVMRChydW5Db25k aXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVuQ29uZGl0aW9uT3JpZyk7CiAJV1JJVEVfT0lE X0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChlbmRJblJhbmdlRnVu Yyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5k ZXggNWI5ZTIzNWU5YS4uMTkxYzE4NzJiNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv cmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTM4NCw2 ICszODQsOCBAQCBfcmVhZFdpbmRvd0NsYXVzZSh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKGZyYW1l T3B0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlSRUFEX05PREVfRklF TEQoZW5kT2Zmc2V0KTsKKwlSRUFEX05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKKwlSRUFEX05P REVfRklFTEQocnVuQ29uZGl0aW9uT3JpZyk7CiAJUkVBRF9PSURfRklFTEQoc3RhcnRJblJhbmdl RnVuYyk7CiAJUkVBRF9PSURfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJRUxE KGluUmFuZ2VDb2xsKTsKQEAgLTI0NjcsMTEgKzI0NjksMTQgQEAgX3JlYWRXaW5kb3dBZ2codm9p ZCkKIAlSRUFEX0lOVF9GSUVMRChmcmFtZU9wdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChzdGFy dE9mZnNldCk7CiAJUkVBRF9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJUkVBRF9OT0RFX0ZJRUxE KHJ1bkNvbmRpdGlvbik7CisJUkVBRF9OT0RFX0ZJRUxEKHJ1bkNvbmRpdGlvbk9yaWcpOwogCVJF QURfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJRUxEKGVuZEluUmFu Z2VGdW5jKTsKIAlSRUFEX09JRF9GSUVMRChpblJhbmdlQ29sbCk7CiAJUkVBRF9CT09MX0ZJRUxE KGluUmFuZ2VBc2MpOwogCVJFQURfQk9PTF9GSUVMRChpblJhbmdlTnVsbHNGaXJzdCk7CisJUkVB RF9CT09MX0ZJRUxEKHVzZVBhc3NUaHJvdWdoKTsKIAogCVJFQURfRE9ORSgpOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggMTY5YjFkNTNmYy4uMmJiNjk3ZmNlMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0yNyw2ICsyNyw3IEBACiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5j bHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvc3VwcG9ydG5vZGVzLmgi CiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAjaW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKICNlbmRp ZgpAQCAtMjE1Nyw2ICsyMTU4LDI4NCBAQCBoYXNfbXVsdGlwbGVfYmFzZXJlbHMoUGxhbm5lcklu Zm8gKnJvb3QpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogZmluZF93aW5kb3dfcnVuX2Nv bmRpdGlvbnMKKyAqCQlEZXRlcm1pbmUgaWYgJ3dmdW5jJyBpcyByZWFsbHkgYSBXaW5kb3dGdW5j IGFuZCBjYWxsIGl0cyBwcm9zdXBwb3J0CisgKgkJZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBm dW5jdGlvbidzIG1vbm90b25pYyBwcm9wZXJ0aWVzLiAgV2UgdGhlbgorICoJCXNlZSBpZiAnb3Bl eHByJyBjYW4gYmUgdXNlZCB0byBzaG9ydC1jaXJjdWl0IGV4ZWN1dGlvbi4KKyAqCisgKiBGb3Ig ZXhhbXBsZSByb3dfbnVtYmVyKCkgb3ZlciAob3JkZXIgYnkgLi4uKSBhbHdheXMgcHJvZHVjZXMg YSB2YWx1ZSBvbmUKKyAqIGhpZ2hlciB0aGFuIHRoZSBwcmV2aW91cy4gIElmIHNvbWVvbmUgaGFz IGEgd2luZG93IGZ1bmN0aW9uIHN1Y2ggYXMgdGhhdAorICogaW4gYSBzdWJxdWVyeSBhbmQganVz dCB3YW50cywgc2F5IGFsbCByb3dzIHdpdGggYSByb3cgbnVtYmVyIGxlc3MgdGhhbiBvcgorICog ZXF1YWwgdG8gMTAsIHRoZW4gd2UgbWF5IGFzIHdlbGwgc3RvcCBwcm9jZXNzaW5nIHRoZSB3aW5k b3dhZ2cgb25jZSB0aGUgcm93CisgKiBudW1iZXIgcmVhY2hlcyAxMS4gIEhlcmUgd2UgbG9vayBm b3Igb3BleHBycyB0aGF0IG1pZ2h0IGhlbHAgdXMgdG8gc3RvcAorICogZG9pbmcgbmVlZGxlc3Mg ZXh0cmEgcHJvY2Vzc2luZyBpbiBXaW5kb3dBZ2cgbm9kZXMuCisgKgorICogVG8gZG8gdGhpcyB3 ZSBtYWtlIHVzZSBvZiB0aGUgd2luZG93IGZ1bmN0aW9uJ3MgcHJvc3VwcG9ydCBmdW5jdGlvbiB0 bworICogZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB3aW5kb3cgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2 ZW4gd2luZG93IGNsYXVzZSBpcyBhCisgKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3IgZGVj cmVhc2luZyBmdW5jdGlvbi4KKyAqCisgKiAnKmtlZXBfb3JpZ2luYWwnIGlzIHNldCB0byB0cnVl IGlmIHRoZSBjYWxsZXIgc2hvdWxkIGFsc28gdXNlICdvcGV4cHInIGZvcgorICogaXRzIG9yaWdp bmFsIHB1cnBvc2UuICBUaGlzIGlzIHNldCB0byBmYWxzZSBpZiB0aGUgY2FsbGVyIGNhbiBhc3N1 bWUgdGhhdAorICogdGhlIHJ1biBjb25kaXRpb24gd2lsbCBoYW5kbGUgYWxsIG9mIHRoZSByZXF1 aXJlZCBmaWx0ZXJpbmcuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGEgcnVuIGNvbmRpdGlvbiBx dWFsIHdhcyBmb3VuZCBhbmQgYWRkZWQgdG8gdGhlCisgKiBhcHByb3ByaWF0ZSBXaW5kb3dDbGF1 c2UncyAncnVuQ29uZGl0aW9uJyBsaXN0IGFuZCBzZXRzICprZWVwX29yaWdpbmFsCisgKiBhY2Nv cmRpbmdseS4gIFJldHVybnMgZmFsc2UgaWYgd2Z1bmMgaXMgbm90IGEgV2luZG93RnVuYyBvciB3 ZSdyZSB1bmFibGUgdG8KKyAqIHVzZSAnb3BleHByJyBhcyBhIHJ1biBjb25kaXRpb24uCisgKi8K K3N0YXRpYyBib29sCitmaW5kX3dpbmRvd19ydW5fY29uZGl0aW9ucyhRdWVyeSAqc3VicXVlcnks IFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRpLAorCQkJCQkJICAgQXR0ck51bWJlciBhdHRu bywgV2luZG93RnVuYyAqd2Z1bmMsIE9wRXhwciAqb3BleHByLAorCQkJCQkJICAgYm9vbCB3ZnVu Y19sZWZ0LCBib29sICprZWVwX29yaWdpbmFsKQoreworCU9pZAkJCXByb3N1cHBvcnQ7CisJRXhw cgkgICAqb3RoZXJleHByOworCVN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgcmVxOworCVN1 cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKnJlczsKKwlXaW5kb3dDbGF1c2UgKndjbGF1c2U7 CisJTGlzdAkgICAqb3BpbmZvczsKKwlPcEV4cHIJICAgKnJ1bm9wZXhwcjsKKwlPaWQJCQlydW5v cGVyYXRvcjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCSprZWVwX29yaWdpbmFsID0gdHJ1ZTsKKwor CXdoaWxlIChJc0Eod2Z1bmMsIFJlbGFiZWxUeXBlKSkKKwkJd2Z1bmMgPSAoV2luZG93RnVuYyAq KSAoKFJlbGFiZWxUeXBlICopIHdmdW5jKS0+YXJnOworCisJLyogd2UgY2FuIG9ubHkgd29yayB3 aXRoIHdpbmRvdyBmdW5jdGlvbnMgKi8KKwlpZiAoIUlzQSh3ZnVuYywgV2luZG93RnVuYykpCisJ CXJldHVybiBmYWxzZTsKKworCS8qIGZpbmQgdGhlIHdpbmRvdyBjbGF1c2UgYmVsb25naW5nIHRv IHRoZSB3aW5kb3cgZnVuY3Rpb24gKi8KKwl3Y2xhdXNlID0gKFdpbmRvd0NsYXVzZSAqKSBsaXN0 X250aChzdWJxdWVyeS0+d2luZG93Q2xhdXNlLAorCQkJCQkJCQkJCXdmdW5jLT53aW5yZWYgLSAx KTsKKworCXByb3N1cHBvcnQgPSBnZXRfZnVuY19zdXBwb3J0KHdmdW5jLT53aW5mbm9pZCk7CisK KwkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc3VwcG9ydCBmdW5jdGlvbiBmb3IgJ3dmdW5jJyAqLwor CWlmICghT2lkSXNWYWxpZChwcm9zdXBwb3J0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogZ2V0 IHRoZSBFeHByIGZyb20gdGhlIG90aGVyIHNpZGUgb2YgdGhlIE9wRXhwciAqLworCWlmICh3ZnVu Y19sZWZ0KQorCQlvdGhlcmV4cHIgPSBsc2Vjb25kKG9wZXhwci0+YXJncyk7CisJZWxzZQorCQlv dGhlcmV4cHIgPSBsaW5pdGlhbChvcGV4cHItPmFyZ3MpOworCisJLyoKKwkgKiBUaGUgdmFsdWUg YmVpbmcgY29tcGFyZWQgbXVzdCBub3QgY2hhbmdlIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0 aGUKKwkgKiB3aW5kb3cgcGFydGl0aW9uLgorCSAqLworCWlmICghaXNfcHNldWRvX2NvbnN0YW50 X2NsYXVzZSgoTm9kZSAqKSBvdGhlcmV4cHIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXEudHlw ZSA9IFRfU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYzsKKwlyZXEud2luZG93X2Z1bmMgPSB3 ZnVuYzsKKwlyZXEud2luZG93X2NsYXVzZSA9IHdjbGF1c2U7CisKKwkvKiBjYWxsIHRoZSBzdXBw b3J0IGZ1bmN0aW9uICovCisJcmVzID0gKFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKikK KwkJRGF0dW1HZXRQb2ludGVyKE9pZEZ1bmN0aW9uQ2FsbDEocHJvc3VwcG9ydCwKKwkJCQkJCQkJ CQkgUG9pbnRlckdldERhdHVtKCZyZXEpKSk7CisKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8gaWYg dGhlIGZ1bmN0aW9uIGlzIG5laXRoZXIgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG5vcgorCSAq IG1vbm90b25pY2FsbHkgZGVjcmVhc2luZy4KKwkgKi8KKwlpZiAocmVzID09IE5VTEwgfHwgcmVz LT5tb25vdG9uaWMgPT0gTU9OT1RPTklDRlVOQ19OT05FKQorCQlyZXR1cm4gZmFsc2U7CisKKwly dW5vcGV4cHIgPSBOVUxMOworCXJ1bm9wZXJhdG9yID0gSW52YWxpZE9pZDsKKwlvcGluZm9zID0g Z2V0X29wX2J0cmVlX2ludGVycHJldGF0aW9uKG9wZXhwci0+b3Bubyk7CisKKwlmb3JlYWNoKGxj LCBvcGluZm9zKQorCXsKKwkJT3BCdHJlZUludGVycHJldGF0aW9uICpvcGluZm8gPSAoT3BCdHJl ZUludGVycHJldGF0aW9uICopIGxmaXJzdChsYyk7CisJCWludAkJCXN0cmF0ZWd5ID0gb3BpbmZv LT5zdHJhdGVneTsKKworCQkvKiBoYW5kbGUgPCAvIDw9ICovCisJCWlmIChzdHJhdGVneSA9PSBC VExlc3NTdHJhdGVneU51bWJlciB8fAorCQkJc3RyYXRlZ3kgPT0gQlRMZXNzRXF1YWxTdHJhdGVn eU51bWJlcikKKwkJeworCQkJLyoKKwkJCSAqIDwgLyA8PSBpcyBzdXBwb3J0ZWQgZm9yIG1vbm90 b25pY2FsbHkgaW5jcmVhc2luZyBmdW5jdGlvbnMgaW4KKwkJCSAqIHRoZSBmb3JtIDx3ZnVuYz4g b3AgPHBzZXVkb2NvbnN0PiBhbmQgPHBzZXVkb2NvbnN0PiBvcCA8d2Z1bmM+CisJCQkgKiBmb3Ig bW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9ucy4KKwkJCSAqLworCQkJaWYgKCh3ZnVu Y19sZWZ0ICYmIChyZXMtPm1vbm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORykpIHx8 CisJCQkJKCF3ZnVuY19sZWZ0ICYmIChyZXMtPm1vbm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfREVD UkVBU0lORykpKQorCQkJeworCQkJCS8qCisJCQkJICogV2UgbXVzdCBrZWVwIHRoZSBvcmlnaW5h bCBxdWFsIGluIHBsYWNlIGlmIHRoZXJlIGlzIGEKKwkJCQkgKiBQQVJUSVRJT04gQlkgY2xhdXNl IGFzIHRoZSB0b3AtbGV2ZWwgV2luZG93QWdnIHJlbWFpbnMKKwkJCQkgKiBpbiBwYXNzLXRocm91 Z2ggbW9kZSBhbmQgZG9lcyBub3RoaW5nIHRvIGZpbHRlciBvdXQKKwkJCQkgKiB1bndhbnRlZCB0 dXBsZXMuCisJCQkJICovCisJCQkJKmtlZXBfb3JpZ2luYWwgPSAod2NsYXVzZS0+cGFydGl0aW9u Q2xhdXNlICE9IE5JTCk7OworCQkJCXJ1bm9wZXhwciA9IG9wZXhwcjsKKwkJCQlydW5vcGVyYXRv ciA9IG9wZXhwci0+b3BubzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCS8qIGhhbmRsZSA+IC8g Pj0gKi8KKwkJZWxzZSBpZiAoc3RyYXRlZ3kgPT0gQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXIgfHwK KwkJCQkgc3RyYXRlZ3kgPT0gQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJlcikKKwkJeworCQkJ LyoKKwkJCSAqID4gLyA+PSBpcyBzdXBwb3J0ZWQgZm9yIG1vbm90b25pY2FsbHkgZGVjcmVhc2lu ZyBmdW5jdGlvbnMgaW4KKwkJCSAqIHRoZSBmb3JtIDx3ZnVuYz4gb3AgPHBzZXVkb2NvbnN0PiBh bmQgPHBzZXVkb2NvbnN0PiBvcCA8d2Z1bmM+CisJCQkgKiBmb3IgbW9ub3RvbmljYWxseSBpbmNy ZWFzaW5nIGZ1bmN0aW9ucy4KKwkJCSAqLworCQkJaWYgKCh3ZnVuY19sZWZ0ICYmIChyZXMtPm1v bm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORykpIHx8CisJCQkJKCF3ZnVuY19sZWZ0 ICYmIChyZXMtPm1vbm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORykpKQorCQkJewor CQkJCSprZWVwX29yaWdpbmFsID0gKHdjbGF1c2UtPnBhcnRpdGlvbkNsYXVzZSAhPSBOSUwpOzsK KwkJCQlydW5vcGV4cHIgPSBvcGV4cHI7CisJCQkJcnVub3BlcmF0b3IgPSBvcGV4cHItPm9wbm87 CisJCQl9CisJCQlicmVhazsKKwkJfQorCQkvKiBoYW5kbGUgPSAqLworCQllbHNlIGlmIChzdHJh dGVneSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCXsKKwkJCWludDE2CQluZXdzdHJhdGVn eTsKKworCQkJLyoKKwkJCSAqIFdoZW4gYm90aCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5k IGRlY3JlYXNpbmcgdGhlbiB0aGUKKwkJCSAqIHJldHVybiB2YWx1ZSBvZiB0aGUgd2luZG93IGZ1 bmN0aW9uIHdpbGwgYmUgdGhlIHNhbWUgZWFjaCB0aW1lLgorCQkJICogV2UgY2FuIHNpbXBseSB1 c2UgJ29wZXhwcicgYXMgdGhlIHJ1biBjb25kaXRpb24gd2l0aG91dAorCQkJICogbW9kaWZ5aW5n IGl0LgorCQkJICovCisJCQlpZiAoKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19CT1RI KSA9PSBNT05PVE9OSUNGVU5DX0JPVEgpCisJCQl7CisJCQkJKmtlZXBfb3JpZ2luYWwgPSAod2Ns YXVzZS0+cGFydGl0aW9uQ2xhdXNlICE9IE5JTCk7OworCQkJCXJ1bm9wZXhwciA9IG9wZXhwcjsK KwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdoZW4gbW9ub3RvbmljYWxseSBpbmNy ZWFzaW5nIHdlIG1ha2UgYSBxdWFsIHdpdGggPHdmdW5jPiA8PQorCQkJICogPHZhbHVlPiBvciA8 dmFsdWU+ID49IDx3ZnVuYz4gaW4gb3JkZXIgdG8gZmlsdGVyIG91dCB2YWx1ZXMKKwkJCSAqIHdo aWNoIGFyZSBhYm92ZSB0aGUgdmFsdWUgaW4gdGhlIGVxdWFsaXR5IGNvbmRpdGlvbi4gIEZvcgor CQkJICogbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9ucyB3ZSB3YW50IHRvIGZpbHRl ciB2YWx1ZXMKKwkJCSAqIGJlbG93IHRoZSB2YWx1ZSBpbiB0aGUgZXF1YWxpdHkgY29uZGl0aW9u LgorCQkJICovCisJCQlpZiAocmVzLT5tb25vdG9uaWMgJiBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJ TkcpCisJCQkJbmV3c3RyYXRlZ3kgPSB3ZnVuY19sZWZ0ID8gQlRMZXNzRXF1YWxTdHJhdGVneU51 bWJlciA6IEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI7CisJCQllbHNlCisJCQkJbmV3c3Ry YXRlZ3kgPSB3ZnVuY19sZWZ0ID8gQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJlciA6IEJUTGVz c0VxdWFsU3RyYXRlZ3lOdW1iZXI7CisKKwkJCS8qIFdlIG11c3Qga2VlcCB0aGUgb3JpZ2luYWwg ZXF1YWxpdHkgcXVhbCAqLworCQkJKmtlZXBfb3JpZ2luYWwgPSB0cnVlOworCQkJcnVub3BleHBy ID0gb3BleHByOworCisJCQkvKiBkZXRlcm1pbmUgdGhlIG9wZXJhdG9yIHRvIHVzZSBmb3IgdGhl IHJ1bkNvbmRpdGlvbiBxdWFsICovCisJCQlydW5vcGVyYXRvciA9IGdldF9vcGZhbWlseV9tZW1i ZXIob3BpbmZvLT5vcGZhbWlseV9pZCwKKwkJCQkJCQkJCQkJICBvcGluZm8tPm9wbGVmdHR5cGUs CisJCQkJCQkJCQkJCSAgb3BpbmZvLT5vcHJpZ2h0dHlwZSwKKwkJCQkJCQkJCQkJICBuZXdzdHJh dGVneSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChydW5vcGV4cHIgIT0gTlVMTCkKKwl7 CisJCUV4cHIJICAgKm5ld2V4cHI7CisKKwkJLyoKKwkJICogQnVpbGQgdGhlIHF1YWwgcmVxdWly ZWQgZm9yIHRoZSBydW4gY29uZGl0aW9uIGtlZXBpbmcgdGhlCisJCSAqIFdpbmRvd0Z1bmMgb24g dGhlIHNhbWUgc2lkZSBhcyBpdCB3YXMgb3JpZ2luYWxseS4KKwkJICovCisJCWlmICh3ZnVuY19s ZWZ0KQorCQkJbmV3ZXhwciA9IG1ha2Vfb3BjbGF1c2UocnVub3BlcmF0b3IsCisJCQkJCQkJCQly dW5vcGV4cHItPm9wcmVzdWx0dHlwZSwKKwkJCQkJCQkJCXJ1bm9wZXhwci0+b3ByZXRzZXQsIChF eHByICopIHdmdW5jLAorCQkJCQkJCQkJb3RoZXJleHByLCBydW5vcGV4cHItPm9wY29sbGlkLAor CQkJCQkJCQkJcnVub3BleHByLT5pbnB1dGNvbGxpZCk7CisJCWVsc2UKKwkJCW5ld2V4cHIgPSBt YWtlX29wY2xhdXNlKHJ1bm9wZXJhdG9yLAorCQkJCQkJCQkJcnVub3BleHByLT5vcHJlc3VsdHR5 cGUsCisJCQkJCQkJCQlydW5vcGV4cHItPm9wcmV0c2V0LAorCQkJCQkJCQkJb3RoZXJleHByLCAo RXhwciAqKSB3ZnVuYywKKwkJCQkJCQkJCXJ1bm9wZXhwci0+b3Bjb2xsaWQsCisJCQkJCQkJCQly dW5vcGV4cHItPmlucHV0Y29sbGlkKTsKKworCQl3Y2xhdXNlLT5ydW5Db25kaXRpb24gPSBsYXBw ZW5kKHdjbGF1c2UtPnJ1bkNvbmRpdGlvbiwgbmV3ZXhwcik7CisKKwkJLyoKKwkJICogU3RvcmUg dGhlIHF1YWwgdHdpY2UuICBUaGlzIG9uZSB3aWxsIGJlIHVubW9kaWZpZWQgZm9yIHVzZSBpbgor CQkgKiBFWFBMQUlOLgorCQkgKi8KKwkJd2NsYXVzZS0+cnVuQ29uZGl0aW9uT3JpZyA9IGxhcHBl bmQod2NsYXVzZS0+cnVuQ29uZGl0aW9uT3JpZywgbmV3ZXhwcik7CisJCXJldHVybiB0cnVlOwor CX0KKworCS8qIHVuc3VwcG9ydGVkIE9wRXhwciAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIGNoZWNrX2FuZF9wdXNoX3dpbmRvd19xdWFscworICoJCUNoZWNrIGlmICdyaW5mbycgaXMg YSBxdWFsIHRoYXQgY2FuIGJlIHB1c2hlZCBpbnRvIGEgV2luZG93RnVuYydzCisgKgkJV2luZG93 Q2xhdXNlIGFzIGEgJ3J1bkNvbmRpdGlvbicgcXVhbC4gIFRoZXNlLCB3aGVuIHByZXNlbnQsIGFs bG93CisgKgkJc29tZSB1bm5lY2Vzc2FyeSB3b3JrIHRvIGJlIHNraXBwZWQgZHVyaW5nIGV4ZWN1 dGlvbi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzdGlsbCBtdXN0IGtlZXAg dGhlIG9yaWdpbmFsIHF1YWwgb3IgZmFsc2UgaWYKKyAqIHRoZSBjYWxsZXIgY2FuIHNhZmVseSBp Z25vcmUgdGhlIG9yaWdpbmFsIHF1YWwgYmVjYXVzZSB0aGUgd2luZG93IGZ1bmN0aW9uCisgKiB3 aWxsIHVzZSB0aGUgcnVuIGNvbmRpdGlvbiB0byBzdG9wIGF0IHRoZSByaWdodCB0aW1lLgorICov CitzdGF0aWMgYm9vbAorY2hlY2tfYW5kX3B1c2hfd2luZG93X3F1YWxzKFF1ZXJ5ICpzdWJxdWVy eSwgUmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGksCisJCQkJCQkJTm9kZSAqY2xhdXNlKQor eworCU9wRXhwcgkgICAqb3BleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CisJYm9vbAkJa2VlcF9v cmlnaW5hbCA9IHRydWU7CisJVmFyCQkgICAqdmFyMTsKKwlWYXIJCSAgICp2YXIyOworCisJLyog V2UncmUgb25seSBhYmxlIHRvIHVzZSBPcEV4cHJzIHdpdGggMiBvcGVyYW5kcyAqLworCWlmICgh SXNBKG9wZXhwciwgT3BFeHByKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAobGlzdF9sZW5ndGgo b3BleHByLT5hcmdzKSAhPSAyKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogQ2hlY2sgZm9y IHBsYWluIFZhcnMgdGhhdCByZWZlcmVuY2Ugd2luZG93IGZ1bmN0aW9ucyBpbiB0aGUgc3VicXVl cnkuCisJICogSWYgd2UgZmluZCBhbnksIHdlJ2xsIGFzayBmaW5kX3dpbmRvd19ydW5fY29uZGl0 aW9ucygpIGlmICdvcGV4cHInIGNhbgorCSAqIGJlIHVzZWQgYXMgYSBydW4gY29uZGl0aW9uLgor CSAqLworCisJLyogQ2hlY2sgdGhlIGxlZnQgc2lkZSBvZiB0aGUgT3BFeHByICovCisJdmFyMSA9 IGxpbml0aWFsKG9wZXhwci0+YXJncyk7CisJaWYgKElzQSh2YXIxLCBWYXIpICYmIHZhcjEtPnZh cmF0dG5vID4gMCkKKwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSBsaXN0X250aChzdWJxdWVyeS0+ dGFyZ2V0TGlzdCwgdmFyMS0+dmFyYXR0bm8gLSAxKTsKKwkJV2luZG93RnVuYyAqd2Z1bmMgPSAo V2luZG93RnVuYyAqKSB0bGUtPmV4cHI7CisKKwkJaWYgKGZpbmRfd2luZG93X3J1bl9jb25kaXRp b25zKHN1YnF1ZXJ5LCBydGUsIHJ0aSwgdGxlLT5yZXNubywgd2Z1bmMsCisJCQkJCQkJCQkgICBv cGV4cHIsIHRydWUsICZrZWVwX29yaWdpbmFsKSkKKwkJCXJldHVybiBrZWVwX29yaWdpbmFsOwor CX0KKworCS8qIGFuZCBjaGVjayB0aGUgcmlnaHQgc2lkZSAqLworCXZhcjIgPSBsc2Vjb25kKG9w ZXhwci0+YXJncyk7CisJaWYgKElzQSh2YXIyLCBWYXIpICYmIHZhcjItPnZhcmF0dG5vID4gMCkK Kwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSBsaXN0X250aChzdWJxdWVyeS0+dGFyZ2V0TGlzdCwg dmFyMi0+dmFyYXR0bm8gLSAxKTsKKwkJV2luZG93RnVuYyAqd2Z1bmMgPSAoV2luZG93RnVuYyAq KSB0bGUtPmV4cHI7CisKKwkJaWYgKGZpbmRfd2luZG93X3J1bl9jb25kaXRpb25zKHN1YnF1ZXJ5 LCBydGUsIHJ0aSwgdGxlLT5yZXNubywgd2Z1bmMsCisJCQkJCQkJCQkgICBvcGV4cHIsIGZhbHNl LCAma2VlcF9vcmlnaW5hbCkpCisJCQlyZXR1cm4ga2VlcF9vcmlnaW5hbDsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIHNldF9zdWJxdWVyeV9wYXRobGlzdAogICoJCUdlbmVyYXRl IFN1YnF1ZXJ5U2NhbiBhY2Nlc3MgcGF0aHMgZm9yIGEgc3VicXVlcnkgUlRFCkBAIC0yMjQ1LDE5 ICsyNTI0LDI5IEBAIHNldF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQlmb3JlYWNoKGwsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbykKIAkJewog CQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGwpOworCQkJ Tm9kZQkgICAqY2xhdXNlID0gKE5vZGUgKikgcmluZm8tPmNsYXVzZTsKIAogCQkJaWYgKCFyaW5m by0+cHNldWRvY29uc3RhbnQgJiYKIAkJCQlxdWFsX2lzX3B1c2hkb3duX3NhZmUoc3VicXVlcnks IHJ0aSwgcmluZm8sICZzYWZldHlJbmZvKSkKIAkJCXsKLQkJCQlOb2RlCSAgICpjbGF1c2UgPSAo Tm9kZSAqKSByaW5mby0+Y2xhdXNlOwotCiAJCQkJLyogUHVzaCBpdCBkb3duICovCiAJCQkJc3Vi cXVlcnlfcHVzaF9xdWFsKHN1YnF1ZXJ5LCBydGUsIHJ0aSwgY2xhdXNlKTsKIAkJCX0KIAkJCWVs c2UKIAkJCXsKLQkJCQkvKiBLZWVwIGl0IGluIHRoZSB1cHBlciBxdWVyeSAqLwotCQkJCXVwcGVy cmVzdHJpY3RsaXN0ID0gbGFwcGVuZCh1cHBlcnJlc3RyaWN0bGlzdCwgcmluZm8pOworCQkJCS8q CisJCQkJICogU2luY2Ugd2UgY2FuJ3QgcHVzaCB0aGUgcXVhbCBkb3duIGludG8gdGhlIHN1YnF1 ZXJ5LCBjaGVjaworCQkJCSAqIGlmIGl0IGhhcHBlbnMgdG8gcmVmZXJlbmNlIGEgd2luZG93IGZ1 bmN0aW9uLiAgSWYgc28gdGhlbgorCQkJCSAqIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byB1c2UgZm9y IHRoZSBXaW5kb3dBZ2cncyBydW5Db25kaXRpb24uCisJCQkJICovCisJCQkJaWYgKGNoZWNrX2Fu ZF9wdXNoX3dpbmRvd19xdWFscyhzdWJxdWVyeSwgcnRlLCBydGksIGNsYXVzZSkpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBJdCdzIG5vdCBhIHN1aXRhYmxlIHdpbmRvdyBydW4gY29uZGl0aW9u IHF1YWwgb3IgaXQgaXMsCisJCQkJCSAqIGJ1dCB0aGUgb3JpZ2luYWwgbXVzdCBhbHNvIGJlIGtl cHQgaW4gdGhlIHVwcGVyIHF1ZXJ5LgorCQkJCQkgKi8KKwkJCQkJdXBwZXJyZXN0cmljdGxpc3Qg PSBsYXBwZW5kKHVwcGVycmVzdHJpY3RsaXN0LCByaW5mbyk7CisJCQkJfQogCQkJfQogCQl9CiAJ CXJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IHVwcGVycmVzdHJpY3RsaXN0OwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDE3OWM4N2M2NzEuLjcwN2ZjODg4ZTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTI4OCw3ICsyODgsOCBA QCBzdGF0aWMgV2luZG93QWdnICptYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwgSW5kZXggd2lu cmVmLAogCQkJCQkJCQkgaW50IGZyYW1lT3B0aW9ucywgTm9kZSAqc3RhcnRPZmZzZXQsIE5vZGUg KmVuZE9mZnNldCwKIAkJCQkJCQkJIE9pZCBzdGFydEluUmFuZ2VGdW5jLCBPaWQgZW5kSW5SYW5n ZUZ1bmMsCiAJCQkJCQkJCSBPaWQgaW5SYW5nZUNvbGwsIGJvb2wgaW5SYW5nZUFzYywgYm9vbCBp blJhbmdlTnVsbHNGaXJzdCwKLQkJCQkJCQkJIFBsYW4gKmxlZnR0cmVlKTsKKwkJCQkJCQkJIExp c3QgKnJ1bkNvbmRpdGlvbiwgTGlzdCAqcnVuQ29uZGl0aW9uT3JpZywKKwkJCQkJCQkJIGJvb2wg dXNlUGFzc1Rocm91Z2gsIFBsYW4gKmxlZnR0cmVlKTsKIHN0YXRpYyBHcm91cCAqbWFrZV9ncm91 cChMaXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwgaW50IG51bUdyb3VwQ29scywKIAkJCQkJCSBBdHRy TnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0b3JzLCBPaWQgKmdycENvbGxhdGlvbnMs CiAJCQkJCQkgUGxhbiAqbGVmdHRyZWUpOwpAQCAtMjY0Miw2ICsyNjQzLDkgQEAgY3JlYXRlX3dp bmRvd2FnZ19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBXaW5kb3dBZ2dQYXRoICpiZXN0X3BhdGgp CiAJCQkJCQkgIHdjLT5pblJhbmdlQ29sbCwKIAkJCQkJCSAgd2MtPmluUmFuZ2VBc2MsCiAJCQkJ CQkgIHdjLT5pblJhbmdlTnVsbHNGaXJzdCwKKwkJCQkJCSAgd2MtPnJ1bkNvbmRpdGlvbiwKKwkJ CQkJCSAgd2MtPnJ1bkNvbmRpdGlvbk9yaWcsCisJCQkJCQkgIGJlc3RfcGF0aC0+dXNlcGFzc3Ro cm91Z2gsCiAJCQkJCQkgIHN1YnBsYW4pOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxh bi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsKQEAgLTY1MjcsNyArNjUzMSw4IEBAIG1ha2Vf d2luZG93YWdnKExpc3QgKnRsaXN0LCBJbmRleCB3aW5yZWYsCiAJCQkgICBpbnQgZnJhbWVPcHRp b25zLCBOb2RlICpzdGFydE9mZnNldCwgTm9kZSAqZW5kT2Zmc2V0LAogCQkJICAgT2lkIHN0YXJ0 SW5SYW5nZUZ1bmMsIE9pZCBlbmRJblJhbmdlRnVuYywKIAkJCSAgIE9pZCBpblJhbmdlQ29sbCwg Ym9vbCBpblJhbmdlQXNjLCBib29sIGluUmFuZ2VOdWxsc0ZpcnN0LAotCQkJICAgUGxhbiAqbGVm dHRyZWUpCisJCQkgICBMaXN0ICpydW5Db25kaXRpb24sIExpc3QgKnJ1bkNvbmRpdGlvbk9yaWcs CisJCQkgICBib29sIHVzZVBhc3NUaHJvdWdoLCBQbGFuICpsZWZ0dHJlZSkKIHsKIAlXaW5kb3dB Z2cgICpub2RlID0gbWFrZU5vZGUoV2luZG93QWdnKTsKIAlQbGFuCSAgICpwbGFuID0gJm5vZGUt PnBsYW47CkBAIC02NTQ0LDExICs2NTQ5LDE0IEBAIG1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0 LCBJbmRleCB3aW5yZWYsCiAJbm9kZS0+ZnJhbWVPcHRpb25zID0gZnJhbWVPcHRpb25zOwogCW5v ZGUtPnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CiAJbm9kZS0+ZW5kT2Zmc2V0ID0gZW5kT2Zm c2V0OworCW5vZGUtPnJ1bkNvbmRpdGlvbiA9IHJ1bkNvbmRpdGlvbjsKKwlub2RlLT5ydW5Db25k aXRpb25PcmlnID0gcnVuQ29uZGl0aW9uT3JpZzsKIAlub2RlLT5zdGFydEluUmFuZ2VGdW5jID0g c3RhcnRJblJhbmdlRnVuYzsKIAlub2RlLT5lbmRJblJhbmdlRnVuYyA9IGVuZEluUmFuZ2VGdW5j OwogCW5vZGUtPmluUmFuZ2VDb2xsID0gaW5SYW5nZUNvbGw7CiAJbm9kZS0+aW5SYW5nZUFzYyA9 IGluUmFuZ2VBc2M7CiAJbm9kZS0+aW5SYW5nZU51bGxzRmlyc3QgPSBpblJhbmdlTnVsbHNGaXJz dDsKKwlub2RlLT51c2VQYXNzVGhyb3VnaCA9IHVzZVBhc3NUaHJvdWdoOwogCiAJcGxhbi0+dGFy Z2V0bGlzdCA9IHRsaXN0OwogCXBsYW4tPmxlZnR0cmVlID0gbGVmdHRyZWU7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggNTQ3ZmRhMjBhMi4uNjViY2JmOWRmOSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDIxNCw2ICs0MjE0LDcgQEAgY3JlYXRl X29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJTGlzdAkgICAqd2luZG93X3Bh dGhrZXlzOwogCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKIAkJYm9vbAkJaXNfc29ydGVkOworCQli b29sCQl1c2VwYXNzdGhyb3VnaDsKIAogCQl3aW5kb3dfcGF0aGtleXMgPSBtYWtlX3BhdGhrZXlz X2Zvcl93aW5kb3cocm9vdCwKIAkJCQkJCQkJCQkJCSAgIHdjLApAQCAtNDI3NywxMCArNDI3OCwy NSBAQCBjcmVhdGVfb25lX3dpbmRvd19wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJd2luZG93 X3RhcmdldCA9IG91dHB1dF90YXJnZXQ7CiAJCX0KIAorCQkvKgorCQkgKiBEZXRlcm1pbmUgdGhl IHBhc3MtdGhyb3VnaCBtb2RlIGZvciB0aGUgV2luZG93QWdnLiAgVGhpcyBvbmx5IGhhcworCQkg KiBhbiBlZmZlY3Qgd2hlbiB0aGUgV2luZG93QWdnIGhhcyBhIHJ1bkNvbmRpdGlvbi4gIEluIGFs bCBjYXNlcywKKwkJICogYWxsIGFwYXJ0IGZyb20gdGhlIHRvcC1sZXZlbCBXaW5kb3dBZ2cgbXVz dCBydW4gaW4gcGFzcy10aHJvdWdoCisJCSAqIG1vZGUuICBUaGlzIG1lYW5zIGl0IHdpbGwgY29u dGludWUgdG8gcHVsbCB0dXBsZXMgZnJvbSB0aGUgc3VicGxhbgorCQkgKiBldmVuIHdoZW4gdGhl IHJ1bkNvbmRpdGlvbiBpcyBubyBsb25nZXIgdHJ1ZS4gIFdoZW4gdGhlcmUgaXMgbm8KKwkJICog UEFSVElUSU9OIEJZIGNsYXVzZSwgdGhlIHRvcC1sZXZlbCBXaW5kb3dBZ2cgY2FuIG9wZXJhdGUg d2l0aG91dAorCQkgKiBwYXNzLXRocm91Z2ggbW9kZS4gIFRoaXMgYWxsb3dzIHRoZSBXaW5kb3dB Z2cgdG8gcmV0dXJuIE5VTEwgdG8KKwkJICogaW5kaWNhdGUgdGhlcmUgYXJlIG5vIG1vcmUgdHVw bGVzLiAgSG93ZXZlciwgd2hlbiB0aGVyZSBpcyBhCisJCSAqIFBBUlRJVElPTiBCWSBjbGF1c2Ug dGhpcyBpcyBub3QgcG9zc2libGUgYXMgd2Ugc3RpbGwgbmVlZCB0bworCQkgKiBwcm9jZXNzIG90 aGVyIHBhcnRpdGlvbnMuCisJCSAqLworCQl1c2VwYXNzdGhyb3VnaCA9IHdjLT5wYXJ0aXRpb25D bGF1c2UgIT0gTklMIHx8CisJCQkJCQkgZm9yZWFjaF9jdXJyZW50X2luZGV4KGwpIDwgbGlzdF9s ZW5ndGgoYWN0aXZlV2luZG93cykgLSAxOworCiAJCXBhdGggPSAoUGF0aCAqKQogCQkJY3JlYXRl X3dpbmRvd2FnZ19wYXRoKHJvb3QsIHdpbmRvd19yZWwsIHBhdGgsIHdpbmRvd190YXJnZXQsCiAJ CQkJCQkJCSAgd2ZsaXN0cy0+d2luZG93RnVuY3Nbd2MtPndpbnJlZl0sCi0JCQkJCQkJCSAgd2Mp OworCQkJCQkJCQkgIHdjLCB1c2VwYXNzdGhyb3VnaCk7CiAJfQogCiAJYWRkX3BhdGgod2luZG93 X3JlbCwgcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRy ZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggYmY0Yzcy MmMwMi4uZWNmYTQ4MzZhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAt NzEsNiArNzEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlkb3VibGUJCW51bV9leGVjOwogfSBmaXhf dXBwZXJfZXhwcl9jb250ZXh0OwogCit0eXBlZGVmIHN0cnVjdAoreworCVBsYW5uZXJJbmZvICpy b290OworCWluZGV4ZWRfdGxpc3QgKnN1YnBsYW5faXRsaXN0OworCWludAkJCW5ld3Zhcm5vOwor fSBmaXhfd2luZG93YWdnX2NvbmRfY29udGV4dDsKKwogLyoKICAqIFNlbGVjdGluZyB0aGUgYmVz dCBhbHRlcm5hdGl2ZSBpbiBhbiBBbHRlcm5hdGl2ZVN1YlBsYW4gZXhwcmVzc2lvbiByZXF1aXJl cwogICogZXN0aW1hdGluZyBob3cgbWFueSB0aW1lcyB0aGF0IGV4cHJlc3Npb24gd2lsbCBiZSBl dmFsdWF0ZWQuICBGb3IgYW4KQEAgLTE3Miw2ICsxNzksOSBAQCBzdGF0aWMgTGlzdCAqc2V0X3Jl dHVybmluZ19jbGF1c2VfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJ IFBsYW4gKnRvcHBsYW4sCiAJCQkJCQkJCQkJCSBJbmRleCByZXN1bHRSZWxhdGlvbiwKIAkJCQkJ CQkJCQkJIGludCBydG9mZnNldCk7CitzdGF0aWMgTGlzdCAqc2V0X3dpbmRvd2FnZ19ydW5jb25k aXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCSAgIExpc3Qg KnJ1bmNvbmRpdGlvbiwKKwkJCQkJCQkJCQkJCSAgIFBsYW4gKnBsYW4pOwogCiAKIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgpAQCAtODg2LDYgKzg5NiwxOCBAQCBzZXRfcGxhbl9yZWZzKFBsYW5uZXJJ bmZvICpyb290LCBQbGFuICpwbGFuLCBpbnQgcnRvZmZzZXQpCiAJCQl7CiAJCQkJV2luZG93QWdn ICAqd3BsYW4gPSAoV2luZG93QWdnICopIHBsYW47CiAKKwkJCQkvKgorCQkJCSAqIEFkanVzdCB0 aGUgV2luZG93QWdnJ3MgcnVuIGNvbmRpdGlvbnMgc28gdGhhdCBpbnN0ZWFkIG9mCisJCQkJICog dGhlIGV4cHJlc3Npb25zIGhhdmluZyB0byByZS1ldmFsdWF0ZSB0aGUgV2luZG93RnVuY3MgYWxs CisJCQkJICogb3ZlciBhZ2Fpbiwgc3dhcCB0aGUgV2luZG93RnVuYyByZWZlcmVuY2VzIG91dCBm b3IgVmFycworCQkJCSAqIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlIHRoZSBWYXIgaW4gdGhlIHNs b3QgdGhhdCB0aGUgcmVzdWx0CisJCQkJICogb2YgdGhlIFdpbmRvd0Z1bmMgZXZhbHVhdGlvbiB3 aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3JlZAorCQkJCSAqIGludG8gd2hlbiB0aGUgZXhlY3V0 b3IgZXZhbHVhdGVzIHRoZSBydW5Db25kaXRpb24uCisJCQkJICovCisJCQkJd3BsYW4tPnJ1bkNv bmRpdGlvbiA9IHNldF93aW5kb3dhZ2dfcnVuY29uZGl0aW9uX3JlZmVyZW5jZXMocm9vdCwKKwkJ CQkJCQkJCQkJCQkJCQkJCQl3cGxhbi0+cnVuQ29uZGl0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJ CShQbGFuICopIHdwbGFuKTsKKwogCQkJCXNldF91cHBlcl9yZWZlcmVuY2VzKHJvb3QsIHBsYW4s IHJ0b2Zmc2V0KTsKIAogCQkJCS8qCkBAIC04OTcsNiArOTE5LDE0IEBAIHNldF9wbGFuX3JlZnMo UGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sIGludCBydG9mZnNldCkKIAkJCQkJZml4X3Nj YW5fZXhwcihyb290LCB3cGxhbi0+c3RhcnRPZmZzZXQsIHJ0b2Zmc2V0LCAxKTsKIAkJCQl3cGxh bi0+ZW5kT2Zmc2V0ID0KIAkJCQkJZml4X3NjYW5fZXhwcihyb290LCB3cGxhbi0+ZW5kT2Zmc2V0 LCBydG9mZnNldCwgMSk7CisJCQkJd3BsYW4tPnJ1bkNvbmRpdGlvbiA9IGZpeF9zY2FuX2xpc3Qo cm9vdCwKKwkJCQkJCQkJCQkJCQl3cGxhbi0+cnVuQ29uZGl0aW9uLAorCQkJCQkJCQkJCQkJCXJ0 b2Zmc2V0LAorCQkJCQkJCQkJCQkJCU5VTV9FWEVDX1RMSVNUKHBsYW4pKTsKKwkJCQl3cGxhbi0+ cnVuQ29uZGl0aW9uT3JpZyA9IGZpeF9zY2FuX2xpc3Qocm9vdCwKKwkJCQkJCQkJCQkJCQkJd3Bs YW4tPnJ1bkNvbmRpdGlvbk9yaWcsCisJCQkJCQkJCQkJCQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJ CQkJCQlOVU1fRVhFQ19UTElTVChwbGFuKSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX1Jl c3VsdDoKQEAgLTMwNTAsNiArMzA4MCw3OCBAQCBzZXRfcmV0dXJuaW5nX2NsYXVzZV9yZWZlcmVu Y2VzKFBsYW5uZXJJbmZvICpyb290LAogCXJldHVybiBybGlzdDsKIH0KIAorLyoKKyAqIGZpeF93 aW5kb3dhZ2dfY29uZGl0aW9uX2V4cHJfbXV0YXRvcgorICoJCU11dGF0b3IgZnVuY3Rpb24gZm9y IHJlcGxhY2luZyBXaW5kb3dGdW5jcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIFZhcgorICoJCWlu IHRoZSB0YXJnZXRsaXN0IHdoaWNoIHJlZmVyZW5jZXMgdGhhdCBXaW5kb3dGdW5jLgorICovCitz dGF0aWMgTm9kZSAqCitmaXhfd2luZG93YWdnX2NvbmRpdGlvbl9leHByX211dGF0b3IoTm9kZSAq bm9kZSwKKwkJCQkJCQkJCSBmaXhfd2luZG93YWdnX2NvbmRfY29udGV4dCAqY29udGV4dCkKK3sK KwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChJc0Eobm9kZSwgV2lu ZG93RnVuYykpCisJeworCQlWYXIJCSAgICpuZXd2YXI7CisKKwkJbmV3dmFyID0gc2VhcmNoX2lu ZGV4ZWRfdGxpc3RfZm9yX25vbl92YXIoKEV4cHIgKikgbm9kZSwKKwkJCQkJCQkJCQkJCSAgY29u dGV4dC0+c3VicGxhbl9pdGxpc3QsCisJCQkJCQkJCQkJCQkgIGNvbnRleHQtPm5ld3Zhcm5vKTsK KwkJaWYgKG5ld3ZhcikKKwkJCXJldHVybiAoTm9kZSAqKSBuZXd2YXI7CisJCWVsb2coRVJST1Is ICJXaW5kb3dGdW5jIG5vdCBmb3VuZCBpbiBzdWJwbGFuIHRhcmdldCBsaXN0cyIpOworCX0KKwor CXJldHVybiBleHByZXNzaW9uX3RyZWVfbXV0YXRvcihub2RlLAorCQkJCQkJCQkgICBmaXhfd2lu ZG93YWdnX2NvbmRpdGlvbl9leHByX211dGF0b3IsCisJCQkJCQkJCSAgICh2b2lkICopIGNvbnRl eHQpOworfQorCisvKgorICogZml4X3dpbmRvd2FnZ19jb25kaXRpb25fZXhwcgorICoJCUNvbnZl cnRzIHJlZmVyZW5jZXMgaW4gJ3J1bmNvbmRpdGlvbicgc28gdGhhdCBhbnkgV2luZG93RnVuYwor ICoJCXJlZmVyZW5jZXMgYXJlIHN3YXBwZWQgb3V0IGZvciBhIFZhciB3aGljaCByZWZlcmVuY2Vz IHRoZSBtYXRjaGluZworICoJCVdpbmRvd0Z1bmMgaW4gJ3N1YnBsYW5faXRsaXN0Jy4KKyAqLwor c3RhdGljIExpc3QgKgorZml4X3dpbmRvd2FnZ19jb25kaXRpb25fZXhwcihQbGFubmVySW5mbyAq cm9vdCwKKwkJCQkJCQkgTGlzdCAqcnVuY29uZGl0aW9uLAorCQkJCQkJCSBpbmRleGVkX3RsaXN0 ICpzdWJwbGFuX2l0bGlzdCkKK3sKKwlmaXhfd2luZG93YWdnX2NvbmRfY29udGV4dCBjb250ZXh0 OworCisJY29udGV4dC5yb290ID0gcm9vdDsKKwljb250ZXh0LnN1YnBsYW5faXRsaXN0ID0gc3Vi cGxhbl9pdGxpc3Q7CisJY29udGV4dC5uZXd2YXJubyA9IDA7CisKKwlyZXR1cm4gKExpc3QgKikg Zml4X3dpbmRvd2FnZ19jb25kaXRpb25fZXhwcl9tdXRhdG9yKChOb2RlICopIHJ1bmNvbmRpdGlv biwKKwkJCQkJCQkJCQkJCQkJICZjb250ZXh0KTsKK30KKworLyoKKyAqIHNldF93aW5kb3dhZ2df cnVuY29uZGl0aW9uX3JlZmVyZW5jZXMKKyAqCQlDb252ZXJ0cyByZWZlcmVuY2VzIGluICdydW5j b25kaXRpb24nIHNvIHRoYXQgYW55IFdpbmRvd0Z1bmMKKyAqCQlyZWZlcmVuY2VzIGFyZSBzd2Fw cGVkIG91dCBmb3IgYSBWYXIgd2hpY2ggcmVmZXJlbmNlcyB0aGUgbWF0Y2hpbmcKKyAqCQlXaW5k b3dGdW5jIGluICdwbGFuJyB0YXJnZXRsaXN0LgorICovCitzdGF0aWMgTGlzdCAqCitzZXRfd2lu ZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJ CQkJICBMaXN0ICpydW5jb25kaXRpb24sCisJCQkJCQkJCQkgIFBsYW4gKnBsYW4pCit7CisJTGlz dAkgICAqbmV3bGlzdDsKKwlpbmRleGVkX3RsaXN0ICppdGxpc3Q7CisKKwlpdGxpc3QgPSBidWls ZF90bGlzdF9pbmRleChwbGFuLT50YXJnZXRsaXN0KTsKKworCW5ld2xpc3QgPSBmaXhfd2luZG93 YWdnX2NvbmRpdGlvbl9leHByKHJvb3QsIHJ1bmNvbmRpdGlvbiwgaXRsaXN0KTsKKworCXBmcmVl KGl0bGlzdCk7CisKKwlyZXR1cm4gbmV3bGlzdDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiAgKgkJCQkJUVVFUlkgREVQRU5ERU5DWSBNQU5BR0VNRU5UCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYwppbmRleCA5OWRmNzZiNmI3Li44ZGE3MTc5YzUzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTMzOTgsNyArMzM5OCw4IEBAIGNyZWF0ZV93aW5k b3dhZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICBQYXRoICpzdWJwYXRoLAogCQkJ CQkgIFBhdGhUYXJnZXQgKnRhcmdldCwKIAkJCQkJICBMaXN0ICp3aW5kb3dGdW5jcywKLQkJCQkJ ICBXaW5kb3dDbGF1c2UgKndpbmNsYXVzZSkKKwkJCQkJICBXaW5kb3dDbGF1c2UgKndpbmNsYXVz ZSwKKwkJCQkJICBib29sIHVzZXBhc3N0aHJvdWdoKQogewogCVdpbmRvd0FnZ1BhdGggKnBhdGhu b2RlID0gbWFrZU5vZGUoV2luZG93QWdnUGF0aCk7CiAKQEAgLTM0MTYsNiArMzQxNyw3IEBAIGNy ZWF0ZV93aW5kb3dhZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAogCXBhdGhub2RlLT5zdWJw YXRoID0gc3VicGF0aDsKIAlwYXRobm9kZS0+d2luY2xhdXNlID0gd2luY2xhdXNlOworCXBhdGhu b2RlLT51c2VwYXNzdGhyb3VnaCA9IHVzZXBhc3N0aHJvdWdoOwogCiAJLyoKIAkgKiBGb3IgY29z dGluZyBwdXJwb3NlcywgYXNzdW1lIHRoYXQgdGhlcmUgYXJlIG5vIHJlZHVuZGFudCBwYXJ0aXRp b25pbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvaW50OC5jCmluZGV4IDRhODcxMTRhNGYuLmYxMDBjOWY0ZWMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2ludDguYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3N1cHBvcnRu b2Rlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAKIHR5cGVkZWYg c3RydWN0CkBAIC03OTEsNiArNzkyLDcgQEAgaW50OGRlYyhQR19GVU5DVElPTl9BUkdTKQogfQog CiAKKwogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhhY3RseSBsaWtlIGludDhpbmMvaW50 OGRlYyBidXQgYXJlIHVzZWQgZm9yCiAgKiBhZ2dyZWdhdGVzIHRoYXQgY291bnQgb25seSBub24t bnVsbCB2YWx1ZXMuICBTaW5jZSB0aGUgZnVuY3Rpb25zIGFyZQpAQCAtODE4LDYgKzgyMCw0OSBA QCBpbnQ4ZGVjX2FueShQR19GVU5DVElPTl9BUkdTKQogCXJldHVybiBpbnQ4ZGVjKGZjaW5mbyk7 CiB9CiAKKy8qCisgKiBpbnQ4aW5jX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZv ciBpbnQ4aW5jKCkgYW5kIGludDhpbmNfYW55KCkKKyAqLworRGF0dW0KK2ludDhpbmNfc3VwcG9y dChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dF VEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0V0Z1bmNN b25vdG9uaWMpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqcmVxID0gKFN1 cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKikgcmF3cmVxOworCQlNb25vdG9uaWNGdW5jdGlv biBtb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX05PTkU7CisJCWludAkJCWZyYW1lT3B0aW9ucyA9 IHJlcS0+d2luZG93X2NsYXVzZS0+ZnJhbWVPcHRpb25zOworCisJCS8qIE5vIE9SREVSIEJZIGNs YXVzZSB0aGVuIGFsbCByb3dzIGFyZSBwZWVycyAqLworCQlpZiAocmVxLT53aW5kb3dfY2xhdXNl LT5vcmRlckNsYXVzZSA9PSBOSUwpCisJCQltb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX0JPVEg7 CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSB0YWtlIGludG8gYWNjb3VudCB0 aGUgZnJhbWUgb3B0aW9ucy4gIFdoZW4gdGhlIGZyYW1lCisJCQkgKiBib3VuZCBpcyB0aGUgc3Rh cnQgb2YgdGhlIHdpbmRvdyB0aGVuIHRoZSByZXN1bHRpbmcgdmFsdWUgY2FuCisJCQkgKiBuZXZl ciBkZWNyZWFzZSwgdGhlcmVmb3JlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZworCQkJICov CisJCQlpZiAoZnJhbWVPcHRpb25zICYgRlJBTUVPUFRJT05fU1RBUlRfVU5CT1VOREVEX1BSRUNF RElORykKKwkJCQltb25vdG9uaWMgfD0gTU9OT1RPTklDRlVOQ19JTkNSRUFTSU5HOworCisJCQkv KgorCQkJICogTGlrZXdpc2UsIGlmIHRoZSBmcmFtZSBib3VuZCBpcyB0aGUgZW5kIG9mIHRoZSB3 aW5kb3cgdGhlbiB0aGUKKwkJCSAqIHJlc3VsdGluZyB2YWx1ZSBjYW4gbmV2ZXIgZGVjcmVhc2Uu CisJCQkgKi8KKwkJCWlmIChmcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElPTl9FTkRfVU5CT1VOREVE X0ZPTExPV0lORykKKwkJCQltb25vdG9uaWMgfD0gTU9OT1RPTklDRlVOQ19ERUNSRUFTSU5HOwor CQl9CisKKwkJcmVxLT5tb25vdG9uaWMgPSBtb25vdG9uaWM7CisJCVBHX1JFVFVSTl9QT0lOVEVS KHJlcSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisKIAogRGF0dW0KIGlu dDhsYXJnZXIoUEdfRlVOQ1RJT05fQVJHUykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC93aW5kb3dmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMK aW5kZXggM2UwY2M5YmUxYS4uNTk2NTY0ZmExNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3dpbmRvd2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1 bmNzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgogI2luY2x1ZGUgIndpbmRvd2FwaS5oIgogCkBAIC04OCw2ICs4OSwyNiBAQCB3aW5kb3dfcm93 X251bWJlcihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChjdXJwb3MgKyAxKTsK IH0KIAorLyoKKyAqIHdpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1 bmN0aW9uIGZvciB3aW5kb3dfcm93X251bWJlcigpCisgKi8KK0RhdHVtCit3aW5kb3dfcm93X251 bWJlcl9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5v ZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJl cXVlc3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3Rvbmlj ICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKSByYXdyZXE7CisKKwkJLyog cm93X251bWJlcigpIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyAqLworCQlyZXEtPm1vbm90 b25pYyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORzsKKwkJUEdfUkVUVVJOX1BPSU5URVIocmVx KTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KIAogLyoKICAqIHJhbmsKQEAg LTExMCw2ICsxMzEsMjcgQEAgd2luZG93X3JhbmsoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fSU5UNjQoY29udGV4dC0+cmFuayk7CiB9CiAKKy8qCisgKiB3aW5kb3dfcmFua19zdXBwb3J0 CisgKgkJcHJvc3VwcG9ydCBmdW5jdGlvbiBmb3Igd2luZG93X3JhbmsoKQorICovCitEYXR1bQor d2luZG93X3Jhbmtfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3Jl cSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEsIFN1 cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RXRnVuY01v bm90b25pYyAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKikgcmF3cmVxOwor CisJCS8qIHJhbmsoKSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgKi8KKwkJcmVxLT5tb25v dG9uaWMgPSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkc7CisJCVBHX1JFVFVSTl9QT0lOVEVSKHJl cSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisKIC8qCiAgKiBkZW5zZV9y YW5rCiAgKiBSYW5rIGluY3JlYXNlcyBieSAxIHdoZW4ga2V5IGNvbHVtbnMgY2hhbmdlLgpAQCAt MTMwLDYgKzE3MiwyNyBAQCB3aW5kb3dfZGVuc2VfcmFuayhQR19GVU5DVElPTl9BUkdTKQogCVBH X1JFVFVSTl9JTlQ2NChjb250ZXh0LT5yYW5rKTsKIH0KIAorLyoKKyAqIHdpbmRvd19kZW5zZV9y YW5rX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3aW5kb3dfZGVuc2VfcmFu aygpCisgKi8KK0RhdHVtCit3aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0KFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7 CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYykpCisJewor CQlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVu Y01vbm90b25pYyAqKSByYXdyZXE7CisKKwkJLyogZGVuc2VfcmFuaygpIGlzIG1vbm90b25pY2Fs bHkgaW5jcmVhc2luZyAqLworCQlyZXEtPm1vbm90b25pYyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVB U0lORzsKKwkJUEdfUkVUVVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRF UihOVUxMKTsKK30KKwogLyoKICAqIHBlcmNlbnRfcmFuawogICogcmV0dXJuIGZyYWN0aW9uIGJl dHdlZW4gMCBhbmQgMSBpbmNsdXNpdmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwMWUx ZGQ0ZDZkLi5iMjA2NmViYjRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTY2NDcsMTEg KzY2NDcsMTYgQEAKICMgY291bnQgaGFzIHR3byBmb3JtczogY291bnQoYW55KSBhbmQgY291bnQo KikKIHsgb2lkID0+ICcyMTQ3JywKICAgZGVzY3IgPT4gJ251bWJlciBvZiBpbnB1dCByb3dzIGZv ciB3aGljaCB0aGUgaW5wdXQgZXhwcmVzc2lvbiBpcyBub3QgbnVsbCcsCi0gIHByb25hbWUgPT4g J2NvdW50JywgcHJva2luZCA9PiAnYScsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9 PiAnaW50OCcsCi0gIHByb2FyZ3R5cGVzID0+ICdhbnknLCBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9k dW1teScgfSwKKyAgcHJvbmFtZSA9PiAnY291bnQnLCBwcm9zdXBwb3J0ID0+ICdpbnQ4aW5jX3N1 cHBvcnQnLCBwcm9raW5kID0+ICdhJywKKyAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBl ID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2FueScsCisgIHByb3NyYyA9PiAnYWdncmVnYXRl X2R1bW15JyB9LAogeyBvaWQgPT4gJzI4MDMnLCBkZXNjciA9PiAnbnVtYmVyIG9mIGlucHV0IHJv d3MnLAotICBwcm9uYW1lID0+ICdjb3VudCcsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9 PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludDgnLAotICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3Jj ID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCisgIHByb25hbWUgPT4gJ2NvdW50JywgcHJvc3VwcG9y dCA9PiAnaW50OGluY19zdXBwb3J0JywgcHJva2luZCA9PiAnYScsCisgIHByb2lzc3RyaWN0ID0+ ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9zcmMg PT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sgb2lkID0+ICc4ODAyJywgZGVzY3IgPT4gJ3BsYW5u ZXIgc3VwcG9ydCBmb3IgY291bnQgcnVuIGNvbmRpdGlvbicsCisgIHByb25hbWUgPT4gJ2ludDhp bmNfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4g J2ludGVybmFsJywgcHJvc3JjID0+ICdpbnQ4aW5jX3N1cHBvcnQnIH0sCiAKIHsgb2lkID0+ICcy NzE4JywKICAgZGVzY3IgPT4gJ3BvcHVsYXRpb24gdmFyaWFuY2Ugb2YgYmlnaW50IGlucHV0IHZh bHVlcyAoc3F1YXJlIG9mIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiknLApAQCAt MTAxNTUsMTQgKzEwMTYwLDI2IEBACiAKICMgU1FMLXNwZWMgd2luZG93IGZ1bmN0aW9ucwogeyBv aWQgPT4gJzMxMDAnLCBkZXNjciA9PiAncm93IG51bWJlciB3aXRoaW4gcGFydGl0aW9uJywKLSAg cHJvbmFtZSA9PiAncm93X251bWJlcicsIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAn ZicsCi0gIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ ICd3aW5kb3dfcm93X251bWJlcicgfSwKKyAgcHJvbmFtZSA9PiAncm93X251bWJlcicsIHByb3N1 cHBvcnQgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnLAorICBwcm9raW5kID0+ICd3Jywg cHJvaXNzdHJpY3QgPT4gJ2YnLCAgcHJvcmV0dHlwZSA9PiAnaW50OCcsCisgIHByb2FyZ3R5cGVz ID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVyJyB9LAoreyBvaWQgPT4gJzg3OTkn LCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciByb3dfbnVtYmVyIHJ1biBjb25kaXRpb24n LAorICBwcm9uYW1lID0+ICd3aW5kb3dfcm93X251bWJlcl9zdXBwb3J0JywgcHJvcmV0dHlwZSA9 PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3dp bmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzEwMScsIGRlc2NyID0+ICdp bnRlZ2VyIHJhbmsgd2l0aCBnYXBzJywKLSAgcHJvbmFtZSA9PiAncmFuaycsIHByb2tpbmQgPT4g J3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludDgnLAorICBwcm9uYW1l ID0+ICdyYW5rJywgcHJvc3VwcG9ydCA9PiAnd2luZG93X3Jhbmtfc3VwcG9ydCcsCisgIHByb2tp bmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludDgnLAogICBw cm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3aW5kb3dfcmFuaycgfSwKK3sgb2lkID0+ICc4 ODAwJywgZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgcmFuayBydW4gY29uZGl0aW9uJywK KyAgcHJvbmFtZSA9PiAnd2luZG93X3Jhbmtfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVy bmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICd3aW5kb3dfcmFu a19zdXBwb3J0JyB9LAogeyBvaWQgPT4gJzMxMDInLCBkZXNjciA9PiAnaW50ZWdlciByYW5rIHdp dGhvdXQgZ2FwcycsCi0gIHByb25hbWUgPT4gJ2RlbnNlX3JhbmsnLCBwcm9raW5kID0+ICd3Jywg cHJvaXNzdHJpY3QgPT4gJ2YnLAotICBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMg PT4gJycsIHByb3NyYyA9PiAnd2luZG93X2RlbnNlX3JhbmsnIH0sCisgIHByb25hbWUgPT4gJ2Rl bnNlX3JhbmsnLCBwcm9zdXBwb3J0ID0+ICd3aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0JywKKyAg cHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcs IHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9zcmMgPT4gJ3dpbmRvd19kZW5zZV9yYW5rJyB9LAor eyBvaWQgPT4gJzg4MDEnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBkZW5zZSByYW5r IHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0 JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwn LCBwcm9zcmMgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzEw MycsIGRlc2NyID0+ICdmcmFjdGlvbmFsIHJhbmsgd2l0aGluIHBhcnRpdGlvbicsCiAgIHByb25h bWUgPT4gJ3BlcmNlbnRfcmFuaycsIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZics CiAgIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4g J3dpbmRvd19wZXJjZW50X3JhbmsnIH0sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGNiYmNmZjgx ZDIuLjcwYzg4YjM0NWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0yNDA2LDYgKzI0MDYsMTYg QEAgdHlwZWRlZiBzdHJ1Y3QgQWdnU3RhdGUKIHR5cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVy RnVuY0RhdGEgKldpbmRvd1N0YXRlUGVyRnVuYzsKIHR5cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRl UGVyQWdnRGF0YSAqV2luZG93U3RhdGVQZXJBZ2c7CiAKKy8qCisgKiBXaW5kb3dBZ2dTdGF0dXMg LS0gVXNlZCB0byB0cmFjayB0aGUgc3RhdHVzIG9mIFdpbmRvd0FnZ1N0YXRlCisgKi8KK3R5cGVk ZWYgZW51bSBXaW5kb3dBZ2dTdGF0dXMKK3sKKwlXSU5ET1dBR0dfRE9ORSwKKwlXSU5ET1dBR0df UlVOLAorCVdJTkRPV0FHR19QQVNTVEhST1VHSAorfSBXaW5kb3dBZ2dTdGF0dXM7CisKIHR5cGVk ZWYgc3RydWN0IFdpbmRvd0FnZ1N0YXRlCiB7CiAJU2NhblN0YXRlCXNzOwkJCQkvKiBpdHMgZmly c3QgZmllbGQgaXMgTm9kZVRhZyAqLwpAQCAtMjQzMiw2ICsyNDQyLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgV2luZG93QWdnU3RhdGUKIAlzdHJ1Y3QgV2luZG93T2JqZWN0RGF0YSAqYWdnX3dpbm9iajsJ Lyogd2lub2JqIGZvciBhZ2dyZWdhdGUgZmV0Y2hlcyAqLwogCWludDY0CQlhZ2dyZWdhdGVkYmFz ZTsgLyogc3RhcnQgcm93IGZvciBjdXJyZW50IGFnZ3JlZ2F0ZXMgKi8KIAlpbnQ2NAkJYWdncmVn YXRlZHVwdG87IC8qIHJvd3MgYmVmb3JlIHRoaXMgb25lIGFyZSBhZ2dyZWdhdGVkICovCisJV2lu ZG93QWdnU3RhdHVzCQlzdGF0dXM7IC8qIHJ1biBzdGF0dXMgb2YgV2luZG93QWdnU3RhdGUgKi8K IAogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMsIHNlZSBXaW5k b3dEZWYgKi8KIAlFeHByU3RhdGUgICpzdGFydE9mZnNldDsJLyogZXhwcmVzc2lvbiBmb3Igc3Rh cnRpbmcgYm91bmQgb2Zmc2V0ICovCkBAIC0yNDU4LDggKzI0NjksMTUgQEAgdHlwZWRlZiBzdHJ1 Y3QgV2luZG93QWdnU3RhdGUKIAlNZW1vcnlDb250ZXh0IGN1cmFnZ2NvbnRleHQ7CS8qIGN1cnJl bnQgYWdncmVnYXRlJ3Mgd29ya2luZyBkYXRhICovCiAJRXhwckNvbnRleHQgKnRtcGNvbnRleHQ7 CS8qIHNob3J0LXRlcm0gZXZhbHVhdGlvbiBjb250ZXh0ICovCiAKKwlFeHByU3RhdGUgICpydW5j b25kaXRpb247CS8qIENvbmRpdGlvbiB3aGljaCBtdXN0IHJlbWFpbiB0cnVlIG90aGVyd2lzZQor CQkJCQkJCQkgKiBleGVjdXRpb24gb2YgdGhlIFdpbmRvd0FnZyB3aWxsIGZpbmlzaCBvcgorCQkJ CQkJCQkgKiBnbyBpbnRvIHBhc3MtdGhyb3VnaCBtb2RlLiAgTlVMTCB3aGVuIHRoZXJlCisJCQkJ CQkJCSAqIGlzIG5vIHN1Y2ggY29uZGl0aW9uLiAqLworCisJYm9vbAkJdXNlX3Bhc3NfdGhyb3Vn aDsJLyogV2hlbiBmYWxzZSwgc3RvcCBleGVjdXRpb24gd2hlbgorCQkJCQkJCQkJICogcnVuY29u ZGl0aW9uIGlzIG5vIGxvbmdlciB0cnVlLiAgRWxzZQorCQkJCQkJCQkJICoganVzdCBzdG9wIGV2 YWx1YXRpbmcgd2luZG93IGZ1bmNzLiAqLwogCWJvb2wJCWFsbF9maXJzdDsJCS8qIHRydWUgaWYg dGhlIHNjYW4gaXMgc3RhcnRpbmcgKi8KLQlib29sCQlhbGxfZG9uZTsJCS8qIHRydWUgaWYgdGhl IHNjYW4gaXMgZmluaXNoZWQgKi8KIAlib29sCQlwYXJ0aXRpb25fc3Bvb2xlZDsJLyogdHJ1ZSBp ZiBhbGwgdHVwbGVzIGluIGN1cnJlbnQgcGFydGl0aW9uCiAJCQkJCQkJCQkgKiBoYXZlIGJlZW4g c3Bvb2xlZCBpbnRvIHR1cGxlc3RvcmUgKi8KIAlib29sCQltb3JlX3BhcnRpdGlvbnM7CS8qIHRy dWUgaWYgdGhlcmUncyBtb3JlIHBhcnRpdGlvbnMgYWZ0ZXIKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGU4ZjMw MzY3YTQuLmQyNjAxZTExN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNTQ0LDcgKzU0NCw4IEBAIHR5cGVk ZWYgZW51bSBOb2RlVGFnCiAJVF9TdXBwb3J0UmVxdWVzdFNlbGVjdGl2aXR5LAkvKiBpbiBub2Rl cy9zdXBwb3J0bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RDb3N0LAkJLyogaW4gbm9kZXMv c3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0Um93cywJCS8qIGluIG5vZGVzL3N1 cHBvcnRub2Rlcy5oICovCi0JVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uCS8qIGluIG5v ZGVzL3N1cHBvcnRub2Rlcy5oICovCisJVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uLCAv KiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLworCVRfU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90 b25pYwkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwogfSBOb2RlVGFnOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDZiZjIxMmIwMWEuLjQ4MTQ1MjViNTMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKQEAgLTE0MDIsNiArMTQwMiw4IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd0Ns YXVzZQogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMsIHNlZSBX aW5kb3dEZWYgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNldDsJLyogZXhwcmVzc2lvbiBmb3Igc3Rh cnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAgKmVuZE9mZnNldDsJCS8qIGV4cHJlc3Np b24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCisJTGlzdAkgICAqcnVuQ29uZGl0aW9uOwkv KiBFdmFsdWF0ZSBXaW5kb3dGdW5jcyB3aGlsZSB0aGlzIGlzIHRydWUgKi8KKwlMaXN0CSAgICpy dW5Db25kaXRpb25PcmlnOwkvKiBFWFBMQUlOIGNvbXBhdGlibGUgdmVyc2lvbiBvZiBhYm92ZSAq LwogCU9pZAkJCXN0YXJ0SW5SYW5nZUZ1bmM7CS8qIGluX3JhbmdlIGZ1bmN0aW9uIGZvciBzdGFy dE9mZnNldCAqLwogCU9pZAkJCWVuZEluUmFuZ2VGdW5jOyAvKiBpbl9yYW5nZSBmdW5jdGlvbiBm b3IgZW5kT2Zmc2V0ICovCiAJT2lkCQkJaW5SYW5nZUNvbGw7CS8qIGNvbGxhdGlvbiBmb3IgaW5f cmFuZ2UgdGVzdHMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMzY1MDAwYmRjZC4uZTU5NjJj OWY3ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE4MzMsNiArMTgzMyw4IEBAIHR5cGVkZWYg c3RydWN0IFdpbmRvd0FnZ1BhdGgKIAlQYXRoCQlwYXRoOwogCVBhdGgJICAgKnN1YnBhdGg7CQkv KiBwYXRoIHJlcHJlc2VudGluZyBpbnB1dCBzb3VyY2UgKi8KIAlXaW5kb3dDbGF1c2UgKndpbmNs YXVzZTsJLyogV2luZG93Q2xhdXNlIHdlJ2xsIGJlIHVzaW5nICovCisJYm9vbAkJdXNlcGFzc3Ro cm91Z2g7CS8qIHVzZSAicGFzcy10aHJvdWdoIiBtb2RlIHdoZW4gd2luY2xhdXNlJ3MKKwkJCQkJ CQkJICogcnVuQ29uZGl0aW9uIGJlY29tZXMgZmFsc2UgKi8KIH0gV2luZG93QWdnUGF0aDsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggNTBlZjNkZGEwNS4uOThkZDc5YTZiZCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGxhbm5vZGVzLmgKQEAgLTkxNCwxMiArOTE0LDE4IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRv d0FnZwogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMsIHNlZSBX aW5kb3dEZWYgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNldDsJLyogZXhwcmVzc2lvbiBmb3Igc3Rh cnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAgKmVuZE9mZnNldDsJCS8qIGV4cHJlc3Np b24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCisJTGlzdAkgICAqcnVuQ29uZGl0aW9uOwkv KiBDb25kaXRpb25zIHRoYXQgbXVzdCByZW1haW4gdHJ1ZSBpbiBvcmRlcgorCQkJCQkJCQkgKiBm b3IgV2luZG93RnVuYyBldmFsdWF0aW9uIHRvIGNvbnRpbnVlICovCisJTGlzdAkgICAqcnVuQ29u ZGl0aW9uT3JpZzsJLyogcnVuQ29uZGl0aW9uIGZvciBkaXNwbGF5IGluIEVYUExBSU4gKi8KIAkv KiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgd2l0aCBSQU5HRSBvZmZzZXQgUFJFQ0VESU5HL0ZPTExP V0lORzogKi8KIAlPaWQJCQlzdGFydEluUmFuZ2VGdW5jOwkvKiBpbl9yYW5nZSBmdW5jdGlvbiBm b3Igc3RhcnRPZmZzZXQgKi8KIAlPaWQJCQllbmRJblJhbmdlRnVuYzsgLyogaW5fcmFuZ2UgZnVu Y3Rpb24gZm9yIGVuZE9mZnNldCAqLwogCU9pZAkJCWluUmFuZ2VDb2xsOwkvKiBjb2xsYXRpb24g Zm9yIGluX3JhbmdlIHRlc3RzICovCiAJYm9vbAkJaW5SYW5nZUFzYzsJCS8qIHVzZSBBU0Mgc29y dCBvcmRlciBmb3IgaW5fcmFuZ2UgdGVzdHM/ICovCiAJYm9vbAkJaW5SYW5nZU51bGxzRmlyc3Q7 CS8qIG51bGxzIHNvcnQgZmlyc3QgZm9yIGluX3JhbmdlIHRlc3RzPyAqLworCWJvb2wJCXVzZVBh c3NUaHJvdWdoOwkvKiBHbyBpbnRvIHBhc3MtdGhyb3VnaCBtb2RlIHdoZW4gcnVuQ29uZGl0aW9u CisJCQkJCQkJCSAqIGlzIG5vdCBsb25nZXIgdHJ1ZS4gIFdoZW4gZmFsc2UsIHdlIGp1c3QKKwkJ CQkJCQkJICogc3RvcCBleGVjdXRpb24gKi8KIH0gV2luZG93QWdnOwogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCkBAIC0xMzEyLDQgKzEzMTgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbkludmFsSXRl bQogCXVpbnQzMgkJaGFzaFZhbHVlOwkJLyogaGFzaCB2YWx1ZSBvZiBvYmplY3QncyBjYWNoZSBs b29rdXAga2V5ICovCiB9IFBsYW5JbnZhbEl0ZW07CiAKKy8qCisgKiBNb25vdG9uaWNGdW5jdGlv bgorICoKKyAqIEFsbG93cyB0aGUgcGxhbm5lciB0byB0cmFjayBtb25vdG9uaWMgcHJvcGVydGll cyBvZiBmdW5jdGlvbnMuICBBIGZ1bmN0aW9uCisgKiBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNp bmcgaWYgYSBzdWJzZXF1ZW50IGNhbGwgY2Fubm90IHlpZWxkIGEgbG93ZXIgdmFsdWUKKyAqIHRo YW4gdGhlIHByZXZpb3VzIGNhbGwuICBBIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBmdW5jdGlv biBjYW5ub3QgeWllbGQgYQorICogaGlnaGVyIHZhbHVlIG9uIHN1YnNlcXVlbnQgY2FsbHMsIGFu ZCBhIGZ1bmN0aW9uIHdoaWNoIGlzIGJvdGggbXVzdCByZXR1cm4KKyAqIHRoZSBzYW1lIHZhbHVl IG9uIGVhY2ggY2FsbC4KKyAqLwordHlwZWRlZiBlbnVtIE1vbm90b25pY0Z1bmN0aW9uCit7CisJ TU9OT1RPTklDRlVOQ19OT05FID0gMCwKKwlNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcgPSAoMSA8 PCAwKSwKKwlNT05PVE9OSUNGVU5DX0RFQ1JFQVNJTkcgPSAoMSA8PCAxKSwKKwlNT05PVE9OSUNG VU5DX0JPVEggPSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcgfCBNT05PVE9OSUNGVU5DX0RFQ1JF QVNJTkcKK30gTW9ub3RvbmljRnVuY3Rpb247CisKICNlbmRpZgkJCQkJCQkvKiBQTEFOTk9ERVNf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAppbmRleCA4OGI2MWIzYWIzLi5iZGQ0M2ZjNjE0 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaApAQCAtMzMsMTIgKzMzLDEyIEBACiAjaWZuZGVm IFNVUFBPUlROT0RFU19ICiAjZGVmaW5lIFNVUFBPUlROT0RFU19ICiAKLSNpbmNsdWRlICJub2Rl cy9wcmltbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKIAogc3RydWN0IFBs YW5uZXJJbmZvOwkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGF0aG5vZGVzLmggaGVyZSAqLwogc3Ry dWN0IEluZGV4T3B0SW5mbzsKIHN0cnVjdCBTcGVjaWFsSm9pbkluZm87Ci0KK3N0cnVjdCBXaW5k b3dDbGF1c2U7CiAKIC8qCiAgKiBUaGUgU2ltcGxpZnkgcmVxdWVzdCBhbGxvd3MgdGhlIHN1cHBv cnQgZnVuY3Rpb24gdG8gcGVyZm9ybSBwbGFuLXRpbWUKQEAgLTIzOSw0ICsyMzksNjQgQEAgdHlw ZWRlZiBzdHJ1Y3QgU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbgogCQkJCQkJCQkgKiBlcXVp dmFsZW50IG9mIHRoZSBmdW5jdGlvbiBjYWxsICovCiB9IFN1cHBvcnRSZXF1ZXN0SW5kZXhDb25k aXRpb247CiAKKy8qIC0tLS0tLS0tLS0KKyAqIFRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGV4ZWN1 dGlvbiBvZiBhbnkgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGFuZC9vcgorICogbW9ub3Rvbmlj YWxseSBkZWNyZWFzaW5nIHdpbmRvdyBmdW5jdGlvbnMsIHdlIHN1cHBvcnQgY2FsbGluZyB0aGUg d2luZG93CisgKiBmdW5jdGlvbidzIHByb3N1cHBvcnQgZnVuY3Rpb24gcGFzc2luZyBhbG9uZyB0 aGlzIHN0cnVjdCB3aGVuZXZlciB0aGUKKyAqIHBsYW5uZXIgc2VlcyBhbiBPcEV4cHIgcXVhbCBk aXJlY3RseSByZWZlcmVuY2UgYSB3aW5kb3cgZnVuY3Rpb24gaW4gYQorICogc3VicXVlcnkuICBX aGVuIHRoZSBwbGFubmVyIGVuY291bnRlcnMgdGhpcywgd2UgcG9wdWxhdGUgdGhpcyBzdHJ1Y3Qg YW5kCisgKiBwYXNzIGl0IGFsb25nIHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBwb3J0 IGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuCisgKiBldmFsdWF0ZSBpZiB0aGUgZ2l2ZW4gV2luZG93 RnVuYyBpczsKKyAqCisgKiBhKSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIG9yCisgKiBiKSBt b25vdG9uaWNhbGx5IGRlY3JlYXNpbmcsIG9yCisgKiBjKSBib3RoIG1vbm90b25pY2FsbHkgaW5j cmVhc2luZyBhbmQgZGVjcmVhc2luZywgb3IKKyAqIGQpIG5vbmUgb2YgdGhlIGFib3ZlLgorICoK KyAqIEEgZnVuY3Rpb24gdGhhdCBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgY2FuIG5ldmVy IHJldHVybiBhIHZhbHVlIHRoYXQKKyAqIGlzIGxvd2VyIHRoYW4gYSB2YWx1ZSByZXR1cm5lZCBp biBhICJwcmV2aW91cyBjYWxsIi4gIEEgbW9ub3RvbmljYWxseQorICogZGVjcmVhc2luZyBmdW5j dGlvbiBjYW4gbmV2ZXIgcmV0dXJuIGEgdmFsdWUgaGlnaGVyIHRoYW4gYSB2YWx1ZSByZXR1cm5l ZAorICogaW4gYSBwcmV2aW91cyBjYWxsLiAgQSBmdW5jdGlvbiB0aGF0IGlzIGJvdGggbXVzdCBy ZXR1cm4gdGhlIHNhbWUgdmFsdWUKKyAqIGVhY2ggdGltZS4KKyAqCisgKiBXZSBkZWZpbmUgInBy ZXZpb3VzIGNhbGwiIHRvIG1lYW4gYSBwcmV2aW91cyBjYWxsIHRvIHRoZSBzYW1lIFdpbmRvd0Z1 bmMKKyAqIHN0cnVjdCBpbiB0aGUgc2FtZSB3aW5kb3cgcGFydGl0aW9uLgorICoKKyAqIHJvd19u dW1iZXIoKSBpcyBhbiBleGFtcGxlIG9mIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGZ1bmN0 aW9uLiAgVGhlCisgKiByZXR1cm4gdmFsdWUgd2lsbCBiZSByZXNldCBiYWNrIHRvIDEgaW4gZWFj aCBuZXcgcGFydGl0aW9uLiAgQW4gZXhhbXBsZSBvZgorICogYSBtb25vdG9uaWNhbGx5IGluY3Jl YXNpbmcgYW5kIGRlY3JlYXNpbmcgZnVuY3Rpb24gaXMgQ09VTlQoKikgT1ZFUiAoKS4KKyAqIFNp bmNlIHRoZXJlIGlzIG5vIE9SREVSIEJZIGNsYXVzZSBpbiB0aGlzIGV4YW1wbGUsIGFsbCByb3dz IGluIHRoZQorICogcGFydGl0aW9uIGFyZSBwZWVycyBhbmQgYWxsIHJvd3Mgd2l0aGluIHRoZSBw YXJ0aXRpb24gd2lsbCBiZSB3aXRoaW4gdGhlCisgKiBmcmFtZSBib3VuZC4gIExpa2V3aXNlIGZv ciBDT1VOVCgqKSBPVkVSKE9SREVSIEJZIGEgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRAorICogUFJF Q0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKS4KKyAqCisgKiBDT1VOVCgqKSBPVkVSIChP UkRFUiBCWSBhIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RykKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZnVuY3Rp b24uCisgKgorICogSW1wbGVtZW50YXRpb25zIG11c3Qgb25seSBjb25jZXJuIHRoZW1zZWx2ZXMg d2l0aCB0aGUgZ2l2ZW4gV2luZG93RnVuYworICogYmVpbmcgbW9ub3RvbmljIGluIGEgc2luZ2xl IHBhcnRpdGlvbi4KKyAqCisgKiBJbnB1dHM6CisgKgknd2luZG93X2Z1bmMnIGlzIHRoZSBwb2lu dGVyIHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLgorICoKKyAqCSd3aW5kb3df Y2xhdXNlJyBwb2ludGVyIHRvIHRoZSBXaW5kb3dDbGF1c2UgZGF0YS4gIFN1cHBvcnQgZnVuY3Rp b25zIGNhbgorICoJdXNlIHRoaXMgdG8gY2hlY2sgZnJhbWUgYm91bmRzLCBldGMuCisgKgorICog T3V0cHV0czoKKyAqCSdtb25vdG9uaWMnIHRoZSByZXN1bHRpbmcgTW9ub3RvbmljRnVuY3Rpb24g dmFsdWUgZm9yIHRoZSBnaXZlbiBpbnB1dAorICoJd2luZG93IGZ1bmN0aW9uIGFuZCB3aW5kb3cg Y2xhdXNlLgorICogLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBTdXBwb3J0UmVxdWVz dFdGdW5jTW9ub3RvbmljCit7CisJTm9kZVRhZwkJdHlwZTsKKworCS8qIElucHV0IGZpZWxkczog Ki8KKwlXaW5kb3dGdW5jICp3aW5kb3dfZnVuYzsJLyogUG9pbnRlciB0byB0aGUgd2luZG93IGZ1 bmN0aW9uIGRhdGEgKi8KKwlzdHJ1Y3QgV2luZG93Q2xhdXNlICp3aW5kb3dfY2xhdXNlOyAvKiBQ b2ludGVyIHRvIHRoZSB3aW5kb3cgY2xhdXNlIGRhdGEgKi8KKworCS8qIE91dHB1dCBmaWVsZHM6 ICovCisJTW9ub3RvbmljRnVuY3Rpb24gbW9ub3RvbmljOworfSBTdXBwb3J0UmVxdWVzdFdGdW5j TW9ub3RvbmljOworCiAjZW5kaWYJCQkJCQkJLyogU1VQUE9SVE5PREVTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKaW5kZXggNmVjYTU0N2FmOC4uYzQ0OWI4ZWE4OCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKQEAgLTI0NSw3ICsyNDUsOCBAQCBleHRlcm4gV2luZG93QWdnUGF0aCAq Y3JlYXRlX3dpbmRvd2FnZ19wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlQYXRo ICpzdWJwYXRoLAogCQkJCQkJCQkJCQlQYXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJCQkJCUxp c3QgKndpbmRvd0Z1bmNzLAotCQkJCQkJCQkJCQlXaW5kb3dDbGF1c2UgKndpbmNsYXVzZSk7CisJ CQkJCQkJCQkJCVdpbmRvd0NsYXVzZSAqd2luY2xhdXNlLAorCQkJCQkJCQkJCQlib29sIHVzZXBh c3N0aHJvdWdoKTsKIGV4dGVybiBTZXRPcFBhdGggKmNyZWF0ZV9zZXRvcF9wYXRoKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJUGF0aCAqc3Vi cGF0aCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAppbmRleCBiYjlmZjdmMDdiLi40 YjIyMDgwZDEzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CkBAIC0zMzM2LDYg KzMzMzYsMzY1IEBAIFdIRVJFIGRlcG5hbWUgPSAnc2FsZXMnOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQogKDkgcm93cykKIAorLS0gVGVzdCB3 aW5kb3cgZnVuY3Rpb24gcnVuIGNvbmRpdGlvbnMgYXJlIHByb3Blcmx5IHB1c2hlZCBkb3duIGlu dG8gdGhlCistLSBXaW5kb3dBZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkg ZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29uZGl0 aW9uOiAocm93X251bWJlcigpIE9WRVIgKD8pIDwgMykKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogZW1wc2FsYXJ5LmVtcG5vCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2Fs YXJ5CisoNSByb3dzKQorCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQgcmVz dWx0IHRoZSBzYW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAg ICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVt cHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgZW1wbm8gfCBybiAKKy0tLS0tLS0rLS0tLQor ICAgICAxIHwgIDEKKyAgICAgMiB8ICAyCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChT RUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5v KSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgMyA+IHJuOworIGVtcG5vIHwgcm4g CistLS0tLS0tKy0tLS0KKyAgICAgMSB8ICAxCisgICAgIDIgfCAgMgorKDIgcm93cykKKworU0VM RUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVS IChPUkRFUiBCWSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDIgPj0g cm47CisgZW1wbm8gfCBybiAKKy0tLS0tLS0rLS0tLQorICAgICAxIHwgIDEKKyAgICAgMiB8ICAy CisoMiByb3dzKQorCistLSBFbnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1 biBjb25kaXRpb24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg cmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkg ZW1wCitXSEVSRSByIDw9IDM7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dB Z2cKKyAgIFJ1biBDb25kaXRpb246IChyYW5rKCkgT1ZFUiAoPykgPD0gMykKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIHJhbmsoKSBPVkVSIChPUkRF UiBCWSBzYWxhcnkgREVTQykgcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgciA8PSAz OworIGVtcG5vIHwgc2FsYXJ5IHwgciAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAg IDYwMDAgfCAxCisgICAgMTAgfCAgIDUyMDAgfCAyCisgICAgMTEgfCAgIDUyMDAgfCAyCisoMyBy b3dzKQorCistLSBFbnN1cmUgZHIgPSAxIGlzIGNvbnZlcnRlZCB0byBkciA8PSAxIHRvIGdldCBh bGwgcm93cyBsZWFkaW5nIHVwIHRvIGRyID0gMQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBk ZW5zZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBkciA9IDE7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGVtcAorICAgRmlsdGVyOiAo ZW1wLmRyID0gMSkKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIFJ1biBDb25kaXRpb246IChk ZW5zZV9yYW5rKCkgT1ZFUiAoPykgPD0gMSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNyByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVS IChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJF IGRyID0gMTsKKyBlbXBubyB8IHNhbGFyeSB8IGRyIAorLS0tLS0tLSstLS0tLS0tLSstLS0tCisg ICAgIDggfCAgIDYwMDAgfCAgMQorKDEgcm93KQorCistLSBDaGVjayBDT1VOVCgpIGFuZCBDT1VO VCgqKQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5v LAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBz YWxhcnkgREVTQykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAgUnVuIENvbmRpdGlv bjogKGNvdW50KCopIE9WRVIgKD8pIDw9IDMpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBL ZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNh bGFyeQorKDUgcm93cykKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAg ICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVT QykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworIGVtcG5vIHwgc2Fs YXJ5IHwgYyAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYwMDAgfCAxCisgICAg MTAgfCAgIDUyMDAgfCAzCisgICAgMTEgfCAgIDUyMDAgfCAzCisoMyByb3dzKQorCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAg c2FsYXJ5LAorICAgICAgICAgIGNvdW50KGVtcG5vKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVT QykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dB Z2cKKyAgIFJ1biBDb25kaXRpb246IChjb3VudChlbXBzYWxhcnkuZW1wbm8pIE9WRVIgKD8pIDw9 IDMpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVT QworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBj b3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2Fs YXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyBlbXBubyB8IHNhbGFyeSB8IGMgCistLS0tLS0tKy0t LS0tLS0tKy0tLQorICAgICA4IHwgICA2MDAwIHwgMQorICAgIDEwIHwgICA1MjAwIHwgMworICAg IDExIHwgICA1MjAwIHwgMworKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBj b3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBS T1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dI RVJFIGMgPj0gMzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cK KyAgIFJ1biBDb25kaXRpb246IChjb3VudCgqKSBPVkVSICg/KSA+PSAzKQorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAg ICAgY291bnQoKikgT1ZFUiAoKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAxMSA8 PSBjOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBS dW4gQ29uZGl0aW9uOiAoMTEgPD0gY291bnQoKikgT1ZFUiAoPykpCisgICAtPiAgU2VxIFNjYW4g b24gZW1wc2FsYXJ5CisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50 KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBjLAorICAgICAgICAgIGRlbnNlX3Jhbmso KSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAK K1dIRVJFIGRyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6IChlbXAuZHIgPSAx KQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgUnVuIENvbmRpdGlvbjogKGRlbnNlX3Jhbmso KSBPVkVSICg/KSA8PSAxKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBlbXBzYWxhcnkKKyg3IHJvd3MpCisKKy0tIEVuc3VyZSB3ZSBnZXQgYSBydW4gY29uZGl0aW9u IHdoZW4gdGhlcmUncyBhIFBBUlRJVElPTiBCWSBjbGF1c2UKKy0tIGFsc28gZW5zdXJlIHRoYXQg dGhlIG9yaWdpbmFsIHF1YWwgcmVtYWlucyBhcyBhIGZpbHRlci4KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBkZXBuYW1lLAor ICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBC WSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwgMzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5ybiA8IDMpCisgICAt PiAgV2luZG93QWdnCisgICAgICAgICBSdW4gQ29uZGl0aW9uOiAocm93X251bWJlcigpIE9WRVIg KD8pIDwgMykKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZW1w c2FsYXJ5LmRlcG5hbWUsIGVtcHNhbGFyeS5lbXBubworICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGVtcHNhbGFyeQorKDcgcm93cykKKworLS0gYW5kIGVuc3VyZSB3ZSBnZXQgdGhlIGNv cnJlY3QgcmVzdWx0cyBmcm9tIHRoZSBhYm92ZSBwbGFuCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgZGVwbmFtZSwKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZF UiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgZW1wbm8gfCAgZGVwbmFtZSAgfCBybiAKKy0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLQorICAgICA3IHwgZGV2ZWxvcCAgIHwgIDEKKyAgICAgOCB8IGRl dmVsb3AgICB8ICAyCisgICAgIDIgfCBwZXJzb25uZWwgfCAgMQorICAgICA1IHwgcGVyc29ubmVs IHwgIDIKKyAgICAgMSB8IHNhbGVzICAgICB8ICAxCisgICAgIDMgfCBzYWxlcyAgICAgfCAgMgor KDYgcm93cykKKworLS0gbGlrZXdpc2Ugd2l0aCBjb3VudChlbXBubykgaW5zdGVhZCBvZiByb3df bnVtYmVyKCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBl bXBubywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBj b3VudChlbXBubykgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgc2FsYXJ5IERF U0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5jIDw9IDMp CisgICAtPiAgV2luZG93QWdnCisgICAgICAgICBSdW4gQ29uZGl0aW9uOiAoY291bnQoZW1wc2Fs YXJ5LmVtcG5vKSBPVkVSICg/KSA8PSAzKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNyByb3dzKQorCistLSBh bmQgYWdhaW4sIGNoZWNrIHRoZSByZXN1bHRzIGFyZSB3aGF0IHdlIGV4cGVjdC4KK1NFTEVDVCAq IEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHNh bGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUg T1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMg PD0gMzsKKyBlbXBubyB8ICBkZXBuYW1lICB8IHNhbGFyeSB8IGMgCistLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLQorICAgICA4IHwgZGV2ZWxvcCAgIHwgICA2MDAwIHwgMQorICAgIDEw IHwgZGV2ZWxvcCAgIHwgICA1MjAwIHwgMworICAgIDExIHwgZGV2ZWxvcCAgIHwgICA1MjAwIHwg MworICAgICAyIHwgcGVyc29ubmVsIHwgICAzOTAwIHwgMQorICAgICA1IHwgcGVyc29ubmVsIHwg ICAzNTAwIHwgMgorICAgICAxIHwgc2FsZXMgICAgIHwgICA1MDAwIHwgMQorICAgICA0IHwgc2Fs ZXMgICAgIHwgICA0ODAwIHwgMworICAgICAzIHwgc2FsZXMgICAgIHwgICA0ODAwIHwgMworKDgg cm93cykKKworLS0gVGVzdHMgdG8gZW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB0aGUgcnVuIGNv bmRpdGlvbiB3aGVuIGl0J3Mgbm90IHZhbGlkIHRvCistLSBkbyBzby4KKy0tIEVuc3VyZSB3ZSBk b24ndCBwdXNoIGRvd24gd2hlbiB0aGUgZnJhbWUgb3B0aW9ucyBzaG93IHRoYXQgdGhlIHdpbmRv dworLS0gZnVuY3Rpb24gaXMgbm90IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNh bGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dT IEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6IChlbXAuYyA8 PSAzKQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisKKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNoIGRv d24gd2hlbiB0aGUgd2luZG93IGZ1bmN0aW9uJ3MgbW9ub3RvbmljIHByb3BlcnRpZXMKKy0tIGRv bid0IG1hdGNoIHRoYXQgb2YgdGhlIGNsYXVzZXMuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAg IGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSkgYworICAgRlJPTSBlbXBzYWxhcnkpIGVt cAorV0hFUkUgMyA8PSBjOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVy eSBTY2FuIG9uIGVtcAorICAgRmlsdGVyOiAoMyA8PSBlbXAuYykKKyAgIC0+ICBXaW5kb3dBZ2cK KyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNh bGFyeQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDYgcm93cykK KworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2hkb3duIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdp bmRvdyBjbGF1c2VzIHRvIGV2YWx1YXRlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50 KCopIE9WRVIgKE9SREVSIEJZIGVtcG5vIERFU0MpIGMsCisgICAgICAgICAgZGVuc2VfcmFuaygp IE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAor V0hFUkUgZHIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAK KyAgIEZpbHRlcjogKGVtcC5kciA9IDEpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5lbXBubyBERVNDCisgICAg ICAgICAgICAgICAtPiAgV2luZG93QWdnCisgICAgICAgICAgICAgICAgICAgICBSdW4gQ29uZGl0 aW9uOiAoZGVuc2VfcmFuaygpIE9WRVIgKD8pIDw9IDEpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5z YWxhcnkgREVTQworICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVt cHNhbGFyeQorKDEwIHJvd3MpCisKIC0tIFRlc3QgU29ydCBub2RlIGNvbGxhcHNpbmcKIEVYUExB SU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3dpbmRvdy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4 IDQxYThlMGQxNTIuLjgzZGI4YTQyMDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3dpbmRvdy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbApAQCAtOTg4 LDYgKzk4OCwxOTIgQEAgU0VMRUNUICogRlJPTQogICAgRlJPTSBlbXBzYWxhcnkpIGVtcAogV0hF UkUgZGVwbmFtZSA9ICdzYWxlcyc7CiAKKy0tIFRlc3Qgd2luZG93IGZ1bmN0aW9uIHJ1biBjb25k aXRpb25zIGFyZSBwcm9wZXJseSBwdXNoZWQgZG93biBpbnRvIHRoZQorLS0gV2luZG93QWdnCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAg ICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBz YWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50 cyBzaG91bGQgcmVzdWx0IHRoZSBzYW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJu CisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkg ZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzID4gcm47CisKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAo T1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAyID49IHJu OworCistLSBFbnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1biBjb25kaXRp b24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9W RVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSByIDw9IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBz YWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisg ICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7CisKKy0tIEVuc3VyZSBkciA9IDEg aXMgY29udmVydGVkIHRvIGRyIDw9IDEgdG8gZ2V0IGFsbCByb3dzIGxlYWRpbmcgdXAgdG8gZHIg PSAxCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8s CisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBC WSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsK KworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAg ICAgICAgICBkZW5zZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBG Uk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBkciA9IDE7CisKKy0tIENoZWNrIENPVU5UKCkgYW5k IENPVU5UKCopCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1Qg ZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVS IEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7 CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisg ICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAg ICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1w c2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVt cG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JE RVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0g MzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5v LAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBz YWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJ TkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPj0gMzsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNh bGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSICgpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBl bXAKK1dIRVJFIDExIDw9IGM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikg T1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMsCisgICAgICAgICAgZGVuc2VfcmFuaygpIE9W RVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hF UkUgZHIgPSAxOworCistLSBFbnN1cmUgd2UgZ2V0IGEgcnVuIGNvbmRpdGlvbiB3aGVuIHRoZXJl J3MgYSBQQVJUSVRJT04gQlkgY2xhdXNlCistLSBhbHNvIGVuc3VyZSB0aGF0IHRoZSBvcmlnaW5h bCBxdWFsIHJlbWFpbnMgYXMgYSBmaWx0ZXIuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgZGVwbmFtZSwKKyAgICAgICAgICBy b3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIHJu CisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisKKy0tIGFuZCBlbnN1cmUg d2UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdHMgZnJvbSB0aGUgYWJvdmUgcGxhbgorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIGRlcG5hbWUsCisgICAgICAgICAgcm93 X251bWJlcigpIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBybgor ICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworCistLSBsaWtld2lzZSB3aXRo IGNvdW50KGVtcG5vKSBpbnN0ZWFkIG9mIHJvd19udW1iZXIoKQorRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIGRlcG5hbWUsCisg ICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KGVtcG5vKSBPVkVSIChQQVJUSVRJT04g QlkgZGVwbmFtZSBPUkRFUiBCWSBzYWxhcnkgREVTQykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVt cAorV0hFUkUgYyA8PSAzOworCistLSBhbmQgYWdhaW4sIGNoZWNrIHRoZSByZXN1bHRzIGFyZSB3 aGF0IHdlIGV4cGVjdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAg ICBkZXBuYW1lLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZF UiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworLS0gVGVzdHMgdG8gZW5zdXJlIHdlIGRv bid0IHB1c2ggZG93biB0aGUgcnVuIGNvbmRpdGlvbiB3aGVuIGl0J3Mgbm90IHZhbGlkIHRvCist LSBkbyBzby4KKworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB3aGVuIHRoZSBmcmFtZSBv cHRpb25zIHNob3cgdGhhdCB0aGUgd2luZG93CistLSBmdW5jdGlvbiBpcyBub3QgbW9ub3Rvbmlj YWxseSBpbmNyZWFzaW5nCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChT RUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIg KE9SREVSIEJZIHNhbGFyeSBERVNDIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VO REVEIEZPTExPV0lORykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOwor CistLSBFbnN1cmUgd2UgZG9uJ3QgcHVzaCBkb3duIHdoZW4gdGhlIHdpbmRvdyBmdW5jdGlvbidz IG1vbm90b25pYyBwcm9wZXJ0aWVzCistLSBkb24ndCBtYXRjaCB0aGF0IG9mIHRoZSBjbGF1c2Vz LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAor ICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxh cnkpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDMgPD0gYzsKKworLS0gRW5zdXJl IHdlIGRvbid0IHB1c2hkb3duIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdpbmRvdyBjbGF1c2Vz IHRvIGV2YWx1YXRlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9S REVSIEJZIGVtcG5vIERFU0MpIGMsCisgICAgICAgICAgZGVuc2VfcmFuaygpIE9WRVIgKE9SREVS IEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgZHIgPSAx OworCiAtLSBUZXN0IFNvcnQgbm9kZSBjb2xsYXBzaW5nCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBT RUxFQ1QgKiBGUk9NCi0tIAoyLjMyLjAKCg== --000000000000a90dae05db51f4fa--