Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fmzfm-0002Ss-Ml for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Aug 2018 10:57:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fmzfl-0004D5-0L for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Aug 2018 10:57:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fmzfk-0004Cv-Eo for pgsql-hackers@lists.postgresql.org; Tue, 07 Aug 2018 10:57:04 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fmzfY-00049f-Sa for pgsql-hackers@postgresql.org; Tue, 07 Aug 2018 10:57:04 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 7D6BD21C1F34; Tue, 7 Aug 2018 13:56:51 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 066AD21C1F33; Tue, 7 Aug 2018 13:56:50 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1533639411; bh=5zL+DYXcIj8vXi+JSxXFATVG9PP+4aMF4/DAHMDaTkA=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=gbBTOt5edUdY701QESmiYt+BpLjOdXWkBKOL6MyJC5reu2STIWZi9xedD/0VyN2+h qYkZHnp8Hh0Ykvr9GoxzAx94JZFIMbBtpTKI/6e7B1FvOUFDgb91sz0TcjKdXnQGnF qXCsJDx3akkdgM21EJiYMHgd02jFAbc/dbJvqJSQ= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_0fcde9e0009f3dabf741403de401e796" Date: Tue, 07 Aug 2018 13:56:50 +0300 From: Marina Polyakova To: pgsql-hackers@postgresql.org Cc: Fabien COELHO , Alvaro Herrera , Ildus Kurbangaliev , Teodor Sigaev Subject: Re: [HACKERS] WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional In-Reply-To: References: <20180508193621.dphlgwrd5yz67o2z@alvherre.pgsql> <0569c5309cf536a839e2a3a1433bd113@postgrespro.ru> <976a25a46420c93866ada4051976b1be@postgrespro.ru> Message-ID: <25d7b1f518c218a8c335bdfc6c858ea1@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_0fcde9e0009f3dabf741403de401e796 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello, hackers! Here there's a tenth version of the patch for error handling and retrying of transactions with serialization/deadlock failures in pgbench (based on the commit e0ee93053998b159e395deed7c42e02b1f921552) thanks to the comments of Fabien Coelho and Alvaro Herrera in this thread. v10-0001-Pgbench-errors-use-the-RandomState-structure-for.patch - a patch for the RandomState structure (this is used to reset a client's random seed during the repeating of transactions after serialization/deadlock failures). v10-0002-Pgbench-errors-use-a-separate-function-to-report.patch - a patch for a separate error reporting function (this is used to report client failures that do not cause an aborts and this depends on the level of debugging). v10-0003-Pgbench-errors-use-the-Variables-structure-for-c.patch - a patch for the Variables structure (this is used to reset client variables during the repeating of transactions after serialization/deadlock failures). v10-0004-Pgbench-errors-and-serialization-deadlock-retrie.patch - the main patch for handling client errors and repetition of transactions with serialization/deadlock failures (see the detailed description in the file). As Fabien wrote in [5], some of the new tests were too slow. Earlier on my laptop they increased the testing time of pgbench from 5.5 seconds to 12.5 seconds. In the new version the testing time of pgbench takes about 7 seconds. These tests include one test for serialization failure and retry, as well as one test for deadlock failure and retry. Both of them are in file 001_pgbench_with_server.pl, each test uses only one pgbench run, they use PL/pgSQL scripts instead of a parallel psql session. Any suggestions are welcome! All that was fixed from the previous version: [1] https://www.postgresql.org/message-id/alpine.DEB.2.21.1806090810090.5307%40lancre > ISTM that the struct itself does not need a name, ie. "typedef struct { > ... } RandomState" is enough. > There could be clear comments, say in the TState and CState structs, > about > what randomness is impacted (i.e. script choices, etc.). > getZipfianRand, computeHarmonicZipfian: The "thread" parameter was > justified because it was used for two fieds. As the random state is > separated, I'd suggest that the other argument should be a zipfcache > pointer. > While reading your patch, it occurs to me that a run is not > deterministic > at the thread level under throttling and sampling, because the random > state is sollicited differently depending on when transaction ends. > This > suggest that maybe each thread random_state use should have its own > random > state. [2] https://www.postgresql.org/message-id/alpine.DEB.2.21.1806091514060.3655%40lancre > The structure typedef does not need a name. "typedef struct { } V...". > I tend to disagree with naming things after their type, eg "array". I'd > suggest "vars" instead. "nvariables" could be "nvars" for consistency > with > that and "vars_sorted", and because "foo.variables->nvariables" starts > looking heavy. > I'd suggest but "Variables" type declaration just after "Variable" type > declaration in the file. [3] https://www.postgresql.org/message-id/alpine.DEB.2.21.1806100837380.3655%40lancre > The semantics of the existing code is changed, the FATAL levels calls > abort() and replace existing exit(1) calls. Maybe you want an ERROR > level as well. > I do not understand why names are changed, eg ELEVEL_FATAL instead of > FATAL. ISTM that part of the point of the move would be to be > homogeneous, > which suggests that the same names should be reused. [4] https://www.postgresql.org/message-id/alpine.DEB.2.21.1807081014260.17811%40lancre > I'd suggest to have just one clean and simple pgbench internal function > to > handle errors and possibly exit, debug... Something like > > void pgb_error(FATAL, "error %d raised", 12); > > Implemented as > > void pgb_error(int/enum XXX level, const char * format, ...) > { > test level and maybe return immediately (eg debug); > print to stderr; > exit/abort/return depending; > } [5] https://www.postgresql.org/message-id/alpine.DEB.2.21.1807091451520.17811%40lancre > Leves ELEVEL_LOG_CLIENT_{FAIL,ABORTED} & LOG_MAIN look unclear to me. > In particular, the "CLIENT" part is not very useful. If the > distinction makes sense, I would have kept "LOG" for the initial one > and > add other ones for ABORT and PGBENCH, maybe. > * There are no comments about "retries" in StatData, CState and Command > structures. > * Also, for StatData, I would like to understand the logic between cnt, > skipped, retries, retried, errors, ... so a clear information about the > expected invariant if any would be welcome. One has to go in the code > to > understand how these fields relate one to the other. > * "errors_in_failed_tx" is some subcounter of "errors", for a special > case. Why it is there fails me [I finally understood, and I think it > should be removed, see end of review]. If we wanted to distinguish, > then > we should distinguish homogeneously: maybe just count the different > error > types, eg have things like "deadlock_errors", "serializable_errors", > "other_errors", "internal_pgbench_errors" which would be orthogonal one > to > the other, and "errors" could be recomputed from these. > * How "errors" differs from "ecnt" is unclear to me. > * FailureStatus states are not homogeneously named. I'd suggest to use > *_FAILURE for all cases. The miscellaneous case should probably be the > last. > * I do not understand the comments on CState enum: "First, remember the > failure > in CSTATE_FAILURE. Then process other commands of the failed > transaction if any" > Why would other commands be processed at all if the transaction is > aborted? > For me any error must leads to the rollback and possible retry of the > transaction. > ... > So, for me, the FAILURE state should record/count the failure, then > skip > to RETRY if a retry is decided, else proceed to ABORT. Nothing else. > This is much clearer that way. > > Then RETRY should reinstate the global state and proceed to start the > *first* > command again. > * commandFailed: I think that it should be kept much simpler. In > particular, having errors on errors does not help much: on > ELEVEL_FATAL, > it ignores the actual reported error and generates another error of the > same level, so that the initial issue is hidden. Even if these are > can't > happen cases, hidding the origin if it occurs looks unhelpful. Just > print > it directly, and maybe abort if you think that it is a can't happen > case. > * copyRandomState: just use sizeof(RandomState) instead of making > assumptions > about the contents of the struct. Also, this function looks pretty > useless, > why not just do a plain assignment? > * copyVariables: lacks comments to explain that the destination is > cleaned up > and so on. The cleanup phase could probaly be in a distinct function, > so that > the code would be clearer. Maybe the function variable names are too > long. > > if (current_source->svalue) > > in the context of a guard for a strdup, maybe: > > if (current_source->svalue != NULL) > * executeCondition: this hides client automaton state changes which > were > clearly visible beforehand in the switch, and the different handling of > if & elif is also hidden. > > I'm against this unnecessary restructuring and to hide such an > information, > all state changes should be clearly seen in the state switch so that it > is > easier to understand and follow. > > I do not see why touching the conditional stack on internal errors > (evaluateExpr failure) brings anything, the whole transaction will be > aborted > anyway. > The current RETRY state does memory allocations to generate a message > with buffer allocation and so on. This looks like a costly and useless > operation. If the user required "retries", then this is normal > behavior, > the retries are counted and will be printed out in the final report, > and there is no point in printing out every single one of them. > Maybe you want that debugging, but then coslty operations should be > guarded. > The number of transactions above the latency limit report can be > simplified. > Remove the if and just use one printf f with a %s for the optional > comment. > I'm not sure this optional comment is useful there. > Before the patch, ISTM that all lines relied on one printf. you have > changed to a style where a collection of printf is used to compose a > line. > I'd suggest to keep to the previous one-printf-prints-one-line style, > where possible. > You have added 20-columns alignment prints. This looks like too much > and > generates much too large lines. Probably 10 (billion) would be enough. > > Some people try to parse the output, so it should be deterministic. I'd > add > the needed columns always if appropriate (i.e. under retry), even if > none > occured. > * processXactStats: An else is replaced by a detailed stats, with the > initial > "no detailed stats" comment kept. The function is called both in the > thenb > & else branch. The structure does not make sense anymore. I'm not sure > this changed was needed. > * getLatencyUsed: declared "double" so "return 0.0". > * typo: ruin -> run; probably others, I did not check for them in > detail. > On my laptop, tests last 5.5 seconds before the patch, and about 13 > seconds > after. This is much too large. Pgbench TAP tests do not deserve to take > over > twice as much time as before just on this patch. > > One reason which explains this large time is there is a new script with > a > new created instance. I'd suggest to append tests to the existing 2 > scripts, depending on whether they need a running instance or not. > > Secondly, I think that the design of the tests are too heavy. For such > a > feature, ISTM enough to check that it works, i.e. one test for > deadlocks > (trigger one or a few deadlocks), idem for serializable, maybe idem for > other errors if any. > > The challenge is to do that reliably and efficiently, i.e. so that the > test does > not rely on chance and is still quite efficient. > > The trick you use is to run an interactive psql in parallel to pgbench > so as to > play with concurrent locks. That is interesting, but deserves more > comments > and explanatation, eg before the test functions. > > Maybe this could be achieved within pgbench by using some wait stuff in > PL/pgSQL so that concurrent client can wait one another based on data > in > unlogged table updated by a CALL within an "embedded" transactions? Not > sure. ... > > Anyway, TAP tests should be much lighter (in total time), and if > possible > much simpler. > > The latency limit to 900 ms try is a bad idea because it takes a lot of > time. > I did such tests before and they were removed by Tom Lane because of > determinism > and time issues. I would comment this test out for now. > Documentation > ... > Having the "most important settings" on line 1-6 and 8 (i.e. skipping > 7) looks > silly. The important ones should simply be the first ones, and the 8th > is not > that important, or it is in 7th position. > > I do not understand why there is so much text about in failed sql > transaction > stuff, while we are mainly interested in serialization & deadlock > errors, and > this only falls in some "other" category. There seems to be more > details about > other errors that about deadlocks & serializable errors. > > The reporting should focus on what is of interest, either all errors, > or some > detailed split of these errors. The documentation should state clearly > what > are the counted errors, and then what are their effects on the reported > stats. > The "Errors and Serialization/Deadlock Retries" section is a good start > in that > direction, but it does not talk about pgbench internal errors (eg > "cos(true)"). > I think it should more explicit about errors. > > Option --max-tries default value should be spelled out in the doc. [6] https://www.postgresql.org/message-id/alpine.DEB.2.21.1807111435250.27883%40lancre > So if absolutely necessary, a new option is still better than changing > --debug syntax. If not necessary, then it is better:-) > The fact that some data are collected does not mean that they should > all > be reported in detail. We can have detailed error count and report the > sum > of this errors for instance, or have some more verbose/detailed reports > as options (eg --latencies does just that). [7] https://www.postgresql.org/message-id/20180711180417.3ytmmwmonsr5lra7%40alvherre.pgsql > LGTM, though I'd rename the random_state struct members so that it > wouldn't look as confusing. Maybe that's just me. > Please don't allocate Variable structs one by one. First time allocate > some decent number (say 8) and then enlarge by duplicating size. That > way you save realloc overhead. We use this technique everywhere else, > no reason do different here. Other than that, LGTM. [8] https://www.postgresql.org/message-id/alpine.DEB.2.21.1807112124210.27883%40lancre > If you really need some complex dynamic buffer, and I would prefer > that you avoid that, then the fallback is: > > if (level >= DEBUG) > { > initPQstuff(&msg); > ... > pgbench_error(DEBUG, "fixed message... %s\n", msg); > freePQstuff(&msg); > } > > The point is to avoid building the message with dynamic allocation and > so > if in the end it is not used. -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_0fcde9e0009f3dabf741403de401e796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=v10-0001-Pgbench-errors-use-the-RandomState-structure-for.patch Content-Disposition: attachment; filename=v10-0001-Pgbench-errors-use-the-RandomState-structure-for.patch; size=11047 RnJvbSBkNzFhODE1N2I0ODg4MDcyMjA5MmU2ZTc0N2Y2ODRmYjMxZDhkMDE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCA3IEF1ZyAyMDE4IDEzOjI3OjIxICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMS80XSBQZ2JlbmNoIGVycm9yczogdXNlIHRoZSBSYW5kb21TdGF0ZSBzdHJ1Y3R1 cmUgZm9yCiB0aHJlYWQvY2xpZW50IHJhbmRvbSBzZWVkLgoKVGhpcyBpcyBtb3N0IGltcG9ydGFu dCB3aGVuIGl0IGlzIHVzZWQgdG8gcmVzZXQgYSBjbGllbnQncyByYW5kb20gc2VlZCBkdXJpbmcK dGhlIHJlcGVhdGluZyBvZiB0cmFuc2FjdGlvbnMgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZWFkbG9j ayBmYWlsdXJlcy4KClVzZSB0aGUgcmFuZG9tIHN0YXRlIG9mIHRoZSBjbGllbnQgZm9yIHJhbmRv bSBmdW5jdGlvbnMgUEdCRU5DSF9SQU5ET01fKiBkdXJpbmcKdGhlIGV4ZWN1dGlvbiBvZiB0aGUg c2NyaXB0LiBVc2UgdGhlIHJhbmRvbSBzdGF0ZSBvZiB0aGUgZWFjaCB0aHJlYWQgb3B0aW9uICh0 bwpjaG9vc2UgdGhlIHNjcmlwdCAvIGdldCB0aGUgdGhyb3R0bGUgZGVsYXkgLyB0byBsb2cgd2l0 aCBhIHNhbXBsZSByYXRlKSB0byBtYWtlCmFsbCBvZiB0aGVtIGluZGVwZW5kZW50IG9mIGVhY2gg b3RoZXIgYW5kIHRoZXJlZm9yZSBkZXRlcm1pbmlzdGljIGF0IHRoZSB0aHJlYWQKbGV2ZWwuCi0t LQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDEwNCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygr KSwgMzAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu YyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggNDFiNzU2Yy4uOTg4ZTM3YiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCkBAIC0yNTEsNiArMjUxLDE0IEBAIHR5cGVkZWYgc3RydWN0IFN0YXRzRGF0YQog fSBTdGF0c0RhdGE7CiAKIC8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgdGhyZWFkL2NsaWVudCBy YW5kb20gc2VlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1bnNpZ25lZCBzaG9ydCB4c2Vl ZFszXTsKK30gUmFuZG9tU3RhdGU7CisKKy8qCiAgKiBDb25uZWN0aW9uIHN0YXRlIG1hY2hpbmUg c3RhdGVzLgogICovCiB0eXBlZGVmIGVudW0KQEAgLTMzMSw2ICszMzksMTIgQEAgdHlwZWRlZiBz dHJ1Y3QKIAlDb25uZWN0aW9uU3RhdGVFbnVtIHN0YXRlOwkvKiBzdGF0ZSBtYWNoaW5lJ3MgY3Vy cmVudCBzdGF0ZS4gKi8KIAlDb25kaXRpb25hbFN0YWNrIGNzdGFjazsJLyogZW5jbG9zaW5nIGNv bmRpdGlvbmFscyBzdGF0ZSAqLwogCisJLyoKKwkgKiBTZXBhcmF0ZSByYW5kb21uZXNzIGZvciBl YWNoIGNsaWVudC4gVGhpcyBpcyB1c2VkIGZvciByYW5kb20gZnVuY3Rpb25zCisJICogUEdCRU5D SF9SQU5ET01fKiBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0LgorCSAqLworCVJh bmRvbVN0YXRlIHJhbmRvbV9zdGF0ZTsKKwogCWludAkJCXVzZV9maWxlOwkJLyogaW5kZXggaW4g c3FsX3NjcmlwdCBmb3IgdGhpcyBjbGllbnQgKi8KIAlpbnQJCQljb21tYW5kOwkJLyogY29tbWFu ZCBudW1iZXIgaW4gc2NyaXB0ICovCiAKQEAgLTM5MCw3ICs0MDQsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QKIAlwdGhyZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8KIAlDU3RhdGUJICAg KnN0YXRlOwkJCS8qIGFycmF5IG9mIENTdGF0ZSAqLwogCWludAkJCW5zdGF0ZTsJCQkvKiBsZW5n dGggb2Ygc3RhdGVbXSAqLwotCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsgLyogc2Vw YXJhdGUgcmFuZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8KKworCS8qCisJICogU2VwYXJhdGUg cmFuZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQuIEVhY2ggdGhyZWFkIG9wdGlvbiB1c2VzIGl0cyBv d24KKwkgKiByYW5kb20gc3RhdGUgdG8gbWFrZSBhbGwgb2YgdGhlbSBpbmRlcGVuZGVudCBvZiBl YWNoIG90aGVyIGFuZCB0aGVyZWZvcmUKKwkgKiBkZXRlcm1pbmlzdGljIGF0IHRoZSB0aHJlYWQg bGV2ZWwuCisJICovCisJUmFuZG9tU3RhdGUgY2hvb3NlX3NjcmlwdF9yczsJLyogcmFuZG9tIHN0 YXRlIGZvciBzZWxlY3RpbmcgYSBzY3JpcHQgKi8KKwlSYW5kb21TdGF0ZSB0aHJvdHRsaW5nX3Jz OwkvKiByYW5kb20gc3RhdGUgZm9yIHRyYW5zYWN0aW9uIHRocm90dGxpbmcgKi8KKwlSYW5kb21T dGF0ZSBzYW1wbGluZ19yczsJLyogcmFuZG9tIHN0YXRlIGZvciBsb2cgc2FtcGxpbmcgKi8KKwog CWludDY0CQl0aHJvdHRsZV90cmlnZ2VyOwkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVz KSAqLwogCUZJTEUJICAgKmxvZ2ZpbGU7CQkvKiB3aGVyZSB0byBsb2csIG9yIE5VTEwgKi8KIAla aXBmQ2FjaGUJemlwZl9jYWNoZTsJCS8qIGZvciB0aHJlYWQtc2FmZSAgemlwZmlhbiByYW5kb20g bnVtYmVyCkBAIC02OTQsNyArNzE3LDcgQEAgZ290ZGlnaXRzOgogCiAvKiByYW5kb20gbnVtYmVy IGdlbmVyYXRvcjogdW5pZm9ybSBkaXN0cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2 ZSAqLwogc3RhdGljIGludDY0Ci1nZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCkKK2dldHJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLCBp bnQ2NCBtYXgpCiB7CiAJLyoKIAkgKiBPZGQgY29kaW5nIGlzIHNvIHRoYXQgbWluIGFuZCBtYXgg aGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGNoYW5jZSBvZgpAQCAtNzA1LDcgKzcyOCw3IEBA IGdldHJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogCSAqIHByb3Rl Y3RlZCBieSBhIG11dGV4LCBhbmQgdGhlcmVmb3JlIGEgYm90dGxlbmVjayBvbiBtYWNoaW5lcyB3 aXRoIG1hbnkKIAkgKiBDUFVzLgogCSAqLwotCXJldHVybiBtaW4gKyAoaW50NjQpICgobWF4IC0g bWluICsgMSkgKiBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSk7CisJcmV0dXJuIG1p biArIChpbnQ2NCkgKChtYXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT54 c2VlZCkpOwogfQogCiAvKgpAQCAtNzE0LDcgKzczNyw4IEBAIGdldHJhbmQoVFN0YXRlICp0aHJl YWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogICogdmFsdWUgaXMgZXhwKC1wYXJhbWV0ZXIpLgog ICovCiBzdGF0aWMgaW50NjQKLWdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwgaW50 NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCitnZXRFeHBvbmVudGlhbFJhbmQo UmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLCBpbnQ2NCBtYXgsCisJCQkJICAg ZG91YmxlIHBhcmFtZXRlcikKIHsKIAlkb3VibGUJCWN1dCwKIAkJCQl1bmlmb3JtLApAQCAtNzI0 LDcgKzc0OCw3IEBAIGdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWlu LCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAJQXNzZXJ0KHBhcmFtZXRlciA+IDAuMCk7 CiAJY3V0ID0gZXhwKC1wYXJhbWV0ZXIpOwogCS8qIGVyYW5kIGluIFswLCAxKSwgdW5pZm9ybSBp biAoMCwgMV0gKi8KLQl1bmlmb3JtID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9z dGF0ZSk7CisJdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT54c2VlZCk7 CiAKIAkvKgogCSAqIGlubmVyIGV4cHJlc3Npb24gaW4gKGN1dCwgMV0gKGlmIHBhcmFtZXRlciA+ IDApLCByYW5kIGluIFswLCAxKQpAQCAtNzM3LDcgKzc2MSw4IEBAIGdldEV4cG9uZW50aWFsUmFu ZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIp CiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiBnYXVzc2lhbiBkaXN0cmlidXRpb24gZnJv bSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRHYXVzc2lhblJhbmQo VFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQor Z2V0R2F1c3NpYW5SYW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG1pbiwgaW50 NjQgbWF4LAorCQkJCWRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91YmxlCQlzdGRldjsKIAlkb3Vi bGUJCXJhbmQ7CkBAIC03NjUsOCArNzkwLDggQEAgZ2V0R2F1c3NpYW5SYW5kKFRTdGF0ZSAqdGhy ZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIAkJICogYXJlIGV4 cGVjdGVkIGluICgwLCAxXSAoc2VlCiAJCSAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L0JveC1NdWxsZXJfdHJhbnNmb3JtKQogCQkgKi8KLQkJZG91YmxlCQlyYW5kMSA9IDEuMCAtIHBn X2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwotCQlkb3VibGUJCXJhbmQyID0gMS4wIC0g cGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJCWRvdWJsZQkJcmFuZDEgPSAxLjAg LSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOworCQlkb3VibGUJCXJhbmQyID0gMS4w IC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsKIAogCQkvKiBCb3gtTXVsbGVyIGJh c2ljIGZvcm0gdHJhbnNmb3JtICovCiAJCWRvdWJsZQkJdmFyX3NxcnQgPSBzcXJ0KC0yLjAgKiBs b2cocmFuZDEpKTsKQEAgLTc5Myw3ICs4MTgsNyBAQCBnZXRHYXVzc2lhblJhbmQoVFN0YXRlICp0 aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogICogd2lsbCBh cHByb3hpbWF0ZSBhIFBvaXNzb24gZGlzdHJpYnV0aW9uIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiB2 YWx1ZS4KICAqLwogc3RhdGljIGludDY0Ci1nZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVhZCwg aW50NjQgY2VudGVyKQorZ2V0UG9pc3NvblJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwg aW50NjQgY2VudGVyKQogewogCS8qCiAJICogVXNlIGludmVyc2UgdHJhbnNmb3JtIHNhbXBsaW5n IHRvIGdlbmVyYXRlIGEgdmFsdWUgPiAwLCBzdWNoIHRoYXQgdGhlCkBAIC04MDIsNyArODI3LDcg QEAgZ2V0UG9pc3NvblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IGNlbnRlcikKIAlkb3VibGUJ CXVuaWZvcm07CiAKIAkvKiBlcmFuZCBpbiBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICovCi0J dW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCXVuaWZv cm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOwogCiAJcmV0dXJuIChp bnQ2NCkgKC1sb2codW5pZm9ybSkgKiAoKGRvdWJsZSkgY2VudGVyKSArIDAuNSk7CiB9CkBAIC04 ODAsNyArOTA1LDcgQEAgemlwZkZpbmRPckNyZWF0ZUNhY2hlQ2VsbChaaXBmQ2FjaGUgKmNhY2hl LCBpbnQ2NCBuLCBkb3VibGUgcykKICAqIEx1YyBEZXZyb3llLCBwLiA1NTAtNTUxLCBTcHJpbmdl ciAxOTg2LgogICovCiBzdGF0aWMgaW50NjQKLWNvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFRTdGF0 ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFJh bmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG4sIGRvdWJsZSBzKQogewogCWRvdWJsZQkJ YiA9IHBvdygyLjAsIHMgLSAxLjApOwogCWRvdWJsZQkJeCwKQEAgLTg5MSw4ICs5MTYsOCBAQCBj b21wdXRlSXRlcmF0aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMp CiAJd2hpbGUgKHRydWUpCiAJewogCQkvKiByYW5kb20gdmFyaWF0ZXMgKi8KLQkJdSA9IHBnX2Vy YW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwotCQl2ID0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJh bmRvbV9zdGF0ZSk7CisJCXUgPSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOworCQl2 ID0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsKIAogCQl4ID0gZmxvb3IocG93KHUs IC0xLjAgLyAocyAtIDEuMCkpKTsKIApAQCAtOTEwLDEwICs5MzUsMTEgQEAgY29tcHV0ZUl0ZXJh dGl2ZVppcGZpYW4oVFN0YXRlICp0aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQogICogSmltIEdy YXkgZXQgYWwsIFNJR01PRCAxOTk0CiAgKi8KIHN0YXRpYyBpbnQ2NAotY29tcHV0ZUhhcm1vbmlj WmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCitjb21wdXRlSGFybW9u aWNaaXBmaWFuKFppcGZDYWNoZSAqemlwZl9jYWNoZSwgUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0 ZSwKKwkJCQkJICAgaW50NjQgbiwgZG91YmxlIHMpCiB7Ci0JWmlwZkNlbGwgICAqY2VsbCA9IHpp cGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoJnRocmVhZC0+emlwZl9jYWNoZSwgbiwgcyk7Ci0JZG91 YmxlCQl1bmlmb3JtID0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJWmlwZkNl bGwgICAqY2VsbCA9IHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoemlwZl9jYWNoZSwgbiwgcyk7 CisJZG91YmxlCQl1bmlmb3JtID0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsKIAlk b3VibGUJCXV6ID0gdW5pZm9ybSAqIGNlbGwtPmhhcm1vbmljbjsKIAogCWlmICh1eiA8IDEuMCkK QEAgLTkyNSw3ICs5NTEsOCBAQCBjb21wdXRlSGFybW9uaWNaaXBmaWFuKFRTdGF0ZSAqdGhyZWFk LCBpbnQ2NCBuLCBkb3VibGUgcykKIAogLyogcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6IHppcGZp YW4gZGlzdHJpYnV0aW9uIGZyb20gbWluIHRvIG1heCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBpbnQ2 NAotZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBk b3VibGUgcykKK2dldFppcGZpYW5SYW5kKFppcGZDYWNoZSAqemlwZl9jYWNoZSwgUmFuZG9tU3Rh dGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLAorCQkJICAgaW50NjQgbWF4LCBkb3VibGUgcykK IHsKIAlpbnQ2NAkJbiA9IG1heCAtIG1pbiArIDE7CiAKQEAgLTkzNCw4ICs5NjEsOCBAQCBnZXRa aXBmaWFuUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBz KQogCiAKIAlyZXR1cm4gbWluIC0gMSArICgocyA+IDEpCi0JCQkJCSAgPyBjb21wdXRlSXRlcmF0 aXZlWmlwZmlhbih0aHJlYWQsIG4sIHMpCi0JCQkJCSAgOiBjb21wdXRlSGFybW9uaWNaaXBmaWFu KHRocmVhZCwgbiwgcykpOworCQkJCQkgID8gY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4ocmFuZG9t X3N0YXRlLCBuLCBzKQorCQkJCQkgIDogY29tcHV0ZUhhcm1vbmljWmlwZmlhbih6aXBmX2NhY2hl LCByYW5kb21fc3RhdGUsIG4sIHMpKTsKIH0KIAogLyoKQEAgLTIyMDksNyArMjIzNiw3IEBAIGV2 YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJaWYgKGZ1bmMg PT0gUEdCRU5DSF9SQU5ET00pCiAJCQkJewogCQkJCQlBc3NlcnQobmFyZ3MgPT0gMik7Ci0JCQkJ CXNldEludFZhbHVlKHJldHZhbCwgZ2V0cmFuZCh0aHJlYWQsIGltaW4sIGltYXgpKTsKKwkJCQkJ c2V0SW50VmFsdWUocmV0dmFsLCBnZXRyYW5kKCZzdC0+cmFuZG9tX3N0YXRlLCBpbWluLCBpbWF4 KSk7CiAJCQkJfQogCQkJCWVsc2UJCQkvKiBnYXVzc2lhbiAmIGV4cG9uZW50aWFsICovCiAJCQkJ ewpAQCAtMjIzMSw3ICsyMjU4LDggQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwKIAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJ CQkJZ2V0R2F1c3NpYW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJCQkJCQkJ CWdldEdhdXNzaWFuUmFuZCgmc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJCQkJCQkJCQkJCQlp bWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGZ1bmMgPT0gUEdCRU5DSF9SQU5E T01fWklQRklBTikKIAkJCQkJewpAQCAtMjI0Myw3ICsyMjcxLDkgQEAgZXZhbFN0YW5kYXJkRnVu YyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJ CQl9CiAJCQkJCQlzZXRJbnRWYWx1ZShyZXR2YWwsCi0JCQkJCQkJCQlnZXRaaXBmaWFuUmFuZCh0 aHJlYWQsIGltaW4sIGltYXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRaaXBmaWFuUmFuZCgmdGhy ZWFkLT56aXBmX2NhY2hlLAorCQkJCQkJCQkJCQkJICAgJnN0LT5yYW5kb21fc3RhdGUsIGltaW4s CisJCQkJCQkJCQkJCQkgICBpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVsc2UJCS8qIGV4 cG9uZW50aWFsICovCiAJCQkJCXsKQEAgLTIyNTYsNyArMjI4Niw4IEBAIGV2YWxTdGFuZGFyZEZ1 bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQl9CiAKIAkJCQkJCXNldEludFZh bHVlKHJldHZhbCwKLQkJCQkJCQkJCWdldEV4cG9uZW50aWFsUmFuZCh0aHJlYWQsIGltaW4sIGlt YXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRFeHBvbmVudGlhbFJhbmQoJnN0LT5yYW5kb21fc3Rh dGUsIGltaW4sCisJCQkJCQkJCQkJCQkJICAgaW1heCwgcGFyYW0pKTsKIAkJCQkJfQogCQkJCX0K IApAQCAtMjU1MSw3ICsyNTgyLDcgQEAgY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFkKQogCWlm IChudW1fc2NyaXB0cyA9PSAxKQogCQlyZXR1cm4gMDsKIAotCXcgPSBnZXRyYW5kKHRocmVhZCwg MCwgdG90YWxfd2VpZ2h0IC0gMSk7CisJdyA9IGdldHJhbmQoJnRocmVhZC0+Y2hvb3NlX3Njcmlw dF9ycywgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CiAJZG8KIAl7CiAJCXcgLT0gc3FsX3NjcmlwdFtp KytdLndlaWdodDsKQEAgLTI3NDUsNyArMjc3Niw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFk LCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBhd2F5LgogCQkJCSAqLwogCQkJ CUFzc2VydCh0aHJvdHRsZV9kZWxheSA+IDApOwotCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0 aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQoJnRocmVh ZC0+dGhyb3R0bGluZ19ycywgdGhyb3R0bGVfZGVsYXkpOwogCiAJCQkJdGhyZWFkLT50aHJvdHRs ZV90cmlnZ2VyICs9IHdhaXQ7CiAJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRocm90 dGxlX3RyaWdnZXI7CkBAIC0yNzc5LDcgKzI4MTAsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NYYWN0 U3RhdHModGhyZWFkLCBzdCwgJm5vdywgdHJ1ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVuZGV6 LXZvdXMgKi8KLQkJCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2Rl bGF5KTsKKwkJCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCgmdGhyZWFkLT50aHJvdHRsaW5nX3Jz LAorCQkJCQkJCQkJCQkgIHRocm90dGxlX2RlbGF5KTsKIAkJCQkJCXRocmVhZC0+dGhyb3R0bGVf dHJpZ2dlciArPSB3YWl0OwogCQkJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRocm90 dGxlX3RyaWdnZXI7CiAJCQkJCX0KQEAgLTMzMjIsNyArMzM1NCw3IEBAIGRvTG9nKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LAogCSAqIHRvIHRoZSByYW5kb20gc2FtcGxlLgogCSAqLwogCWlm IChzYW1wbGVfcmF0ZSAhPSAwLjAgJiYKLQkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0 ZSkgPiBzYW1wbGVfcmF0ZSkKKwkJcGdfZXJhbmQ0OCh0aHJlYWQtPnNhbXBsaW5nX3JzLnhzZWVk KSA+IHNhbXBsZV9yYXRlKQogCQlyZXR1cm47CiAKIAkvKiBzaG91bGQgd2UgYWdncmVnYXRlIHRo ZSByZXN1bHRzIG9yIG5vdD8gKi8KQEAgLTQ3NTAsNiArNDc4MiwxNyBAQCBzZXRfcmFuZG9tX3Nl ZWQoY29uc3QgY2hhciAqc2VlZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIEluaXRpYWxp emUgdGhlIHJhbmRvbSBzdGF0ZSBvZiB0aGUgY2xpZW50L3RocmVhZC4KKyAqLworc3RhdGljIHZv aWQKK2luaXRSYW5kb21TdGF0ZShSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlKQoreworCXJhbmRv bV9zdGF0ZS0+eHNlZWRbMF0gPSByYW5kb20oKTsKKwlyYW5kb21fc3RhdGUtPnhzZWVkWzFdID0g cmFuZG9tKCk7CisJcmFuZG9tX3N0YXRlLT54c2VlZFsyXSA9IHJhbmRvbSgpOworfQorCiAKIGlu dAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC01MzU4LDYgKzU0MDEsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykK IAl7CiAJCXN0YXRlW2ldLmNzdGFjayA9IGNvbmRpdGlvbmFsX3N0YWNrX2NyZWF0ZSgpOworCQlp bml0UmFuZG9tU3RhdGUoJnN0YXRlW2ldLnJhbmRvbV9zdGF0ZSk7CiAJfQogCiAJaWYgKGRlYnVn KQpAQCAtNTQ5MSw5ICs1NTM1LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXRo cmVhZC0+c3RhdGUgPSAmc3RhdGVbbmNsaWVudHNfZGVhbHRdOwogCQl0aHJlYWQtPm5zdGF0ZSA9 CiAJCQkobmNsaWVudHMgLSBuY2xpZW50c19kZWFsdCArIG50aHJlYWRzIC0gaSAtIDEpIC8gKG50 aHJlYWRzIC0gaSk7Ci0JCXRocmVhZC0+cmFuZG9tX3N0YXRlWzBdID0gcmFuZG9tKCk7Ci0JCXRo cmVhZC0+cmFuZG9tX3N0YXRlWzFdID0gcmFuZG9tKCk7Ci0JCXRocmVhZC0+cmFuZG9tX3N0YXRl WzJdID0gcmFuZG9tKCk7CisJCWluaXRSYW5kb21TdGF0ZSgmdGhyZWFkLT5jaG9vc2Vfc2NyaXB0 X3JzKTsKKwkJaW5pdFJhbmRvbVN0YXRlKCZ0aHJlYWQtPnRocm90dGxpbmdfcnMpOworCQlpbml0 UmFuZG9tU3RhdGUoJnRocmVhZC0+c2FtcGxpbmdfcnMpOwogCQl0aHJlYWQtPmxvZ2ZpbGUgPSBO VUxMOyAvKiBmaWxsZWQgaW4gbGF0ZXIgKi8KIAkJdGhyZWFkLT5sYXRlbmN5X2xhdGUgPSAwOwog CQl0aHJlYWQtPnppcGZfY2FjaGUubmJfY2VsbHMgPSAwOwotLSAKMi43LjQKCg== --=_0fcde9e0009f3dabf741403de401e796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=v10-0002-Pgbench-errors-use-a-separate-function-to-report.patch Content-Disposition: attachment; filename=v10-0002-Pgbench-errors-use-a-separate-function-to-report.patch; size=59113 RnJvbSAyOWMxNzQwZmQzYWQwOTIxYzY0NjBlNTdkNjc0NWVhNzAwZWY2Mzk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCA3IEF1ZyAyMDE4IDEzOjI4OjM1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMi80XSBQZ2JlbmNoIGVycm9yczogdXNlIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8g cmVwb3J0IGEKIGRlYnVnL2xvZy9lcnJvciBtZXNzYWdlCgpUaGlzIGlzIG1vc3QgaW1wb3J0YW50 IHdoZW4gaXQgaXMgdXNlZCB0byByZXBvcnQgY2xpZW50IGZhaWx1cmVzIHRoYXQgZG8gbm90CmNh dXNlIGFuIGFib3J0cyBhbmQgdGhpcyBkZXBlbmRzIG9uIHRoZSBsZXZlbCBvZiBkZWJ1Z2dpbmcu CgpSZW5hbWUgdGhlIGFscmVhZHkgdXNlZCBmdW5jdGlvbiBwZ2JlbmNoX2Vycm9yKCkgdG8gcGdi ZW5jaF9zaW1wbGVfZXJyb3IoKSBmb3IKZmxleCBsZXhlciBlcnJvcnMuIEFsc28gZXhwb3J0IHRo ZSBmdW5jdGlvbiBhcHBlbmRQUUV4cEJ1ZmZlclZBIGZyb20gbGlicHEuCi0tLQogc3JjL2Jpbi9w Z2JlbmNoL3BnYmVuY2guYyAgICAgICAgICB8IDg0NiArKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dCAgIHwgICAxICsK IHNyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmMgfCAgIDQgKy0KIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL3BxZXhwYnVmZmVyLmggfCAgIDggKwogNCBmaWxlcyBjaGFuZ2VkLCA1MzAgaW5z ZXJ0aW9ucygrKSwgMzI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDk4OGUzN2IuLmM0 NWNkNDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jp bi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtNDg0LDggKzQ4NCw2IEBAIHN0YXRpYyBpbnQJbnVtX3Nj cmlwdHM7CQkvKiBudW1iZXIgb2Ygc2NyaXB0cyBpbiBzcWxfc2NyaXB0W10gKi8KIHN0YXRpYyBp bnQJbnVtX2NvbW1hbmRzID0gMDsJLyogdG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0cyAq Lwogc3RhdGljIGludDY0IHRvdGFsX3dlaWdodCA9IDA7CiAKLXN0YXRpYyBpbnQJZGVidWcgPSAw OwkJCS8qIGRlYnVnIGZsYWcgKi8KLQogLyogQnVpbHRpbiB0ZXN0IHNjcmlwdHMgKi8KIHR5cGVk ZWYgc3RydWN0IEJ1aWx0aW5TY3JpcHQKIHsKQEAgLTUzMiw2ICs1MzAsMzEgQEAgc3RhdGljIGNv bnN0IEJ1aWx0aW5TY3JpcHQgYnVpbHRpbl9zY3JpcHRbXSA9CiAJfQogfTsKIAordHlwZWRlZiBl bnVtIEVycm9yTGV2ZWwKK3sKKwkvKgorCSAqIFRvIHJlcG9ydCB0aHJvdHRsaW5nLCBleGVjdXRl ZC9zZW50L3JlY2VpdmVkIGNvbW1hbmRzIGV0Yy4KKwkgKi8KKwlERUJVRywKKworCS8qCisJICog VG8gcmVwb3J0OgorCSAqIC0gYWJvcnRpb24gb2YgdGhlIGNsaWVudCAoc29tZXRoaW5nIGJhZCBl LmcuIHRoZSBTUUwvbWV0YSBjb21tYW5kIGZhaWxlZAorCSAqICAgb3IgdGhlIGNvbm5lY3Rpb24g d2l0aCB0aGUgYmFja2VuZCB3YXMgbG9zdCk7CisJICogLSB0aGUgbG9nIG1lc3NhZ2VzIG9mIHRo ZSBtYWluIHByb2dyYW07CisJICogLSBQR0JFTkNIX0RFQlVHIG1lc3NhZ2VzLgorCSAqLworCUxP RywKKworCS8qCisJICogVG8gcmVwb3J0IHRoZSBlcnJvciBtZXNzYWdlcyBvZiB0aGUgbWFpbiBw cm9ncmFtIGFuZCBpbW1lZGlhdGVseSBjYWxsCisJICogZXhpdCgxKS4KKwkgKi8KKwlFUlJPUgor fSBFcnJvckxldmVsOworCitzdGF0aWMgRXJyb3JMZXZlbCBsb2dfbWluX21lc3NhZ2VzID0gTE9H OwkvKiBubyBkZWJ1ZyBieSBkZWZhdWx0ICovCisKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAq Lwogc3RhdGljIHZvaWQgc2V0TnVsbFZhbHVlKFBnQmVuY2hWYWx1ZSAqcHYpOwpAQCAtNTQzLDE3 ICs1NjYsMTkgQEAgc3RhdGljIHZvaWQgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs CiAJICBTdGF0c0RhdGEgKmFnZywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0ZW5jeSwgZG91Ymxl IGxhZyk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3Rh dGUgKnN0LCBpbnN0cl90aW1lICpub3csCiAJCQkJIGJvb2wgc2tpcHBlZCwgU3RhdHNEYXRhICph Z2cpOwotc3RhdGljIHZvaWQgcGdiZW5jaF9lcnJvcihjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19h dHRyaWJ1dGVfcHJpbnRmKDEsIDIpOworc3RhdGljIHZvaWQgcGdiZW5jaF9zaW1wbGVfZXJyb3Io Y29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigxLCAyKTsKIHN0YXRpYyB2 b2lkIGFkZFNjcmlwdChQYXJzZWRTY3JpcHQgc2NyaXB0KTsKIHN0YXRpYyB2b2lkICp0aHJlYWRS dW4odm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIHNldGFsYXJtKGludCBzZWNvbmRzKTsKIHN0YXRp YyB2b2lkIGZpbmlzaENvbihDU3RhdGUgKnN0KTsKK3N0YXRpYyB2b2lkIHBnYmVuY2hfZXJyb3Io RXJyb3JMZXZlbCBlbGV2ZWwsCisJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJp YnV0ZV9wcmludGYoMiwgMyk7CiAKIAogLyogY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBvdXIgZmxl eCBsZXhlciAqLwogc3RhdGljIGNvbnN0IFBzcWxTY2FuQ2FsbGJhY2tzIHBnYmVuY2hfY2FsbGJh Y2tzID0gewogCU5VTEwsCQkJCQkJLyogZG9uJ3QgbmVlZCBnZXRfdmFyaWFibGUgZnVuY3Rpb25h bGl0eSAqLwotCXBnYmVuY2hfZXJyb3IKKwlwZ2JlbmNoX3NpbXBsZV9lcnJvcgogfTsKIAogCkBA IC02OTEsNyArNzE2LDcgQEAgc3RydG9pbnQ2NChjb25zdCBjaGFyICpzdHIpCiAKIAkvKiByZXF1 aXJlIGF0IGxlYXN0IG9uZSBkaWdpdCAqLwogCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikg KnB0cikpCi0JCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIGludGVn ZXI6IFwiJXNcIlxuIiwgc3RyKTsKKwkJcGdiZW5jaF9lcnJvcihMT0csICJpbnZhbGlkIGlucHV0 IHN5bnRheCBmb3IgaW50ZWdlcjogXCIlc1wiXG4iLCBzdHIpOwogCiAJLyogcHJvY2VzcyBkaWdp dHMgKi8KIAl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKQEAg LTY5OSw3ICs3MjQsMTAgQEAgc3RydG9pbnQ2NChjb25zdCBjaGFyICpzdHIpCiAJCWludDY0CQl0 bXAgPSByZXN1bHQgKiAxMCArICgqcHRyKysgLSAnMCcpOwogCiAJCWlmICgodG1wIC8gMTApICE9 IHJlc3VsdCkJLyogb3ZlcmZsb3c/ICovCi0JCQlmcHJpbnRmKHN0ZGVyciwgInZhbHVlIFwiJXNc IiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgYmlnaW50XG4iLCBzdHIpOworCQl7CisJCQlwZ2Jl bmNoX2Vycm9yKExPRywgInZhbHVlIFwiJXNcIiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgYmln aW50XG4iLAorCQkJCQkJICBzdHIpOworCQl9CiAJCXJlc3VsdCA9IHRtcDsKIAl9CiAKQEAgLTcx MCw3ICs3MzgsNyBAQCBnb3RkaWdpdHM6CiAJCXB0cisrOwogCiAJaWYgKCpwdHIgIT0gJ1wwJykK LQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgaW50ZWdlcjogXCIl c1wiXG4iLCBzdHIpOworCQlwZ2JlbmNoX2Vycm9yKExPRywgImludmFsaWQgaW5wdXQgc3ludGF4 IGZvciBpbnRlZ2VyOiBcIiVzXCJcbiIsIHN0cik7CiAKIAlyZXR1cm4gKChzaWduIDwgMCkgPyAt cmVzdWx0IDogcmVzdWx0KTsKIH0KQEAgLTEwOTgsOCArMTEyNiwxMCBAQCBleGVjdXRlU3RhdGVt ZW50KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICpzcWwpCiAJcmVzID0gUFFleGVjKGNvbiwgc3Fs KTsKIAlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsICIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwotCQlleGl0KDEpOwor CQkvKiB3ZSBhcmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBQUWVycm9yTWVzc2FnZSBpcyBhbHdh eXMgY2FsbGVkICovCisJCUFzc2VydChFUlJPUiA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlw Z2JlbmNoX2Vycm9yKEVSUk9SLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKTsKIAl9CiAJUFFj bGVhcihyZXMpOwogfQpAQCAtMTExMyw4ICsxMTQzLDExIEBAIHRyeUV4ZWN1dGVTdGF0ZW1lbnQo UEdjb25uICpjb24sIGNvbnN0IGNoYXIgKnNxbCkKIAlyZXMgPSBQUWV4ZWMoY29uLCBzcWwpOwog CWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCiAJewotCQlmcHJp bnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7Ci0JCWZwcmludGYoc3RkZXJy LCAiKGlnbm9yaW5nIHRoaXMgZXJyb3IgYW5kIGNvbnRpbnVpbmcgYW55d2F5KVxuIik7CisJCS8q IHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIFBRZXJyb3JNZXNzYWdlIGlzIGFsd2F5cyBj YWxsZWQgKi8KKwkJQXNzZXJ0KExPRyA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlwZ2JlbmNo X2Vycm9yKExPRywgIiVzKGlnbm9yaW5nIHRoaXMgZXJyb3IgYW5kIGNvbnRpbnVpbmcgYW55d2F5 KVxuIiwKKwkJCQkJICBQUWVycm9yTWVzc2FnZShjb24pKTsKIAl9CiAJUFFjbGVhcihyZXMpOwog fQpAQCAtMTE2MCw4ICsxMTkzLDggQEAgZG9Db25uZWN0KHZvaWQpCiAKIAkJaWYgKCFjb25uKQog CQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZh aWxlZFxuIiwKLQkJCQkJZGJOYW1lKTsKKwkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiY29ubmVjdGlv biB0byBkYXRhYmFzZSBcIiVzXCIgZmFpbGVkXG4iLAorCQkJCQkJICBkYk5hbWUpOwogCQkJcmV0 dXJuIE5VTEw7CiAJCX0KIApAQCAtMTE3OSw4ICsxMjEyLDExIEBAIGRvQ29ubmVjdCh2b2lkKQog CS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3Nm dWxseSBtYWRlICovCiAJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQogCXsK LQkJZnByaW50ZihzdGRlcnIsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6 XG4lcyIsCi0JCQkJZGJOYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCS8qIHdlIGFyZSBz dXJlIHRoYXQgdGhlIGZ1bmN0aW9uIFBRZXJyb3JNZXNzYWdlIGlzIGFsd2F5cyBjYWxsZWQgKi8K KwkJQXNzZXJ0KExPRyA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlwZ2JlbmNoX2Vycm9yKExP RywgImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZDpcbiVzIiwKKwkJCQkJICBk Yk5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKIAkJUFFmaW5pc2goY29ubik7CiAJCXJldHVy biBOVUxMOwogCX0KQEAgLTEzMTgsOSArMTM1NCw5IEBAIG1ha2VWYXJpYWJsZVZhbHVlKFZhcmlh YmxlICp2YXIpCiAKIAkJaWYgKHNzY2FuZih2YXItPnN2YWx1ZSwgIiVsZiVjIiwgJmR2LCAmeHMp ICE9IDEpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkibWFsZm9ybWVkIHZhcmlhYmxl IFwiJXNcIiB2YWx1ZTogXCIlc1wiXG4iLAotCQkJCQl2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsK KwkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJICAibWFsZm9ybWVkIHZhcmlhYmxlIFwiJXNc IiB2YWx1ZTogXCIlc1wiXG4iLAorCQkJCQkJICB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKIAkJ CXJldHVybiBmYWxzZTsKIAkJfQogCQlzZXREb3VibGVWYWx1ZSgmdmFyLT52YWx1ZSwgZHYpOwpA QCAtMTM2NSwxMCArMTQwMSwxMSBAQCB2YWxpZF92YXJpYWJsZV9uYW1lKGNvbnN0IGNoYXIgKm5h bWUpCiAvKgogICogTG9va3VwIGEgdmFyaWFibGUgYnkgbmFtZSwgY3JlYXRpbmcgaXQgaWYgbmVl ZCBiZS4KICAqIENhbGxlciBpcyBleHBlY3RlZCB0byBhc3NpZ24gYSB2YWx1ZSB0byB0aGUgdmFy aWFibGUuCi0gKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSAoYmFkIG5hbWUpLgorICogT24gZmFp bHVyZSAoYmFkIG5hbWUpOiBpZiB0aGlzIGlzIGEgY2xpZW50IHJ1biByZXR1cm5zIE5VTEw7IGV4 aXRzIHRoZQorICogcHJvZ3JhbSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBWYXJpYWJsZSAqCi1s b29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFy ICpuYW1lKQorbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29u dGV4dCwgY2hhciAqbmFtZSwgYm9vbCBjbGllbnQpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCkBA IC0xMzgzLDggKzE0MjAsMTIgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29u c3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIAkJICovCiAJCWlmICghdmFsaWRfdmFyaWFi bGVfbmFtZShuYW1lKSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCB2YXJp YWJsZSBuYW1lOiBcIiVzXCJcbiIsCi0JCQkJCWNvbnRleHQsIG5hbWUpOworCQkJLyoKKwkJCSAq IEFib3V0IHRoZSBlcnJvciBsZXZlbCB1c2VkOiBpZiB3ZSBwcm9jZXNzIGNsaWVudCBjb21tYW5k cywgaXQgYQorCQkJICogbm9ybWFsIGZhaWx1cmU7IG90aGVyd2lzZSBpdCBpcyBub3QgYW5kIHdl IGV4aXQgdGhlIHByb2dyYW0uCisJCQkgKi8KKwkJCXBnYmVuY2hfZXJyb3IoY2xpZW50ID8gTE9H IDogRVJST1IsCisJCQkJCQkgICIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIs IGNvbnRleHQsIG5hbWUpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTQxMiwxNiArMTQ1 MywxNCBAQCBsb29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250 ZXh0LCBjaGFyICpuYW1lKQogfQogCiAvKiBBc3NpZ24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJp YWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZSAqLwotLyogUmV0dXJucyBmYWxzZSBvbiBmYWls dXJlIChiYWQgbmFtZSkgKi8KLXN0YXRpYyBib29sCisvKiBFeGl0cyBvbiBmYWlsdXJlIChiYWQg bmFtZSkgKi8KK3N0YXRpYyB2b2lkCiBwdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFy ICpjb250ZXh0LCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlWYXJpYWJsZSAg ICp2YXI7CiAJY2hhcgkgICAqdmFsOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3Qs IGNvbnRleHQsIG5hbWUpOwotCWlmICghdmFyKQotCQlyZXR1cm4gZmFsc2U7CisJdmFyID0gbG9v a3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUsIGZhbHNlKTsKIAogCS8qIGR1cCB0 aGVuIGZyZWUsIGluIGNhc2UgdmFsdWUgaXMgcG9pbnRpbmcgYXQgdGhpcyB2YXJpYWJsZSAqLwog CXZhbCA9IHBnX3N0cmR1cCh2YWx1ZSk7CkBAIC0xNDMwLDE5ICsxNDY5LDIwIEBAIHB1dFZhcmlh YmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKnZhbHVlKQogCQlmcmVlKHZhci0+c3ZhbHVlKTsKIAl2YXItPnN2YWx1ZSA9IHZhbDsKIAl2 YXItPnZhbHVlLnR5cGUgPSBQR0JUX05PX1ZBTFVFOwotCi0JcmV0dXJuIHRydWU7CiB9CiAKLS8q IEFzc2lnbiBhIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUgKi8K LS8qIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCisvKgorICogQXNzaWdu IGEgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZS4KKyAqIE9uIGZh aWx1cmUgKGJhZCBuYW1lKTogaWYgdGhpcyBpcyBhIGNsaWVudCBydW4gcmV0dXJucyBmYWxzZTsg ZXhpdHMgdGhlCisgKiBwcm9ncmFtIG90aGVyd2lzZS4KKyAqLwogc3RhdGljIGJvb2wKIHB1dFZh cmlhYmxlVmFsdWUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwK LQkJCQkgY29uc3QgUGdCZW5jaFZhbHVlICp2YWx1ZSkKKwkJCQkgY29uc3QgUGdCZW5jaFZhbHVl ICp2YWx1ZSwgYm9vbCBjbGllbnQpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCi0JdmFyID0gbG9v a3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOworCXZhciA9IGxvb2t1cENyZWF0 ZVZhcmlhYmxlKHN0LCBjb250ZXh0LCBuYW1lLCBjbGllbnQpOwogCWlmICghdmFyKQogCQlyZXR1 cm4gZmFsc2U7CiAKQEAgLTE0NTQsMTUgKzE0OTQsMTkgQEAgcHV0VmFyaWFibGVWYWx1ZShDU3Rh dGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAogCXJldHVybiB0cnVlOwog fQogCi0vKiBBc3NpZ24gYW4gaW50ZWdlciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBp dCBpZiBuZWVkIGJlICovCi0vKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAq LworLyoKKyAqIEFzc2lnbiBhbiBpbnRlZ2VyIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5n IGl0IGlmIG5lZWQgYmUuCisgKiBPbiBmYWlsdXJlIChiYWQgbmFtZSk6IGlmIHRoaXMgaXMgYSBj bGllbnQgcnVuIHJldHVybnMgZmFsc2U7IGV4aXRzIHRoZQorICogcHJvZ3JhbSBvdGhlcndpc2Uu CisgKi8KIHN0YXRpYyBib29sCi1wdXRWYXJpYWJsZUludChDU3RhdGUgKnN0LCBjb25zdCBjaGFy ICpjb250ZXh0LCBjaGFyICpuYW1lLCBpbnQ2NCB2YWx1ZSkKK3B1dFZhcmlhYmxlSW50KENTdGF0 ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGludDY0IHZhbHVlLAorCQkJ ICAgYm9vbCBjbGllbnQpCiB7CiAJUGdCZW5jaFZhbHVlIHZhbDsKIAogCXNldEludFZhbHVlKCZ2 YWwsIHZhbHVlKTsKLQlyZXR1cm4gcHV0VmFyaWFibGVWYWx1ZShzdCwgY29udGV4dCwgbmFtZSwg JnZhbCk7CisJcmV0dXJuIHB1dFZhcmlhYmxlVmFsdWUoc3QsIGNvbnRleHQsIG5hbWUsICZ2YWws IGNsaWVudCk7CiB9CiAKIC8qCkBAIC0xNTkzLDcgKzE2MzcsMTEgQEAgY29lcmNlVG9Cb29sKFBn QmVuY2hWYWx1ZSAqcHZhbCwgYm9vbCAqYnZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIE5VTEwsIElO VCBvciBET1VCTEUgKi8KIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0 byBib29sZWFuXG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJLyogd2UgYXJlIHN1cmUgdGhh dCB0aGUgZnVuY3Rpb24gdmFsdWVUeXBlTmFtZSBvbmx5IGlzIGFsd2F5cyBjYWxsZWQgKi8KKwkJ QXNzZXJ0KExPRyA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlwZ2JlbmNoX2Vycm9yKExPRywg ImNhbm5vdCBjb2VyY2UgJXMgdG8gYm9vbGVhblxuIiwKKwkJCQkJICB2YWx1ZVR5cGVOYW1lKHB2 YWwpKTsKIAkJKmJ2YWwgPSBmYWxzZTsJCQkvKiBzdXBwcmVzcyB1bmluaXRpYWxpemVkLXZhcmlh YmxlIHdhcm5pbmdzICovCiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xNjM4LDcgKzE2ODYsNyBA QCBjb2VyY2VUb0ludChQZ0JlbmNoVmFsdWUgKnB2YWwsIGludDY0ICppdmFsKQogCiAJCWlmIChk dmFsIDwgUEdfSU5UNjRfTUlOIHx8IFBHX0lOVDY0X01BWCA8IGR2YWwpCiAJCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAiZG91YmxlIHRvIGludCBvdmVyZmxvdyBmb3IgJWZcbiIsIGR2YWwpOworCQkJ cGdiZW5jaF9lcnJvcihMT0csICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZh bCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJKml2YWwgPSAoaW50NjQpIGR2YWw7CkBAIC0x NjQ2LDcgKzE2OTQsMTAgQEAgY29lcmNlVG9JbnQoUGdCZW5jaFZhbHVlICpwdmFsLCBpbnQ2NCAq aXZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAqLwogCXsKLQkJZnByaW50 ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVzIHRvIGludFxuIiwgdmFsdWVUeXBlTmFtZShwdmFs KSk7CisJCS8qIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHZhbHVlVHlwZU5hbWUgaXMg YWx3YXlzIGNhbGxlZCAqLworCQlBc3NlcnQoTE9HID49IGxvZ19taW5fbWVzc2FnZXMpOworCisJ CXBnYmVuY2hfZXJyb3IoTE9HLCAiY2Fubm90IGNvZXJjZSAlcyB0byBpbnRcbiIsIHZhbHVlVHlw ZU5hbWUocHZhbCkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQpAQCAtMTY2Nyw3ICsxNzE4LDEw IEBAIGNvZXJjZVRvRG91YmxlKFBnQmVuY2hWYWx1ZSAqcHZhbCwgZG91YmxlICpkdmFsKQogCX0K IAllbHNlCQkJCQkJLyogQk9PTEVBTiBvciBOVUxMICovCiAJewotCQlmcHJpbnRmKHN0ZGVyciwg ImNhbm5vdCBjb2VyY2UgJXMgdG8gZG91YmxlXG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJ Lyogd2UgYXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gdmFsdWVUeXBlTmFtZSBpcyBhbHdheXMg Y2FsbGVkICovCisJCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJcGdiZW5j aF9lcnJvcihMT0csICJjYW5ub3QgY29lcmNlICVzIHRvIGRvdWJsZVxuIiwgdmFsdWVUeXBlTmFt ZShwdmFsKSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiB9CkBAIC0xODQ4LDggKzE5MDIsOCBAQCBl dmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCiAJaWYgKGwgIT0g TlVMTCkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLAotCQkJCSJ0b28gbWFueSBmdW5jdGlvbiBhcmd1 bWVudHMsIG1heGltdW0gaXMgJWRcbiIsIE1BWF9GQVJHUyk7CisJCXBnYmVuY2hfZXJyb3IoTE9H LCAidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYXhpbXVtIGlzICVkXG4iLAorCQkJCQkg IE1BWF9GQVJHUyk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE5NzIsNyArMjAyNiw3IEBA IGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQljYXNl IFBHQkVOQ0hfTU9EOgogCQkJCQkJCWlmIChyaSA9PSAwKQogCQkJCQkJCXsKLQkJCQkJCQkJZnBy aW50ZihzdGRlcnIsICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKKwkJCQkJCQkJcGdiZW5jaF9lcnJv cihMT0csICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKIAkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJ CQkJCX0KIAkJCQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9mIC0xIGRpdmlzb3IgKi8KQEAgLTE5 ODMsNyArMjAzNyw4IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsCiAJCQkJCQkJCQkvKiBvdmVyZmxvdyBjaGVjayAobmVlZGVkIGZvciBJTlQ2NF9NSU4pICov CiAJCQkJCQkJCQlpZiAobGkgPT0gUEdfSU5UNjRfTUlOKQogCQkJCQkJCQkJewotCQkJCQkJCQkJ CWZwcmludGYoc3RkZXJyLCAiYmlnaW50IG91dCBvZiByYW5nZVxuIik7CisJCQkJCQkJCQkJcGdi ZW5jaF9lcnJvcihMT0csCisJCQkJCQkJCQkJCQkJICAiYmlnaW50IG91dCBvZiByYW5nZVxuIik7 CiAJCQkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJCQkJfQogCQkJCQkJCQkJZWxzZQpAQCAt MjA4NCwyMiArMjEzOSw0OCBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3Rh dGUgKnN0LAogCQljYXNlIFBHQkVOQ0hfREVCVUc6CiAJCQl7CiAJCQkJUGdCZW5jaFZhbHVlICp2 YXJnID0gJnZhcmdzWzBdOworCQkJCVBRRXhwQnVmZmVyRGF0YSBlcnJtc2dfYnVmOwogCiAJCQkJ QXNzZXJ0KG5hcmdzID09IDEpOwogCi0JCQkJZnByaW50ZihzdGRlcnIsICJkZWJ1ZyhzY3JpcHQ9 JWQsY29tbWFuZD0lZCk6ICIsCi0JCQkJCQlzdC0+dXNlX2ZpbGUsIHN0LT5jb21tYW5kICsgMSk7 CisJCQkJLyoKKwkJCQkgKiBXZSBhcmUgc3VyZSB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZv ciB0aGUgbWVzc2FnZSBpcworCQkJCSAqIGFsd2F5cyB1c2VkLgorCQkJCSAqLworCQkJCUFzc2Vy dChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJCQlpbml0UFFFeHBCdWZmZXIoJmVycm1z Z19idWYpOworCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAorCQkJCQkJCQkgICJk ZWJ1ZyhzY3JpcHQ9JWQsY29tbWFuZD0lZCk6ICIsCisJCQkJCQkJCSAgc3QtPnVzZV9maWxlLCBz dC0+Y29tbWFuZCArIDEpOwogCiAJCQkJaWYgKHZhcmctPnR5cGUgPT0gUEdCVF9OVUxMKQotCQkJ CQlmcHJpbnRmKHN0ZGVyciwgIm51bGxcbiIpOworCQkJCXsKKwkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmVycm1zZ19idWYsICJudWxsXG4iKTsKKwkJCQl9CiAJCQkJZWxzZSBpZiAodmFyZy0+dHlw ZSA9PSBQR0JUX0JPT0xFQU4pCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiYm9vbGVhbiAlc1xuIiwg dmFyZy0+dS5idmFsID8gInRydWUiIDogImZhbHNlIik7CisJCQkJeworCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmZXJybXNnX2J1ZiwKKwkJCQkJCQkJCSAgImJvb2xlYW4gJXNcbiIsCisJCQkJCQkJ CQkgIHZhcmctPnUuYnZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQkJCX0KIAkJCQllbHNlIGlm ICh2YXJnLT50eXBlID09IFBHQlRfSU5UKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludCAiIElO VDY0X0ZPUk1BVCAiXG4iLCB2YXJnLT51Lml2YWwpOworCQkJCXsKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmVycm1zZ19idWYsCisJCQkJCQkJCQkgICJpbnQgIiBJTlQ2NF9GT1JNQVQgIlxuIiwg dmFyZy0+dS5pdmFsKTsKKwkJCQl9CiAJCQkJZWxzZSBpZiAodmFyZy0+dHlwZSA9PSBQR0JUX0RP VUJMRSkKLQkJCQkJZnByaW50ZihzdGRlcnIsICJkb3VibGUgJS4qZ1xuIiwgREJMX0RJRywgdmFy Zy0+dS5kdmFsKTsKKwkJCQl7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAor CQkJCQkJCQkJICAiZG91YmxlICUuKmdcbiIsIERCTF9ESUcsIHZhcmctPnUuZHZhbCk7CisJCQkJ fQogCQkJCWVsc2UJCQkvKiBpbnRlcm5hbCBlcnJvciwgdW5leHBlY3RlZCB0eXBlICovCisJCQkJ ewogCQkJCQlBc3NlcnQoMCk7CisJCQkJfQorCisJCQkJcGdiZW5jaF9lcnJvcihMT0csICIlcyIs IGVycm1zZ19idWYuZGF0YSk7CisJCQkJdGVybVBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKIAog CQkJCSpyZXR2YWwgPSAqdmFyZzsKIApAQCAtMjIyMywxMyArMjMwNCwxMyBAQCBldmFsU3RhbmRh cmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSBy YW5nZSAqLwogCQkJCWlmIChpbWluID4gaW1heCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LCAiZW1wdHkgcmFuZ2UgZ2l2ZW4gdG8gcmFuZG9tXG4iKTsKKwkJCQkJcGdiZW5jaF9lcnJvcihM T0csICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIpOwogCQkJCQlyZXR1cm4gZmFsc2U7 CiAJCQkJfQogCQkJCWVsc2UgaWYgKGltYXggLSBpbWluIDwgMCB8fCAoaW1heCAtIGltaW4pICsg MSA8IDApCiAJCQkJewogCQkJCQkvKiBwcmV2ZW50IGludCBvdmVyZmxvd3MgaW4gcmFuZG9tIGZ1 bmN0aW9ucyAqLwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJhbmRvbSByYW5nZSBpcyB0b28gbGFy Z2VcbiIpOworCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgInJhbmRvbSByYW5nZSBpcyB0b28gbGFy Z2VcbiIpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCkBAIC0yMjUxLDkgKzIzMzIsOSBA QCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJ CQkJCQlpZiAocGFyYW0gPCBNSU5fR0FVU1NJQU5fUEFSQU0pCiAJCQkJCQl7Ci0JCQkJCQkJZnBy aW50ZihzdGRlcnIsCi0JCQkJCQkJCQkiZ2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVh c3QgJWYgIgotCQkJCQkJCQkJIihub3QgJWYpXG4iLCBNSU5fR0FVU1NJQU5fUEFSQU0sIHBhcmFt KTsKKwkJCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJCQkJCQkgICJnYXVzc2lhbiBwYXJh bWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCAlZiAobm90ICVmKVxuIiwKKwkJCQkJCQkJCQkgIE1JTl9H QVVTU0lBTl9QQVJBTSwgcGFyYW0pOwogCQkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCX0KIApA QCAtMjI2NSw5ICsyMzQ2LDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwKIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJhbSA9PSAxLjAg fHwgcGFyYW0gPiBNQVhfWklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRmKHN0 ZGVyciwKLQkJCQkJCQkJCSJ6aXBmaWFuIHBhcmFtZXRlciBtdXN0IGJlIGluIHJhbmdlICgwLCAx KSBVICgxLCAlZF0iCi0JCQkJCQkJCQkiIChnb3QgJWYpXG4iLCBNQVhfWklQRklBTl9QQVJBTSwg cGFyYW0pOworCQkJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJCQkJCSAgInppcGZpYW4g cGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgKDAsIDEpIFUgKDEsICVkXSAoZ290ICVmKVxuIiwK KwkJCQkJCQkJCQkgIE1BWF9aSVBGSUFOX1BBUkFNLCBwYXJhbSk7CiAJCQkJCQkJcmV0dXJuIGZh bHNlOwogCQkJCQkJfQogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLApAQCAtMjI3OSw5ICsyMzYw LDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJ ewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRmKHN0ZGVy ciwKLQkJCQkJCQkJCSJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4g emVybyIKLQkJCQkJCQkJCSIgKGdvdCAlZilcbiIsIHBhcmFtKTsKKwkJCQkJCQlwZ2JlbmNoX2Vy cm9yKExPRywKKwkJCQkJCQkJCQkgICJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVh dGVyIHRoYW4gemVybyAoZ290ICVmKVxuIiwKKwkJCQkJCQkJCQkgIHBhcmFtKTsKIAkJCQkJCQly ZXR1cm4gZmFsc2U7CiAJCQkJCQl9CiAKQEAgLTIzOTIsOCArMjQ3Myw4IEBAIGV2YWx1YXRlRXhw cihUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgUGdCZW5jaEV4cHIgKmV4cHIsIFBnQmVuY2hW YWx1ZSAqcmV0dmFsCiAKIAkJCQlpZiAoKHZhciA9IGxvb2t1cFZhcmlhYmxlKHN0LCBleHByLT51 LnZhcmlhYmxlLnZhcm5hbWUpKSA9PSBOVUxMKQogCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIs ICJ1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQkJCWV4cHItPnUudmFyaWFibGUu dmFybmFtZSk7CisJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAidW5kZWZpbmVkIHZhcmlhYmxlIFwi JXNcIlxuIiwKKwkJCQkJCQkJICBleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpOwogCQkJCQlyZXR1 cm4gZmFsc2U7CiAJCQkJfQogCkBAIC0yNDExLDEwICsyNDkyLDE1IEBAIGV2YWx1YXRlRXhwcihU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgUGdCZW5jaEV4cHIgKmV4cHIsIFBnQmVuY2hWYWx1 ZSAqcmV0dmFsCiAJCQkJCQkJcmV0dmFsKTsKIAogCQlkZWZhdWx0OgotCQkJLyogaW50ZXJuYWwg ZXJyb3Igd2hpY2ggc2hvdWxkIG5ldmVyIG9jY3VyICovCi0JCQlmcHJpbnRmKHN0ZGVyciwgInVu ZXhwZWN0ZWQgZW5vZGUgdHlwZSBpbiBldmFsdWF0aW9uOiAlZFxuIiwKLQkJCQkJZXhwci0+ZXR5 cGUpOwotCQkJZXhpdCgxKTsKKwkJCXsKKwkJCQkvKiBpbnRlcm5hbCBlcnJvciB3aGljaCBzaG91 bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJCQkJCSAgInVu ZXhwZWN0ZWQgZW5vZGUgdHlwZSBpbiBldmFsdWF0aW9uOiAlZFxuIiwKKwkJCQkJCQkgIGV4cHIt PmV0eXBlKTsKKworCQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCQlyZXR1cm4gZmFs c2U7CisJCQl9CiAJfQogfQogCkBAIC0yNDg3LDE1ICsyNTczLDE1IEBAIHJ1blNoZWxsQ29tbWFu ZChDU3RhdGUgKnN0LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl9 CiAJCWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZShzdCwgYXJndltpXSArIDEpKSA9PSBOVUxM KQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wi XG4iLAotCQkJCQlhcmd2WzBdLCBhcmd2W2ldKTsKKwkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXM6 IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCisJCQkJCQkgIGFyZ3ZbMF0sIGFyZ3ZbaV0p OwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJYXJnbGVuID0gc3RybGVuKGFyZyk7CiAJCWlm IChsZW4gKyBhcmdsZW4gKyAoaSA+IDAgPyAxIDogMCkgPj0gU0hFTExfQ09NTUFORF9TSVpFIC0g MSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogc2hlbGwgY29tbWFuZCBpcyB0b28gbG9u Z1xuIiwgYXJndlswXSk7CisJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVzOiBzaGVsbCBjb21tYW5k IGlzIHRvbyBsb25nXG4iLCBhcmd2WzBdKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0y NTEzLDcgKzI1OTksMTAgQEAgcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlh YmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJCWlmIChzeXN0ZW0oY29tbWFuZCkpCiAJCXsK IAkJCWlmICghdGltZXJfZXhjZWVkZWQpCi0JCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQg bm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJCXsKKwkJCQlwZ2JlbmNo X2Vycm9yKExPRywgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRcbiIsCisJCQkJ CQkJICBhcmd2WzBdKTsKKwkJCX0KIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlyZXR1cm4gdHJ1 ZTsKQEAgLTI1MjIsMTkgKzI2MTEsMjIgQEAgcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNo YXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJLyogRXhlY3V0ZSB0aGUgY29t bWFuZCB3aXRoIHBpcGUgYW5kIHJlYWQgdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KIAlpZiAoKGZw ID0gcG9wZW4oY29tbWFuZCwgInIiKSkgPT0gTlVMTCkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAi JXM6IGNvdWxkIG5vdCBsYXVuY2ggc2hlbGwgY29tbWFuZFxuIiwgYXJndlswXSk7CisJCXBnYmVu Y2hfZXJyb3IoTE9HLCAiJXM6IGNvdWxkIG5vdCBsYXVuY2ggc2hlbGwgY29tbWFuZFxuIiwgYXJn dlswXSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGZnZXRzKHJlcywgc2l6ZW9mKHJlcyks IGZwKSA9PSBOVUxMKQogCXsKIAkJaWYgKCF0aW1lcl9leGNlZWRlZCkKLQkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IGNvdWxkIG5vdCByZWFkIHJlc3VsdCBvZiBzaGVsbCBjb21tYW5kXG4iLCBhcmd2 WzBdKTsKKwkJeworCQkJcGdiZW5jaF9lcnJvcihMT0csICIlczogY291bGQgbm90IHJlYWQgcmVz dWx0IG9mIHNoZWxsIGNvbW1hbmRcbiIsCisJCQkJCQkgIGFyZ3ZbMF0pOworCQl9CiAJCSh2b2lk KSBwY2xvc2UoZnApOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChwY2xvc2UoZnApIDwgMCkK IAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBjbG9zZSBzaGVsbCBjb21tYW5k XG4iLCBhcmd2WzBdKTsKKwkJcGdiZW5jaF9lcnJvcihMT0csICIlczogY291bGQgbm90IGNsb3Nl IHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0y NTQ0LDExICsyNjM2LDEyIEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2YXJp YWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQllbmRwdHIrKzsKIAlpZiAoKnJlcyA9PSAn XDAnIHx8ICplbmRwdHIgIT0gJ1wwJykKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IHNoZWxs IGNvbW1hbmQgbXVzdCByZXR1cm4gYW4gaW50ZWdlciAobm90IFwiJXNcIilcbiIsCi0JCQkJYXJn dlswXSwgcmVzKTsKKwkJcGdiZW5jaF9lcnJvcihMT0csCisJCQkJCSAgIiVzOiBzaGVsbCBjb21t YW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXIgKG5vdCBcIiVzXCIpXG4iLAorCQkJCQkgIGFyZ3Zb MF0sIHJlcyk7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKCFwdXRWYXJpYWJsZUludChzdCwg InNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZhbCkpCisJaWYgKCFwdXRWYXJpYWJsZUludChzdCwg InNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZhbCwgdHJ1ZSkpCiAJCXJldHVybiBmYWxzZTsKIAog I2lmZGVmIERFQlVHCkBAIC0yNTY3LDkgKzI2NjAsOSBAQCBwcmVwYXJlZFN0YXRlbWVudE5hbWUo Y2hhciAqYnVmZmVyLCBpbnQgZmlsZSwgaW50IHN0YXRlKQogc3RhdGljIHZvaWQKIGNvbW1hbmRG YWlsZWQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptZXNzYWdlKQog ewotCWZwcmludGYoc3RkZXJyLAotCQkJImNsaWVudCAlZCBhYm9ydGVkIGluIGNvbW1hbmQgJWQg KCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAotCQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBz dC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCSAgImNsaWVu dCAlZCBhYm9ydGVkIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAorCQkJ CSAgc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOwogfQog CiAvKiByZXR1cm4gYSBzY3JpcHQgbnVtYmVyIHdpdGggYSB3ZWlnaHRlZCBjaG9pY2UuICovCkBA IC0yNjA0LDggKzI2OTcsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21t YW5kKQogCQlzcWwgPSBwZ19zdHJkdXAoY29tbWFuZC0+YXJndlswXSk7CiAJCXNxbCA9IGFzc2ln blZhcmlhYmxlcyhzdCwgc3FsKTsKIAotCQlpZiAoZGVidWcpCi0JCQlmcHJpbnRmKHN0ZGVyciwg ImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CisJCXBnYmVuY2hfZXJyb3Io REVCVUcsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3QtPmlkLCBzcWwpOwogCQlyID0gUFFz ZW5kUXVlcnkoc3QtPmNvbiwgc3FsKTsKIAkJZnJlZShzcWwpOwogCX0KQEAgLTI2MTYsOCArMjcw OCw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAKIAkJZ2V0 UXVlcnlQYXJhbXMoc3QsIGNvbW1hbmQsIHBhcmFtcyk7CiAKLQkJaWYgKGRlYnVnKQotCQkJZnBy aW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3QtPmlkLCBzcWwpOworCQlw Z2JlbmNoX2Vycm9yKERFQlVHLCAiY2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3Fs KTsKIAkJciA9IFBRc2VuZFF1ZXJ5UGFyYW1zKHN0LT5jb24sIHNxbCwgY29tbWFuZC0+YXJnYyAt IDEsCiAJCQkJCQkJICBOVUxMLCBwYXJhbXMsIE5VTEwsIE5VTEwsIDApOwogCX0KQEAgLTI2NDIs NyArMjczMywxNSBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQog CQkJCXJlcyA9IFBRcHJlcGFyZShzdC0+Y29uLCBuYW1lLAogCQkJCQkJCQljb21tYW5kc1tqXS0+ YXJndlswXSwgY29tbWFuZHNbal0tPmFyZ2MgLSAxLCBOVUxMKTsKIAkJCQlpZiAoUFFyZXN1bHRT dGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVz IiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogV2Ug YXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gUFFlcnJvck1lc3NhZ2UgaXMgYWx3YXlzCisJCQkJ CSAqIGNhbGxlZC4KKwkJCQkJICovCisJCQkJCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdl cyk7CisKKwkJCQkJcGdiZW5jaF9lcnJvcihMT0csICIlcyIsIFBRZXJyb3JNZXNzYWdlKHN0LT5j b24pKTsKKwkJCQl9CiAJCQkJUFFjbGVhcihyZXMpOwogCQkJfQogCQkJc3QtPnByZXBhcmVkW3N0 LT51c2VfZmlsZV0gPSB0cnVlOwpAQCAtMjY1MSw4ICsyNzUwLDcgQEAgc2VuZENvbW1hbmQoQ1N0 YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJZ2V0UXVlcnlQYXJhbXMoc3QsIGNvbW1hbmQs IHBhcmFtcyk7CiAJCXByZXBhcmVkU3RhdGVtZW50TmFtZShuYW1lLCBzdC0+dXNlX2ZpbGUsIHN0 LT5jb21tYW5kKTsKIAotCQlpZiAoZGVidWcpCi0JCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAl ZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIG5hbWUpOworCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAi Y2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgbmFtZSk7CiAJCXIgPSBQUXNlbmRRdWVy eVByZXBhcmVkKHN0LT5jb24sIG5hbWUsIGNvbW1hbmQtPmFyZ2MgLSAxLAogCQkJCQkJCQlwYXJh bXMsIE5VTEwsIE5VTEwsIDApOwogCX0KQEAgLTI2NjEsOSArMjc1OSw4IEBAIHNlbmRDb21tYW5k KENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAKIAlpZiAociA9PSAwKQogCXsKLQkJaWYg KGRlYnVnKQotCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNc biIsCi0JCQkJCXN0LT5pZCwgY29tbWFuZC0+YXJndlswXSk7CisJCXBnYmVuY2hfZXJyb3IoREVC VUcsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNcbiIsCisJCQkJCSAgc3QtPmlkLCBjb21t YW5kLT5hcmd2WzBdKTsKIAkJc3QtPmVjbnQrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTI2 ODUsOCArMjc4Miw4IEBAIGV2YWx1YXRlU2xlZXAoQ1N0YXRlICpzdCwgaW50IGFyZ2MsIGNoYXIg Kiphcmd2LCBpbnQgKnVzZWNzKQogCXsKIAkJaWYgKCh2YXIgPSBnZXRWYXJpYWJsZShzdCwgYXJn dlsxXSArIDEpKSA9PSBOVUxMKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmRlZmlu ZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQlhcmd2WzBdLCBhcmd2WzFdKTsKKwkJCXBnYmVu Y2hfZXJyb3IoTE9HLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCisJCQkJCQkg IGFyZ3ZbMF0sIGFyZ3ZbMV0pOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXVzZWMgPSBhdG9p KHZhcik7CkBAIC0yNzQ5LDkgKzI4NDYsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAKIAkJCQlzdC0+dXNlX2ZpbGUgPSBjaG9vc2VTY3Jp cHQodGhyZWFkKTsKIAotCQkJCWlmIChkZWJ1ZykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGll bnQgJWQgZXhlY3V0aW5nIHNjcmlwdCBcIiVzXCJcbiIsIHN0LT5pZCwKLQkJCQkJCQlzcWxfc2Ny aXB0W3N0LT51c2VfZmlsZV0uZGVzYyk7CisJCQkJcGdiZW5jaF9lcnJvcihERUJVRywgImNsaWVu dCAlZCBleGVjdXRpbmcgc2NyaXB0IFwiJXNcIlxuIiwKKwkJCQkJCQkgIHN0LT5pZCwgc3FsX3Nj cmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOwogCiAJCQkJaWYgKHRocm90dGxlX2RlbGF5ID4gMCkK IAkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX1RIUk9UVExFOwpAQCAtMjgyNCw5ICsyOTIw LDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdn KQogCQkJCX0KIAogCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9USFJPVFRMRTsKLQkJCQlpZiAoZGVi dWcpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHRocm90dGxpbmcgIiBJTlQ2NF9G T1JNQVQgIiB1c1xuIiwKLQkJCQkJCQlzdC0+aWQsIHdhaXQpOworCQkJCXBnYmVuY2hfZXJyb3Io REVCVUcsCisJCQkJCQkJICAiY2xpZW50ICVkIHRocm90dGxpbmcgIiBJTlQ2NF9GT1JNQVQgIiB1 c1xuIiwKKwkJCQkJCQkgIHN0LT5pZCwgd2FpdCk7CiAJCQkJYnJlYWs7CiAKIAkJCQkvKgpAQCAt Mjg1OCw4ICsyOTU0LDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0 YXRzRGF0YSAqYWdnKQogCQkJCQlzdGFydCA9IG5vdzsKIAkJCQkJaWYgKChzdC0+Y29uID0gZG9D b25uZWN0KCkpID09IE5VTEwpCiAJCQkJCXsKLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50 ICVkIGFib3J0ZWQgd2hpbGUgZXN0YWJsaXNoaW5nIGNvbm5lY3Rpb25cbiIsCi0JCQkJCQkJCXN0 LT5pZCk7CisJCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJCQkJCSAgImNsaWVudCAlZCBh Ym9ydGVkIHdoaWxlIGVzdGFibGlzaGluZyBjb25uZWN0aW9uXG4iLAorCQkJCQkJCQkJICBzdC0+ aWQpOwogCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CiAJCQkJCQlicmVhazsKIAkJ CQkJfQpAQCAtMjkzNywxMiArMzAzNCwxOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQkJCWk7CiAJCQkJCWNoYXIJICAqKmFyZ3Yg PSBjb21tYW5kLT5hcmd2OwogCi0JCQkJCWlmIChkZWJ1ZykKKwkJCQkJLyogYWxsb2NhdGUgbWVt b3J5IGZvciB0aGUgbWVzc2FnZSBvbmx5IGlmIG5lY2Vzc2FyeSAqLworCQkJCQlpZiAoREVCVUcg Pj0gbG9nX21pbl9tZXNzYWdlcykKIAkJCQkJewotCQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGll bnQgJWQgZXhlY3V0aW5nIFxcJXMiLCBzdC0+aWQsIGFyZ3ZbMF0pOworCQkJCQkJUFFFeHBCdWZm ZXJEYXRhIGVycm1zZ19idWY7CisKKwkJCQkJCWluaXRQUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7 CisJCQkJCQlwcmludGZQUUV4cEJ1ZmZlcigmZXJybXNnX2J1ZiwgImNsaWVudCAlZCBleGVjdXRp bmcgXFwlcyIsCisJCQkJCQkJCQkJICBzdC0+aWQsIGFyZ3ZbMF0pOwogCQkJCQkJZm9yIChpID0g MTsgaSA8IGFyZ2M7IGkrKykKLQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0p OwotCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZlcnJtc2dfYnVmLCAiICVzIiwgYXJndltpXSk7CisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlckNo YXIoJmVycm1zZ19idWYsICdcbicpOworCQkJCQkJcGdiZW5jaF9lcnJvcihERUJVRywgIiVzIiwg ZXJybXNnX2J1Zi5kYXRhKTsKKwkJCQkJCXRlcm1QUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7CiAJ CQkJCX0KIAogCQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NMRUVQKQpAQCAtMjk5Nyw3 ICszMTAxLDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0 YSAqYWdnKQogCiAJCQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVCkKIAkJCQkJCXsK LQkJCQkJCQlpZiAoIXB1dFZhcmlhYmxlVmFsdWUoc3QsIGFyZ3ZbMF0sIGFyZ3ZbMV0sICZyZXN1 bHQpKQorCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZShzdCwgYXJndlswXSwgYXJndlsxXSwg JnJlc3VsdCwKKwkJCQkJCQkJCQkJCSAgdHJ1ZSkpCiAJCQkJCQkJewogCQkJCQkJCQljb21tYW5k RmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwog CQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKQEAgLTMxOTcsOCArMzMwMiw3IEBA IGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJ CQkgKi8KIAkJCWNhc2UgQ1NUQVRFX1dBSVRfUkVTVUxUOgogCQkJCWNvbW1hbmQgPSBzcWxfc2Ny aXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRdOwotCQkJCWlmIChkZWJ1ZykK LQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgcmVjZWl2aW5nXG4iLCBzdC0+aWQpOwor CQkJCXBnYmVuY2hfZXJyb3IoREVCVUcsICJjbGllbnQgJWQgcmVjZWl2aW5nXG4iLCBzdC0+aWQp OwogCQkJCWlmICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCiAJCQkJewkJCQkvKiB0aGVyZSdz IHNvbWV0aGluZyB3cm9uZyAqLwogCQkJCQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgInBlcmhh cHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7CkBAIC0zMjg0LDggKzMzODgs OCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cp CiAJCQkJLyogY29uZGl0aW9uYWwgc3RhY2sgbXVzdCBiZSBlbXB0eSAqLwogCQkJCWlmICghY29u ZGl0aW9uYWxfc3RhY2tfZW1wdHkoc3QtPmNzdGFjaykpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0 ZGVyciwgImVuZCBvZiBzY3JpcHQgcmVhY2hlZCB3aXRoaW4gYSBjb25kaXRpb25hbCwgbWlzc2lu ZyBcXGVuZGlmXG4iKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJcGdiZW5jaF9lcnJvcihFUlJPUiwK KwkJCQkJCQkJICAiZW5kIG9mIHNjcmlwdCByZWFjaGVkIHdpdGhpbiBhIGNvbmRpdGlvbmFsLCBt aXNzaW5nIFxcZW5kaWZcbiIpOwogCQkJCX0KIAogCQkJCWlmIChpc19jb25uZWN0KQpAQCAtMzQ4 NCw3ICszNTg4LDcgQEAgZGlzY29ubmVjdF9hbGwoQ1N0YXRlICpzdGF0ZSwgaW50IGxlbmd0aCkK IHN0YXRpYyB2b2lkCiBpbml0RHJvcFRhYmxlcyhQR2Nvbm4gKmNvbikKIHsKLQlmcHJpbnRmKHN0 ZGVyciwgImRyb3BwaW5nIG9sZCB0YWJsZXMuLi5cbiIpOworCXBnYmVuY2hfZXJyb3IoTE9HLCAi ZHJvcHBpbmcgb2xkIHRhYmxlcy4uLlxuIik7CiAKIAkvKgogCSAqIFdlIGRyb3AgYWxsIHRoZSB0 YWJsZXMgaW4gb25lIGNvbW1hbmQsIHNvIHRoYXQgd2hldGhlciB0aGVyZSBhcmUKQEAgLTM1NTks NyArMzY2Myw3IEBAIGluaXRDcmVhdGVUYWJsZXMoUEdjb25uICpjb24pCiAJfTsKIAlpbnQJCQlp OwogCi0JZnByaW50ZihzdGRlcnIsICJjcmVhdGluZyB0YWJsZXMuLi5cbiIpOworCXBnYmVuY2hf ZXJyb3IoTE9HLCAiY3JlYXRpbmcgdGFibGVzLi4uXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBs ZW5ndGhvZihERExzKTsgaSsrKQogCXsKQEAgLTM2MTIsNyArMzcxNiw3IEBAIGluaXRHZW5lcmF0 ZURhdGEoUEdjb25uICpjb24pCiAJCQkJcmVtYWluaW5nX3NlYzsKIAlpbnQJCQlsb2dfaW50ZXJ2 YWwgPSAxOwogCi0JZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEuLi5cbiIpOworCXBn YmVuY2hfZXJyb3IoTE9HLCAiZ2VuZXJhdGluZyBkYXRhLi4uXG4iKTsKIAogCS8qCiAJICogd2Ug ZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJsZSB0aGUgYmFja2VuZCdz CkBAIC0zNjU4LDggKzM3NjIsMTAgQEAgaW5pdEdlbmVyYXRlRGF0YShQR2Nvbm4gKmNvbikKIAly ZXMgPSBQUWV4ZWMoY29uLCAiY29weSBwZ2JlbmNoX2FjY291bnRzIGZyb20gc3RkaW4iKTsKIAlp ZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT1BZX0lOKQogCXsKLQkJZnByaW50Zihz dGRlcnIsICIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwotCQlleGl0KDEpOworCQkvKiB3ZSBh cmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBQUWVycm9yTWVzc2FnZSBpcyBhbHdheXMgY2FsbGVk ICovCisJCUFzc2VydChFUlJPUiA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlwZ2JlbmNoX2Vy cm9yKEVSUk9SLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKTsKIAl9CiAJUFFjbGVhcihyZXMp OwogCkBAIC0zNjc0LDEwICszNzgwLDcgQEAgaW5pdEdlbmVyYXRlRGF0YShQR2Nvbm4gKmNvbikK IAkJCQkgSU5UNjRfRk9STUFUICJcdCIgSU5UNjRfRk9STUFUICJcdCVkXHRcbiIsCiAJCQkJIGos IGsgLyBuYWNjb3VudHMgKyAxLCAwKTsKIAkJaWYgKFBRcHV0bGluZShjb24sIHNxbCkpCi0JCXsK LQkJCWZwcmludGYoc3RkZXJyLCAiUFFwdXRsaW5lIGZhaWxlZFxuIik7Ci0JCQlleGl0KDEpOwot CQl9CisJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiUFFwdXRsaW5lIGZhaWxlZFxuIik7CiAKIAkJ LyoKIAkJICogSWYgd2Ugd2FudCB0byBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBsb2dnaW5nLCBw cmludCBhIG1lc3NhZ2UgZWFjaApAQCAtMzY5MSwxMCArMzc5NCwxMiBAQCBpbml0R2VuZXJhdGVE YXRhKFBHY29ubiAqY29uKQogCQkJZWxhcHNlZF9zZWMgPSBJTlNUUl9USU1FX0dFVF9ET1VCTEUo ZGlmZik7CiAJCQlyZW1haW5pbmdfc2VjID0gKChkb3VibGUpIHNjYWxlICogbmFjY291bnRzIC0g aikgKiBlbGFwc2VkX3NlYyAvIGo7CiAKLQkJCWZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQg IiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgZG9uZSAoZWxhcHNlZCAlLjJmIHMs IHJlbWFpbmluZyAlLjJmIHMpXG4iLAotCQkJCQlqLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxl LAotCQkJCQkoaW50KSAoKChpbnQ2NCkgaiAqIDEwMCkgLyAobmFjY291bnRzICogKGludDY0KSBz Y2FsZSkpLAotCQkJCQllbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CisJCQlwZ2JlbmNoX2Vy cm9yKExPRywKKwkJCQkJCSAgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBs ZXMgKCVkJSUpIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKVxuIiwKKwkJ CQkJCSAgaiwgKGludDY0KSBuYWNjb3VudHMgKiBzY2FsZSwKKwkJCQkJCSAgKGludCkgKCgoaW50 NjQpIGogKiAxMDApIC8KKwkJCQkJCQkJIChuYWNjb3VudHMgKiAoaW50NjQpIHNjYWxlKSksCisJ CQkJCQkgIGVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjKTsKIAkJfQogCQkvKiBsZXQncyBub3Qg Y2FsbCB0aGUgdGltaW5nIGZvciBlYWNoIHJvdywgYnV0IG9ubHkgZWFjaCAxMDAgcm93cyAqLwog CQllbHNlIGlmICh1c2VfcXVpZXQgJiYgKGogJSAxMDAgPT0gMCkpCkBAIC0zNzA4LDkgKzM4MTMs MTIgQEAgaW5pdEdlbmVyYXRlRGF0YShQR2Nvbm4gKmNvbikKIAkJCS8qIGhhdmUgd2UgcmVhY2hl ZCB0aGUgbmV4dCBpbnRlcnZhbCAob3IgZW5kKT8gKi8KIAkJCWlmICgoaiA9PSBzY2FsZSAqIG5h Y2NvdW50cykgfHwgKGVsYXBzZWRfc2VjID49IGxvZ19pbnRlcnZhbCAqIExPR19TVEVQX1NFQ09O RFMpKQogCQkJewotCQkJCWZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0 X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAl LjJmIHMpXG4iLAotCQkJCQkJaiwgKGludDY0KSBuYWNjb3VudHMgKiBzY2FsZSwKLQkJCQkJCShp bnQpICgoKGludDY0KSBqICogMTAwKSAvIChuYWNjb3VudHMgKiAoaW50NjQpIHNjYWxlKSksIGVs YXBzZWRfc2VjLCByZW1haW5pbmdfc2VjKTsKKwkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJ CQkgIElOVDY0X0ZPUk1BVCAiIG9mICIgSU5UNjRfRk9STUFUICIgdHVwbGVzICglZCUlKSBkb25l IChlbGFwc2VkICUuMmYgcywgcmVtYWluaW5nICUuMmYgcylcbiIsCisJCQkJCQkJICBqLCAoaW50 NjQpIG5hY2NvdW50cyAqIHNjYWxlLAorCQkJCQkJCSAgKGludCkgKCgoaW50NjQpIGogKiAxMDAp IC8KKwkJCQkJCQkJCSAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkpLAorCQkJCQkJCSAgZWxh cHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOwogCiAJCQkJLyogc2tpcCB0byB0aGUgbmV4dCBpbnRl cnZhbCAqLwogCQkJCWxvZ19pbnRlcnZhbCA9IChpbnQpIGNlaWwoZWxhcHNlZF9zZWMgLyBMT0df U1RFUF9TRUNPTkRTKTsKQEAgLTM3MTksMTUgKzM4MjcsOSBAQCBpbml0R2VuZXJhdGVEYXRhKFBH Y29ubiAqY29uKQogCiAJfQogCWlmIChQUXB1dGxpbmUoY29uLCAiXFwuXG4iKSkKLQl7Ci0JCWZw cmludGYoc3RkZXJyLCAidmVyeSBsYXN0IFBRcHV0bGluZSBmYWlsZWRcbiIpOwotCQlleGl0KDEp OwotCX0KKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwgInZlcnkgbGFzdCBQUXB1dGxpbmUgZmFpbGVk XG4iKTsKIAlpZiAoUFFlbmRjb3B5KGNvbikpCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIlBRZW5k Y29weSBmYWlsZWRcbiIpOwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwg IlBRZW5kY29weSBmYWlsZWRcbiIpOwogCiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQi KTsKIH0KQEAgLTM3MzgsNyArMzg0MCw3IEBAIGluaXRHZW5lcmF0ZURhdGEoUEdjb25uICpjb24p CiBzdGF0aWMgdm9pZAogaW5pdFZhY3V1bShQR2Nvbm4gKmNvbikKIHsKLQlmcHJpbnRmKHN0ZGVy ciwgInZhY3V1bWluZy4uLlxuIik7CisJcGdiZW5jaF9lcnJvcihMT0csICJ2YWN1dW1pbmcuLi5c biIpOwogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIGFuYWx5emUgcGdiZW5jaF9icmFu Y2hlcyIpOwogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIGFuYWx5emUgcGdiZW5jaF90 ZWxsZXJzIik7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0gYW5hbHl6ZSBwZ2JlbmNo X2FjY291bnRzIik7CkBAIC0zNzU4LDcgKzM4NjAsNyBAQCBpbml0Q3JlYXRlUEtleXMoUEdjb25u ICpjb24pCiAJfTsKIAlpbnQJCQlpOwogCi0JZnByaW50ZihzdGRlcnIsICJjcmVhdGluZyBwcmlt YXJ5IGtleXMuLi5cbiIpOworCXBnYmVuY2hfZXJyb3IoTE9HLCAiY3JlYXRpbmcgcHJpbWFyeSBr ZXlzLi4uXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuZ3Rob2YoRERMSU5ERVhlcyk7IGkrKykK IAl7CiAJCWNoYXIJCWJ1ZmZlclsyNTZdOwpAQCAtMzc5NSw3ICszODk3LDcgQEAgaW5pdENyZWF0 ZUZLZXlzKFBHY29ubiAqY29uKQogCX07CiAJaW50CQkJaTsKIAotCWZwcmludGYoc3RkZXJyLCAi Y3JlYXRpbmcgZm9yZWlnbiBrZXlzLi4uXG4iKTsKKwlwZ2JlbmNoX2Vycm9yKExPRywgImNyZWF0 aW5nIGZvcmVpZ24ga2V5cy4uLlxuIik7CiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKERETEtF WXMpOyBpKyspCiAJewogCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgRERMS0VZc1tpXSk7CkBAIC0z ODE1LDE5ICszOTE3LDE2IEBAIGNoZWNrSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVf c3RlcHMpCiAJY29uc3QgY2hhciAqc3RlcDsKIAogCWlmIChpbml0aWFsaXplX3N0ZXBzWzBdID09 ICdcMCcpCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGluaXRpYWxpemF0aW9uIHN0ZXBzIHNw ZWNpZmllZFxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAibm8g aW5pdGlhbGl6YXRpb24gc3RlcHMgc3BlY2lmaWVkXG4iKTsKIAogCWZvciAoc3RlcCA9IGluaXRp YWxpemVfc3RlcHM7ICpzdGVwICE9ICdcMCc7IHN0ZXArKykKIAl7CiAJCWlmIChzdHJjaHIoImR0 Z3ZwZiAiLCAqc3RlcCkgPT0gTlVMTCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29n bml6ZWQgaW5pdGlhbGl6YXRpb24gc3RlcCBcIiVjXCJcbiIsCi0JCQkJCSpzdGVwKTsKLQkJCWZw cmludGYoc3RkZXJyLCAiYWxsb3dlZCBzdGVwcyBhcmU6IFwiZFwiLCBcInRcIiwgXCJnXCIsIFwi dlwiLCBcInBcIiwgXCJmXCJcbiIpOwotCQkJZXhpdCgxKTsKKwkJCXBnYmVuY2hfZXJyb3IoRVJS T1IsCisJCQkJCQkgICJ1bnJlY29nbml6ZWQgaW5pdGlhbGl6YXRpb24gc3RlcCBcIiVjXCJcbiIK KwkJCQkJCSAgImFsbG93ZWQgc3RlcHMgYXJlOiBcImRcIiwgXCJ0XCIsIFwiZ1wiLCBcInZcIiwg XCJwXCIsIFwiZlwiXG4iLAorCQkJCQkJICAqc3RlcCk7CiAJCX0KIAl9CiB9CkBAIC0zODY5LDE0 ICszOTY4LDE0IEBAIHJ1bkluaXRTdGVwcyhjb25zdCBjaGFyICppbml0aWFsaXplX3N0ZXBzKQog CQkJY2FzZSAnICc6CiAJCQkJYnJlYWs7CQkJLyogaWdub3JlICovCiAJCQlkZWZhdWx0OgotCQkJ CWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGluaXRpYWxpemF0aW9uIHN0ZXAgXCIlY1wi XG4iLAotCQkJCQkJKnN0ZXApOworCQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAidW5yZWNvZ25pemVk IGluaXRpYWxpemF0aW9uIHN0ZXAgXCIlY1wiXG4iLAorCQkJCQkJCSAgKnN0ZXApOwogCQkJCVBR ZmluaXNoKGNvbik7CiAJCQkJZXhpdCgxKTsKIAkJfQogCX0KIAotCWZwcmludGYoc3RkZXJyLCAi ZG9uZS5cbiIpOworCXBnYmVuY2hfZXJyb3IoTE9HLCAiZG9uZS5cbiIpOwogCVBRZmluaXNoKGNv bik7CiB9CiAKQEAgLTM5MTQsOCArNDAxMyw5IEBAIHBhcnNlUXVlcnkoQ29tbWFuZCAqY21kKQog CiAJCWlmIChjbWQtPmFyZ2MgPj0gTUFYX0FSR1MpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAi c3RhdGVtZW50IGhhcyB0b28gbWFueSBhcmd1bWVudHMgKG1heGltdW0gaXMgJWQpOiAlc1xuIiwK LQkJCQkJTUFYX0FSR1MgLSAxLCBjbWQtPmFyZ3ZbMF0pOworCQkJcGdiZW5jaF9lcnJvcihMT0cs CisJCQkJCQkgICJzdGF0ZW1lbnQgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyAobWF4aW11bSBpcyAl ZCk6ICVzXG4iLAorCQkJCQkJICBNQVhfQVJHUyAtIDEsIGNtZC0+YXJndlswXSk7CiAJCQlwZ19m cmVlKG5hbWUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBAIC0zOTM2LDE0ICs0MDM2LDI4IEBA IHBhcnNlUXVlcnkoQ29tbWFuZCAqY21kKQogICogU2ltcGxlIGVycm9yLXByaW50aW5nIGZ1bmN0 aW9uLCBtaWdodCBiZSBuZWVkZWQgYnkgbGV4ZXIKICAqLwogc3RhdGljIHZvaWQKLXBnYmVuY2hf ZXJyb3IoY29uc3QgY2hhciAqZm10LC4uLikKK3BnYmVuY2hfc2ltcGxlX2Vycm9yKGNvbnN0IGNo YXIgKmZtdCwuLi4pCiB7CiAJdmFfbGlzdAkJYXA7CisJUFFFeHBCdWZmZXJEYXRhIGVycm1zZ19i dWY7CisJYm9vbAkJZG9uZTsKKworCS8qIFdlIGFyZSBzdXJlIHRoYXQgdGhlIGFsbG9jYXRlZCBt ZW1vcnkgZm9yIHRoZSBtZXNzYWdlIGlzIGFsd2F5cyB1c2VkLiAqLworCUFzc2VydChMT0cgPj0g bG9nX21pbl9tZXNzYWdlcyk7CiAKIAlmZmx1c2goc3Rkb3V0KTsKLQl2YV9zdGFydChhcCwgZm10 KTsKLQl2ZnByaW50ZihzdGRlcnIsIF8oZm10KSwgYXApOwotCXZhX2VuZChhcCk7CisJaW5pdFBR RXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKworCS8qIExvb3AgaW4gY2FzZSB3ZSBoYXZlIHRvIHJl dHJ5IGFmdGVyIGVubGFyZ2luZyB0aGUgYnVmZmVyLiAqLworCWRvCisJeworCQl2YV9zdGFydChh cCwgZm10KTsKKwkJZG9uZSA9IGFwcGVuZFBRRXhwQnVmZmVyVkEoJmVycm1zZ19idWYsIGZtdCwg YXApOworCQl2YV9lbmQoYXApOworCX0gd2hpbGUgKCFkb25lKTsKKworCXBnYmVuY2hfZXJyb3Io TE9HLCAiJXMiLCBlcnJtc2dfYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmZXJybXNnX2J1 Zik7CiB9CiAKIC8qCkBAIC0zOTYzLDI2ICs0MDc3LDM1IEBAIHN5bnRheF9lcnJvcihjb25zdCBj aGFyICpzb3VyY2UsIGludCBsaW5lbm8sCiAJCQkgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hh ciAqY29tbWFuZCwKIAkJCSBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKm1vcmUsIGludCBj b2x1bW4pCiB7Ci0JZnByaW50ZihzdGRlcnIsICIlczolZDogJXMiLCBzb3VyY2UsIGxpbmVubywg bXNnKTsKKwlQUUV4cEJ1ZmZlckRhdGEgZXJybXNnX2J1ZjsKKworCS8qIHdlIGFyZSBzdXJlIHRo YXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBtZXNzYWdlIGlzIGFsd2F5cyB1c2VkICov CisJQXNzZXJ0KExPRyA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCWluaXRQUUV4cEJ1ZmZlcigm ZXJybXNnX2J1Zik7CisJcHJpbnRmUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIlczolZDogJXMi LCBzb3VyY2UsIGxpbmVubywgbXNnKTsKIAlpZiAobW9yZSAhPSBOVUxMKQotCQlmcHJpbnRmKHN0 ZGVyciwgIiAoJXMpIiwgbW9yZSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAi ICglcykiLCBtb3JlKTsKIAlpZiAoY29sdW1uID49IDAgJiYgbGluZSA9PSBOVUxMKQotCQlmcHJp bnRmKHN0ZGVyciwgIiBhdCBjb2x1bW4gJWQiLCBjb2x1bW4gKyAxKTsKKwkJYXBwZW5kUFFFeHBC dWZmZXIoJmVycm1zZ19idWYsICIgYXQgY29sdW1uICVkIiwgY29sdW1uICsgMSk7CiAJaWYgKGNv bW1hbmQgIT0gTlVMTCkKLQkJZnByaW50ZihzdGRlcnIsICIgaW4gY29tbWFuZCBcIiVzXCIiLCBj b21tYW5kKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZl cnJtc2dfYnVmLCAiIGluIGNvbW1hbmQgXCIlc1wiIiwgY29tbWFuZCk7CisJYXBwZW5kUFFFeHBC dWZmZXJDaGFyKCZlcnJtc2dfYnVmLCAnXG4nKTsKIAlpZiAobGluZSAhPSBOVUxMKQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbGluZSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJt c2dfYnVmLCAiJXNcbiIsIGxpbmUpOwogCQlpZiAoY29sdW1uID49IDApCiAJCXsKIAkJCWludAkJ CWk7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBjb2x1bW47IGkrKykKLQkJCQlmcHJpbnRmKHN0ZGVy ciwgIiAiKTsKLQkJCWZwcmludGYoc3RkZXJyLCAiXiBlcnJvciBmb3VuZCBoZXJlXG4iKTsKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoJmVycm1zZ19idWYsICcgJyk7CisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmZXJybXNnX2J1ZiwgIl4gZXJyb3IgZm91bmQgaGVyZVxuIik7CiAJCX0KIAl9 CisKKwlwZ2JlbmNoX2Vycm9yKExPRywgIiVzIiwgZXJybXNnX2J1Zi5kYXRhKTsKKwl0ZXJtUFFF eHBCdWZmZXIoJmVycm1zZ19idWYpOwogCWV4aXQoMSk7CiB9CiAKQEAgLTQyMzIsMTAgKzQzNTUs OCBAQCBwcm9jZXNzX2JhY2tzbGFzaF9jb21tYW5kKFBzcWxTY2FuU3RhdGUgc3N0YXRlLCBjb25z dCBjaGFyICpzb3VyY2UpCiBzdGF0aWMgdm9pZAogQ29uZGl0aW9uRXJyb3IoY29uc3QgY2hhciAq ZGVzYywgaW50IGNtZG4sIGNvbnN0IGNoYXIgKm1zZykKIHsKLQlmcHJpbnRmKHN0ZGVyciwKLQkJ CSJjb25kaXRpb24gZXJyb3IgaW4gc2NyaXB0IFwiJXNcIiBjb21tYW5kICVkOiAlc1xuIiwKLQkJ CWRlc2MsIGNtZG4sIG1zZyk7Ci0JZXhpdCgxKTsKKwlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiY29u ZGl0aW9uIGVycm9yIGluIHNjcmlwdCBcIiVzXCIgY29tbWFuZCAlZDogJXNcbiIsCisJCQkJICBk ZXNjLCBjbWRuLCBtc2cpOwogfQogCiAvKgpAQCAtNDQzNCwxOCArNDU1NSwyMiBAQCBwcm9jZXNz X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCB3ZWlnaHQpCiAJCWZkID0gc3RkaW47CiAJ ZWxzZSBpZiAoKGZkID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpCiAJewotCQlmcHJp bnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQlmaWxl bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgxKTsKKwkJLyogd2UgYXJlIHN1cmUgdGhh dCB0aGUgZnVuY3Rpb24gc3RyZXJyb3IgaXMgYWx3YXlzIGNhbGxlZCAqLworCQlBc3NlcnQoRVJS T1IgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwgImNvdWxk IG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJICBmaWxlbmFtZSwgc3RyZXJyb3Io ZXJybm8pKTsKIAl9CiAKIAlidWYgPSByZWFkX2ZpbGVfY29udGVudHMoZmQpOwogCiAJaWYgKGZl cnJvcihmZCkpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCByZWFkIGZpbGUgXCIl c1wiOiAlc1xuIiwKLQkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgxKTsK KwkJLyogd2UgYXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gc3RyZXJyb3IgaXMgYWx3YXlzIGNh bGxlZCAqLworCQlBc3NlcnQoRVJST1IgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJcGdiZW5j aF9lcnJvcihFUlJPUiwgImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJ ICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKIAlpZiAoZmQgIT0gc3RkaW4pCkBA IC00NDY4LDExICs0NTkzLDE5IEBAIHN0YXRpYyB2b2lkCiBsaXN0QXZhaWxhYmxlU2NyaXB0cyh2 b2lkKQogewogCWludAkJCWk7CisJUFFFeHBCdWZmZXJEYXRhIGVycm1zZ19idWY7CiAKLQlmcHJp bnRmKHN0ZGVyciwgIkF2YWlsYWJsZSBidWlsdGluIHNjcmlwdHM6XG4iKTsKKwkvKiB3ZSBhcmUg c3VyZSB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgbWVzc2FnZSBpcyBhbHdheXMg dXNlZCAqLworCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwlpbml0UFFFeHBC dWZmZXIoJmVycm1zZ19idWYpOworCXByaW50ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiQXZh aWxhYmxlIGJ1aWx0aW4gc2NyaXB0czpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGhvZihi dWlsdGluX3NjcmlwdCk7IGkrKykKLQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBidWlsdGlu X3NjcmlwdFtpXS5uYW1lKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWFwcGVuZFBRRXhw QnVmZmVyKCZlcnJtc2dfYnVmLCAiXHQlc1xuIiwgYnVpbHRpbl9zY3JpcHRbaV0ubmFtZSk7CisJ YXBwZW5kUFFFeHBCdWZmZXJDaGFyKCZlcnJtc2dfYnVmLCAnXG4nKTsKKworCXBnYmVuY2hfZXJy b3IoTE9HLCAiJXMiLCBlcnJtc2dfYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmZXJybXNn X2J1Zik7CiB9CiAKIC8qIHJldHVybiBidWlsdGluIHNjcmlwdCAibmFtZSIgaWYgdW5hbWJpZ3Vv dXMsIGZhaWxzIGlmIG5vdCBmb3VuZCAqLwpAQCAtNDQ5OSwxMCArNDYzMiwxMSBAQCBmaW5kQnVp bHRpbihjb25zdCBjaGFyICpuYW1lKQogCiAJLyogZXJyb3IgY2FzZXMgKi8KIAlpZiAoZm91bmQg PT0gMCkKLQkJZnByaW50ZihzdGRlcnIsICJubyBidWlsdGluIHNjcmlwdCBmb3VuZCBmb3IgbmFt ZSBcIiVzXCJcbiIsIG5hbWUpOworCQlwZ2JlbmNoX2Vycm9yKExPRywgIm5vIGJ1aWx0aW4gc2Ny aXB0IGZvdW5kIGZvciBuYW1lIFwiJXNcIlxuIiwgbmFtZSk7CiAJZWxzZQkJCQkJCS8qIGZvdW5k ID4gMSAqLwotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiYW1iaWd1b3VzIGJ1aWx0aW4gbmFtZTog JWQgYnVpbHRpbiBzY3JpcHRzIGZvdW5kIGZvciBwcmVmaXggXCIlc1wiXG4iLCBmb3VuZCwgbmFt ZSk7CisJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkgICJhbWJpZ3VvdXMgYnVpbHRpbiBuYW1l OiAlZCBidWlsdGluIHNjcmlwdHMgZm91bmQgZm9yIHByZWZpeCBcIiVzXCJcbiIsCisJCQkJCSAg Zm91bmQsIG5hbWUpOwogCiAJbGlzdEF2YWlsYWJsZVNjcmlwdHMoKTsKIAlleGl0KDEpOwpAQCAt NDUzNCwxNiArNDY2OCwxMiBAQCBwYXJzZVNjcmlwdFdlaWdodChjb25zdCBjaGFyICpvcHRpb24s IGNoYXIgKipzY3JpcHQpCiAJCWVycm5vID0gMDsKIAkJd3RtcCA9IHN0cnRvbChzZXAgKyAxLCAm YmFkcCwgMTApOwogCQlpZiAoZXJybm8gIT0gMCB8fCBiYWRwID09IHNlcCArIDEgfHwgKmJhZHAg IT0gJ1wwJykKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHdlaWdodCBzcGVjaWZp Y2F0aW9uOiAlc1xuIiwgc2VwKTsKLQkJCWV4aXQoMSk7Ci0JCX0KKwkJCXBnYmVuY2hfZXJyb3Io RVJST1IsICJpbnZhbGlkIHdlaWdodCBzcGVjaWZpY2F0aW9uOiAlc1xuIiwgc2VwKTsKIAkJaWYg KHd0bXAgPiBJTlRfTUFYIHx8IHd0bXAgPCAwKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJ CQkJIndlaWdodCBzcGVjaWZpY2F0aW9uIG91dCBvZiByYW5nZSAoMCAuLiAldSk6ICIgSU5UNjRf Rk9STUFUICJcbiIsCi0JCQkJCUlOVF9NQVgsIChpbnQ2NCkgd3RtcCk7Ci0JCQlleGl0KDEpOwor CQkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJCSAgIndlaWdodCBzcGVjaWZpY2F0aW9uIG91 dCBvZiByYW5nZSAoMCAuLiAldSk6ICIgSU5UNjRfRk9STUFUICJcbiIsCisJCQkJCQkgIElOVF9N QVgsIChpbnQ2NCkgd3RtcCk7CiAJCX0KIAkJd2VpZ2h0ID0gd3RtcDsKIAl9CkBAIC00NTYyLDE0 ICs0NjkyLDE0IEBAIGFkZFNjcmlwdChQYXJzZWRTY3JpcHQgc2NyaXB0KQogewogCWlmIChzY3Jp cHQuY29tbWFuZHMgPT0gTlVMTCB8fCBzY3JpcHQuY29tbWFuZHNbMF0gPT0gTlVMTCkKIAl7Ci0J CWZwcmludGYoc3RkZXJyLCAiZW1wdHkgY29tbWFuZCBsaXN0IGZvciBzY3JpcHQgXCIlc1wiXG4i LCBzY3JpcHQuZGVzYyk7Ci0JCWV4aXQoMSk7CisJCXBnYmVuY2hfZXJyb3IoRVJST1IsICJlbXB0 eSBjb21tYW5kIGxpc3QgZm9yIHNjcmlwdCBcIiVzXCJcbiIsCisJCQkJCSAgc2NyaXB0LmRlc2Mp OwogCX0KIAogCWlmIChudW1fc2NyaXB0cyA+PSBNQVhfU0NSSVBUUykKIAl7Ci0JCWZwcmludGYo c3RkZXJyLCAiYXQgbW9zdCAlZCBTUUwgc2NyaXB0cyBhcmUgYWxsb3dlZFxuIiwgTUFYX1NDUklQ VFMpOwotCQlleGl0KDEpOworCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiYXQgbW9zdCAlZCBTUUwg c2NyaXB0cyBhcmUgYWxsb3dlZFxuIiwKKwkJCQkJICBNQVhfU0NSSVBUUyk7CiAJfQogCiAJQ2hl Y2tDb25kaXRpb25hbChzY3JpcHQpOwpAQCAtNDc1NCw5ICs0ODg0LDggQEAgc2V0X3JhbmRvbV9z ZWVkKGNvbnN0IGNoYXIgKnNlZWQpCiAJCWlmICghcGdfc3Ryb25nX3JhbmRvbSgmaXNlZWQsIHNp emVvZihpc2VlZCkpKQogI2VuZGlmCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkiY2Fu bm90IHNlZWQgcmFuZG9tIGZyb20gYSBzdHJvbmcgc291cmNlLCBub25lIGF2YWlsYWJsZTogIgot CQkJCQkidXNlIFwidGltZVwiIG9yIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuXG4iKTsKKwkJ CXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJICAiY2Fubm90IHNlZWQgcmFuZG9tIGZyb20gYSBz dHJvbmcgc291cmNlLCBub25lIGF2YWlsYWJsZTogdXNlIFwidGltZVwiIG9yIGFuIHVuc2lnbmVk IGludGVnZXIgdmFsdWUuXG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KQEAgLTQ3Njcs MTUgKzQ4OTYsMTUgQEAgc2V0X3JhbmRvbV9zZWVkKGNvbnN0IGNoYXIgKnNlZWQpCiAKIAkJaWYg KHNzY2FuZihzZWVkLCAiJXUlYyIsICZpc2VlZCwgJmdhcmJhZ2UpICE9IDEpCiAJCXsKLQkJCWZw cmludGYoc3RkZXJyLAotCQkJCQkidW5yZWNvZ25pemVkIHJhbmRvbSBzZWVkIG9wdGlvbiBcIiVz XCI6IGV4cGVjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBcInRpbWVcIiBvciBcInJhbmRcIlxu IiwKLQkJCQkJc2VlZCk7CisJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJCSAgInVucmVjb2du aXplZCByYW5kb20gc2VlZCBvcHRpb24gXCIlc1wiOiBleHBlY3RpbmcgYW4gdW5zaWduZWQgaW50 ZWdlciwgXCJ0aW1lXCIgb3IgXCJyYW5kXCJcbiIsCisJCQkJCQkgIHNlZWQpOwogCQkJcmV0dXJu IGZhbHNlOwogCQl9CiAJfQogCiAJaWYgKHNlZWQgIT0gTlVMTCkKLQkJZnByaW50ZihzdGRlcnIs ICJzZXR0aW5nIHJhbmRvbSBzZWVkIHRvICV1XG4iLCBpc2VlZCk7CisJCXBnYmVuY2hfZXJyb3Io TE9HLCAic2V0dGluZyByYW5kb20gc2VlZCB0byAldVxuIiwgaXNlZWQpOwogCXNyYW5kb20oaXNl ZWQpOwogCS8qIG5vIHByZWNpc2lvbiBsb3NzOiAzMiBiaXQgdW5zaWduZWQgaW50IGNhc3QgdG8g NjQgYml0IGludCAqLwogCXJhbmRvbV9zZWVkID0gaXNlZWQ7CkBAIC00OTA3LDggKzUwMzYsOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiBzZXQgcmFuZG9tIHNlZWQgZWFybHks IGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQgd2hpbGUgcGFyc2luZyBzY3JpcHRzLiAqLwogCWlmICgh c2V0X3JhbmRvbV9zZWVkKGdldGVudigiUEdCRU5DSF9SQU5ET01fU0VFRCIpKSkKIAl7Ci0JCWZw cmludGYoc3RkZXJyLCAiZXJyb3Igd2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIFBHQkVO Q0hfUkFORE9NX1NFRUQgZW52aXJvbm1lbnQgdmFyaWFibGVcbiIpOwotCQlleGl0KDEpOworCQlw Z2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJCQkgICJlcnJvciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBz ZWVkIGZyb20gUEdCRU5DSF9SQU5ET01fU0VFRCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIik7CiAJ fQogCiAJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImlJOmg6bnZwOmRxYjpT TmM6ajpDcnM6dDpUOlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgp KSAhPSAtMSkKQEAgLTQ5NDEsMTYgKzUwNzAsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCQkJcGdwb3J0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAJCQljYXNl ICdkJzoKLQkJCQlkZWJ1ZysrOworCQkJCWxvZ19taW5fbWVzc2FnZXMgPSBERUJVRzsKIAkJCQli cmVhazsKIAkJCWNhc2UgJ2MnOgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsK IAkJCQluY2xpZW50cyA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAobmNsaWVudHMgPD0gMCB8fCBu Y2xpZW50cyA+IE1BWENMSUVOVFMpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFs aWQgbnVtYmVyIG9mIGNsaWVudHM6IFwiJXNcIlxuIiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQll eGl0KDEpOworCQkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiaW52YWxpZCBudW1iZXIgb2YgY2xp ZW50czogXCIlc1wiXG4iLAorCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJfQogI2lmZGVmIEhBVkVf R0VUUkxJTUlUCiAjaWZkZWYgUkxJTUlUX05PRklMRQkJCS8qIG1vc3QgcGxhdGZvcm1zIHVzZSBS TElNSVRfTk9GSUxFICovCkBAIC00OTU5LDE1ICs1MDg3LDIwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCWlmIChnZXRybGltaXQoUkxJTUlUX09GSUxFLCAmcmxpbSkgPT0gLTEp CiAjZW5kaWYJCQkJCQkJLyogUkxJTUlUX05PRklMRSAqLwogCQkJCXsKLQkJCQkJZnByaW50Zihz dGRlcnIsICJnZXRybGltaXQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQkJ ZXhpdCgxKTsKKwkJCQkJLyoKKwkJCQkJICogV2UgYXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24g c3RyZXJyb3IgaXMgYWx3YXlzIGNhbGxlZC4KKwkJCQkJICovCisJCQkJCUFzc2VydChFUlJPUiA+ PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiZ2V0cmxp bWl0IGZhaWxlZDogJXNcbiIsCisJCQkJCQkJCSAgc3RyZXJyb3IoZXJybm8pKTsKIAkJCQl9CiAJ CQkJaWYgKHJsaW0ucmxpbV9jdXIgPCBuY2xpZW50cyArIDMpCiAJCQkJewotCQkJCQlmcHJpbnRm KHN0ZGVyciwgIm5lZWQgYXQgbGVhc3QgJWQgb3BlbiBmaWxlcywgYnV0IHN5c3RlbSBsaW1pdCBp cyAlbGRcbiIsCi0JCQkJCQkJbmNsaWVudHMgKyAzLCAobG9uZykgcmxpbS5ybGltX2N1cik7Ci0J CQkJCWZwcmludGYoc3RkZXJyLCAiUmVkdWNlIG51bWJlciBvZiBjbGllbnRzLCBvciB1c2UgbGlt aXQvdWxpbWl0IHRvIGluY3JlYXNlIHRoZSBzeXN0ZW0gbGltaXQuXG4iKTsKLQkJCQkJZXhpdCgx KTsKKwkJCQkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJCQkJICAibmVlZCBhdCBsZWFzdCAl ZCBvcGVuIGZpbGVzLCBidXQgc3lzdGVtIGxpbWl0IGlzICVsZFxuIgorCQkJCQkJCQkgICJSZWR1 Y2UgbnVtYmVyIG9mIGNsaWVudHMsIG9yIHVzZSBsaW1pdC91bGltaXQgdG8gaW5jcmVhc2UgdGhl IHN5c3RlbSBsaW1pdC5cbiIsCisJCQkJCQkJCSAgbmNsaWVudHMgKyAzLCAobG9uZykgcmxpbS5y bGltX2N1cik7CiAJCQkJfQogI2VuZGlmCQkJCQkJCS8qIEhBVkVfR0VUUkxJTUlUICovCiAJCQkJ YnJlYWs7CkBAIC00OTc2LDE1ICs1MTA5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQkJCW50aHJlYWRzID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChudGhyZWFkcyA8PSAwKQog CQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzOiBc IiVzXCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKKwkJCQkJcGdiZW5jaF9l cnJvcihFUlJPUiwgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHM6IFwiJXNcIlxuIiwKKwkJCQkJ CQkJICBvcHRhcmcpOwogCQkJCX0KICNpZm5kZWYgRU5BQkxFX1RIUkVBRF9TQUZFVFkKIAkJCQlp ZiAobnRocmVhZHMgIT0gMSkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAidGhyZWFkcyBh cmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtOyB1c2UgLWoxXG4iKTsKLQkJCQkJZXhp dCgxKTsKKwkJCQkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJCQkJICAidGhyZWFkcyBhcmUg bm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtOyB1c2UgLWoxXG4iKTsKIAkJCQl9CiAjZW5k aWYJCQkJCQkJLyogIUVOQUJMRV9USFJFQURfU0FGRVRZICovCiAJCQkJYnJlYWs7CkBAIC01MDAx LDggKzUxMzMsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlzY2FsZSA9IGF0 b2kob3B0YXJnKTsKIAkJCQlpZiAoc2NhbGUgPD0gMCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3Rk ZXJyLCAiaW52YWxpZCBzY2FsaW5nIGZhY3RvcjogXCIlc1wiXG4iLCBvcHRhcmcpOwotCQkJCQll eGl0KDEpOworCQkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiaW52YWxpZCBzY2FsaW5nIGZhY3Rv cjogXCIlc1wiXG4iLAorCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJ Y2FzZSAndCc6CkBAIC01MDEwLDE5ICs1MTQyLDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQkJCW54YWN0cyA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAobnhhY3RzIDw9IDApCiAJ CQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVyIG9mIHRyYW5zYWN0aW9u czogXCIlc1wiXG4iLAotCQkJCQkJCW9wdGFyZyk7Ci0JCQkJCWV4aXQoMSk7CisJCQkJCXBnYmVu Y2hfZXJyb3IoRVJST1IsCisJCQkJCQkJCSAgImludmFsaWQgbnVtYmVyIG9mIHRyYW5zYWN0aW9u czogXCIlc1wiXG4iLAorCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJ Y2FzZSAnVCc6CiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOwogCQkJCWR1cmF0 aW9uID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChkdXJhdGlvbiA8PSAwKQotCQkJCXsKLQkJCQkJ ZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGR1cmF0aW9uOiBcIiVzXCJcbiIsIG9wdGFyZyk7Ci0J CQkJCWV4aXQoMSk7Ci0JCQkJfQorCQkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiaW52YWxpZCBk dXJhdGlvbjogXCIlc1wiXG4iLCBvcHRhcmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnVSc6CiAJ CQkJbG9naW4gPSBwZ19zdHJkdXAob3B0YXJnKTsKQEAgLTUwNjksMTQgKzUxOTgsMTMgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkJCQkJaWYgKChwID0gc3RyY2hyKG9wdGFyZywg Jz0nKSkgPT0gTlVMTCB8fCBwID09IG9wdGFyZyB8fCAqKHAgKyAxKSA9PSAnXDAnKQogCQkJCQl7 Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgdmFyaWFibGUgZGVmaW5pdGlvbjogXCIl c1wiXG4iLAotCQkJCQkJCQlvcHRhcmcpOwotCQkJCQkJZXhpdCgxKTsKKwkJCQkJCXBnYmVuY2hf ZXJyb3IoRVJST1IsCisJCQkJCQkJCQkgICJpbnZhbGlkIHZhcmlhYmxlIGRlZmluaXRpb246IFwi JXNcIlxuIiwKKwkJCQkJCQkJCSAgb3B0YXJnKTsKIAkJCQkJfQogCiAJCQkJCSpwKysgPSAnXDAn OwotCQkJCQlpZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVswXSwgIm9wdGlvbiIsIG9wdGFyZywgcCkp Ci0JCQkJCQlleGl0KDEpOworCQkJCQlwdXRWYXJpYWJsZSgmc3RhdGVbMF0sICJvcHRpb24iLCBv cHRhcmcsIHApOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgJ0YnOgpAQCAtNTA4NCw4ICs1 MjEyLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZmlsbGZhY3RvciA9IGF0 b2kob3B0YXJnKTsKIAkJCQlpZiAoZmlsbGZhY3RvciA8IDEwIHx8IGZpbGxmYWN0b3IgPiAxMDAp CiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgZmlsbGZhY3RvcjogXCIlc1wi XG4iLCBvcHRhcmcpOwotCQkJCQlleGl0KDEpOworCQkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAi aW52YWxpZCBmaWxsZmFjdG9yOiBcIiVzXCJcbiIsCisJCQkJCQkJCSAgb3B0YXJnKTsKIAkJCQl9 CiAJCQkJYnJlYWs7CiAJCQljYXNlICdNJzoKQEAgLTUwOTUsOSArNTIyMyw4IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJYnJlYWs7CiAJCQkJaWYgKHF1ZXJ5bW9kZSA+PSBO VU1fUVVFUllNT0RFKQogCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHF1ZXJ5 IG1vZGUgKC1NKTogXCIlc1wiXG4iLAotCQkJCQkJCW9wdGFyZyk7Ci0JCQkJCWV4aXQoMSk7CisJ CQkJCXBnYmVuY2hfZXJyb3IoRVJST1IsICJpbnZhbGlkIHF1ZXJ5IG1vZGUgKC1NKTogXCIlc1wi XG4iLAorCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAnUCc6 CkBAIC01MTA1LDkgKzUyMzIsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlw cm9ncmVzcyA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAocHJvZ3Jlc3MgPD0gMCkKIAkJCQl7Ci0J CQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCB0aHJlYWQgcHJvZ3Jlc3MgZGVsYXk6IFwiJXNc IlxuIiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQlleGl0KDEpOworCQkJCQlwZ2JlbmNoX2Vycm9y KEVSUk9SLAorCQkJCQkJCQkgICJpbnZhbGlkIHRocmVhZCBwcm9ncmVzcyBkZWxheTogXCIlc1wi XG4iLAorCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAnUic6 CkBAIC01MTE5LDggKzUyNDYsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJ CQlpZiAodGhyb3R0bGVfdmFsdWUgPD0gMC4wKQogCQkJCQl7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVy ciwgImludmFsaWQgcmF0ZSBsaW1pdDogXCIlc1wiXG4iLCBvcHRhcmcpOwotCQkJCQkJZXhpdCgx KTsKKwkJCQkJCXBnYmVuY2hfZXJyb3IoRVJST1IsICJpbnZhbGlkIHJhdGUgbGltaXQ6IFwiJXNc IlxuIiwKKwkJCQkJCQkJCSAgb3B0YXJnKTsKIAkJCQkJfQogCQkJCQkvKiBJbnZlcnQgcmF0ZSBs aW1pdCBpbnRvIGEgdGltZSBvZmZzZXQgKi8KIAkJCQkJdGhyb3R0bGVfZGVsYXkgPSAoaW50NjQp ICgxMDAwMDAwLjAgLyB0aHJvdHRsZV92YWx1ZSk7CkBAIC01MTMyLDkgKzUyNTksOCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJCQlpZiAobGltaXRfbXMgPD0gMC4wKQogCQkJ CQl7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbGF0ZW5jeSBsaW1pdDogXCIlc1wi XG4iLAotCQkJCQkJCQlvcHRhcmcpOwotCQkJCQkJZXhpdCgxKTsKKwkJCQkJCXBnYmVuY2hfZXJy b3IoRVJST1IsICJpbnZhbGlkIGxhdGVuY3kgbGltaXQ6IFwiJXNcIlxuIiwKKwkJCQkJCQkJCSAg b3B0YXJnKTsKIAkJCQkJfQogCQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJ CQkJCWxhdGVuY3lfbGltaXQgPSAoaW50NjQpIChsaW1pdF9tcyAqIDEwMDApOwpAQCAtNTE1Nyw4 ICs1MjgzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJc2FtcGxlX3JhdGUg PSBhdG9mKG9wdGFyZyk7CiAJCQkJaWYgKHNhbXBsZV9yYXRlIDw9IDAuMCB8fCBzYW1wbGVfcmF0 ZSA+IDEuMCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBzYW1wbGluZyBy YXRlOiBcIiVzXCJcbiIsIG9wdGFyZyk7Ci0JCQkJCWV4aXQoMSk7CisJCQkJCXBnYmVuY2hfZXJy b3IoRVJST1IsICJpbnZhbGlkIHNhbXBsaW5nIHJhdGU6IFwiJXNcIlxuIiwKKwkJCQkJCQkJICBv cHRhcmcpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgNToJCQkJLyogYWdncmVnYXRlLWlu dGVydmFsICovCkBAIC01MTY2LDkgKzUyOTIsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQlhZ2dfaW50ZXJ2YWwgPSBhdG9pKG9wdGFyZyk7CiAJCQkJaWYgKGFnZ19pbnRlcnZh bCA8PSAwKQogCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG51bWJlciBvZiBz ZWNvbmRzIGZvciBhZ2dyZWdhdGlvbjogXCIlc1wiXG4iLAotCQkJCQkJCW9wdGFyZyk7Ci0JCQkJ CWV4aXQoMSk7CisJCQkJCXBnYmVuY2hfZXJyb3IoRVJST1IsCisJCQkJCQkJCSAgImludmFsaWQg bnVtYmVyIG9mIHNlY29uZHMgZm9yIGFnZ3JlZ2F0aW9uOiBcIiVzXCJcbiIsCisJCQkJCQkJCSAg b3B0YXJnKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDY6CQkJCS8qIHByb2dyZXNzLXRp bWVzdGFtcCAqLwpAQCAtNTE4NywxMyArNTMxMywxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJCQkJaWYgKCFzZXRf cmFuZG9tX3NlZWQob3B0YXJnKSkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiZXJyb3Ig d2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFuZG9tLXNlZWQgb3B0aW9uXG4iKTsK LQkJCQkJZXhpdCgxKTsKKwkJCQkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJCQkJICAiZXJy b3Igd2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFuZG9tLXNlZWQgb3B0aW9uXG4i KTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCWZwcmludGYoc3RkZXJyLCBf KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpLCBwcm9nbmFtZSk7 Ci0JCQkJZXhpdCgxKTsKKwkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJCQkJCSAgXygiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKwkJCQkJCQkgIHByb2du YW1lKTsKIAkJCQlicmVhazsKIAkJfQogCX0KQEAgLTUyMzAsMTAgKzUzNTcsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJdG90YWxfd2VpZ2h0ICs9IHNxbF9zY3JpcHRbaV0ud2Vp Z2h0OwogCiAJaWYgKHRvdGFsX3dlaWdodCA9PSAwICYmICFpc19pbml0X21vZGUpCi0JewotCQlm cHJpbnRmKHN0ZGVyciwgInRvdGFsIHNjcmlwdCB3ZWlnaHQgbXVzdCBub3QgYmUgemVyb1xuIik7 Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAidG90YWwgc2NyaXB0IHdl aWdodCBtdXN0IG5vdCBiZSB6ZXJvXG4iKTsKIAogCS8qIHNob3cgcGVyIHNjcmlwdCBzdGF0cyBp ZiBzZXZlcmFsIHNjcmlwdHMgYXJlIHVzZWQgKi8KIAlpZiAobnVtX3NjcmlwdHMgPiAxKQpAQCAt NTI2Niw4ICs1MzkwLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJewogCQlpZiAo YmVuY2htYXJraW5nX29wdGlvbl9zZXQpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAic29tZSBv ZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgaW4gaW5pdGlhbGl6YXRpb24g KC1pKSBtb2RlXG4iKTsKLQkJCWV4aXQoMSk7CisJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJ CQkJICAic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgaW4gaW5p dGlhbGl6YXRpb24gKC1pKSBtb2RlXG4iKTsKIAkJfQogCiAJCWlmIChpbml0aWFsaXplX3N0ZXBz ID09IE5VTEwpCkBAIC01MzAxLDE1ICs1NDI1LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCXsKIAkJaWYgKGluaXRpYWxpemF0aW9uX29wdGlvbl9zZXQpCiAJCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQg aW4gYmVuY2htYXJraW5nIG1vZGVcbiIpOwotCQkJZXhpdCgxKTsKKwkJCXBnYmVuY2hfZXJyb3Io RVJST1IsCisJCQkJCQkgICJzb21lIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBjYW5ub3QgYmUg dXNlZCBpbiBiZW5jaG1hcmtpbmcgbW9kZVxuIik7CiAJCX0KIAl9CiAKIAlpZiAobnhhY3RzID4g MCAmJiBkdXJhdGlvbiA+IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgInNwZWNpZnkgZWl0aGVy IGEgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAoLXQpIG9yIGEgZHVyYXRpb24gKC1UKSwgbm90IGJv dGhcbiIpOwotCQlleGl0KDEpOworCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJCQkgICJzcGVj aWZ5IGVpdGhlciBhIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKC10KSBvciBhIGR1cmF0aW9uICgt VCksIG5vdCBib3RoXG4iKTsKIAl9CiAKIAkvKiBVc2UgREVGQVVMVF9OWEFDVFMgaWYgbmVpdGhl ciBueGFjdHMgbm9yIGR1cmF0aW9uIGlzIHNwZWNpZmllZC4gKi8KQEAgLTUzMTksNDUgKzU0NDMs NDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJLyogLS1zYW1wbGluZy1yYXRlIG1h eSBiZSB1c2VkIG9ubHkgd2l0aCAtbCAqLwogCWlmIChzYW1wbGVfcmF0ZSA+IDAuMCAmJiAhdXNl X2xvZykKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAibG9nIHNhbXBsaW5nICgtLXNhbXBsaW5nLXJh dGUpIGlzIGFsbG93ZWQgb25seSB3aGVuIGxvZ2dpbmcgdHJhbnNhY3Rpb25zICgtbClcbiIpOwot CQlleGl0KDEpOworCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJCQkgICJsb2cgc2FtcGxpbmcg KC0tc2FtcGxpbmctcmF0ZSkgaXMgYWxsb3dlZCBvbmx5IHdoZW4gbG9nZ2luZyB0cmFuc2FjdGlv bnMgKC1sKVxuIik7CiAJfQogCiAJLyogLS1zYW1wbGluZy1yYXRlIG1heSBub3QgYmUgdXNlZCB3 aXRoIC0tYWdncmVnYXRlLWludGVydmFsICovCiAJaWYgKHNhbXBsZV9yYXRlID4gMC4wICYmIGFn Z19pbnRlcnZhbCA+IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImxvZyBzYW1wbGluZyAoLS1z YW1wbGluZy1yYXRlKSBhbmQgYWdncmVnYXRpb24gKC0tYWdncmVnYXRlLWludGVydmFsKSBjYW5u b3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lXG4iKTsKLQkJZXhpdCgxKTsKKwkJcGdiZW5jaF9l cnJvcihFUlJPUiwKKwkJCQkJICAibG9nIHNhbXBsaW5nICgtLXNhbXBsaW5nLXJhdGUpIGFuZCBh Z2dyZWdhdGlvbiAoLS1hZ2dyZWdhdGUtaW50ZXJ2YWwpIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBz YW1lIHRpbWVcbiIpOwogCX0KIAogCWlmIChhZ2dfaW50ZXJ2YWwgPiAwICYmICF1c2VfbG9nKQog CXsKLQkJZnByaW50ZihzdGRlcnIsICJsb2cgYWdncmVnYXRpb24gaXMgYWxsb3dlZCBvbmx5IHdo ZW4gYWN0dWFsbHkgbG9nZ2luZyB0cmFuc2FjdGlvbnNcbiIpOwotCQlleGl0KDEpOworCQlwZ2Jl bmNoX2Vycm9yKEVSUk9SLAorCQkJCQkgICJsb2cgYWdncmVnYXRpb24gaXMgYWxsb3dlZCBvbmx5 IHdoZW4gYWN0dWFsbHkgbG9nZ2luZyB0cmFuc2FjdGlvbnNcbiIpOwogCX0KIAogCWlmICghdXNl X2xvZyAmJiBsb2dmaWxlX3ByZWZpeCkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAibG9nIGZpbGUg cHJlZml4ICgtLWxvZy1wcmVmaXgpIGlzIGFsbG93ZWQgb25seSB3aGVuIGxvZ2dpbmcgdHJhbnNh Y3Rpb25zICgtbClcbiIpOwotCQlleGl0KDEpOworCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLAorCQkJ CQkgICJsb2cgZmlsZSBwcmVmaXggKC0tbG9nLXByZWZpeCkgaXMgYWxsb3dlZCBvbmx5IHdoZW4g bG9nZ2luZyB0cmFuc2FjdGlvbnMgKC1sKVxuIik7CiAJfQogCiAJaWYgKGR1cmF0aW9uID4gMCAm JiBhZ2dfaW50ZXJ2YWwgPiBkdXJhdGlvbikKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAibnVtYmVy IG9mIHNlY29uZHMgZm9yIGFnZ3JlZ2F0aW9uICglZCkgbXVzdCBub3QgYmUgaGlnaGVyIHRoYW4g dGVzdCBkdXJhdGlvbiAoJWQpXG4iLCBhZ2dfaW50ZXJ2YWwsIGR1cmF0aW9uKTsKLQkJZXhpdCgx KTsKKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJICAibnVtYmVyIG9mIHNlY29uZHMgZm9y IGFnZ3JlZ2F0aW9uICglZCkgbXVzdCBub3QgYmUgaGlnaGVyIHRoYW4gdGVzdCBkdXJhdGlvbiAo JWQpXG4iLAorCQkJCQkgIGFnZ19pbnRlcnZhbCwgZHVyYXRpb24pOwogCX0KIAogCWlmIChkdXJh dGlvbiA+IDAgJiYgYWdnX2ludGVydmFsID4gMCAmJiBkdXJhdGlvbiAlIGFnZ19pbnRlcnZhbCAh PSAwKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICJkdXJhdGlvbiAoJWQpIG11c3QgYmUgYSBtdWx0 aXBsZSBvZiBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAoJWQpXG4iLCBkdXJhdGlvbiwgYWdnX2ludGVy dmFsKTsKLQkJZXhpdCgxKTsKKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJICAiZHVyYXRp b24gKCVkKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYWdncmVnYXRpb24gaW50ZXJ2YWwgKCVkKVxu IiwKKwkJCQkJICBkdXJhdGlvbiwgYWdnX2ludGVydmFsKTsKIAl9CiAKIAlpZiAocHJvZ3Jlc3Nf dGltZXN0YW1wICYmIHByb2dyZXNzID09IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIi0tcHJv Z3Jlc3MtdGltZXN0YW1wIGlzIGFsbG93ZWQgb25seSB1bmRlciAtLXByb2dyZXNzXG4iKTsKLQkJ ZXhpdCgxKTsKKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwKKwkJCQkJICAiLS1wcm9ncmVzcy10aW1l c3RhbXAgaXMgYWxsb3dlZCBvbmx5IHVuZGVyIC0tcHJvZ3Jlc3NcbiIpOwogCX0KIAogCS8qCkBA IC01MzgzLDE1ICs1NTA5LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCQkJ aWYgKHZhci0+dmFsdWUudHlwZSAhPSBQR0JUX05PX1ZBTFVFKQogCQkJCXsKLQkJCQkJaWYgKCFw dXRWYXJpYWJsZVZhbHVlKCZzdGF0ZVtpXSwgInN0YXJ0dXAiLAotCQkJCQkJCQkJCSAgdmFyLT5u YW1lLCAmdmFyLT52YWx1ZSkpCi0JCQkJCQlleGl0KDEpOworCQkJCQlwdXRWYXJpYWJsZVZhbHVl KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLAorCQkJCQkJCQkJIHZhci0+bmFtZSwgJnZhci0+dmFsdWUs IGZhbHNlKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZSgm c3RhdGVbaV0sICJzdGFydHVwIiwKLQkJCQkJCQkJCSB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKSkK LQkJCQkJCWV4aXQoMSk7CisJCQkJCXB1dFZhcmlhYmxlKCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCB2 YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU0MDQsNyArNTUy Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlpbml0UmFuZG9tU3RhdGUoJnN0 YXRlW2ldLnJhbmRvbV9zdGF0ZSk7CiAJfQogCi0JaWYgKGRlYnVnKQorCWlmIChERUJVRyA+PSBs b2dfbWluX21lc3NhZ2VzKQogCXsKIAkJaWYgKGR1cmF0aW9uIDw9IDApCiAJCQlwcmludGYoInBn aG9zdDogJXMgcGdwb3J0OiAlcyBuY2xpZW50czogJWQgbnhhY3RzOiAlZCBkYk5hbWU6ICVzXG4i LApAQCAtNTQyMSw5ICs1NTQ0LDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJ aWYgKFBRc3RhdHVzKGNvbikgPT0gQ09OTkVDVElPTl9CQUQpCiAJewotCQlmcHJpbnRmKHN0ZGVy ciwgImNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZFxuIiwgZGJOYW1lKTsKLQkJ ZnByaW50ZihzdGRlcnIsICIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwotCQlleGl0KDEpOwor CQkvKiB3ZSBhcmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBQUWVycm9yTWVzc2FnZSBpcyBhbHdh eXMgY2FsbGVkICovCisJCUFzc2VydChFUlJPUiA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQlw Z2JlbmNoX2Vycm9yKEVSUk9SLCAiY29ubmVjdGlvbiB0byBkYXRhYmFzZSBcIiVzXCIgZmFpbGVk XG4lcyIsCisJCQkJCSAgZGJOYW1lLCBQUWVycm9yTWVzc2FnZShjb24pKTsKIAl9CiAKIAlpZiAo aW50ZXJuYWxfc2NyaXB0X3VzZWQpCkBAIC01NDM2LDI5ICs1NTYxLDQ0IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBM RVNfT0spCiAJCXsKIAkJCWNoYXIJICAgKnNxbFN0YXRlID0gUFFyZXN1bHRFcnJvckZpZWxkKHJl cywgUEdfRElBR19TUUxTVEFURSk7CisJCQlQUUV4cEJ1ZmZlckRhdGEgZXJybXNnX2J1ZjsKIAot CQkJZnByaW50ZihzdGRlcnIsICIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCQkJLyoKKwkJ CSAqIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBtZXNzYWdl IGlzIGFsd2F5cworCQkJICogdXNlZAorCQkJICovCisJCQlBc3NlcnQoTE9HID49IGxvZ19taW5f bWVzc2FnZXMpOworCisJCQlpbml0UFFFeHBCdWZmZXIoJmVycm1zZ19idWYpOworCQkJcHJpbnRm UFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwogCQkJ aWYgKHNxbFN0YXRlICYmIHN0cmNtcChzcWxTdGF0ZSwgRVJSQ09ERV9VTkRFRklORURfVEFCTEUp ID09IDApCiAJCQl7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJQZXJoYXBzIHlvdSBuZWVkIHRvIGRv IGluaXRpYWxpemF0aW9uIChcInBnYmVuY2ggLWlcIikgaW4gZGF0YWJhc2UgXCIlc1wiXG4iLCBQ UWRiKGNvbikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAorCQkJCQkJCQkg ICJQZXJoYXBzIHlvdSBuZWVkIHRvIGRvIGluaXRpYWxpemF0aW9uIChcInBnYmVuY2ggLWlcIikg aW4gZGF0YWJhc2UgXCIlc1wiXG4iLAorCQkJCQkJCQkgIFBRZGIoY29uKSk7CiAJCQl9CiAKKwkJ CXBnYmVuY2hfZXJyb3IoTE9HLCAiJXMiLCBlcnJtc2dfYnVmLmRhdGEpOworCQkJdGVybVBRRXhw QnVmZmVyKCZlcnJtc2dfYnVmKTsKIAkJCWV4aXQoMSk7CiAJCX0KIAkJc2NhbGUgPSBhdG9pKFBR Z2V0dmFsdWUocmVzLCAwLCAwKSk7CiAJCWlmIChzY2FsZSA8IDApCiAJCXsKLQkJCWZwcmludGYo c3RkZXJyLCAiaW52YWxpZCBjb3VudCgqKSBmcm9tIHBnYmVuY2hfYnJhbmNoZXM6IFwiJXNcIlxu IiwKLQkJCQkJUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKLQkJCWV4aXQoMSk7CisJCQkvKiB3ZSBh cmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBQUWdldHZhbHVlIGlzIGFsd2F5cyBjYWxsZWQgKi8K KwkJCUFzc2VydChFUlJPUiA+PSBsb2dfbWluX21lc3NhZ2VzKTsKKworCQkJcGdiZW5jaF9lcnJv cihFUlJPUiwKKwkJCQkJCSAgImludmFsaWQgY291bnQoKikgZnJvbSBwZ2JlbmNoX2JyYW5jaGVz OiBcIiVzXCJcbiIsCisJCQkJCQkgIFBRZ2V0dmFsdWUocmVzLCAwLCAwKSk7CiAJCX0KIAkJUFFj bGVhcihyZXMpOwogCiAJCS8qIHdhcm4gaWYgd2Ugb3ZlcnJpZGUgdXNlci1naXZlbiAtcyBzd2l0 Y2ggKi8KIAkJaWYgKHNjYWxlX2dpdmVuKQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCSJzY2Fs ZSBvcHRpb24gaWdub3JlZCwgdXNpbmcgY291bnQgZnJvbSBwZ2JlbmNoX2JyYW5jaGVzIHRhYmxl ICglZClcbiIsCi0JCQkJCXNjYWxlKTsKKwkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJICAi c2NhbGUgb3B0aW9uIGlnbm9yZWQsIHVzaW5nIGNvdW50IGZyb20gcGdiZW5jaF9icmFuY2hlcyB0 YWJsZSAoJWQpXG4iLAorCQkJCQkJICBzY2FsZSk7CiAJfQogCiAJLyoKQEAgLTU0NjgsMTAgKzU2 MDgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAobG9va3VwVmFyaWFibGUo JnN0YXRlWzBdLCAic2NhbGUiKSA9PSBOVUxMKQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGll bnRzOyBpKyspCi0JCXsKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1 cCIsICJzY2FsZSIsIHNjYWxlKSkKLQkJCQlleGl0KDEpOwotCQl9CisJCQlwdXRWYXJpYWJsZUlu dCgmc3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUsIGZhbHNlKTsKIAl9CiAKIAkv KgpAQCAtNTQ4MSw4ICs1NjE4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYg KGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCiAJewogCQlm b3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0 YXRlW2ldLCAic3RhcnR1cCIsICJjbGllbnRfaWQiLCBpKSkKLQkJCQlleGl0KDEpOworCQkJcHV0 VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJjbGllbnRfaWQiLCBpLCBmYWxzZSk7 CiAJfQogCiAJLyogc2V0IGRlZmF1bHQgc2VlZCBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KQEAgLTU0 OTQsMzEgKzU2MzAsMzUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCSh1aW50NjQp IChyYW5kb20oKSAmIDB4RkZGRik7CiAKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKysp Ci0JCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAiZGVmYXVsdF9z ZWVkIiwgKGludDY0KSBzZWVkKSkKLQkJCQlleGl0KDEpOworCQl7CisJCQlwdXRWYXJpYWJsZUlu dCgmc3RhdGVbaV0sICJzdGFydHVwIiwgImRlZmF1bHRfc2VlZCIsIChpbnQ2NCkgc2VlZCwKKwkJ CQkJCSAgIGZhbHNlKTsKKwkJfQogCX0KIAogCS8qIHNldCByYW5kb20gc2VlZCB1bmxlc3Mgb3Zl cndyaXR0ZW4gKi8KIAlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLCAicmFuZG9tX3NlZWQi KSA9PSBOVUxMKQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCi0JCQlpZiAo IXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLCByYW5k b21fc2VlZCkpCi0JCQkJZXhpdCgxKTsKKwkJeworCQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ld LCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsIHJhbmRvbV9zZWVkLAorCQkJCQkJICAgZmFsc2Up OworCQl9CiAJfQogCiAJaWYgKCFpc19ub192YWN1dW0pCiAJewotCQlmcHJpbnRmKHN0ZGVyciwg InN0YXJ0aW5nIHZhY3V1bS4uLiIpOworCQlwZ2JlbmNoX2Vycm9yKExPRywgInN0YXJ0aW5nIHZh Y3V1bS4uLiIpOwogCQl0cnlFeGVjdXRlU3RhdGVtZW50KGNvbiwgInZhY3V1bSBwZ2JlbmNoX2Jy YW5jaGVzIik7CiAJCXRyeUV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIHBnYmVuY2hfdGVs bGVycyIpOwogCQl0cnlFeGVjdXRlU3RhdGVtZW50KGNvbiwgInRydW5jYXRlIHBnYmVuY2hfaGlz dG9yeSIpOwotCQlmcHJpbnRmKHN0ZGVyciwgImVuZC5cbiIpOworCQlwZ2JlbmNoX2Vycm9yKExP RywgImVuZC5cbiIpOwogCiAJCWlmIChkb192YWN1dW1fYWNjb3VudHMpCiAJCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAic3RhcnRpbmcgdmFjdXVtIHBnYmVuY2hfYWNjb3VudHMuLi4iKTsKKwkJCXBn YmVuY2hfZXJyb3IoTE9HLCAic3RhcnRpbmcgdmFjdXVtIHBnYmVuY2hfYWNjb3VudHMuLi4iKTsK IAkJCXRyeUV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIGFuYWx5emUgcGdiZW5jaF9hY2Nv dW50cyIpOwotCQkJZnByaW50ZihzdGRlcnIsICJlbmQuXG4iKTsKKwkJCXBnYmVuY2hfZXJyb3Io TE9HLCAiZW5kLlxuIik7CiAJCX0KIAl9CiAJUFFmaW5pc2goY29uKTsKQEAgLTU1NzgsOCArNTcx OCwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJaWYgKGVyciAhPSAwIHx8 IHRocmVhZC0+dGhyZWFkID09IElOVkFMSURfVEhSRUFEKQogCQkJewotCQkJCWZwcmludGYoc3Rk ZXJyLCAiY291bGQgbm90IGNyZWF0ZSB0aHJlYWQ6ICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKLQkJ CQlleGl0KDEpOworCQkJCS8qIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHN0cmVycm9y IGlzIGFsd2F5cyBjYWxsZWQgKi8KKwkJCQlBc3NlcnQoRVJST1IgPj0gbG9nX21pbl9tZXNzYWdl cyk7CisKKwkJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAiY291bGQgbm90IGNyZWF0ZSB0aHJlYWQ6 ICVzXG4iLAorCQkJCQkJCSAgc3RyZXJyb3IoZXJyKSk7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAt NTY4OCw4ICs1ODMxLDExIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAKIAkJaWYgKHRocmVhZC0+ bG9nZmlsZSA9PSBOVUxMKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVu IGxvZ2ZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJbG9ncGF0aCwgc3RyZXJyb3IoZXJybm8pKTsK KwkJCS8qIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHN0cmVycm9yIGlzIGFsd2F5cyBj YWxsZWQgKi8KKwkJCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJCXBnYmVu Y2hfZXJyb3IoTE9HLCAiY291bGQgbm90IG9wZW4gbG9nZmlsZSBcIiVzXCI6ICVzXG4iLAorCQkJ CQkJICBsb2dwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCQkJZ290byBkb25lOwogCQl9CiAJfQpA QCAtNTc2Nyw4ICs1OTEzLDE0IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAKIAkJCQlpZiAoc29j ayA8IDApCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc29ja2V0OiAlcyIs Ci0JCQkJCQkJUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJCQkvKgorCQkJCQkgKiBXZSBh cmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBQUWVycm9yTWVzc2FnZSBpcyBhbHdheXMKKwkJCQkJ ICogY2FsbGVkLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KExPRyA+PSBsb2dfbWluX21lc3NhZ2Vz KTsKKworCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgImludmFsaWQgc29ja2V0OiAlcyIsCisJCQkJ CQkJCSAgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQog CkBAIC01ODQ0LDcgKzU5OTYsMTEgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJY29udGlu dWU7CiAJCQkJfQogCQkJCS8qIG11c3QgYmUgc29tZXRoaW5nIHdyb25nICovCi0JCQkJZnByaW50 ZihzdGRlcnIsICJzZWxlY3QoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCisJ CQkJLyogd2UgYXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gc3RyZXJyb3IgaXMgYWx3YXlzIGNh bGxlZCAqLworCQkJCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7CisKKwkJCQlwZ2Jl bmNoX2Vycm9yKExPRywgInNlbGVjdCgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CkBAIC01ODY4LDggKzYwMjQsMTQgQEAgdGhyZWFk UnVuKHZvaWQgKmFyZykKIAogCQkJCWlmIChzb2NrIDwgMCkKIAkJCQl7Ci0JCQkJCWZwcmludGYo c3RkZXJyLCAiaW52YWxpZCBzb2NrZXQ6ICVzIiwKLQkJCQkJCQlQUWVycm9yTWVzc2FnZShzdC0+ Y29uKSk7CisJCQkJCS8qCisJCQkJCSAqIFdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIFBR ZXJyb3JNZXNzYWdlIGlzIGFsd2F5cworCQkJCQkgKiBjYWxsZWQuCisJCQkJCSAqLworCQkJCQlB c3NlcnQoTE9HID49IGxvZ19taW5fbWVzc2FnZXMpOworCisJCQkJCXBnYmVuY2hfZXJyb3IoTE9H LCAiaW52YWxpZCBzb2NrZXQ6ICVzIiwKKwkJCQkJCQkJICBQUWVycm9yTWVzc2FnZShzdC0+Y29u KSk7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCQl9CiAKQEAgLTU5MTEsNiArNjA3Myw3IEBAIHRocmVh ZFJ1bih2b2lkICphcmcpCiAJCQkJCQkJbGFnLAogCQkJCQkJCXN0ZGV2OwogCQkJCWNoYXIJCXRi dWZbMzE1XTsKKwkJCQlQUUV4cEJ1ZmZlckRhdGEgcHJvZ3Jlc3NfYnVmOwogCiAJCQkJLyoKIAkJ CQkgKiBBZGQgdXAgdGhlIHN0YXRpc3RpY3Mgb2YgYWxsIHRocmVhZHMuCkBAIC01OTY4LDE4ICs2 MTMxLDI5IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCXNucHJpbnRmKHRidWYsIHNpemVv Zih0YnVmKSwgIiUuMWYgcyIsIHRvdGFsX3J1bik7CiAJCQkJfQogCi0JCQkJZnByaW50ZihzdGRl cnIsCi0JCQkJCQkicHJvZ3Jlc3M6ICVzLCAlLjFmIHRwcywgbGF0ICUuM2YgbXMgc3RkZGV2ICUu M2YiLAotCQkJCQkJdGJ1ZiwgdHBzLCBsYXRlbmN5LCBzdGRldik7CisJCQkJLyoKKwkJCQkgKiBX ZSBhcmUgc3VyZSB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgbWVzc2FnZSBpcwor CQkJCSAqIGFsd2F5cyB1c2VkLgorCQkJCSAqLworCQkJCUFzc2VydChMT0cgPj0gbG9nX21pbl9t ZXNzYWdlcyk7CisKKwkJCQlpbml0UFFFeHBCdWZmZXIoJnByb2dyZXNzX2J1Zik7CisJCQkJcHJp bnRmUFFFeHBCdWZmZXIoJnByb2dyZXNzX2J1ZiwKKwkJCQkJCQkJICAicHJvZ3Jlc3M6ICVzLCAl LjFmIHRwcywgbGF0ICUuM2YgbXMgc3RkZGV2ICUuM2YiLAorCQkJCQkJCQkgIHRidWYsIHRwcywg bGF0ZW5jeSwgc3RkZXYpOwogCiAJCQkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJCXsKLQkJCQkJ ZnByaW50ZihzdGRlcnIsICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJnByb2dyZXNzX2J1ZiwgIiwgbGFnICUuM2YgbXMiLCBsYWcpOwogCQkJCQlpZiAobGF0 ZW5jeV9saW1pdCkKLQkJCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZPUk1BVCAiIHNr aXBwZWQiLAotCQkJCQkJCQljdXIuc2tpcHBlZCAtIGxhc3Quc2tpcHBlZCk7CisJCQkJCQlhcHBl bmRQUUV4cEJ1ZmZlcigmcHJvZ3Jlc3NfYnVmLAorCQkJCQkJCQkJCSAgIiwgIiBJTlQ2NF9GT1JN QVQgIiBza2lwcGVkIiwKKwkJCQkJCQkJCQkgIGN1ci5za2lwcGVkIC0gbGFzdC5za2lwcGVkKTsK IAkJCQl9Ci0JCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVy Q2hhcigmcHJvZ3Jlc3NfYnVmLCAnXG4nKTsKKworCQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXMi LCBwcm9ncmVzc19idWYuZGF0YSk7CisJCQkJdGVybVBRRXhwQnVmZmVyKCZwcm9ncmVzc19idWYp OwogCiAJCQkJbGFzdCA9IGN1cjsKIAkJCQlsYXN0X3JlcG9ydCA9IG5vdzsKQEAgLTYwNjMsMTAg KzYyMzcsNyBAQCBzZXRhbGFybShpbnQgc2Vjb25kcykKIAkJIUNyZWF0ZVRpbWVyUXVldWVUaW1l cigmdGltZXIsIHF1ZXVlLAogCQkJCQkJCSAgIHdpbjMyX3RpbWVyX2NhbGxiYWNrLCBOVUxMLCBz ZWNvbmRzICogMTAwMCwgMCwKIAkJCQkJCQkgICBXVF9FWEVDVVRFSU5USU1FUlRIUkVBRCB8IFdU X0VYRUNVVEVPTkxZT05DRSkpCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBzZXQg dGltZXJcbiIpOwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5jaF9lcnJvcihFUlJPUiwgImZhaWxl ZCB0byBzZXQgdGltZXJcbiIpOwogfQogCiAvKiBwYXJ0aWFsIHB0aHJlYWQgaW1wbGVtZW50YXRp b24gZm9yIFdpbmRvd3MgKi8KQEAgLTYxMzYsMyArNjMwNywyNiBAQCBwdGhyZWFkX2pvaW4ocHRo cmVhZF90IHRoLCB2b2lkICoqdGhyZWFkX3JldHVybikKIH0KIAogI2VuZGlmCQkJCQkJCS8qIFdJ TjMyICovCisKK3N0YXRpYyB2b2lkCitwZ2JlbmNoX2Vycm9yKEVycm9yTGV2ZWwgZWxldmVsLCBj b25zdCBjaGFyICpmbXQsLi4uKQoreworCXZhX2xpc3QJCWFwOworCisJLyogRGV0ZXJtaW5lIHdo ZXRoZXIgbWVzc2FnZSBpcyBlbmFibGVkIGZvciBsb2cgb3V0cHV0ICovCisJaWYgKGVsZXZlbCA8 IGxvZ19taW5fbWVzc2FnZXMpCisJCXJldHVybjsKKworCWlmICghZm10IHx8ICFmbXRbMF0pCisJ eworCQkvKiBpbnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJcGdi ZW5jaF9lcnJvcihFUlJPUiwgImVtcHR5IGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIHJlcG9ydGVk XG4iKTsKKwl9CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2ZnByaW50ZihzdGRlcnIsIF8oZm10 KSwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAoZWxldmVsID49IEVSUk9SKQorCQlleGl0KDEp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAppbmRleCBkNmEzOGQwLi5lOTgzYWJjIDEwMDY0 NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAorKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9leHBvcnRzLnR4dApAQCAtMTcyLDMgKzE3Miw0IEBAIFBRc3NsQXR0cmlidXRl ICAgICAgICAgICAgMTY5CiBQUXNldEVycm9yQ29udGV4dFZpc2liaWxpdHkgMTcwCiBQUXJlc3Vs dFZlcmJvc2VFcnJvck1lc3NhZ2UgMTcxCiBQUWVuY3J5cHRQYXNzd29yZENvbm4gICAgIDE3Mgor YXBwZW5kUFFFeHBCdWZmZXJWQSAgICAgICAxNzMKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL3BxZXhwYnVmZmVyLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5j CmluZGV4IDg2YjE2ZTYuLjNkYjJkNGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L3BxZXhwYnVmZmVyLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuYwpA QCAtMzcsOCArMzcsNiBAQAogLyogQWxsICJicm9rZW4iIFBRRXhwQnVmZmVycyBwb2ludCB0byB0 aGlzIHN0cmluZy4gKi8KIHN0YXRpYyBjb25zdCBjaGFyIG9vbV9idWZmZXJbMV0gPSAiIjsKIAot c3RhdGljIGJvb2wgYXBwZW5kUFFFeHBCdWZmZXJWQShQUUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNo YXIgKmZtdCwgdmFfbGlzdCBhcmdzKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDApOwotCiAKIC8q CiAgKiBtYXJrUFFFeHBCdWZmZXJCcm9rZW4KQEAgLTI4Miw3ICsyODAsNyBAQCBhcHBlbmRQUUV4 cEJ1ZmZlcihQUUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAgKiBBdHRlbXB0 IHRvIGZvcm1hdCBkYXRhIGFuZCBhcHBlbmQgaXQgdG8gc3RyLiAgUmV0dXJucyB0cnVlIGlmIGRv bmUKICAqIChlaXRoZXIgc3VjY2Vzc2Z1bCBvciBoYXJkIGZhaWx1cmUpLCBmYWxzZSBpZiBuZWVk IHRvIHJldHJ5LgogICovCi1zdGF0aWMgYm9vbAorYm9vbAogYXBwZW5kUFFFeHBCdWZmZXJWQShQ UUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCXNpemVf dAkJYXZhaWw7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5o IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvcHFleHBidWZmZXIuaAppbmRleCA3NzE2MDJhLi5iNzBi ODY4IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9wcWV4cGJ1ZmZlci5oCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL3BxZXhwYnVmZmVyLmgKQEAgLTE1OCw2ICsxNTgsMTQgQEAg ZXh0ZXJuIHZvaWQgcHJpbnRmUFFFeHBCdWZmZXIoUFFFeHBCdWZmZXIgc3RyLCBjb25zdCBjaGFy ICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGUKIGV4dGVybiB2b2lkIGFwcGVuZFBRRXhwQnVmZmVyKFBR RXhwQnVmZmVyIHN0ciwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zigy LCAzKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGFwcGVuZFBRRXhwQnVmZmVy VkEKKyAqIFNoYXJlZCBndXRzIG9mIHByaW50ZlBRRXhwQnVmZmVyL2FwcGVuZFBRRXhwQnVmZmVy LgorICogQXR0ZW1wdCB0byBmb3JtYXQgZGF0YSBhbmQgYXBwZW5kIGl0IHRvIHN0ci4gIFJldHVy bnMgdHJ1ZSBpZiBkb25lCisgKiAoZWl0aGVyIHN1Y2Nlc3NmdWwgb3IgaGFyZCBmYWlsdXJlKSwg ZmFsc2UgaWYgbmVlZCB0byByZXRyeS4KKyAqLworZXh0ZXJuIGJvb2wgYXBwZW5kUFFFeHBCdWZm ZXJWQShQUUV4cEJ1ZmZlciBzdHIsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKSBwZ19h dHRyaWJ1dGVfcHJpbnRmKDIsIDApOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICog YXBwZW5kUFFFeHBCdWZmZXJTdHIKICAqIEFwcGVuZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGEgUFFF eHBCdWZmZXIsIGFsbG9jYXRpbmcgbW9yZSBzcGFjZQogICogaWYgbmVjZXNzYXJ5LgotLSAKMi43 LjQKCg== --=_0fcde9e0009f3dabf741403de401e796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=v10-0003-Pgbench-errors-use-the-Variables-structure-for-c.patch Content-Disposition: attachment; filename=v10-0003-Pgbench-errors-use-the-Variables-structure-for-c.patch; size=17476 RnJvbSA5YTAwNDE1YjkxYmNhZTJhMGVlMWNjZTRiOTU5M2EzNzRiMTdiODNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCA3IEF1ZyAyMDE4IDEzOjI5OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMy80XSBQZ2JlbmNoIGVycm9yczogdXNlIHRoZSBWYXJpYWJsZXMgc3RydWN0dXJl IGZvcgogY2xpZW50IHZhcmlhYmxlcwoKVGhpcyBpcyBtb3N0IGltcG9ydGFudCB3aGVuIGl0IGlz IHVzZWQgdG8gcmVzZXQgY2xpZW50IHZhcmlhYmxlcyBkdXJpbmcgdGhlCnJlcGVhdGluZyBvZiB0 cmFuc2FjdGlvbnMgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlcy4KCkRvbid0 IGFsbG9jYXRlIFZhcmlhYmxlIHN0cnVjdHMgb25lIGJ5IG9uZS4gSW5zdGVhZCwgZmlyc3QgdGlt ZSBhbGxvY2F0ZSA4CnZhcmlhYmxlcyBhbmQgdGhlbiBlbmxhcmdlIGJ5IGR1cGxpY2F0aW5nIHNp emUuCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDI0MyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTcxIGluc2Vy dGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9w Z2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IGM0NWNkNDQuLjRmODcw MGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9w Z2JlbmNoL3BnYmVuY2guYwpAQCAtMjAyLDYgKzIwMiwxMiBAQCBjb25zdCBjaGFyICpwcm9nbmFt ZTsKIHZvbGF0aWxlIGJvb2wgdGltZXJfZXhjZWVkZWQgPSBmYWxzZTsJLyogZmxhZyBmcm9tIHNp Z25hbCBoYW5kbGVyICovCiAKIC8qCisgKiBUaGUgbnVtYmVyIG9mIHZhcmFpYmxlcyBmb3Igd2hp Y2ggdGhlIGFycmF5IGlzIGFsbG9jYXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKiBJZiBuZWNl c3NhcnksIGV2ZXJ5IG5leHQgdGltZSB0aGUgYXJyYXkgc2l6ZSBqdXN0IGRvdWJsZXMuCisgKi8K KyNkZWZpbmUgREVGQVVMVF9NQVhfVkFSSUFCTEVTCTgKKworLyoKICAqIFZhcmlhYmxlIGRlZmlu aXRpb25zLgogICoKICAqIElmIGEgdmFyaWFibGUgb25seSBoYXMgYSBzdHJpbmcgdmFsdWUsICJz dmFsdWUiIGlzIHRoYXQgdmFsdWUsIGFuZCB2YWx1ZSBpcwpAQCAtMjE4LDYgKzIyNCwyNCBAQCB0 eXBlZGVmIHN0cnVjdAogCVBnQmVuY2hWYWx1ZSB2YWx1ZTsJCQkvKiBhY3R1YWwgdmFyaWFibGUn cyB2YWx1ZSAqLwogfSBWYXJpYWJsZTsKIAorLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBjbGll bnQgdmFyaWFibGVzLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCVZhcmlhYmxlICAgKnZhcnM7 CQkJLyogYXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KKwlpbnQJCQludmFyczsJCQkv KiBudW1iZXIgb2YgdmFyaWFibGVzICovCisKKwkvKgorCSAqIFRoZSBtYXhpbXVtIG51bWJlciBv ZiB2YXJpYWJsZXMgdGhhdCB3ZSBjYW4gY3VycmVudGx5IHN0b3JlIGluICd2YXJzJworCSAqIHdp dGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgbW9yZSBzcGFjZS4gV2UgbXVzdCBhbHdheXMgaGF2 ZSBtYXhfdmFycyA+PQorCSAqIG52YXJzLgorCSAqLworCWludAkJCW1heF92YXJzOworCisJYm9v bAkJdmFyc19zb3J0ZWQ7CS8qIGFyZSB2YXJpYWJsZXMgc29ydGVkIGJ5IG5hbWU/ICovCit9IFZh cmlhYmxlczsKKwogI2RlZmluZSBNQVhfU0NSSVBUUwkJMTI4CQkvKiBtYXggbnVtYmVyIG9mIFNR TCBzY3JpcHRzIGFsbG93ZWQgKi8KICNkZWZpbmUgU0hFTExfQ09NTUFORF9TSVpFCTI1NiAvKiBt YXhpbXVtIHNpemUgYWxsb3dlZCBmb3Igc2hlbGwgY29tbWFuZCAqLwogCkBAIC0zNDksOSArMzcz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQljb21tYW5kOwkJLyogY29tbWFuZCBudW1iZXIg aW4gc2NyaXB0ICovCiAKIAkvKiBjbGllbnQgdmFyaWFibGVzICovCi0JVmFyaWFibGUgICAqdmFy aWFibGVzOwkJLyogYXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KLQlpbnQJCQludmFy aWFibGVzOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyAqLwotCWJvb2wJCXZhcnNfc29ydGVkOwkv KiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1lPyAqLworCVZhcmlhYmxlcyAgIHZhcmlhYmxl czsKIAogCS8qIHZhcmlvdXMgdGltZXMgYWJvdXQgY3VycmVudCB0cmFuc2FjdGlvbiAqLwogCWlu dDY0CQl0eG5fc2NoZWR1bGVkOwkvKiBzY2hlZHVsZWQgc3RhcnQgdGltZSBvZiB0cmFuc2FjdGlv biAodXNlYykgKi8KQEAgLTEyNDgsMzkgKzEyNzAsMzkgQEAgY29tcGFyZVZhcmlhYmxlTmFtZXMo Y29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQogCiAvKiBMb2NhdGUgYSB2YXJpYWJsZSBi eSBuYW1lOyByZXR1cm5zIE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxv b2t1cFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitsb29rdXBWYXJpYWJsZShWYXJp YWJsZXMgKnZhcmlhYmxlcywgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZQlrZXk7CiAKIAkvKiBP biBzb21lIHZlcnNpb25zIG9mIFNvbGFyaXMsIGJzZWFyY2ggb2YgemVybyBpdGVtcyBkdW1wcyBj b3JlICovCi0JaWYgKHN0LT5udmFyaWFibGVzIDw9IDApCisJaWYgKHZhcmlhYmxlcy0+bnZhcnMg PD0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBTb3J0IGlmIHdlIGhhdmUgdG8gKi8KLQlpZiAo IXN0LT52YXJzX3NvcnRlZCkKKwlpZiAoIXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQpCiAJewotCQlx c29ydCgodm9pZCAqKSBzdC0+dmFyaWFibGVzLCBzdC0+bnZhcmlhYmxlcywgc2l6ZW9mKFZhcmlh YmxlKSwKKwkJcXNvcnQoKHZvaWQgKikgdmFyaWFibGVzLT52YXJzLCB2YXJpYWJsZXMtPm52YXJz LCBzaXplb2YoVmFyaWFibGUpLAogCQkJICBjb21wYXJlVmFyaWFibGVOYW1lcyk7Ci0JCXN0LT52 YXJzX3NvcnRlZCA9IHRydWU7CisJCXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQgPSB0cnVlOwogCX0K IAogCS8qIE5vdyB3ZSBjYW4gc2VhcmNoICovCiAJa2V5Lm5hbWUgPSBuYW1lOwogCXJldHVybiAo VmFyaWFibGUgKikgYnNlYXJjaCgodm9pZCAqKSAma2V5LAotCQkJCQkJCQkodm9pZCAqKSBzdC0+ dmFyaWFibGVzLAotCQkJCQkJCQlzdC0+bnZhcmlhYmxlcywKKwkJCQkJCQkJKHZvaWQgKikgdmFy aWFibGVzLT52YXJzLAorCQkJCQkJCQl2YXJpYWJsZXMtPm52YXJzLAogCQkJCQkJCQlzaXplb2Yo VmFyaWFibGUpLAogCQkJCQkJCQljb21wYXJlVmFyaWFibGVOYW1lcyk7CiB9CiAKIC8qIEdldCB0 aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSwgaW4gc3RyaW5nIGZvcm07IHJldHVybnMgTlVMTCBpZiB1 bmtub3duICovCiBzdGF0aWMgY2hhciAqCi1nZXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjaGFyICpu YW1lKQorZ2V0VmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIgKm5hbWUpCiB7CiAJ VmFyaWFibGUgICAqdmFyOwogCWNoYXIJCXN0cmluZ2Zvcm1bNjRdOwogCi0JdmFyID0gbG9va3Vw VmFyaWFibGUoc3QsIG5hbWUpOworCXZhciA9IGxvb2t1cFZhcmlhYmxlKHZhcmlhYmxlcywgbmFt ZSk7CiAJaWYgKHZhciA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsJCQkvKiBub3QgZm91bmQgKi8K IApAQCAtMTM5OSw1NCArMTQyMSwxMTkgQEAgdmFsaWRfdmFyaWFibGVfbmFtZShjb25zdCBjaGFy ICpuYW1lKQogfQogCiAvKgorICogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3Ig J25lZWRlZCcgbW9yZSB2YXJpYWJsZSBpbiB0aGUgdmFyaWFibGVzCisgKiBhcnJheS4KKyAqIE9u IGZhaWx1cmUgKHRvbyBtYW55IHZhcmlhYmxlcyBhcmUgcmVxdWVzdGVkKTogaWYgZWxldmVsIDwg RVJST1IgcmV0dXJucworICogZmFsc2U7IGV4aXRzIHRoZSBwcm9ncmFtIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGJvb2wKK2VubGFyZ2VWYXJpYWJsZXMoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNv bnN0IGNoYXIgKmNvbnRleHQsIGludCBuZWVkZWQsCisJCQkJIEVycm9yTGV2ZWwgZWxldmVsKQor eworCXNpemVfdAkJbmV3X21heF92YXJzOworCVZhcmlhYmxlICAgKm5ld192YXJzOworCisJaWYg KChzaXplX3QpIHZhcmlhYmxlcy0+bnZhcnMgKyBuZWVkZWQgPiBJTlRfTUFYKQorCXsKKwkJaWYg KGVsZXZlbCA+PSBsb2dfbWluX21lc3NhZ2VzKQorCQl7CisJCQlQUUV4cEJ1ZmZlckRhdGEgZXJy bXNnX2J1ZjsKKworCQkJaW5pdFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKwkJCWlmIChjb250 ZXh0KQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiJXM6ICIsIGNvbnRleHQp OworCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsCisJCQkJCQkJICAidG9vIG1hbnkg dmFyaWFibGVzIGFyZSB1c2VkIChsaW1pdCBpcyAlZClcbiIsCisJCQkJCQkJICBJTlRfTUFYKTsK KwkJCXBnYmVuY2hfZXJyb3IoZWxldmVsLCAiJXMiLCBlcnJtc2dfYnVmLmRhdGEpOworCQkJdGVy bVBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisK KwkvKiB0b3RhbCBudW1iZXIgb2YgdmFyaWFibGVzIHJlcXVpcmVkIG5vdyAqLworCW5lZWRlZCAr PSB2YXJpYWJsZXMtPm52YXJzOworCisJLyogQmVjYXVzZSBvZiB0aGUgYWJvdmUgdGVzdCwgd2Ug bm93IGhhdmUgbmVlZGVkIDw9IElOVF9NQVggKi8KKworCWlmIChuZWVkZWQgPD0gdmFyaWFibGVz LT5tYXhfdmFycykKKwkJcmV0dXJuIHRydWU7CQkJLyogZ290IGVub3VnaCBzcGFjZSBhbHJlYWR5 ICovCisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gYWxsb2NhdGUganVzdCBhIGxpdHRsZSBt b3JlIHNwYWNlIHdpdGggZWFjaCBhZGRpdGlvbjsKKwkgKiBmb3IgZWZmaWNpZW5jeSwgZG91Ymxl IHRoZSBhcnJheSBzaXplIGVhY2ggdGltZSBpdCBvdmVyZmxvd3MuCisJICogQWN0dWFsbHksIHdl IG1pZ2h0IG5lZWQgdG8gbW9yZSB0aGFuIGRvdWJsZSBpdCBpZiAnbmVlZGVkJyBpcyBiaWcuLi4K KwkgKi8KKworCWlmICh2YXJpYWJsZXMtPm1heF92YXJzID4gMCkKKwkJbmV3X21heF92YXJzID0g MiAqICgoc2l6ZV90KSB2YXJpYWJsZXMtPm1heF92YXJzKTsKKwllbHNlCisJCW5ld19tYXhfdmFy cyA9IERFRkFVTFRfTUFYX1ZBUklBQkxFUzsKKworCXdoaWxlICgoc2l6ZV90KSBuZWVkZWQgPiBu ZXdfbWF4X3ZhcnMpCisJCW5ld19tYXhfdmFycyA9IDIgKiBuZXdfbWF4X3ZhcnM7CisKKwkvKgor CSAqIENsYW1wIHRvIElOVF9NQVggaW4gY2FzZSB3ZSB3ZW50IHBhc3QgaXQuICBOb3RlIHdlIGFy ZSBhc3N1bWluZyBoZXJlCisJICogdGhhdCBJTlRfTUFYIDw9IFVJTlRfTUFYLzIsIGVsc2UgdGhl IGFib3ZlIGxvb3AgY291bGQgb3ZlcmZsb3cuICBXZQorCSAqIHdpbGwgc3RpbGwgaGF2ZSBuZXdf bWF4X3ZhcnMgPj0gbmVlZGVkX3ZhcnMuCisJICovCisJaWYgKG5ld19tYXhfdmFycyA+IChzaXpl X3QpIElOVF9NQVgpCisJCW5ld19tYXhfdmFycyA9IChzaXplX3QpIElOVF9NQVg7CisKKwluZXdf dmFycyA9IChWYXJpYWJsZSAqKSBwZ19yZWFsbG9jKHZhcmlhYmxlcy0+dmFycywKKwkJCQkJCQkJ CSAgIG5ld19tYXhfdmFycyAqIHNpemVvZihWYXJpYWJsZSkpOworCXZhcmlhYmxlcy0+dmFycyA9 IG5ld192YXJzOworCXZhcmlhYmxlcy0+bWF4X3ZhcnMgPSBuZXdfbWF4X3ZhcnM7CisJcmV0dXJu IHRydWU7Cit9CisKKy8qCiAgKiBMb29rdXAgYSB2YXJpYWJsZSBieSBuYW1lLCBjcmVhdGluZyBp dCBpZiBuZWVkIGJlLgogICogQ2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFzc2lnbiBhIHZhbHVlIHRv IHRoZSB2YXJpYWJsZS4KICAqIE9uIGZhaWx1cmUgKGJhZCBuYW1lKTogaWYgdGhpcyBpcyBhIGNs aWVudCBydW4gcmV0dXJucyBOVUxMOyBleGl0cyB0aGUKICAqIHByb2dyYW0gb3RoZXJ3aXNlLgog ICovCiBzdGF0aWMgVmFyaWFibGUgKgotbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwg Y29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgYm9vbCBjbGllbnQpCitsb29rdXBDcmVh dGVWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hh ciAqbmFtZSwKKwkJCQkJIGJvb2wgY2xpZW50KQogewogCVZhcmlhYmxlICAgKnZhcjsKIAotCXZh ciA9IGxvb2t1cFZhcmlhYmxlKHN0LCBuYW1lKTsKKwkvKgorCSAqIEFib3V0IHRoZSBlcnJvciBs ZXZlbCB1c2VkOiBpZiB3ZSBwcm9jZXNzIGNsaWVudCBjb21tYW5kcywgaXQgYSBub3JtYWwKKwkg KiBmYWlsdXJlOyBvdGhlcndpc2UgaXQgaXMgbm90IGFuZCB3ZSBleGl0IHRoZSBwcm9ncmFtLgor CSAqLworCUVycm9yTGV2ZWwgZWxldmVsID0gY2xpZW50ID8gTE9HIDogRVJST1I7CisKKwl2YXIg PSBsb29rdXBWYXJpYWJsZSh2YXJpYWJsZXMsIG5hbWUpOwogCWlmICh2YXIgPT0gTlVMTCkKIAl7 Ci0JCVZhcmlhYmxlICAgKm5ld3ZhcnM7Ci0KIAkJLyoKIAkJICogQ2hlY2sgZm9yIHRoZSBuYW1l IG9ubHkgd2hlbiBkZWNsYXJpbmcgYSBuZXcgdmFyaWFibGUgdG8gYXZvaWQKIAkJICogb3Zlcmhl YWQuCiAJCSAqLwogCQlpZiAoIXZhbGlkX3ZhcmlhYmxlX25hbWUobmFtZSkpCiAJCXsKLQkJCS8q Ci0JCQkgKiBBYm91dCB0aGUgZXJyb3IgbGV2ZWwgdXNlZDogaWYgd2UgcHJvY2VzcyBjbGllbnQg Y29tbWFuZHMsIGl0IGEKLQkJCSAqIG5vcm1hbCBmYWlsdXJlOyBvdGhlcndpc2UgaXQgaXMgbm90 IGFuZCB3ZSBleGl0IHRoZSBwcm9ncmFtLgotCQkJICovCi0JCQlwZ2JlbmNoX2Vycm9yKGNsaWVu dCA/IExPRyA6IEVSUk9SLAotCQkJCQkJICAiJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZTogXCIl c1wiXG4iLCBjb250ZXh0LCBuYW1lKTsKKwkJCXBnYmVuY2hfZXJyb3IoZWxldmVsLCAiJXM6IGlu dmFsaWQgdmFyaWFibGUgbmFtZTogXCIlc1wiXG4iLAorCQkJCQkJICBjb250ZXh0LCBuYW1lKTsK IAkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJLyogQ3JlYXRlIHZhcmlhYmxlIGF0IHRoZSBlbmQg b2YgdGhlIGFycmF5ICovCi0JCWlmIChzdC0+dmFyaWFibGVzKQotCQkJbmV3dmFycyA9IChWYXJp YWJsZSAqKSBwZ19yZWFsbG9jKHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJCQkJCSAgKHN0LT5udmFy aWFibGVzICsgMSkgKiBzaXplb2YoVmFyaWFibGUpKTsKLQkJZWxzZQotCQkJbmV3dmFycyA9IChW YXJpYWJsZSAqKSBwZ19tYWxsb2Moc2l6ZW9mKFZhcmlhYmxlKSk7Ci0KLQkJc3QtPnZhcmlhYmxl cyA9IG5ld3ZhcnM7CisJCWlmICghZW5sYXJnZVZhcmlhYmxlcyh2YXJpYWJsZXMsIGNvbnRleHQs IDEsIGVsZXZlbCkpCisJCQlyZXR1cm4gTlVMTDsKIAotCQl2YXIgPSAmbmV3dmFyc1tzdC0+bnZh cmlhYmxlc107CisJCXZhciA9ICYodmFyaWFibGVzLT52YXJzW3ZhcmlhYmxlcy0+bnZhcnNdKTsK IAogCQl2YXItPm5hbWUgPSBwZ19zdHJkdXAobmFtZSk7CiAJCXZhci0+c3ZhbHVlID0gTlVMTDsK IAkJLyogY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGluaXRpYWxpemUgcmVtYWluaW5nIGZpZWxkcyAq LwogCi0JCXN0LT5udmFyaWFibGVzKys7CisJCXZhcmlhYmxlcy0+bnZhcnMrKzsKIAkJLyogd2Ug ZG9uJ3QgcmUtc29ydCB0aGUgYXJyYXkgdGlsbCB3ZSBoYXZlIHRvICovCi0JCXN0LT52YXJzX3Nv cnRlZCA9IGZhbHNlOworCQl2YXJpYWJsZXMtPnZhcnNfc29ydGVkID0gZmFsc2U7CiAJfQogCiAJ cmV0dXJuIHZhcjsKQEAgLTE0NTUsMTIgKzE1NDIsMTMgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUo Q1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgYm9vbCBjbGllbnQp CiAvKiBBc3NpZ24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYg bmVlZCBiZSAqLwogLyogRXhpdHMgb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCiBzdGF0aWMgdm9p ZAotcHV0VmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqdmFsdWUpCitwdXRWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywg Y29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKKwkJCWNvbnN0IGNoYXIgKnZhbHVlKQog ewogCVZhcmlhYmxlICAgKnZhcjsKIAljaGFyCSAgICp2YWw7CiAKLQl2YXIgPSBsb29rdXBDcmVh dGVWYXJpYWJsZShzdCwgY29udGV4dCwgbmFtZSwgZmFsc2UpOworCXZhciA9IGxvb2t1cENyZWF0 ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSwgZmFsc2UpOwogCiAJLyogZHVwIHRo ZW4gZnJlZSwgaW4gY2FzZSB2YWx1ZSBpcyBwb2ludGluZyBhdCB0aGlzIHZhcmlhYmxlICovCiAJ dmFsID0gcGdfc3RyZHVwKHZhbHVlKTsKQEAgLTE0NzcsMTIgKzE1NjUsMTIgQEAgcHV0VmFyaWFi bGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgY29uc3QgY2hh ciAqdmFsdWUpCiAgKiBwcm9ncmFtIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGJvb2wKLXB1dFZh cmlhYmxlVmFsdWUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwK K3B1dFZhcmlhYmxlVmFsdWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRl eHQsIGNoYXIgKm5hbWUsCiAJCQkJIGNvbnN0IFBnQmVuY2hWYWx1ZSAqdmFsdWUsIGJvb2wgY2xp ZW50KQogewogCVZhcmlhYmxlICAgKnZhcjsKIAotCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxl KHN0LCBjb250ZXh0LCBuYW1lLCBjbGllbnQpOworCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxl KHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSwgY2xpZW50KTsKIAlpZiAoIXZhcikKIAkJcmV0dXJu IGZhbHNlOwogCkBAIC0xNTAwLDEzICsxNTg4LDEzIEBAIHB1dFZhcmlhYmxlVmFsdWUoQ1N0YXRl ICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKICAqIHByb2dyYW0gb3RoZXJ3 aXNlLgogICovCiBzdGF0aWMgYm9vbAotcHV0VmFyaWFibGVJbnQoQ1N0YXRlICpzdCwgY29uc3Qg Y2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgaW50NjQgdmFsdWUsCi0JCQkgICBib29sIGNsaWVu dCkKK3B1dFZhcmlhYmxlSW50KFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250 ZXh0LCBjaGFyICpuYW1lLAorCQkJICAgaW50NjQgdmFsdWUsIGJvb2wgY2xpZW50KQogewogCVBn QmVuY2hWYWx1ZSB2YWw7CiAKIAlzZXRJbnRWYWx1ZSgmdmFsLCB2YWx1ZSk7Ci0JcmV0dXJuIHB1 dFZhcmlhYmxlVmFsdWUoc3QsIGNvbnRleHQsIG5hbWUsICZ2YWwsIGNsaWVudCk7CisJcmV0dXJu IHB1dFZhcmlhYmxlVmFsdWUodmFyaWFibGVzLCBjb250ZXh0LCBuYW1lLCAmdmFsLCBjbGllbnQp OwogfQogCiAvKgpAQCAtMTU2MSw3ICsxNjQ5LDcgQEAgcmVwbGFjZVZhcmlhYmxlKGNoYXIgKipz cWwsIGNoYXIgKnBhcmFtLCBpbnQgbGVuLCBjaGFyICp2YWx1ZSkKIH0KIAogc3RhdGljIGNoYXIg KgotYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKK2Fzc2lnblZhcmlhYmxl cyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqc3FsKQogewogCWNoYXIJICAgKnAsCiAJCQkg ICAqbmFtZSwKQEAgLTE1ODIsNyArMTY3MCw3IEBAIGFzc2lnblZhcmlhYmxlcyhDU3RhdGUgKnN0 LCBjaGFyICpzcWwpCiAJCQljb250aW51ZTsKIAkJfQogCi0JCXZhbCA9IGdldFZhcmlhYmxlKHN0 LCBuYW1lKTsKKwkJdmFsID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAkJZnJlZShu YW1lKTsKIAkJaWYgKHZhbCA9PSBOVUxMKQogCQl7CkBAIC0xNTk3LDEyICsxNjg1LDEzIEBAIGFz c2lnblZhcmlhYmxlcyhDU3RhdGUgKnN0LCBjaGFyICpzcWwpCiB9CiAKIHN0YXRpYyB2b2lkCi1n ZXRRdWVyeVBhcmFtcyhDU3RhdGUgKnN0LCBjb25zdCBDb21tYW5kICpjb21tYW5kLCBjb25zdCBj aGFyICoqcGFyYW1zKQorZ2V0UXVlcnlQYXJhbXMoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0 IENvbW1hbmQgKmNvbW1hbmQsCisJCQkgICBjb25zdCBjaGFyICoqcGFyYW1zKQogewogCWludAkJ CWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWFuZC0+YXJnYyAtIDE7IGkrKykKLQkJcGFyYW1z W2ldID0gZ2V0VmFyaWFibGUoc3QsIGNvbW1hbmQtPmFyZ3ZbaSArIDFdKTsKKwkJcGFyYW1zW2ld ID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBjb21tYW5kLT5hcmd2W2kgKyAxXSk7CiB9CiAKIHN0 YXRpYyBjaGFyICoKQEAgLTI0NzEsNyArMjU2MCw3IEBAIGV2YWx1YXRlRXhwcihUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgUGdCZW5jaEV4cHIgKmV4cHIsIFBnQmVuY2hWYWx1ZSAqcmV0dmFs CiAJCQl7CiAJCQkJVmFyaWFibGUgICAqdmFyOwogCi0JCQkJaWYgKCh2YXIgPSBsb29rdXBWYXJp YWJsZShzdCwgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVMTCkKKwkJCQlpZiAoKHZh ciA9IGxvb2t1cFZhcmlhYmxlKCZzdC0+dmFyaWFibGVzLCBleHByLT51LnZhcmlhYmxlLnZhcm5h bWUpKSA9PSBOVUxMKQogCQkJCXsKIAkJCQkJcGdiZW5jaF9lcnJvcihMT0csICJ1bmRlZmluZWQg dmFyaWFibGUgXCIlc1wiXG4iLAogCQkJCQkJCQkgIGV4cHItPnUudmFyaWFibGUudmFybmFtZSk7 CkBAIC0yNTQwLDcgKzI2MjksNyBAQCBnZXRNZXRhQ29tbWFuZChjb25zdCBjaGFyICpjbWQpCiAg KiBSZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQsIG9yIGZhbHNlIG9uIGVycm9yLgogICovCiBzdGF0 aWMgYm9vbAotcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxlLCBjaGFy ICoqYXJndiwgaW50IGFyZ2MpCitydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMs IGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiB7CiAJY2hhcgkJY29tbWFu ZFtTSEVMTF9DT01NQU5EX1NJWkVdOwogCWludAkJCWksCkBAIC0yNTcxLDcgKzI2NjAsNyBAQCBy dW5TaGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBp bnQgYXJnYykKIAkJewogCQkJYXJnID0gYXJndltpXSArIDE7CS8qIGEgc3RyaW5nIGxpdGVyYWwg c3RhcnRpbmcgd2l0aCBjb2xvbnMgKi8KIAkJfQotCQllbHNlIGlmICgoYXJnID0gZ2V0VmFyaWFi bGUoc3QsIGFyZ3ZbaV0gKyAxKSkgPT0gTlVMTCkKKwkJZWxzZSBpZiAoKGFyZyA9IGdldFZhcmlh YmxlKHZhcmlhYmxlcywgYXJndltpXSArIDEpKSA9PSBOVUxMKQogCQl7CiAJCQlwZ2JlbmNoX2Vy cm9yKExPRywgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAogCQkJCQkJICBhcmd2 WzBdLCBhcmd2W2ldKTsKQEAgLTI2NDEsNyArMjczMCw3IEBAIHJ1blNoZWxsQ29tbWFuZChDU3Rh dGUgKnN0LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQkJCQkgIGFy Z3ZbMF0sIHJlcyk7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKCFwdXRWYXJpYWJsZUludChz dCwgInNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZhbCwgdHJ1ZSkpCisJaWYgKCFwdXRWYXJpYWJs ZUludCh2YXJpYWJsZXMsICJzZXRzaGVsbCIsIHZhcmlhYmxlLCByZXR2YWwsIHRydWUpKQogCQly ZXR1cm4gZmFsc2U7CiAKICNpZmRlZiBERUJVRwpAQCAtMjY5NSw3ICsyNzg0LDcgQEAgc2VuZENv bW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJY2hhcgkgICAqc3FsOwogCiAJ CXNxbCA9IHBnX3N0cmR1cChjb21tYW5kLT5hcmd2WzBdKTsKLQkJc3FsID0gYXNzaWduVmFyaWFi bGVzKHN0LCBzcWwpOworCQlzcWwgPSBhc3NpZ25WYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsIHNx bCk7CiAKIAkJcGdiZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBz dC0+aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVyeShzdC0+Y29uLCBzcWwpOwpAQCAtMjcwNiw3 ICsyNzk1LDcgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJ Y29uc3QgY2hhciAqc3FsID0gY29tbWFuZC0+YXJndlswXTsKIAkJY29uc3QgY2hhciAqcGFyYW1z W01BWF9BUkdTXTsKIAotCQlnZXRRdWVyeVBhcmFtcyhzdCwgY29tbWFuZCwgcGFyYW1zKTsKKwkJ Z2V0UXVlcnlQYXJhbXMoJnN0LT52YXJpYWJsZXMsIGNvbW1hbmQsIHBhcmFtcyk7CiAKIAkJcGdi ZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7 CiAJCXIgPSBQUXNlbmRRdWVyeVBhcmFtcyhzdC0+Y29uLCBzcWwsIGNvbW1hbmQtPmFyZ2MgLSAx LApAQCAtMjc0Nyw3ICsyODM2LDcgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAq Y29tbWFuZCkKIAkJCXN0LT5wcmVwYXJlZFtzdC0+dXNlX2ZpbGVdID0gdHJ1ZTsKIAkJfQogCi0J CWdldFF1ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBhcmFtcygm c3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAkJcHJlcGFyZWRTdGF0ZW1lbnROYW1l KG5hbWUsIHN0LT51c2VfZmlsZSwgc3QtPmNvbW1hbmQpOwogCiAJCXBnYmVuY2hfZXJyb3IoREVC VUcsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3QtPmlkLCBuYW1lKTsKQEAgLTI3NzMsMTQg KzI4NjIsMTQgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKICAq IG9mIGRlbGF5LCBpbiBtaWNyb3NlY29uZHMuICBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFs c2Ugb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBib29sCi1ldmFsdWF0ZVNsZWVwKENTdGF0ZSAqc3Qs IGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2VjcykKK2V2YWx1YXRlU2xlZXAoVmFyaWFi bGVzICp2YXJpYWJsZXMsIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2VjcykKIHsKIAlj aGFyCSAgICp2YXI7CiAJaW50CQkJdXNlYzsKIAogCWlmICgqYXJndlsxXSA9PSAnOicpCiAJewot CQlpZiAoKHZhciA9IGdldFZhcmlhYmxlKHN0LCBhcmd2WzFdICsgMSkpID09IE5VTEwpCisJCWlm ICgodmFyID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2WzFdICsgMSkpID09IE5VTEwpCiAJ CXsKIAkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJc biIsCiAJCQkJCQkgIGFyZ3ZbMF0sIGFyZ3ZbMV0pOwpAQCAtMzA2MCw3ICszMTQ5LDcgQEAgZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJ ICovCiAJCQkJCQlpbnQJCQl1c2VjOwogCi0JCQkJCQlpZiAoIWV2YWx1YXRlU2xlZXAoc3QsIGFy Z2MsIGFyZ3YsICZ1c2VjKSkKKwkJCQkJCWlmICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxl cywgYXJnYywgYXJndiwgJnVzZWMpKQogCQkJCQkJewogCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3Qs ICJzbGVlcCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwogCQkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwpAQCAtMzEwMSw4ICszMTkwLDggQEAgZG9DdXN0b20o VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCiAJCQkJCQlpZiAo Y29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVCkKIAkJCQkJCXsKLQkJCQkJCQlpZiAoIXB1dFZhcmlh YmxlVmFsdWUoc3QsIGFyZ3ZbMF0sIGFyZ3ZbMV0sICZyZXN1bHQsCi0JCQkJCQkJCQkJCQkgIHRy dWUpKQorCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3QtPnZhcmlhYmxlcywgYXJndlsw XSwKKwkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3VsdCwgIHRydWUpKQogCQkJCQkJCXsKIAkJ CQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNldCIsICJhc3NpZ25tZW50IG9mIG1ldGEtY29tbWFu ZCBmYWlsZWQiKTsKIAkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CkBAIC0zMTU1 LDcgKzMyNDQsOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNE YXRhICphZ2cpCiAJCQkJCX0KIAkJCQkJZWxzZSBpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NF VFNIRUxMKQogCQkJCQl7Ci0JCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENvbW1hbmQoc3QsIGFy Z3ZbMV0sIGFyZ3YgKyAyLCBhcmdjIC0gMik7CisJCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENv bW1hbmQoJnN0LT52YXJpYWJsZXMsCisJCQkJCQkJCQkJCQkJCSAgYXJndlsxXSwgYXJndiArIDIs CisJCQkJCQkJCQkJCQkJCSAgYXJnYyAtIDIpOwogCiAJCQkJCQlpZiAodGltZXJfZXhjZWVkZWQp IC8qIHRpbWVvdXQgKi8KIAkJCQkJCXsKQEAgLTMxNzUsNyArMzI2Niw4IEBAIGRvQ3VzdG9tKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJfQogCQkJCQll bHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0hFTEwpCiAJCQkJCXsKLQkJCQkJCWJvb2wJ CXJldCA9IHJ1blNoZWxsQ29tbWFuZChzdCwgTlVMTCwgYXJndiArIDEsIGFyZ2MgLSAxKTsKKwkJ CQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZCgmc3QtPnZhcmlhYmxlcywgTlVMTCwKKwkJ CQkJCQkJCQkJCQkJICBhcmd2ICsgMSwgYXJnYyAtIDEpOwogCiAJCQkJCQlpZiAodGltZXJfZXhj ZWVkZWQpIC8qIHRpbWVvdXQgKi8KIAkJCQkJCXsKQEAgLTUyMDQsNyArNTI5Niw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQl9CiAKIAkJCQkJKnArKyA9ICdcMCc7Ci0JCQkJ CXB1dFZhcmlhYmxlKCZzdGF0ZVswXSwgIm9wdGlvbiIsIG9wdGFyZywgcCk7CisJCQkJCXB1dFZh cmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJvcHRpb24iLCBvcHRhcmcsIHApOwogCQkJCX0K IAkJCQlicmVhazsKIAkJCWNhc2UgJ0YnOgpAQCAtNTUwMywxOCArNTU5NSwxOSBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWludAkJCWo7CiAKIAkJCXN0YXRlW2ldLmlkID0gaTsK LQkJCWZvciAoaiA9IDA7IGogPCBzdGF0ZVswXS5udmFyaWFibGVzOyBqKyspCisJCQlmb3IgKGog PSAwOyBqIDwgc3RhdGVbMF0udmFyaWFibGVzLm52YXJzOyBqKyspCiAJCQl7Ci0JCQkJVmFyaWFi bGUgICAqdmFyID0gJnN0YXRlWzBdLnZhcmlhYmxlc1tqXTsKKwkJCQlWYXJpYWJsZSAgICp2YXIg PSAmc3RhdGVbMF0udmFyaWFibGVzLnZhcnNbal07CiAKIAkJCQlpZiAodmFyLT52YWx1ZS50eXBl ICE9IFBHQlRfTk9fVkFMVUUpCiAJCQkJewotCQkJCQlwdXRWYXJpYWJsZVZhbHVlKCZzdGF0ZVtp XSwgInN0YXJ0dXAiLAorCQkJCQlwdXRWYXJpYWJsZVZhbHVlKCZzdGF0ZVtpXS52YXJpYWJsZXMs ICJzdGFydHVwIiwKIAkJCQkJCQkJCSB2YXItPm5hbWUsICZ2YXItPnZhbHVlLCBmYWxzZSk7CiAJ CQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCXB1dFZhcmlhYmxlKCZzdGF0ZVtpXSwgInN0YXJ0 dXAiLCB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKKwkJCQkJcHV0VmFyaWFibGUoJnN0YXRlW2ld LnZhcmlhYmxlcywgInN0YXJ0dXAiLCB2YXItPm5hbWUsCisJCQkJCQkJCXZhci0+c3ZhbHVlKTsK IAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU2MDUsMjQgKzU2OTgsMzAgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxseSBnZXQgLXMgb3IgZGF0 YWJhc2Ugc2NhbGUsIGJ1dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4cGxpY2l0IC1EIHN3aXRj aAogCSAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJzY2FsZSIpID09IE5VTEwp CisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJzY2FsZSIpID09IE5V TEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCXB1dFZhcmlhYmxl SW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAic2NhbGUiLCBzY2FsZSwgZmFsc2UpOworCQl7CisJ CQlwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJzY2FsZSIs IHNjYWxlLAorCQkJCQkJICAgZmFsc2UpOworCQl9CiAJfQogCiAJLyoKIAkgKiBEZWZpbmUgYSA6 Y2xpZW50X2lkIHZhcmlhYmxlIHRoYXQgaXMgdW5pcXVlIHBlciBjb25uZWN0aW9uLiBCdXQgZG9u J3QKIAkgKiBvdmVycmlkZSBhbiBleHBsaWNpdCAtRCBzd2l0Y2guCiAJICovCi0JaWYgKGxvb2t1 cFZhcmlhYmxlKCZzdGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZh cmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJjbGllbnRfaWQiKSA9PSBOVUxMKQogCXsKIAkJ Zm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCi0JCQlwdXRWYXJpYWJsZUludCgmc3RhdGVb aV0sICJzdGFydHVwIiwgImNsaWVudF9pZCIsIGksIGZhbHNlKTsKKwkJeworCQkJcHV0VmFyaWFi bGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSwKKwkJ CQkJCSAgIGZhbHNlKTsKKwkJfQogCX0KIAogCS8qIHNldCBkZWZhdWx0IHNlZWQgZm9yIGhhc2gg ZnVuY3Rpb25zICovCi0JaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgImRlZmF1bHRfc2Vl ZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJk ZWZhdWx0X3NlZWQiKSA9PSBOVUxMKQogCXsKIAkJdWludDY0CQlzZWVkID0gKCh1aW50NjQpIChy YW5kb20oKSAmIDB4RkZGRikgPDwgNDgpIHwKIAkJKCh1aW50NjQpIChyYW5kb20oKSAmIDB4RkZG RikgPDwgMzIpIHwKQEAgLTU2MzEsMTggKzU3MzAsMTggQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCiAJCXsKLQkJCXB1dFZh cmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAiZGVmYXVsdF9zZWVkIiwgKGludDY0KSBz ZWVkLAotCQkJCQkJICAgZmFsc2UpOworCQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlh YmxlcywgInN0YXJ0dXAiLCAiZGVmYXVsdF9zZWVkIiwKKwkJCQkJCSAgIChpbnQ2NCkgc2VlZCwg ZmFsc2UpOwogCQl9CiAJfQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVubGVzcyBvdmVyd3JpdHRl biAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJyYW5kb21fc2VlZCIpID09IE5V TEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJyYW5kb21fc2Vl ZCIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewot CQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsIHJh bmRvbV9zZWVkLAotCQkJCQkJICAgZmFsc2UpOworCQkJcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ld LnZhcmlhYmxlcywgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLAorCQkJCQkJICAgcmFuZG9tX3Nl ZWQsIGZhbHNlKTsKIAkJfQogCX0KIAotLSAKMi43LjQKCg== --=_0fcde9e0009f3dabf741403de401e796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=v10-0004-Pgbench-errors-and-serialization-deadlock-retrie.patch Content-Disposition: attachment; filename=v10-0004-Pgbench-errors-and-serialization-deadlock-retrie.patch; size=104558 RnJvbSAzMjAwYjk2YmQ0MmNjMjc5NjM0NTc1MTUzYWI4YTk0MDIwYWMzN2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCA3IEF1ZyAyMDE4IDEzOjMwOjEzICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgNC80XSBQZ2JlbmNoIGVycm9ycyBhbmQgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBy ZXRyaWVzCgpDbGllbnQncyBydW4gaXMgYWJvcnRlZCBvbmx5IGluIGNhc2Ugb2YgYSBzZXJpb3Vz IGVycm9yLCBmb3IgZXhhbXBsZSwgdGhlCmNvbm5lY3Rpb24gd2l0aCB0aGUgYmFja2VuZCB3YXMg bG9zdC4gT3RoZXJ3aXNlIGlmIHRoZSBleGVjdXRpb24gb2YgU1FMIG9yIG1ldGEKY29tbWFuZCBm YWlscywgdGhlIGNsaWVudCdzIHJ1biBjb250aW51ZXMgbm9ybWFsbHkgdW50aWwgdGhlIGVuZCBv ZiB0aGUgY3VycmVudApzY3JpcHQgZXhlY3V0aW9uIChpdCBpcyBhc3N1bWVkIHRoYXQgb25lIHRy YW5zYWN0aW9uIHNjcmlwdCBjb250YWlucyBvbmx5IG9uZQp0cmFuc2FjdGlvbikuCgpUcmFuc2Fj dGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVzIGFyZSByb2xsZWQg YmFjayBhbmQKcmVwZWF0ZWQgdW50aWwgdGhleSBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgb3IgcmVh Y2ggdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzCihzcGVjaWZpZWQgYnkgdGhlIC0tbWF4LXRy aWVzIG9wdGlvbikgLyB0aGUgbWF4aW11bSB0aW1lIG9mIHRyaWVzIChzcGVjaWZpZWQgYnkKdGhl IC0tbGF0ZW5jeS1saW1pdCBvcHRpb24pLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBjb21iaW5lZCB0 b2dldGhlcjsgYnV0IGlmCm5vbmUgb2YgdGhlbSBhcmUgdXNlZCwgdGhlIGRlZmF1bHQgdmFsdWUg Zm9yIHRoZSBvcHRpb24gLS1tYXgtdHJpZXMgaXMgc2V0IHRvIDEKYW5kIGZhaWxlZCB0cmFuc2Fj dGlvbnMgYXJlIG5vdCByZXRyaWVkIGF0IGFsbC4gSWYgdGhlIGxhc3QgdHJhbnNhY3Rpb24gcnVu CmZhaWxzLCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkLCBhbmQg dGhlIGNsaWVudCB2YXJpYWJsZXMKd2lsbCBiZSBzZXQgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGUg Zmlyc3QgcnVuIG9mIHRoaXMgdHJhbnNhY3Rpb24uCgpJZiB0aGVyZSdyZSByZXRyaWVzIGFuZC9v ciBlcnJvcnMgdGhlaXIgc3RhdGlzdGljcyBhcmUgcHJpbnRlZCBpbiB0aGUgcHJvZ3Jlc3MsCmlu IHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9uIGxvZ3MgYW5kIGluIHRoZSBlbmQgd2l0aCBv dGhlciByZXN1bHRzIChhbGwgYW5kCmZvciBlYWNoIHNjcmlwdCkuIEEgdHJhbnNhY3Rpb24gZXJy b3IgaXMgcmVwb3J0ZWQgaGVyZSBvbmx5IGlmIHRoZSBsYXN0IHRyeSBvZgp0aGlzIHRyYW5zYWN0 aW9uIGZhaWxzLiBBbHNvIHJldHJpZXMgYW5kIGVycm9ycyBhcmUgcHJpbnRlZCBwZXItY29tbWFu ZCB3aXRoCmF2ZXJhZ2UgbGF0ZW5jaWVzIGlmIHlvdSB1c2UgdGhlIGFwcHJvcHJpYXRlIGJlbmNo bWFya2luZyBvcHRpb24KKC0tcmVwb3J0LXBlci1jb21tYW5kLCAtcikuIElmIHlvdSB3YW50IHRv IGdyb3VwIGVycm9ycyBieSBiYXNpYyB0eXBlcwooc2VyaWFsaXphdGlvbiBlcnJvcnMgLyBkZWFk bG9jayBlcnJvcnMgLyBvdGhlciBTUUwgZXJyb3JzIC8gZXJyb3JzIGluIG1ldGEKY29tbWFuZHMp LCB1c2UgdGhlIG9wdGlvbiAtLWVycm9ycy1kZXRhaWxlZC4KCklmIHlvdSB3YW50IHRvIGRpc3Rp bmd1aXNoIGJldHdlZW4gZmFpbHVyZXMgb3IgZXJyb3JzIGJ5IHR5cGUgKGluY2x1ZGluZyB3aGlj aApsaW1pdCBmb3IgcmV0cmllcyB3YXMgdmlvbGF0ZWQgYW5kIGhvdyBmYXIgaXQgd2FzIGV4Y2Vl ZGVkIGZvciB0aGUKc2VyaWFsaXphdGlvbi9kZWFkbG9jayBlcnJvcnMpLCB1c2UgdGhlIHBnYmVu Y2ggZGVidWdnaW5nIG91dHB1dCBjcmVhdGVkIHdpdGgKdGhlIG9wdGlvbiAtLWRlYnVnLWZhaWxz IG9yIC0tZGVidWcuIFRoZSBmaXJzdCBvcHRpb24gaXMgcmVjb21tZW5kZWQgZm9yIHRoaXMKcHVy cG9zZSBiZWNhdXNlIHdpdGggdGhlIHNlY29uZCBvcHRpb24gdGhlIGRlYnVnZ2luZyBvdXRwdXQg Y2FuIGJlIHZlcnkgbGFyZ2UuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwgICAg ICAgICAgICAgICAgfCAgNDIxICsrKysrKysrKy0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMg ICAgICAgICAgICAgICAgICAgIHwgMTE2MCArKysrKysrKysrKysrKysrKysrKysrKy0tLQogc3Jj L2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwgfCAgMzcyICsrKysrKysr LQogc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBsICAgfCAgICA1ICsK IHNyYy9mZV91dGlscy9jb25kaXRpb25hbC5jICAgICAgICAgICAgICAgICAgIHwgICAxNiArLQog c3JjL2luY2x1ZGUvZmVfdXRpbHMvY29uZGl0aW9uYWwuaCAgICAgICAgICAgfCAgICAyICsKIDYg ZmlsZXMgY2hhbmdlZCwgMTc1NiBpbnNlcnRpb25zKCspLCAyMjAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L3BnYmVuY2guc2dtbAppbmRleCA4OGNmOGIzLi4xMmQxMTIwIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmL3BnYmVuY2guc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dt bApAQCAtNTUsMTYgKzU1LDIwIEBAIG51bWJlciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRo cmVhZHM6IDEKIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwCittYXhpbXVt IG51bWJlciBvZiB0cmllczogMQogdHBzID0gODUuMTg0ODcxIChpbmNsdWRpbmcgY29ubmVjdGlv bnMgZXN0YWJsaXNoaW5nKQogdHBzID0gODUuMjk2MzQ2IChleGNsdWRpbmcgY29ubmVjdGlvbnMg ZXN0YWJsaXNoaW5nKQogPC9zY3JlZW4+CiAKICAgVGhlIGZpcnN0IHNpeCBsaW5lcyByZXBvcnQg c29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgcGFyYW1ldGVyCi0gIHNldHRpbmdzLiAgVGhlIG5l eHQgbGluZSByZXBvcnRzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGNvbXBsZXRlZAorICBz ZXR0aW5ncy4gIFRoZSBzZXZlbnRoIGxpbmUgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyBjb21wbGV0ZWQKICAgYW5kIGludGVuZGVkICh0aGUgbGF0dGVyIGJlaW5nIGp1c3QgdGhl IHByb2R1Y3Qgb2YgbnVtYmVyIG9mIGNsaWVudHMKICAgYW5kIG51bWJlciBvZiB0cmFuc2FjdGlv bnMgcGVyIGNsaWVudCk7IHRoZXNlIHdpbGwgYmUgZXF1YWwgdW5sZXNzIHRoZSBydW4KLSAgZmFp bGVkIGJlZm9yZSBjb21wbGV0aW9uLiAgKEluIDxvcHRpb24+LVQ8L29wdGlvbj4gbW9kZSwgb25s eSB0aGUgYWN0dWFsCi0gIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4pCisgIGZh aWxlZCBiZWZvcmUgY29tcGxldGlvbiBvciBzb21lIFNRTC9tZXRhIGNvbW1hbmQocykgZmFpbGVk LiAgKEluCisgIDxvcHRpb24+LVQ8L29wdGlvbj4gbW9kZSwgb25seSB0aGUgYWN0dWFsIG51bWJl ciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4pCisgIFRoZSBuZXh0IGxpbmUgcmVwb3J0cyB0 aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9ucyB3aXRoCisgIHNlcmlh bGl6YXRpb24gYW5kL29yIGRlYWRsb2NrIGZhaWx1cmVzIChzZWUgPHhyZWYgbGlua2VuZD0iZXJy b3JzLWFuZC1yZXRyaWVzIgorICBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4g Zm9yIG1vcmUgaW5mb3JtYXRpb24pCiAgIFRoZSBsYXN0IHR3byBsaW5lcyByZXBvcnQgdGhlIG51 bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIHNlY29uZCwKICAgZmlndXJlZCB3aXRoIGFuZCB3aXRo b3V0IGNvdW50aW5nIHRoZSB0aW1lIHRvIHN0YXJ0IGRhdGFiYXNlIHNlc3Npb25zLgogIDwvcGFy YT4KQEAgLTQ1Myw2ICs0NTcsMTcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5v cHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgICAg YXQgYWxsLiBUaGV5IGFyZSBjb3VudGVkIGFuZCByZXBvcnRlZCBzZXBhcmF0ZWx5IGFzCiAgICAg ICAgIDxmaXJzdHRlcm0+c2tpcHBlZDwvZmlyc3R0ZXJtPi4KICAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFRoZSB0cmFuc2FjdGlvbiB3aXRoIHNlcmlhbGl6YXRpb24gb3Ig ZGVhZGxvY2sgZmFpbHVyZSBjYW4gYmUgcmV0cmllZCBpZgorICAgICAgICB0aGUgdG90YWwgdGlt ZSBvZiBhbGwgaXRzIHRyaWVzIGlzIGxlc3MgdGhhbgorICAgICAgICA8cmVwbGFjZWFibGU+bGlt aXQ8L3JlcGxhY2VhYmxlPiBtcy4gVGhpcyBvcHRpb24gY2FuIGJlIGNvbWJpbmVkIHdpdGgKKyAg ICAgICAgdGhlIG9wdGlvbiA8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+IHdoaWNoIGxpbWl0 cyB0aGUgdG90YWwgbnVtYmVyIG9mCisgICAgICAgIHRyYW5zYWN0aW9uIHRyaWVzLiBJZiBub25l IG9mIHRoZW0gaXMgdXNlZCwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAgICBvcHRp b24gPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBpcyBzZXQgdG8gMSBhbmQgZmFpbGVkIHRy YW5zYWN0aW9ucworICAgICAgICBhcmUgbm90IHJldHJpZWQgYXQgYWxsLiBTZWUgPHhyZWYgbGlu a2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgICAgICBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJl dHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmV0cnlpbmcKKyAgICAg ICAgZmFpbGVkIHRyYW5zYWN0aW9ucy4KKyAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTUxMywyMiArNTI4LDM0IEBAIHBnYmVuY2gg PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kCiAgICAgICAgIFNob3cgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IDxyZXBs YWNlYWJsZT5zZWM8L3JlcGxhY2VhYmxlPiBzZWNvbmRzLiAgVGhlIHJlcG9ydAogICAgICAgICBp bmNsdWRlcyB0aGUgdGltZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4sIHRoZSBUUFMg c2luY2UgdGhlCiAgICAgICAgIGxhc3QgcmVwb3J0LCBhbmQgdGhlIHRyYW5zYWN0aW9uIGxhdGVu Y3kgYXZlcmFnZSBhbmQgc3RhbmRhcmQKLSAgICAgICAgZGV2aWF0aW9uIHNpbmNlIHRoZSBsYXN0 IHJlcG9ydC4gIFVuZGVyIHRocm90dGxpbmcgKDxvcHRpb24+LVI8L29wdGlvbj4pLAotICAgICAg ICB0aGUgbGF0ZW5jeSBpcyBjb21wdXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRyYW5zYWN0aW9u IHNjaGVkdWxlZAotICAgICAgICBzdGFydCB0aW1lLCBub3QgdGhlIGFjdHVhbCB0cmFuc2FjdGlv biBiZWdpbm5pbmcgdGltZSwgdGh1cyBpdCBhbHNvCi0gICAgICAgIGluY2x1ZGVzIHRoZSBhdmVy YWdlIHNjaGVkdWxlIGxhZyB0aW1lLgorICAgICAgICBkZXZpYXRpb24gc2luY2UgdGhlIGxhc3Qg cmVwb3J0LiAgSWYgYW55IHRyYW5zYWN0aW9ucyBoYXZlIHJlY2VpdmVkIGFuCisgICAgICAgIGVy cm9yIGluIHRoZSBTUUwgb3IgbWV0YSBjb21tYW5kIHNpbmNlIHRoZSBsYXN0IHJlcG9ydCwgdGhl eSBhcmUgYWxzbworICAgICAgICByZXBvcnRlZCBhcyBmYWlsZWQuICBVbmRlciB0aHJvdHRsaW5n ICg8b3B0aW9uPi1SPC9vcHRpb24+KSwgdGhlIGxhdGVuY3kKKyAgICAgICAgaXMgY29tcHV0ZWQg d2l0aCByZXNwZWN0IHRvIHRoZSB0cmFuc2FjdGlvbiBzY2hlZHVsZWQgc3RhcnQgdGltZSwgbm90 CisgICAgICAgIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24gYmVnaW5uaW5nIHRpbWUsIHRodXMgaXQg YWxzbyBpbmNsdWRlcyB0aGUgYXZlcmFnZQorICAgICAgICBzY2hlZHVsZSBsYWcgdGltZS4gIElm IGFueSB0cmFuc2FjdGlvbnMgaGF2ZSBiZWVuIHJvbGxlZCBiYWNrIGFuZAorICAgICAgICByZXRy aWVkIGFmdGVyIGEgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlIHNpbmNlIHRoZSBsYXN0 IHJlcG9ydCwKKyAgICAgICAgdGhlIHJlcG9ydCBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIHN1Y2gg dHJhbnNhY3Rpb25zIGFuZCB0aGUgc3VtIG9mIGFsbAorICAgICAgICByZXRyaWVzLiBVc2UgdGhl IG9wdGlvbnMgPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBhbmQvb3IKKyAgICAgICAgPG9w dGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4gdG8gZW5hYmxlIHRyYW5zYWN0aW9ucyByZXRy aWVzIGFmdGVyCisgICAgICAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZXMuCiAgICAg ICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAg ICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+ Ci0gICAgICA8dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2llczwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBvcnQtcGVyLWNvbW1hbmQ8L29wdGlvbj48L3Rlcm0+ CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZl cmFnZSBwZXItc3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCi0gICAg ICAgIHBlcnNwZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVhY2ggY29tbWFuZCBhZnRlciB0aGUg YmVuY2htYXJrCi0gICAgICAgIGZpbmlzaGVzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICAg ICAgICBSZXBvcnQgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0 ZXIgdGhlIGJlbmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJhZ2UgcGVyLXN0YXRl bWVudCBsYXRlbmN5IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQorICAgICAgICBwZXJzcGVjdGl2 ZSBvZiB0aGUgY2xpZW50KSwgdGhlIG51bWJlciBvZiBlcnJvcnMgYW5kIHRoZSBudW1iZXIgb2YK KyAgICAgICAgcmV0cmllcyBhZnRlciBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVz IGluIHRoaXMgY29tbWFuZC4gIFRoZQorICAgICAgICByZXBvcnQgZGlzcGxheXMgcmV0cnkgc3Rh dGlzdGljcyBvbmx5IGlmIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmllcyBmb3IKKyAgICAgICAg dHJhbnNhY3Rpb25zIGlzIG1vcmUgdGhhbiAxICg8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+ KSBhbmQvb3IgdGhlCisgICAgICAgIG1heGltdW0gdGltZSBvZiB0cmllcyBmb3IgdHJhbnNhY3Rp b25zIGlzIHVzZWQKKyAgICAgICAgKDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRpb24+KS4g IFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY1Nyw2ICs2ODQsNDkgQEAgcGdiZW5jaCA8b3B0 aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJl cGxhY2VhYmxlPmQKICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1lcnJvcnMtZGV0YWlsZWQ8L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlcG9ydCBlcnJvcnMgaW4g cGVyLXRyYW5zYWN0aW9uIGFuZCBhZ2dyZWdhdGlvbiBsb2dzLCBhcyB3ZWxsIGFzIGluIHRoZQor ICAgICAgICBtYWluIGFuZCBwZXItc2NyaXB0IHJlcG9ydHMsIGdyb3VwZWQgYnkgdGhlIGZvbGxv d2luZyB0eXBlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbiBlcnJvcnM7 CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgZGVhZGxvY2sgZXJy b3JzOworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIG90aGVyIFNR TCBlcnJvcnM7CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgZXJy b3JzIGluIG1ldGEgY29tbWFuZHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1kZWJ1Zy1mYWlsczwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUHJpbnQgZGVidWdnaW5nIG91dHB1 dCBvbmx5IGZvciBlcnJvcnMsIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZXMKKyAgICAg ICAgYW5kIHJldHJpZXMuIFNlZSA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJpZXMiCisg ICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPiBmb3IgbW9yZSBpbmZv cm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWxv Zy1wcmVmaXg9PHJlcGxhY2VhYmxlPnByZWZpeDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgogICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgpAQCAtNjY3LDYgKzczNywyMiBAQCBw Z2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29w dGlvbmFsPiA8cmVwbGFjZWFibGU+ZAogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLW1heC10cmllcz08cmVwbGFjZWFibGU+ bnVtYmVyX29mX3RyaWVzPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Yg dHJpZXMgZm9yIHRyYW5zYWN0aW9ucyB3aXRoCisgICAgICAgIHNlcmlhbGl6YXRpb24vZGVhZGxv Y2sgZmFpbHVyZXMuIFRoaXMgb3B0aW9uIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZQorICAgICAg ICBvcHRpb24gPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4gd2hpY2ggbGltaXRzIHRo ZSB0b3RhbCB0aW1lIG9mCisgICAgICAgIHRyYW5zYWN0aW9uIHRyaWVzLiBJZiBub25lIG9mIHRo ZW0gaXMgdXNlZCwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAgICBvcHRpb24gPG9w dGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBpcyBzZXQgdG8gMSBhbmQgZmFpbGVkIHRyYW5zYWN0 aW9ucworICAgICAgICBhcmUgbm90IHJldHJpZWQgYXQgYWxsLiBTZWUgPHhyZWYgbGlua2VuZD0i ZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgICAgICBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMt dGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmV0cnlpbmcKKyAgICAgICAgZmFp bGVkIHRyYW5zYWN0aW9ucy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9w dGlvbj4tLXByb2dyZXNzLXRpbWVzdGFtcDwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRl bT4KICAgICAgICA8cGFyYT4KQEAgLTgwNyw4ICs4OTMsOCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4g PHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFi bGU+ZAogIDxyZWZzZWN0MT4KICAgPHRpdGxlPk5vdGVzPC90aXRsZT4KIAotIDxyZWZzZWN0Mj4K LSAgPHRpdGxlPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvcXVvdGU+IEFjdHVhbGx5 IFBlcmZvcm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+PzwvdGl0bGU+ CisgPHJlZnNlY3QyIGlkPSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMiPgorICA8dGl0bGUgaWQ9 InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSI+V2hhdCBpcyB0aGUgPHF1b3RlPlRyYW5z YWN0aW9uPC9xdW90ZT4gQWN0dWFsbHkgUGVyZm9ybWVkIGluIDxhcHBsaWNhdGlvbj5wZ2JlbmNo PC9hcHBsaWNhdGlvbj4/PC90aXRsZT4KIAogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ2Jl bmNoPC9hcHBsaWNhdGlvbj4gZXhlY3V0ZXMgdGVzdCBzY3JpcHRzIGNob3NlbiByYW5kb21seQpA QCAtMTU4Myw3ICsxNjY5LDcgQEAgRU5EOwogICAgVGhlIGZvcm1hdCBvZiB0aGUgbG9nIGlzOgog CiA8c3lub3BzaXM+Ci08cmVwbGFjZWFibGU+Y2xpZW50X2lkPC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPnRyYW5zYWN0aW9uX25vPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnRpbWU8L3Jl cGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c2NyaXB0X25vPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2Vh YmxlPnRpbWVfZXBvY2g8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZV91czwvcmVwbGFj ZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNjaGVkdWxlX2xhZzwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+Cis8cmVwbGFjZWFibGU+Y2xpZW50X2lkPC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPnRyYW5zYWN0aW9uX25vPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnRpbWU8L3Jl cGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c2NyaXB0X25vPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2Vh YmxlPnRpbWVfZXBvY2g8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZV91czwvcmVwbGFj ZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNjaGVkdWxlX2xhZzwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgogPC9zeW5vcHNpcz4KIAogICAgd2hlcmUKQEAgLTE2MDQsNiArMTY5MCwx OSBAQCBFTkQ7CiAgICBXaGVuIGJvdGggPG9wdGlvbj4tLXJhdGU8L29wdGlvbj4gYW5kIDxvcHRp b24+LS1sYXRlbmN5LWxpbWl0PC9vcHRpb24+IGFyZSB1c2VkLAogICAgdGhlIDxyZXBsYWNlYWJs ZT50aW1lPC9yZXBsYWNlYWJsZT4gZm9yIGEgc2tpcHBlZCB0cmFuc2FjdGlvbiB3aWxsIGJlIHJl cG9ydGVkIGFzCiAgICA8bGl0ZXJhbD5za2lwcGVkPC9saXRlcmFsPi4KKyAgIDxyZXBsYWNlYWJs ZT5yZXRyaWVzPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHN1bSBvZiBhbGwgdGhlIHJldHJpZXMgYWZ0 ZXIgdGhlCisgICBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVzIGR1cmluZyB0aGUg Y3VycmVudCBzY3JpcHQgZXhlY3V0aW9uLiBJdCBpcworICAgb25seSBwcmVzZW50IHdoZW4gdGhl IG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGZvciB0cmFuc2FjdGlvbnMgaXMgbW9yZSB0aGFuIDEK KyAgICg8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+KSBhbmQvb3IgdGhlIG1heGltdW0gdGlt ZSBvZiB0cmllcyBmb3IKKyAgIHRyYW5zYWN0aW9ucyBpcyB1c2VkICg8b3B0aW9uPi0tbGF0ZW5j eS1saW1pdDwvb3B0aW9uPikuIElmIHRoZSB0cmFuc2FjdGlvbgorICAgZW5kZWQgd2l0aCBhbiBl cnJvciwgaXRzIDxyZXBsYWNlYWJsZT50aW1lPC9yZXBsYWNlYWJsZT4gd2lsbCBiZSByZXBvcnRl ZCBhcworICAgPGxpdGVyYWw+ZmFpbGVkPC9saXRlcmFsPi4gSWYgeW91IHVzZSB0aGUgb3B0aW9u CisgICA8b3B0aW9uPi0tZXJyb3JzLWRldGFpbGVkPC9vcHRpb24+IHRoZSA8cmVwbGFjZWFibGU+ dGltZTwvcmVwbGFjZWFibGU+IG9mIHRoZQorICAgZmFpbGVkIHRyYW5zYWN0aW9uIHdpbGwgYmUg cmVwb3J0ZWQgYXMKKyAgIDxsaXRlcmFsPnNlcmlhbGl6YXRpb25fZXJyb3I8L2xpdGVyYWw+IC8g PGxpdGVyYWw+ZGVhZGxvY2tfZXJyb3I8L2xpdGVyYWw+IC8KKyAgIDxsaXRlcmFsPmFub3RoZXJf c3FsX2Vycm9yPC9saXRlcmFsPiAvIDxsaXRlcmFsPm1ldGFfY29tbWFuZF9lcnJvcjwvbGl0ZXJh bD4KKyAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBlcnJvciAoc2VlIDx4cmVmIGxpbmtlbmQ9 ImVycm9ycy1hbmQtcmV0cmllcyIKKyAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRs ZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTE2 MzMsNiArMTczMiwyNCBAQCBFTkQ7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KKyAgIFRoZSBmb2xs b3dpbmcgZXhhbXBsZSBzaG93cyBhIHNuaXBwZXQgb2YgYSBsb2cgZmlsZSB3aXRoIGVycm9ycyBh bmQgcmV0cmllcywKKyAgIHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIHNldCB0byAx MCAobm90ZSB0aGUgYWRkaXRpb25hbAorICAgPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxhY2Vh YmxlPiBjb2x1bW4pOgorPHNjcmVlbj4KKzMgMCA0NzQyMyAwIDE0OTk0MTQ0OTggMzQ1MDEgNAor MyAxIDgzMzMgMCAxNDk5NDE0NDk4IDQyODQ4IDEKKzMgMiA4MzU4IDAgMTQ5OTQxNDQ5OCA1MTIx OSAxCis0IDAgNzIzNDUgMCAxNDk5NDE0NDk4IDU5NDMzIDcKKzEgMyA0MTcxOCAwIDE0OTk0MTQ0 OTggNjc4NzkgNQorMSA0IDg0MTYgMCAxNDk5NDE0NDk4IDc2MzExIDEKKzMgMyAzMzIzNSAwIDE0 OTk0MTQ0OTggODQ0NjkgNAorMCAwIGZhaWxlZCAwIDE0OTk0MTQ0OTggODQ5MDUgMTAKKzIgMCBm YWlsZWQgMCAxNDk5NDE0NDk4IDg2MjQ4IDEwCiszIDQgODMwNyAwIDE0OTk0MTQ0OTggOTI3ODgg MQorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KICAgIFdoZW4gcnVubmluZyBhIGxv bmcgdGVzdCBvbiBoYXJkd2FyZSB0aGF0IGNhbiBoYW5kbGUgYSBsb3Qgb2YgdHJhbnNhY3Rpb25z LAogICAgdGhlIGxvZyBmaWxlcyBjYW4gYmVjb21lIHZlcnkgbGFyZ2UuICBUaGUgPG9wdGlvbj4t LXNhbXBsaW5nLXJhdGU8L29wdGlvbj4gb3B0aW9uCiAgICBjYW4gYmUgdXNlZCB0byBsb2cgb25s eSBhIHJhbmRvbSBzYW1wbGUgb2YgdHJhbnNhY3Rpb25zLgpAQCAtMTY0Nyw3ICsxNzY0LDcgQEAg RU5EOwogICAgZm9ybWF0IGlzIHVzZWQgZm9yIHRoZSBsb2cgZmlsZXM6CiAKIDxzeW5vcHNpcz4K LTxyZXBsYWNlYWJsZT5pbnRlcnZhbF9zdGFydDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5u dW1fdHJhbnNhY3Rpb25zPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5PC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5XzI8L3JlcGxhY2VhYmxlPiA8cmVw bGFjZWFibGU+bWluX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xhdGVu Y3k8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zdW1fbGFnPC9yZXBsYWNl YWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYWdfMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5t aW5fbGFnPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1heF9sYWc8L3JlcGxhY2VhYmxlPiA8 b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5za2lwcGVkPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4g PC9vcHRpb25hbD4KKzxyZXBsYWNlYWJsZT5pbnRlcnZhbF9zdGFydDwvcmVwbGFjZWFibGU+IDxy ZXBsYWNlYWJsZT5udW1fdHJhbnNhY3Rpb25zPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1 bV9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5XzI8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+bWluX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFi bGU+bWF4X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiB7IDxyZXBsYWNlYWJsZT5mYWlsZWRfdHg8L3Jl cGxhY2VhYmxlPiA8b3B0aW9uYWw+IHwgPHJlcGxhY2VhYmxlPnNlcmlhbGl6YXRpb25fZXJyb3Jz PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmRlYWRsb2NrX2Vycm9yczwvcmVwbGFjZWFibGU+ IDxyZXBsYWNlYWJsZT5vdGhlcl9zcWxfZXJyb3JzPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxl Pm1ldGFfY29tbWFuZF9lcnJvcnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiB9IDxvcHRpb25h bD4gPHJlcGxhY2VhYmxlPnN1bV9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xh Z18yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1pbl9sYWc8L3JlcGxhY2VhYmxlPiA8cmVw bGFjZWFibGU+bWF4X2xhZzwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNr aXBwZWQ8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8b3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5yZXRyaWVkX3R4PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnJldHJpZXM8 L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgogPC9zeW5vcHNpcz4KIAogICAgd2hlcmUKQEAgLTE2 NjEsNyArMTc3OCwyMCBAQCBFTkQ7CiAgICB0cmFuc2FjdGlvbiBsYXRlbmNpZXMgd2l0aGluIHRo ZSBpbnRlcnZhbCwKICAgIDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IGlz IHRoZSBtaW5pbXVtIGxhdGVuY3kgd2l0aGluIHRoZSBpbnRlcnZhbCwKICAgIGFuZAotICAgPHJl cGxhY2VhYmxlPm1heF9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gaXMgdGhlIG1heGltdW0gbGF0ZW5j eSB3aXRoaW4gdGhlIGludGVydmFsLgorICAgPHJlcGxhY2VhYmxlPm1heF9sYXRlbmN5PC9yZXBs YWNlYWJsZT4gaXMgdGhlIG1heGltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAorICAg PHJlcGxhY2VhYmxlPmZhaWxlZF90eDwvcmVwbGFjZWFibGU+IGlzIHRoZSBudW1iZXIgb2YgdHJh bnNhY3Rpb25zIHRoYXQgZW5kZWQKKyAgIHdpdGggYSBmYWlsZWQgU1FMIG9yIG1ldGEgY29tbWFu ZCB3aXRoaW4gdGhlIGludGVydmFsLiBJZiB5b3UgdXNlIHRoZSBvcHRpb24KKyAgIDxvcHRpb24+ LS1lcnJvcnMtZGV0YWlsZWQ8L29wdGlvbj4sIGluc3RlYWQgb2YgdGhlIHN1bSBvZiBhbGwgZmFp bGVkCisgICB0cmFuc2FjdGlvbnMgeW91IHdpbGwgZ2V0IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGlj cyBmb3IgdGhlIGZhaWxlZAorICAgdHJhbnNhY3Rpb25zIGdyb3VwZWQgYnkgdGhlIGZvbGxvd2lu ZyB0eXBlczoKKyAgIDxyZXBsYWNlYWJsZT5zZXJpYWxpemF0aW9uX2Vycm9yczwvcmVwbGFjZWFi bGU+IGlzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zCisgICB0aGF0IGdvdCBhIHNlcmlhbGl6 YXRpb24gZmFpbHVyZSBhbmQgd2VyZSBub3QgcmV0cmllZCBhZnRlciB0aGlzLAorICAgPHJlcGxh Y2VhYmxlPmRlYWRsb2NrX2Vycm9yczwvcmVwbGFjZWFibGU+IGlzIHRoZSBudW1iZXIgb2YgdHJh bnNhY3Rpb25zIHRoYXQKKyAgIGdvdCBhIGRlYWRsb2NrIGZhaWx1cmUgYW5kIHdlcmUgbm90IHJl dHJpZWQgYWZ0ZXIgdGhpcywKKyAgIDxyZXBsYWNlYWJsZT5vdGhlcl9zcWxfZXJyb3JzPC9yZXBs YWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMKKyAgIHRoYXQgZ290IGEgZGlm ZmVyZW50IGVycm9yIGluIHRoZSBTUUwgY29tbWFuZCwKKyAgIDxyZXBsYWNlYWJsZT5tZXRhX2Nv bW1hbmRfZXJyb3JzPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMK KyAgIHRoYXQgZ290IGFuIGVycm9yIGluIHRoZSBtZXRhIGNvbW1hbmQuCiAgICBUaGUgbmV4dCBm aWVsZHMsCiAgICA8cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFi bGU+c3VtX2xhZ18yPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5taW5fbGFnPC9yZXBsYWNl YWJsZT4sCiAgICBhbmQgPHJlcGxhY2VhYmxlPm1heF9sYWc8L3JlcGxhY2VhYmxlPiwgYXJlIG9u bHkgcHJlc2VudCBpZiB0aGUgPG9wdGlvbj4tLXJhdGU8L29wdGlvbj4KQEAgLTE2NjksMjEgKzE3 OTksMjggQEAgRU5EOwogICAgVGhleSBwcm92aWRlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHRpbWUg ZWFjaCB0cmFuc2FjdGlvbiBoYWQgdG8gd2FpdCBmb3IgdGhlCiAgICBwcmV2aW91cyBvbmUgdG8g ZmluaXNoLCBpLmUuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZWFjaCB0cmFuc2FjdGlvbidzCiAg ICBzY2hlZHVsZWQgc3RhcnQgdGltZSBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgc3RhcnRlZC4K LSAgIFRoZSB2ZXJ5IGxhc3QgZmllbGQsIDxyZXBsYWNlYWJsZT5za2lwcGVkPC9yZXBsYWNlYWJs ZT4sCisgICBUaGUgbmV4dCBmaWVsZCwgPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxl PiwKICAgIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29w dGlvbj4gb3B0aW9uIGlzIHVzZWQsIHRvby4KICAgIEl0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBza2lwcGVkIGJlY2F1c2UgdGhleSB3b3VsZCBoYXZlCiAgICBzdGFydGVkIHRv byBsYXRlLgorICAgVGhlIDxyZXBsYWNlYWJsZT5yZXRyaWVkX3R4PC9yZXBsYWNlYWJsZT4gYW5k CisgICA8cmVwbGFjZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IGZpZWxkcyBhcmUgb25seSBw cmVzZW50IGlmIHRoZSBtYXhpbXVtCisgICBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9u cyBpcyBtb3JlIHRoYW4gMQorICAgKDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4pIGFuZC9v ciB0aGUgbWF4aW11bSB0aW1lIG9mIHRyaWVzIGZvcgorICAgdHJhbnNhY3Rpb25zIGlzIHVzZWQg KDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRpb24+KS4gVGhleSByZXBvcnQgdGhlCisgICBu dW1iZXIgb2YgcmV0cmllZCB0cmFuc2FjdGlvbnMgYW5kIHRoZSBzdW0gb2YgYWxsIHRoZSByZXRy aWVzIGFmdGVyCisgICBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVzIHdpdGhpbiB0 aGUgaW50ZXJ2YWwuCiAgICBFYWNoIHRyYW5zYWN0aW9uIGlzIGNvdW50ZWQgaW4gdGhlIGludGVy dmFsIHdoZW4gaXQgd2FzIGNvbW1pdHRlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgogICAgSGVy ZSBpcyBzb21lIGV4YW1wbGUgb3V0cHV0OgogPHNjcmVlbj4KLTEzNDU4Mjg1MDEgNTYwMSAxNTQy NzQ0IDQ4MzU1MjQxNiA2MSAyNTczCi0xMzQ1ODI4NTAzIDc4ODQgMTk3OTgxMiA1NjU4MDY3MzYg NjAgMTQ3OQotMTM0NTgyODUwNSA3MjA4IDE5Nzk0MjIgNTY3Mjc3NTUyIDU5IDEzOTEKLTEzNDU4 Mjg1MDcgNzY4NSAxOTgwMjY4IDU2OTc4NDcxNCA2MCAxMzk4Ci0xMzQ1ODI4NTA5IDcwNzMgMTk3 OTc3OSA1NzM0ODk5NDEgMjM2IDE0MTEKKzEzNDU4Mjg1MDEgNTYwMSAxNTQyNzQ0IDQ4MzU1MjQx NiA2MSAyNTczIDAKKzEzNDU4Mjg1MDMgNzg4NCAxOTc5ODEyIDU2NTgwNjczNiA2MCAxNDc5IDAK KzEzNDU4Mjg1MDUgNzIwOCAxOTc5NDIyIDU2NzI3NzU1MiA1OSAxMzkxIDAKKzEzNDU4Mjg1MDcg NzY4NSAxOTgwMjY4IDU2OTc4NDcxNCA2MCAxMzk4IDAKKzEzNDU4Mjg1MDkgNzA3MyAxOTc5Nzc5 IDU3MzQ4OTk0MSAyMzYgMTQxMSAwCiA8L3NjcmVlbj48L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0x Njk1LDEzICsxODMyLDQ1IEBAIEVORDsKICA8L3JlZnNlY3QyPgogCiAgPHJlZnNlY3QyPgotICA8 dGl0bGU+UGVyLVN0YXRlbWVudCBMYXRlbmNpZXM8L3RpdGxlPgorICA8dGl0bGU+UGVyLVN0YXRl bWVudCBSZXBvcnQ8L3RpdGxlPgorCisgIDxwYXJhPgorICAgV2l0aCB0aGUgPG9wdGlvbj4tcjwv b3B0aW9uPiBvcHRpb24sIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4KKyAgIGNv bGxlY3RzIHRoZSBmb2xsb3dpbmcgc3RhdGlzdGljcyBmb3IgZWFjaCBzdGF0ZW1lbnQ6CisgICA8 aXRlbWl6ZWRsaXN0PgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICA8 bGl0ZXJhbD5sYXRlbmN5PC9saXRlcmFsPiAmbWRhc2g7IGVsYXBzZWQgdHJhbnNhY3Rpb24gdGlt ZSBmb3IgZWFjaAorICAgICAgICAgc3RhdGVtZW50LiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBw bGljYXRpb24+IHJlcG9ydHMgYW4gYXZlcmFnZSB2YWx1ZQorICAgICAgICAgb2YgYWxsIHN1Y2Nl c3NmdWwgcnVucyBvZiB0aGUgc3RhdGVtZW50LgorICAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIG51bWJl ciBvZiBlcnJvcnMgaW4gdGhpcyBzdGF0ZW1lbnQuIFNlZQorICAgICAgICAgPHhyZWYgbGlua2Vu ZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUi Lz4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAg PC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgVGhl IG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBvciBhIGRlYWRsb2NrIGZh aWx1cmUgaW4KKyAgICAgICAgIHRoaXMgc3RhdGVtZW50LiBTZWUgPHhyZWYgbGlua2VuZD0iZXJy b3JzLWFuZC1yZXRyaWVzIgorICAgICAgICAgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRp dGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg cmVwb3J0IGRpc3BsYXlzIHJldHJ5IHN0YXRpc3RpY3Mgb25seSBpZiB0aGUgbWF4aW11bSBudW1i ZXIgb2YgdHJpZXMgZm9yCisgICB0cmFuc2FjdGlvbnMgaXMgbW9yZSB0aGFuIDEgKDxvcHRpb24+ LS1tYXgtdHJpZXM8L29wdGlvbj4pIGFuZC9vciB0aGUgbWF4aW11bQorICAgdGltZSBvZiB0cmll cyBmb3IgdHJhbnNhY3Rpb25zIGlzIHVzZWQgKDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRp b24+KS4KKyAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgV2l0aCB0aGUgPG9wdGlvbj4tcjwvb3B0 aW9uPiBvcHRpb24sIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gY29sbGVjdHMK LSAgIHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9uIHRpbWUgb2YgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0 ZWQgYnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0IHRoZW4gcmVwb3J0cyBhbiBhdmVyYWdlIG9mIHRo b3NlIHZhbHVlcywgcmVmZXJyZWQgdG8KLSAgIGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0YXRl bWVudCwgYWZ0ZXIgdGhlIGJlbmNobWFyayBoYXMgZmluaXNoZWQuCisgICBBbGwgdmFsdWVzIGFy ZSBjb21wdXRlZCBmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkgY2xpZW50IGFu ZCBhcmUKKyAgIHJlcG9ydGVkIGFmdGVyIHRoZSBiZW5jaG1hcmsgaGFzIGZpbmlzaGVkLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xNzE1LDI3ICsxODg0LDY5IEBAIG51bWJlciBvZiBjbGll bnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEKIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVy IGNsaWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6 IDEwMDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBvZiB0cmllczogMQogbGF0ZW5jeSBhdmVyYWdl ID0gMTUuODQ0IG1zCiBsYXRlbmN5IHN0ZGRldiA9IDIuNzE1IG1zCiB0cHMgPSA2MTguNzY0NTU1 IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogdHBzID0gNjIyLjk3NzY5OCAo ZXhjbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKLXN0YXRlbWVudCBsYXRlbmNpZXMg aW4gbWlsbGlzZWNvbmRzOgotICAgICAgICAwLjAwMiAgXHNldCBhaWQgcmFuZG9tKDEsIDEwMDAw MCAqIDpzY2FsZSkKLSAgICAgICAgMC4wMDUgIFxzZXQgYmlkIHJhbmRvbSgxLCAxICogOnNjYWxl KQotICAgICAgICAwLjAwMiAgXHNldCB0aWQgcmFuZG9tKDEsIDEwICogOnNjYWxlKQotICAgICAg ICAwLjAwMSAgXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApCi0gICAgICAgIDAuMzI2ICBC RUdJTjsKLSAgICAgICAgMC42MDMgIFVQREFURSBwZ2JlbmNoX2FjY291bnRzIFNFVCBhYmFsYW5j ZSA9IGFiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGFpZCA9IDphaWQ7Ci0gICAgICAgIDAuNDU0ICBT RUxFQ1QgYWJhbGFuY2UgRlJPTSBwZ2JlbmNoX2FjY291bnRzIFdIRVJFIGFpZCA9IDphaWQ7Ci0g ICAgICAgIDUuNTI4ICBVUERBVEUgcGdiZW5jaF90ZWxsZXJzIFNFVCB0YmFsYW5jZSA9IHRiYWxh bmNlICsgOmRlbHRhIFdIRVJFIHRpZCA9IDp0aWQ7Ci0gICAgICAgIDcuMzM1ICBVUERBVEUgcGdi ZW5jaF9icmFuY2hlcyBTRVQgYmJhbGFuY2UgPSBiYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBiaWQg PSA6YmlkOwotICAgICAgICAwLjM3MSAgSU5TRVJUIElOVE8gcGdiZW5jaF9oaXN0b3J5ICh0aWQs IGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpIFZBTFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRh LCBDVVJSRU5UX1RJTUVTVEFNUCk7Ci0gICAgICAgIDEuMjEyICBFTkQ7CitzdGF0ZW1lbnQgbGF0 ZW5jaWVzIGluIG1pbGxpc2Vjb25kcyBhbmQgZXJyb3JzOgorICAgICAgICAwLjAwMiAgMCAgXHNl dCBhaWQgcmFuZG9tKDEsIDEwMDAwMCAqIDpzY2FsZSkKKyAgICAgICAgMC4wMDUgIDAgIFxzZXQg YmlkIHJhbmRvbSgxLCAxICogOnNjYWxlKQorICAgICAgICAwLjAwMiAgMCAgXHNldCB0aWQgcmFu ZG9tKDEsIDEwICogOnNjYWxlKQorICAgICAgICAwLjAwMSAgMCAgXHNldCBkZWx0YSByYW5kb20o LTUwMDAsIDUwMDApCisgICAgICAgIDAuMzI2ICAwICBCRUdJTjsKKyAgICAgICAgMC42MDMgIDAg IFVQREFURSBwZ2JlbmNoX2FjY291bnRzIFNFVCBhYmFsYW5jZSA9IGFiYWxhbmNlICsgOmRlbHRh IFdIRVJFIGFpZCA9IDphaWQ7CisgICAgICAgIDAuNDU0ICAwICBTRUxFQ1QgYWJhbGFuY2UgRlJP TSBwZ2JlbmNoX2FjY291bnRzIFdIRVJFIGFpZCA9IDphaWQ7CisgICAgICAgIDUuNTI4ICAwICBV UERBVEUgcGdiZW5jaF90ZWxsZXJzIFNFVCB0YmFsYW5jZSA9IHRiYWxhbmNlICsgOmRlbHRhIFdI RVJFIHRpZCA9IDp0aWQ7CisgICAgICAgIDcuMzM1ICAwICBVUERBVEUgcGdiZW5jaF9icmFuY2hl cyBTRVQgYmJhbGFuY2UgPSBiYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBiaWQgPSA6YmlkOworICAg ICAgICAwLjM3MSAgMCAgSU5TRVJUIElOVE8gcGdiZW5jaF9oaXN0b3J5ICh0aWQsIGJpZCwgYWlk LCBkZWx0YSwgbXRpbWUpIFZBTFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5U X1RJTUVTVEFNUCk7CisgICAgICAgIDEuMjEyICAwICBFTkQ7Cis8L3NjcmVlbj4KKworICAgQW5v dGhlciBleGFtcGxlIG9mIG91dHB1dCBmb3IgdGhlIGRlZmF1bHQgc2NyaXB0IHVzaW5nIHNlcmlh bGl6YWJsZSBkZWZhdWx0CisgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgKDxjb21tYW5k PlBHT1BUSU9OUz0nLWMKKyAgIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPXNlcmlhbGl6 YWJsZScgcGdiZW5jaCAuLi48L2NvbW1hbmQ+KToKKzxzY3JlZW4+CitzdGFydGluZyB2YWN1dW0u Li5lbmQuCit0cmFuc2FjdGlvbiB0eXBlOiAmbHQ7YnVpbHRpbjogVFBDLUIgKHNvcnQgb2YpJmd0 Oworc2NhbGluZyBmYWN0b3I6IDEKK3F1ZXJ5IG1vZGU6IHNpbXBsZQorbnVtYmVyIG9mIGNsaWVu dHM6IDEwCitudW1iZXIgb2YgdGhyZWFkczogMQorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIg Y2xpZW50OiAxMDAwCitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDog NDQ3My8xMDAwMAorbnVtYmVyIG9mIGVycm9yczogNTUyNyAoNTUuMjcwJSkKK251bWJlciBvZiBz ZXJpYWxpemF0aW9uIGVycm9yczogNTUyNyAoNTUuMjcwJSkKK251bWJlciBvZiByZXRyaWVkOiA3 NDY3ICg3NC42NzAlKQorbnVtYmVyIG9mIHJldHJpZXM6IDI1NzI0NAorbWF4aW11bSBudW1iZXIg b2YgdHJpZXM6IDEwMAorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgMTAwLjAgbXMg bGF0ZW5jeSBsaW1pdDogNTc2Ni8xMDAwMCAoNTcuNjYwICUpIChpbmNsdWRpbmcgZXJyb3JzKQor bGF0ZW5jeSBhdmVyYWdlID0gNDEuMTY5IG1zCitsYXRlbmN5IHN0ZGRldiA9IDUxLjc4MyBtcwor dHBzID0gNTAuMzIyNDk0IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQordHBz ID0gNTAuMzI0NTk1IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQorc3RhdGVt ZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHMsIGVycm9ycyBhbmQgcmV0cmllczoKKyAgMC4w MDQgICAgIDAgICAgICAgMCAgXHNldCBhaWQgcmFuZG9tKDEsIDEwMDAwMCAqIDpzY2FsZSkKKyAg MC4wMDAgICAgIDAgICAgICAgMCAgXHNldCBiaWQgcmFuZG9tKDEsIDEgKiA6c2NhbGUpCisgIDAu MDAwICAgICAwICAgICAgIDAgIFxzZXQgdGlkIHJhbmRvbSgxLCAxMCAqIDpzY2FsZSkKKyAgMC4w MDAgICAgIDAgICAgICAgMCAgXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApCisgIDAuMjEz ICAgICAwICAgICAgIDAgIEJFR0lOOworICAwLjM5MyAgICAgMCAgICAgICAwICBVUERBVEUgcGdi ZW5jaF9hY2NvdW50cworICAgICAgICAgICAgICAgICAgICAgICBTRVQgYWJhbGFuY2UgPSBhYmFs YW5jZSArIDpkZWx0YSBXSEVSRSBhaWQgPSA6YWlkOworICAwLjMzMiAgICAgMCAgICAgICAwICBT RUxFQ1QgYWJhbGFuY2UgRlJPTSBwZ2JlbmNoX2FjY291bnRzIFdIRVJFIGFpZCA9IDphaWQ7Cisg IDAuNDA5ICA0OTcxICAyNTAyNjUgIFVQREFURSBwZ2JlbmNoX3RlbGxlcnMKKyAgICAgICAgICAg ICAgICAgICAgICAgU0VUIHRiYWxhbmNlID0gdGJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgdGlkID0g OnRpZDsKKyAgMC4zMTEgICA1NTYgICAgNjk3NSAgVVBEQVRFIHBnYmVuY2hfYnJhbmNoZXMKKyAg ICAgICAgICAgICAgICAgICAgICAgU0VUIGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6ZGVsdGEgV0hF UkUgYmlkID0gOmJpZDsKKyAgMC4yOTkgICAgIDAgICAgICAgMCAgSU5TRVJUIElOVE8gcGdiZW5j aF9oaXN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGlkLCBiaWQsIGFpZCwg ZGVsdGEsIG10aW1lKQorICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKDp0aWQsIDpiaWQs IDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOworICAwLjUyMCAgICAgMCAgICAgICA0 ICBFTkQ7CiA8L3NjcmVlbj4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSWYgbXVsdGlwbGUg c2NyaXB0IGZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZSBhdmVyYWdlcyBhcmUgcmVwb3J0ZWQKKyAg IElmIG11bHRpcGxlIHNjcmlwdCBmaWxlcyBhcmUgc3BlY2lmaWVkLCBhbGwgc3RhdGlzdGljcyBh cmUgcmVwb3J0ZWQKICAgIHNlcGFyYXRlbHkgZm9yIGVhY2ggc2NyaXB0IGZpbGUuCiAgIDwvcGFy YT4KIApAQCAtMTc0OSw2ICsxOTYwLDEzNiBAQCBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxp c2Vjb25kczoKICAgPC9wYXJhPgogIDwvcmVmc2VjdDI+CiAKKyA8cmVmc2VjdDIgaWQ9ImVycm9y cy1hbmQtcmV0cmllcyI+CisgIDx0aXRsZSBpZD0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIj5F cnJvcnMgYW5kIFNlcmlhbGl6YXRpb24vRGVhZGxvY2sgUmV0cmllczwvdGl0bGU+CisKKyAgPHBh cmE+CisgICBXaGVuIGV4ZWN1dGluZyA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+ LCB0aGVyZSdyZSB0aHJlZSBtYWluIHR5cGVzIG9mCisgICBlcnJvcnM6CisgICA8aXRlbWl6ZWRs aXN0PgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBFcnJvcnMgb2Yg dGhlIG1haW4gcHJvZ3JhbS4gVGhleSBhcmUgdGhlIG1vc3Qgc2VyaW91cyBhbmQgYWx3YXlzIHJl c3VsdAorICAgICAgICAgaW4gYW4gaW1tZWRpYXRlIGV4aXQgZnJvbSB0aGUgPGFwcGxpY2F0aW9u PnBnYmVuY2g8L2FwcGxpY2F0aW9uPiB3aXRoCisgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBl cnJvciBtZXNzYWdlLiBUaGV5IGluY2x1ZGU6CisgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBl cnJvcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxp Y2F0aW9uPgorICAgICAgICAgICAgICAgKGUuZy4gYW4gaW52YWxpZCBvcHRpb24gdmFsdWUpOwor ICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgZXJyb3JzIGlu IHRoZSBpbml0aWFsaXphdGlvbiBtb2RlIChlLmcuIHRoZSBxdWVyeSB0byBjcmVhdGUKKyAgICAg ICAgICAgICAgIHRhYmxlcyBmb3IgYnVpbHQtaW4gc2NyaXB0cyBmYWlscyk7CisgICAgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBlcnJvcnMgYmVmb3JlIHN0YXJ0 aW5nIHRocmVhZHMgKGUuZy4gd2UgY291bGQgbm90IGNvbm5lY3QgdG8gdGhlCisgICAgICAgICAg ICAgICBkYXRhYmFzZSBzZXJ2ZXIgLyB0aGUgc3ludGF4IGVycm9yIGluIHRoZSBtZXRhIGNvbW1h bmQgLyB0aHJlYWQKKyAgICAgICAgICAgICAgIGNyZWF0aW9uIGZhaWx1cmUpOworICAgICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgaW50ZXJuYWwgPGFwcGxpY2F0 aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBlcnJvcnMgKHdoaWNoIGFyZQorICAgICAgICAgICAg ICAgc3VwcG9zZWQgdG8gbmV2ZXIgb2NjdXIuLikuCisgICAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgPC9w YXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgICBFcnJvcnMgd2hlbiB0aGUgdGhyZWFkIG1hbmFnZXMgaXRzIGNsaWVudHMgKGUuZy4g dGhlIGNsaWVudCBjb3VsZCBub3QKKyAgICAgICAgIHN0YXJ0IGEgY29ubmVjdGlvbiB0byB0aGUg ZGF0YWJhc2Ugc2VydmVyIC8gdGhlIHNvY2tldCBmb3IgY29ubmVjdGluZworICAgICAgICAgdGhl IGNsaWVudCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyIGhhcyBiZWNvbWUgaW52YWxpZCkuIEluIHN1 Y2ggY2FzZXMKKyAgICAgICAgIGFsbCBjbGllbnRzIG9mIHRoaXMgdGhyZWFkIHN0b3Agd2hpbGUg b3RoZXIgdGhyZWFkcyBjb250aW51ZSB0byB3b3JrLgorICAgICAgIDwvcGFyYT4KKyAgICAgPC9s aXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgRGlyZWN0 bHkgY2xpZW50IGVycm9ycy4gVGhleSBsZWFkIHRvIGltbWVkaWF0ZSBleGl0IGZyb20gdGhlCisg ICAgICAgICA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+IHdpdGggdGhlIGNvcnJl c3BvbmRpbmcgZXJyb3IgbWVzc2FnZQorICAgICAgICAgb25seSBpbiB0aGUgY2FzZSBvZiBhbiBp bnRlcm5hbCA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+CisgICAgICAgICBlcnJv ciAod2hpY2ggYXJlIHN1cHBvc2VkIHRvIG5ldmVyIG9jY3VyLi4pLiBPdGhlcndpc2UgaW4gdGhl IHdvcnN0CisgICAgICAgICBjYXNlIHRoZXkgb25seSBsZWFkIHRvIHRoZSBhYm9ydGlvbiBvZiB0 aGUgZmFpbGVkIGNsaWVudCB3aGlsZSBvdGhlcgorICAgICAgICAgY2xpZW50cyBjb250aW51ZSB0 aGVpciBydW4gKGJ1dCBtb3N0IGNsaWVudCBlcnJvcnMgYXJlIGhhbmRsZWQgd2l0aG91dAorICAg ICAgICAgYW4gYWJvcnRpb24gb2YgdGhlIGNsaWVudCBhbmQgcmVwb3J0ZWQgc2VwYXJhdGVseSwg c2VlIGJlbG93KS4gTGF0ZXIgaW4KKyAgICAgICAgIHRoaXMgc2VjdGlvbiBpdCBpcyBhc3N1bWVk IHRoYXQgdGhlIGRpc2N1c3NlZCBmYWlsdXJlcyBhbmQgZXJyb3JzIGFyZQorICAgICAgICAgb25s eSB0aGUgZGlyZWN0bHkgY2xpZW50IGVycm9ycyBhbmQgdGhleSBhcmUgbm90IGludGVybmFsCisg ICAgICAgICA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+IGVycm9ycy4KKyAgICAg ICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgQ2xpZW50J3MgcnVuIGlzIGFib3J0ZWQgb25seSBpbiBjYXNlIG9m IGEgc2VyaW91cyBlcnJvciwgZm9yIGV4YW1wbGUsIHRoZQorICAgY29ubmVjdGlvbiB3aXRoIHRo ZSBkYXRhYmFzZSBzZXJ2ZXIgd2FzIGxvc3QuIE90aGVyd2lzZSBpZiB0aGUgZXhlY3V0aW9uIG9m CisgICBTUUwgb3IgbWV0YSBjb21tYW5kIGZhaWxzLCB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGlz IGFsd2F5cyByb2xsZWQgYmFjayB3aGljaAorICAgYWxzbyBpbmNsdWRlcyBzZXR0aW5nIHRoZSBj bGllbnQgdmFyaWFibGVzIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhlIHJ1biBvZgorICAgdGhpcyB0 cmFuc2FjdGlvbiAoaXQgaXMgYXNzdW1lZCB0aGF0IG9uZSB0cmFuc2FjdGlvbiBzY3JpcHQgY29u dGFpbnMgb25seSBvbmUKKyAgIHRyYW5zYWN0aW9uOyBzZWUgPHhyZWYgbGlua2VuZD0idHJhbnNh Y3Rpb25zLWFuZC1zY3JpcHRzIgorICAgZW5kdGVybT0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRz LXRpdGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAgIFRyYW5zYWN0aW9ucyB3aXRoIHNl cmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgYXJlIHJlcGVhdGVkIGFmdGVyCisgICBy b2xsYmFja3MgdW50aWwgdGhleSBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgb3IgcmVhY2ggdGhlIG1h eGltdW0gbnVtYmVyIG9mCisgICB0cmllcyAoc3BlY2lmaWVkIGJ5IHRoZSA8b3B0aW9uPi0tbWF4 LXRyaWVzPC9vcHRpb24+IG9wdGlvbikgLyB0aGUgbWF4aW11bQorICAgdGltZSBvZiB0cmllcyAo c3BlY2lmaWVkIGJ5IHRoZSA8b3B0aW9uPi0tbGF0ZW5jeS1saW1pdDwvb3B0aW9uPiBvcHRpb24p LiBJZgorICAgdGhlIGxhc3QgdHJhbnNhY3Rpb24gcnVuIGZhaWxzLCB0aGlzIHRyYW5zYWN0aW9u IHdpbGwgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkLgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8 cGFyYT4KKyAgICBCZSBjYXJlZnVsIHdoZW4gcmVwZWF0aW5nIHNjcmlwdHMgdGhhdCBjb250YWlu IG11bHRpcGxlIHRyYW5zYWN0aW9uczogdGhlCisgICAgc2NyaXB0IGlzIGFsd2F5cyByZXRyaWVk IGNvbXBsZXRlbHksIHNvIHRoZSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9ucyBjYW4gYmUKKyAgICBw ZXJmb3JtZWQgc2V2ZXJhbCB0aW1lcy4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIEJlIGNh cmVmdWwgd2hlbiByZXBlYXRpbmcgc2NyaXB0cyB0aGF0IGNvbnRpbnVlIHRoZSB0cmFuc2FjdGlv biBibG9jayBmcm9tCisgICAgdGhlIHByZXZpb3VzIHNjcmlwdDogdGhlIGNvbW1hbmQgdXNlZCB0 byBzdGFydCB0aGlzIHRyYW5zYWN0aW9uIGJsb2NrIGxpa2UKKyAgICBhbGwgdGhlIGNvbW1hbmRz IGZyb20gcHJldmlvdXMgc2NyaXB0cyBpcyBuZXZlciB1c2VkIG9uIGEgcmV0cnkuCisgICA8L3Bh cmE+CisgICA8cGFyYT4KKyAgICBCZSBjYXJlZnVsIHdoZW4gcmVwZWF0aW5nIHRyYW5zYWN0aW9u cyB3aXRoIHNoZWxsIGNvbW1hbmRzLiBVbmxpa2UgdGhlCisgICAgcmVzdWx0cyBvZiBTUUwgY29t bWFuZHMsIHRoZSByZXN1bHRzIG9mIHNoZWxsIGNvbW1hbmRzIGFyZSBub3Qgcm9sbGVkIGJhY2ss CisgICAgZXhjZXB0IGZvciB0aGUgdmFyaWFibGUgdmFsdWUgb2YgdGhlIDxjb21tYW5kPlxzZXRz aGVsbDwvY29tbWFuZD4gY29tbWFuZC4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJh PgorICAgVGhlIGxhdGVuY3kgb2YgYSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9uIGluY2x1ZGVzIHRo ZSBlbnRpcmUgdGltZSBvZgorICAgdHJhbnNhY3Rpb24gZXhlY3V0aW9uIHdpdGggcm9sbGJhY2tz IGFuZCByZXRyaWVzLiBUaGUgbGF0ZW5jeSBmb3IgZmFpbGVkCisgICB0cmFuc2FjdGlvbnMgYW5k IGNvbW1hbmRzIGlzIG5vdCBjb21wdXRlZCBzZXBhcmF0ZWx5LgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUaGUgbWFpbiByZXBvcnQgY29udGFpbnMgdGhlIG51bWJlciBvZiBmYWlsZWQgdHJh bnNhY3Rpb25zIGlmIGl0IGlzIG5vbi16ZXJvCisgICAodG8gZ3JvdXAgdGhlbSBpbnRvIGJhc2lj IHR5cGVzLCB1c2UgdGhlIG9wdGlvbgorICAgPG9wdGlvbj4tLWVycm9ycy1kZXRhaWxlZDwvb3B0 aW9uPikuIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllZAorICAgdHJhbnNhY3Rpb25zIGlz IG5vbi16ZXJvLCB0aGUgbWFpbiByZXBvcnQgYWxzbyBjb250YWlucyB0aGUgc3RhdGlzdGljcwor ICAgcmVsYXRlZCB0byByZXRyaWVzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHJldHJpZWQgdHJhbnNh Y3Rpb25zIGFuZCB0b3RhbCBudW1iZXIKKyAgIG9mIHJldHJpZXMuIFRoZSBwZXItc2NyaXB0IHJl cG9ydCBpbmhlcml0cyBhbGwgdGhlc2UgZmllbGRzIGZyb20gdGhlIG1haW4KKyAgIHJlcG9ydC4g VGhlIHBlci1zdGF0ZW1lbnQgcmVwb3J0IGRpc3BsYXlzIHJldHJ5IHN0YXRpc3RpY3Mgb25seSBp ZiB0aGUKKyAgIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGZvciB0cmFuc2FjdGlvbnMgaXMgbW9y ZSB0aGFuIDEKKyAgICg8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+KSBhbmQvb3IgdGhlIG1h eGltdW0gdGltZSBvZiB0cmllcyBmb3IKKyAgIHRyYW5zYWN0aW9ucyBpcyB1c2VkICg8b3B0aW9u Pi0tbGF0ZW5jeS1saW1pdDwvb3B0aW9uPikuIEEgcmV0cnkgaXMgcmVwb3J0ZWQKKyAgIGZvciB0 aGUgY29tbWFuZCB3aGVyZSB0aGUgZmFpbHVyZSBvY2N1cmVkIGR1cmluZyB0aGUgY3VycmVudCBz Y3JpcHQKKyAgIGV4ZWN1dGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgeW91IHdh bnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlcyBvciBlcnJvcnMgYnkgdHlwZSAoaW5j bHVkaW5nCisgICB3aGljaCBsaW1pdCBmb3IgcmV0cmllcyB3YXMgdmlvbGF0ZWQgYW5kIGhvdyBm YXIgaXQgd2FzIGV4Y2VlZGVkIGZvciB0aGUKKyAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZXJy b3JzKSwgdXNlIHRoZSA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+CisgICBkZWJ1 Z2dpbmcgb3V0cHV0IGNyZWF0ZWQgd2l0aCB0aGUgb3B0aW9uIDxvcHRpb24+LS1kZWJ1Zy1mYWls czwvb3B0aW9uPiBvcgorICAgPG9wdGlvbj4tLWRlYnVnPC9vcHRpb24+LiBUaGUgZmlyc3Qgb3B0 aW9uIGlzIHJlY29tbWVuZGVkIGZvciB0aGlzIHB1cnBvc2UKKyAgIGJlY2F1c2Ugd2l0aCB0aGUg c2Vjb25kIG9wdGlvbiB0aGUgZGVidWdnaW5nIG91dHB1dCBjYW4gYmUgdmVyeSBsYXJnZS4KKyAg PC9wYXJhPgorIDwvcmVmc2VjdDI+CisKICA8cmVmc2VjdDI+CiAgIDx0aXRsZT5Hb29kIFByYWN0 aWNlczwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9z cmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDRmODcwMGIuLjFlZDI0ZmQgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYwpAQCAtNTksNiArNTksOCBAQAogCiAjaW5jbHVkZSAicGdiZW5jaC5oIgogCisjZGVmaW5l IEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSAgIjQwMDAxIgorI2RlZmluZSBFUlJD T0RFX1RfUl9ERUFETE9DS19ERVRFQ1RFRCAgIjQwUDAxIgogI2RlZmluZSBFUlJDT0RFX1VOREVG SU5FRF9UQUJMRSAgIjQyUDAxIgogCiAvKgpAQCAtMTg3LDkgKzE4OSwzMCBAQCBib29sCQlwcm9n cmVzc190aW1lc3RhbXAgPSBmYWxzZTsgLyogcHJvZ3Jlc3MgcmVwb3J0IHdpdGggVW5peCB0aW1l ICovCiBpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50cyAqLwogaW50CQkJ bnRocmVhZHMgPSAxOwkJLyogbnVtYmVyIG9mIHRocmVhZHMgKi8KIGJvb2wJCWlzX2Nvbm5lY3Q7 CQkJLyogZXN0YWJsaXNoIGNvbm5lY3Rpb24gZm9yIGVhY2ggdHJhbnNhY3Rpb24gKi8KLWJvb2wJ CWlzX2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8KK2Jvb2wJ CXJlcG9ydF9wZXJfY29tbWFuZCA9IGZhbHNlOwkvKiByZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5j aWVzLCByZXRyaWVzCisJCQkJCQkJCQkJICogYWZ0ZXIgdGhlIGZhaWx1cmVzIGFuZCBlcnJvcnMK KwkJCQkJCQkJCQkgKiAoZmFpbHVyZXMgd2l0aG91dCByZXRyeWluZykgKi8KIGludAkJCW1haW5f cGlkOwkJCS8qIG1haW4gcHJvY2VzcyBpZCB1c2VkIGluIGxvZyBmaWxlbmFtZSAqLwogCisvKgor ICogVGhlcmUncmUgZGlmZmVyZW50IHR5cGVzIG9mIHJlc3RyaWN0aW9ucyBmb3IgZGVjaWRpbmcg dGhhdCB0aGUgY3VycmVudCBmYWlsZWQKKyAqIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUg cmV0cmllZCBhbmQgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIGZhaWxlZDoKKyAqIC0gbWF4X3RyaWVz IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgdHJpZXM7CisgKiAtIGxhdGVuY3lf bGltaXQgY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIHRvdGFsIHRpbWUgb2YgdHJpZXMuCisgKgor ICogVGhleSBjYW4gYmUgY29tYmluZWQgdG9nZXRoZXIsIGFuZCB5b3UgbmVlZCB0byB1c2UgYXQg bGVhc3Qgb25lIG9mIHRoZW0gdG8KKyAqIHJldHJ5IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb25zLiBJ ZiBub25lIG9mIHRoZW0gaXMgdXNlZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAqIG1heF90cmll cyBpcyBzZXQgdG8gMSBhbmQgZmFpbGVkIHRyYW5zYWN0aW9ucyBhcmUgbm90IHJldHJpZWQgYXQg YWxsLgorICovCit1aW50MzIJCW1heF90cmllcyA9IDA7CQkvKiB3ZSBjYW5ub3QgcmV0cnkgYSBm YWlsZWQgdHJhbnNhY3Rpb24gaWYgaXRzCisJCQkJCQkJCSAqIG51bWJlciBvZiB0cmllcyByZWFj aGVzIHRoaXMgbWF4aW11bTsgaWYgaXRzCisJCQkJCQkJCSAqIHZhbHVlIGlzIHplcm8sIGl0IGlz IG5vdCB1c2VkICovCisKKyNkZWZpbmUgUkVUUklFU19FTkFCTEVECQkJKG1heF90cmllcyA+IDEg fHwgbGF0ZW5jeV9saW1pdCkKKworYm9vbAkJZXJyb3JzX2RldGFpbGVkID0gZmFsc2U7CS8qIHdo ZXRoZXIgdG8gZ3JvdXAgZXJyb3JzIGluIHJlcG9ydHMgb3IKKwkJCQkJCQkJCQkgKiBsb2dzIGJ5 IGJhc2ljIHR5cGVzICovCisKIGNoYXIJICAgKnBnaG9zdCA9ICIiOwogY2hhcgkgICAqcGdwb3J0 ID0gIiI7CiBjaGFyCSAgICpsb2dpbiA9IE5VTEw7CkBAIC0yNjcsOSArMjkwLDU4IEBAIHR5cGVk ZWYgc3RydWN0IFNpbXBsZVN0YXRzCiB0eXBlZGVmIHN0cnVjdCBTdGF0c0RhdGEKIHsKIAl0aW1l X3QJCXN0YXJ0X3RpbWU7CQkvKiBpbnRlcnZhbCBzdGFydCB0aW1lLCBmb3IgYWdncmVnYXRlcyAq LwotCWludDY0CQljbnQ7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucywgaW5jbHVkaW5nIHNr aXBwZWQgKi8KKworCS8qCisJICogQWxsIHRoZSB0cmFuc2FjdGlvbnMgZmFsbCBpbnRvIDIgbWFp biB0eXBlczogaXMgdGhlcmUgYW55IGNvbW1hbmQgdGhhdAorCSAqIGdvdCBhIGZhaWx1cmUgZHVy aW5nIHRoZSBsYXN0IGV4ZWN1dGlvbiBvZiB0aGUgdHJhbnNhY3Rpb24gc2NyaXB0IG9yIG5vdD8K KwkgKiBUaHVzCisJICoKKwkgKiB0aGUgbnVtYmVyIG9mIGFsbCB0cmFuc2FjdGlvbnMgPQorCSAq ICAgY250ICh0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgb25lcykgKworCSAqICAgZWNudCAodGhl IG51bWJlciBvZiBmYWlsZWQgdHJhbnNhY3Rpb25zKS4KKwkgKgorCSAqIEEgc3VjY2Vzc2Z1bCB0 cmFuc2FjdGlvbiBjYW4gYmUgb25lIG9mIHNldmVyYWwgdHlwZXM6CisJICoKKwkgKiBjbnQgKHRo ZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCB0cmFuc2FjdGlvbnMpID0KKwkgKiAgIHNraXBwZWQgKGl0 IHdhcyB0byBsYXRlIHRvIGV4ZWN1dGUgdGhlbSkgKworCSAqICAgcmV0cmllZCAodGhleSBnb3Qg YSBzZXJpYWxpemF0aW9uIG9yIGEgZGVhZGxvY2sgZmFpbHVyZShzKSwgYnV0IHdlcmUKKwkgKiAg ICAgICAgICAgIHN1Y2Nlc3NmdWxseSByZXRyaWVkIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nKSAr CisJICogICBudW1iZXIgb2Ygb3RoZXIgdHJhbnNhY3Rpb25zLgorCSAqCisJICogQSBmYWlsZWQg dHJhbnNhY3Rpb24gY2FuIGJlIG9uZSBvZiBzZXZlcmFsIHR5cGVzOgorCSAqCisJICogZWNudCAo dGhlIG51bWJlciBvZiBmYWlsZWQgdHJhbnNhY3Rpb25zKSA9CisJICogICBzZXJpYWxpemF0aW9u X2Vycm9ycyAodGhleSBnb3QgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUgYW5kIHdlcmUgbm90CisJ ICogICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmllZCkgKworCSAqICAgZGVhZGxvY2tfZXJy b3JzICh0aGV5IGdvdCBhIGRlYWRsb2NrIGZhaWx1cmUgYW5kIHdlcmUgbm90IHJldHJpZWQpICsK KwkgKiAgIG90aGVyX3NxbF9lcnJvcnMgKHRoZXkgZ290IGEgZGlmZmVyZW50IGVycm9yIGluIHRo ZSBTUUwgY29tbWFuZCkgKworCSAqICAgbWV0YV9jb21tYW5kX2Vycm9ycyAodGhleSBnb3QgYW4g ZXJyb3IgaW4gdGhlIG1ldGEgY29tbWFuZCkuCisJICoKKwkgKiBJZiB0aGUgdHJhbnNhY3Rpb24g d2FzIHJldHJpZWQgYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIG9yIGEgZGVhZGxvY2sKKwkgKiBmYWls dXJlIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyByZXRyeSB3YXMgc3VjY2Vzc2Z1 bGwuIFRodXMKKwkgKgorCSAqIG51bWJlciBvZiByZXRyaWVzID0KKwkgKiAgIG51bWJlciBvZiBy ZXRyaWVzIGluIChyZXRyaWVkICsgc2VyaWFsaXphdGlvbl9lcnJvcnMgKyBkZWFkbG9ja19lcnJv cnMpCisJICogICB0cmFuc2FjdGlvbnMuCisJICovCisJaW50NjQJCWNudDsJCQkvKiBudW1iZXIg b2Ygc3VjZXNzZnVsbCB0cmFuc2FjdGlvbnMsIGluY2x1ZGluZworCQkJCQkJCQkgKiBza2lwcGVk ICovCiAJaW50NjQJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQg dW5kZXIgLS1yYXRlCiAJCQkJCQkJCSAqIGFuZCAtLWxhdGVuY3ktbGltaXQgKi8KKwlpbnQ2NAkJ cmV0cmllczsJCS8qIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBvciBh CisJCQkJCQkJCSAqIGRlYWRsb2NrIGZhaWx1cmUgaW4gYWxsIHRoZSB0cmFuc2FjdGlvbnMgKi8K KwlpbnQ2NAkJcmV0cmllZDsJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIHJl dHJpZWQKKwkJCQkJCQkJICogYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIG9yIGEgZGVhZGxvY2sKKwkJ CQkJCQkJICogZmFpbHVyZSAqLworCWludDY0CQlzZXJpYWxpemF0aW9uX2Vycm9yczsJLyogbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IHdlcmUgbm90CisJCQkJCQkJCQkJICogcmV0cmllZCBh ZnRlciBhIHNlcmlhbGl6YXRpb24KKwkJCQkJCQkJCQkgKiBmYWlsdXJlICovCisJaW50NjQJCWRl YWRsb2NrX2Vycm9yczsJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IHdlcmUgbm90CisJ CQkJCQkJCQkgKiByZXRyaWVkIGFmdGVyIGEgZGVhZGxvY2sgZmFpbHVyZSAqLworCWludDY0CQlv dGhlcl9zcWxfZXJyb3JzOwkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGggYSBkaWZmZXJl bnQKKwkJCQkJCQkJCSAqIGVycm9yIGluIHRoZSBTUUwgY29tbWFuZCAqLworCWludDY0CQltZXRh X2NvbW1hbmRfZXJyb3JzOwkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGggYW4gZXJyb3IK KwkJCQkJCQkJCQkgKiBpbiB0aGUgbWV0YSBjb21tYW5kICovCiAJU2ltcGxlU3RhdHMgbGF0ZW5j eTsKIAlTaW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0YTsKQEAgLTI4Myw2ICszNTUsMjkgQEAg dHlwZWRlZiBzdHJ1Y3QKIH0gUmFuZG9tU3RhdGU7CiAKIC8qCisgKiBEYXRhIHN0cnVjdHVyZSBm b3IgcmVwZWF0aW5nIGEgdHJhbnNhY3Rpb24gZnJvbSB0aGUgYmVnaW5ubmluZyB3aXRoIHRoZSBz YW1lCisgKiBwYXJhbWV0ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCVJhbmRvbVN0YXRl IHJhbmRvbV9zdGF0ZTsJLyogcmFuZG9tIHNlZWQgKi8KKwlWYXJpYWJsZXMgICB2YXJpYWJsZXM7 CQkvKiBjbGllbnQgdmFyaWFibGVzICovCit9IFJldHJ5U3RhdGU7CisKKy8qCisgKiBGb3IgdGhl IGZhaWx1cmVzIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgorICovCit0eXBlZGVmIGVudW0gRmFp bHVyZVN0YXR1cworeworCU5PX0ZBSUxVUkUgPSAwLAorCU1FVEFfQ09NTUFORF9GQUlMVVJFLAor CUFOT1RIRVJfU1FMX0ZBSUxVUkUsCQkvKiBvdGhlciBmYWlsdXJlcyBpbiBTUUwgY29tbWFuZHMg dGhhdCBhcmUgbm90CisJCQkJCQkJCSAqIGxpc3RlZCBieSB0aGVtc2VsdmVzIGJlbG93ICovCisJ U0VSSUFMSVpBVElPTl9GQUlMVVJFLAorCURFQURMT0NLX0ZBSUxVUkUKK30gRmFpbHVyZVN0YXR1 czsKKworLyoKICAqIENvbm5lY3Rpb24gc3RhdGUgbWFjaGluZSBzdGF0ZXMuCiAgKi8KIHR5cGVk ZWYgZW51bQpAQCAtMzM3LDYgKzQzMiwyMyBAQCB0eXBlZGVmIGVudW0KIAlDU1RBVEVfRU5EX0NP TU1BTkQsCiAKIAkvKgorCSAqIFN0YXRlcyBmb3IgZmFpbGVkIGNvbW1hbmRzLgorCSAqCisJICog SWYgdGhlIFNRTC9tZXRhIGNvbW1hbmQgZmFpbHMsIGluIENTVEFURV9GQUlMVVJFIGFib3J0IHRo ZSBjdXJyZW50CisJICogdHJhbnNhY3Rpb24gZXhlY3V0aW9uLCByb2xsIGJhY2sgdGhlIGZhaWxl ZCB0cmFuc2FjdGlvbiBibG9jayBpZiBhbnkgYW5kCisJICogY2xlYXIgdGhlIGNvbmRpdGlvbmFs IHN0YWNrLiAgVGhlbiBnbyB0byBDU1RBVEVfUkVUUlkuICBJZiB0aGlzIGlzIGEKKwkgKiBzZXJp YWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmUgYW5kIHdlIGNhbiByZS1leGVjdXRlIHRoZSB0 cmFuc2FjdGlvbgorCSAqIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLCByZXBvcnQgdGhpcyBhcyBh IGZhaWx1cmUsIHNldCB0aGUgc2FtZQorCSAqIHBhcmFtZXRlcnMgZm9yIHRoZSB0cmFuc2FjdGlv biBleGVjdXRpb24gYXMgaW4gdGhlIHByZXZpb3VzIHRyaWVzIGFuZAorCSAqIHByb2Nlc3MgdGhl IGZpcnN0IHRyYW5zYWN0aW9uIGNvbW1hbmQgaW4gQ1NUQVRFX1NUQVJUX0NPTU1BTkQuIE90aGVy d2lzZSwKKwkgKiByZXBvcnQgdGhpcyBhcyBhbiBlcnJvciwgc2V0IHRoZSBwYXJhbWV0ZXJzIGZv ciB0aGUgdHJhbnNhY3Rpb24gZXhlY3V0aW9uCisJICogYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGUg Zmlyc3QgcnVuIG9mIHRoaXMgdHJhbnNhY3Rpb24gKGV4Y2VwdCBmb3IgYQorCSAqIHJhbmRvbSBz dGF0ZSkgYW5kIGdvIHRvIENTVEFURV9FTkRfVFggdG8gY29tcGxldGUgdGhpcyB0cmFuc2FjdGlv bi4KKwkgKi8KKwlDU1RBVEVfRkFJTFVSRSwKKwlDU1RBVEVfUkVUUlksCisKKwkvKgogCSAqIENT VEFURV9FTkRfVFggcGVyZm9ybXMgZW5kLW9mLXRyYW5zYWN0aW9uIHByb2Nlc3NpbmcuICBDYWxj dWxhdGVzCiAJICogbGF0ZW5jeSwgYW5kIGxvZ3MgdGhlIHRyYW5zYWN0aW9uLiAgSW4gLS1jb25u ZWN0IG1vZGUsIGNsb3NlcyB0aGUKIAkgKiBjdXJyZW50IGNvbm5lY3Rpb24uICBDaG9vc2VzIHRo ZSBuZXh0IHNjcmlwdCB0byBleGVjdXRlIGFuZCBzdGFydHMgb3ZlcgpAQCAtMzgzLDYgKzQ5NSwx OCBAQCB0eXBlZGVmIHN0cnVjdAogCiAJYm9vbAkJcHJlcGFyZWRbTUFYX1NDUklQVFNdOwkvKiB3 aGV0aGVyIGNsaWVudCBwcmVwYXJlZCB0aGUgc2NyaXB0ICovCiAKKwkvKgorCSAqIEZvciBwcm9j ZXNzaW5nIGVycm9ycyBhbmQgcmVwZWF0aW5nIHRyYW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRp b24gb3IKKwkgKiBkZWFkbG9jayBmYWlsdXJlczoKKwkgKi8KKwlGYWlsdXJlU3RhdHVzIGZhaWx1 cmVfc3RhdHVzOwkvKiB0aGUgZmFpbHVyZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnQKKwkJCQkJCQkJ CSAqIHRyYW5zYWN0aW9uIGV4ZWN1dGlvbjsgdGhpcyBpcyBOT19GQUlMVVJFCisJCQkJCQkJCQkg KiBpZiB0aGVyZSB3ZXJlIG5vIGZhaWx1cmVzICovCisJUmV0cnlTdGF0ZSAgcmV0cnlfc3RhdGU7 CisJdWludDMyCQkJcmV0cmllczsJLyogaG93IG1hbnkgdGltZXMgaGF2ZSB3ZSBhbHJlYWR5IHJl dHJpZWQgdGhlCisJCQkJCQkJCSAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gYWZ0ZXIgYSBzZXJpYWxp emF0aW9uIG9yCisJCQkJCQkJCSAqIGEgZGVhZGxvY2sgZmFpbHVyZT8gKi8KKwogCS8qIHBlciBj bGllbnQgY29sbGVjdGVkIHN0YXRzICovCiAJaW50NjQJCWNudDsJCQkvKiBjbGllbnQgdHJhbnNh Y3Rpb24gY291bnQsIGZvciAtdCAqLwogCWludAkJCWVjbnQ7CQkJLyogZXJyb3IgY291bnQgKi8K QEAgLTQ0NSw3ICs1NjksOCBAQCB0eXBlZGVmIHN0cnVjdAogCWluc3RyX3RpbWUJc3RhcnRfdGlt ZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovCiAJaW5zdHJfdGltZQljb25uX3RpbWU7CiAJU3Rh dHNEYXRhCXN0YXRzOwotCWludDY0CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1dCBsYXRl IHRyYW5zYWN0aW9ucyAqLworCWludDY0CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1dCBs YXRlIHRyYW5zYWN0aW9ucyAoaW5jbHVkaW5nCisJCQkJCQkJCSAqIGVycm9ycykgKi8KIH0gVFN0 YXRlOwogCiAjZGVmaW5lIElOVkFMSURfVEhSRUFECQkoKHB0aHJlYWRfdCkgMCkKQEAgLTQ5MSw2 ICs2MTYsOSBAQCB0eXBlZGVmIHN0cnVjdAogCWNoYXIJICAgKmFyZ3ZbTUFYX0FSR1NdOyAvKiBj b21tYW5kIHdvcmQgbGlzdCAqLwogCVBnQmVuY2hFeHByICpleHByOwkJCS8qIHBhcnNlZCBleHBy ZXNzaW9uLCBpZiBuZWVkZWQgKi8KIAlTaW1wbGVTdGF0cyBzdGF0czsJCQkvKiB0aW1lIHNwZW50 IGluIHRoaXMgY29tbWFuZCAqLworCWludDY0CQlyZXRyaWVzOwkJLyogbnVtYmVyIG9mIHJldHJp ZXMgYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIG9yIGEKKwkJCQkJCQkJICogZGVhZGxvY2sgZmFpbHVy ZSAqLworCWludDY0CQllY250OwkJCS8qIG51bWJlciBvZiBmYWlsdXJlcyB0aGF0IHdlcmUgbm90 IHJldHJpZWQgKi8KIH0gQ29tbWFuZDsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyc2VkU2NyaXB0CkBA IC01NjAsOSArNjg4LDE1IEBAIHR5cGVkZWYgZW51bSBFcnJvckxldmVsCiAJREVCVUcsCiAKIAkv KgorCSAqIE5vcm1hbCBmYWlsdXJlIG9mIHRoZSBTUUwvbWV0YSBjb21tYW5kLCBvciBwcm9jZXNz aW5nIG9mIHRoZSBmYWlsZWQKKwkgKiB0cmFuc2FjdGlvbiAoaXRzIGVuZC9yZXRyeSkuCisJICov CisJREVCVUdfRkFJTCwKKworCS8qCiAJICogVG8gcmVwb3J0OgotCSAqIC0gYWJvcnRpb24gb2Yg dGhlIGNsaWVudCAoc29tZXRoaW5nIGJhZCBlLmcuIHRoZSBTUUwvbWV0YSBjb21tYW5kIGZhaWxl ZAotCSAqICAgb3IgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgYmFja2VuZCB3YXMgbG9zdCk7CisJ ICogLSBhYm9ydGlvbiBvZiB0aGUgY2xpZW50IChzb21ldGhpbmcgc2VyaW91cyBlLmcuIGNvbm5l Y3Rpb24gd2l0aCB0aGUKKwkgKiAgIGJhY2tlbmQgd2FzIGxvc3QpOwogCSAqIC0gdGhlIGxvZyBt ZXNzYWdlcyBvZiB0aGUgbWFpbiBwcm9ncmFtOwogCSAqIC0gUEdCRU5DSF9ERUJVRyBtZXNzYWdl cy4KIAkgKi8KQEAgLTU5Niw3ICs3MzAsNiBAQCBzdGF0aWMgdm9pZCBmaW5pc2hDb24oQ1N0YXRl ICpzdCk7CiBzdGF0aWMgdm9pZCBwZ2JlbmNoX2Vycm9yKEVycm9yTGV2ZWwgZWxldmVsLAogCQkJ CQkJICBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMpOwogCi0K IC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3Igb3VyIGZsZXggbGV4ZXIgKi8KIHN0YXRpYyBjb25z dCBQc3FsU2NhbkNhbGxiYWNrcyBwZ2JlbmNoX2NhbGxiYWNrcyA9IHsKIAlOVUxMLAkJCQkJCS8q IGRvbid0IG5lZWQgZ2V0X3ZhcmlhYmxlIGZ1bmN0aW9uYWxpdHkgKi8KQEAgLTY0MywxNSArNzc2 LDE4IEBAIHVzYWdlKHZvaWQpCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90 b2NvbCBmb3Igc3VibWl0dGluZyBxdWVyaWVzIChkZWZhdWx0OiBzaW1wbGUpXG4iCiAJCSAgICIg IC1uLCAtLW5vLXZhY3V1bSAgICAgICAgICBkbyBub3QgcnVuIFZBQ1VVTSBiZWZvcmUgdGVzdHNc biIKIAkJICAgIiAgLVAsIC0tcHJvZ3Jlc3M9TlVNICAgICAgIHNob3cgdGhyZWFkIHByb2dyZXNz IHJlcG9ydCBldmVyeSBOVU0gc2Vjb25kc1xuIgotCQkgICAiICAtciwgLS1yZXBvcnQtbGF0ZW5j aWVzICAgcmVwb3J0IGF2ZXJhZ2UgbGF0ZW5jeSBwZXIgY29tbWFuZFxuIgorCQkgICAiICAtciwg LS1yZXBvcnQtcGVyLWNvbW1hbmQgcmVwb3J0IGxhdGVuY2llcywgZXJyb3JzIGFuZCByZXRyaWVz IHBlciBjb21tYW5kXG4iCiAJCSAgICIgIC1SLCAtLXJhdGU9TlVNICAgICAgICAgICB0YXJnZXQg cmF0ZSBpbiB0cmFuc2FjdGlvbnMgcGVyIHNlY29uZFxuIgogCQkgICAiICAtcywgLS1zY2FsZT1O VU0gICAgICAgICAgcmVwb3J0IHRoaXMgc2NhbGUgZmFjdG9yIGluIG91dHB1dFxuIgogCQkgICAi ICAtdCwgLS10cmFuc2FjdGlvbnM9TlVNICAgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBlYWNoIGNs aWVudCBydW5zIChkZWZhdWx0OiAxMClcbiIKIAkJICAgIiAgLVQsIC0tdGltZT1OVU0gICAgICAg ICAgIGR1cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0IGluIHNlY29uZHNcbiIKIAkJICAgIiAgLXYs IC0tdmFjdXVtLWFsbCAgICAgICAgIHZhY3V1bSBhbGwgZm91ciBzdGFuZGFyZCB0YWJsZXMgYmVm b3JlIHRlc3RzXG4iCiAJCSAgICIgIC0tYWdncmVnYXRlLWludGVydmFsPU5VTSBhZ2dyZWdhdGUg ZGF0YSBvdmVyIE5VTSBzZWNvbmRzXG4iCisJCSAgICIgIC0tZGVidWctZmFpbHMgICAgICAgICAg ICBwcmludCBkZWJ1Z2dpbmcgb3V0cHV0IG9ubHkgZm9yIGZhaWx1cmVzIGFuZCBlcnJvcnNcbiIK KwkJICAgIiAgLS1lcnJvcnMtZGV0YWlsZWQgICAgICAgIHJlcG9ydCB0aGUgZXJyb3JzIGdyb3Vw ZWQgYnkgYmFzaWMgdHlwZXNcbiIKIAkJICAgIiAgLS1sb2ctcHJlZml4PVBSRUZJWCAgICAgIHBy ZWZpeCBmb3IgdHJhbnNhY3Rpb24gdGltZSBsb2cgZmlsZVxuIgogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGRlZmF1bHQ6IFwicGdiZW5jaF9sb2dcIilcbiIKKwkJICAgIiAgLS1t YXgtdHJpZXM9TlVNICAgICAgICAgIG1heCBudW1iZXIgb2YgdHJpZXMgdG8gcnVuIHRyYW5zYWN0 aW9uXG4iCiAJCSAgICIgIC0tcHJvZ3Jlc3MtdGltZXN0YW1wICAgICB1c2UgVW5peCBlcG9jaCB0 aW1lc3RhbXBzIGZvciBwcm9ncmVzc1xuIgogCQkgICAiICAtLXJhbmRvbS1zZWVkPVNFRUQgICAg ICAgc2V0IHJhbmRvbSBzZWVkIChcInRpbWVcIiwgXCJyYW5kXCIsIGludGVnZXIpXG4iCiAJCSAg ICIgIC0tc2FtcGxpbmctcmF0ZT1OVU0gICAgICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8g bG9nIChlLmcuLCAwLjAxIGZvciAxJSUpXG4iCkBAIC0xMTEyLDYgKzEyNDgsMTIgQEAgaW5pdFN0 YXRzKFN0YXRzRGF0YSAqc2QsIHRpbWVfdCBzdGFydF90aW1lKQogCXNkLT5zdGFydF90aW1lID0g c3RhcnRfdGltZTsKIAlzZC0+Y250ID0gMDsKIAlzZC0+c2tpcHBlZCA9IDA7CisJc2QtPnJldHJp ZXMgPSAwOworCXNkLT5yZXRyaWVkID0gMDsKKwlzZC0+c2VyaWFsaXphdGlvbl9lcnJvcnMgPSAw OworCXNkLT5kZWFkbG9ja19lcnJvcnMgPSAwOworCXNkLT5vdGhlcl9zcWxfZXJyb3JzID0gMDsK KwlzZC0+bWV0YV9jb21tYW5kX2Vycm9ycyA9IDA7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGF0 ZW5jeSk7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGFnKTsKIH0KQEAgLTExMjAsMTAgKzEyNjIs NDcgQEAgaW5pdFN0YXRzKFN0YXRzRGF0YSAqc2QsIHRpbWVfdCBzdGFydF90aW1lKQogICogQWNj dW11bGF0ZSBvbmUgYWRkaXRpb25hbCBpdGVtIGludG8gdGhlIGdpdmVuIHN0YXRzIG9iamVjdC4K ICAqLwogc3RhdGljIHZvaWQKLWFjY3VtU3RhdHMoU3RhdHNEYXRhICpzdGF0cywgYm9vbCBza2lw cGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnKQorYWNjdW1TdGF0cyhTdGF0c0RhdGEgKnN0YXRz LCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcsCisJCSAgIEZhaWx1cmVTdGF0 dXMgZmFpbHVyZV9zdGF0dXMsIGludDY0IHJldHJpZXMpCiB7Ci0Jc3RhdHMtPmNudCsrOworCS8q CisJICogUmVjb3JkIHRoZSBudW1iZXIgb2YgcmV0cmllcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIg dGhlIHRyYW5zYWN0aW9uIHdhcworCSAqIHN1Y2Nlc3NmdWwgb3IgZmFpbGVkLgorCSAqLworCXN0 YXRzLT5yZXRyaWVzICs9IHJldHJpZXM7CisJaWYgKHJldHJpZXMgPiAwKQorCQlzdGF0cy0+cmV0 cmllZCsrOworCisJLyogUmVjb3JkIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gKi8KKwlpZiAoZmFp bHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSkKKwl7CisJCWlmIChmYWlsdXJlX3N0YXR1cyA9PSBT RVJJQUxJWkFUSU9OX0ZBSUxVUkUpCisJCXsKKwkJCXN0YXRzLT5zZXJpYWxpemF0aW9uX2Vycm9y cysrOworCQl9CisJCWVsc2UgaWYgKGZhaWx1cmVfc3RhdHVzID09IERFQURMT0NLX0ZBSUxVUkUp CisJCXsKKwkJCXN0YXRzLT5kZWFkbG9ja19lcnJvcnMrKzsKKwkJfQorCQllbHNlIGlmIChmYWls dXJlX3N0YXR1cyA9PSBBTk9USEVSX1NRTF9GQUlMVVJFKQorCQl7CisJCQlzdGF0cy0+b3RoZXJf c3FsX2Vycm9ycysrOworCQl9CisJCWVsc2UgaWYgKGZhaWx1cmVfc3RhdHVzID09IE1FVEFfQ09N TUFORF9GQUlMVVJFKQorCQl7CisJCQlzdGF0cy0+bWV0YV9jb21tYW5kX2Vycm9ycysrOworCQl9 CisJCWVsc2UKKwkJeworCQkJLyogaW50ZXJuYWwgZXJyb3Igd2hpY2ggc2hvdWxkIG5ldmVyIG9j Y3VyICovCisJCQlwZ2JlbmNoX2Vycm9yKEVSUk9SLCAidW5leHBlY3RlZCBmYWlsdXJlIHN0YXR1 czogJWRcbiIsCisJCQkJCQkgIGZhaWx1cmVfc3RhdHVzKTsKKwkJfQorCQlyZXR1cm47CisJfQog CisJLyogUmVjb3JkIHRoZSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9uICovCisJc3RhdHMtPmNudCsr OwogCWlmIChza2lwcGVkKQogCXsKIAkJLyogbm8gbGF0ZW5jeSB0byByZWNvcmQgb24gc2tpcHBl ZCB0cmFuc2FjdGlvbnMgKi8KQEAgLTEzNzYsNyArMTU1NSw3IEBAIG1ha2VWYXJpYWJsZVZhbHVl KFZhcmlhYmxlICp2YXIpCiAKIAkJaWYgKHNzY2FuZih2YXItPnN2YWx1ZSwgIiVsZiVjIiwgJmR2 LCAmeHMpICE9IDEpCiAJCXsKLQkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJcGdiZW5jaF9lcnJv cihERUJVR19GQUlMLAogCQkJCQkJICAibWFsZm9ybWVkIHZhcmlhYmxlIFwiJXNcIiB2YWx1ZTog XCIlc1wiXG4iLAogCQkJCQkJICB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKIAkJCXJldHVybiBm YWxzZTsKQEAgLTE1MDUsNyArMTY4NCw3IEBAIGxvb2t1cENyZWF0ZVZhcmlhYmxlKFZhcmlhYmxl cyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAogCSAqIEFib3V0 IHRoZSBlcnJvciBsZXZlbCB1c2VkOiBpZiB3ZSBwcm9jZXNzIGNsaWVudCBjb21tYW5kcywgaXQg YSBub3JtYWwKIAkgKiBmYWlsdXJlOyBvdGhlcndpc2UgaXQgaXMgbm90IGFuZCB3ZSBleGl0IHRo ZSBwcm9ncmFtLgogCSAqLwotCUVycm9yTGV2ZWwgZWxldmVsID0gY2xpZW50ID8gTE9HIDogRVJS T1I7CisJRXJyb3JMZXZlbCBlbGV2ZWwgPSBjbGllbnQgPyBERUJVR19GQUlMIDogRVJST1I7CiAK IAl2YXIgPSBsb29rdXBWYXJpYWJsZSh2YXJpYWJsZXMsIG5hbWUpOwogCWlmICh2YXIgPT0gTlVM TCkKQEAgLTE3MjYsMTEgKzE5MDUsMTIgQEAgY29lcmNlVG9Cb29sKFBnQmVuY2hWYWx1ZSAqcHZh bCwgYm9vbCAqYnZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIE5VTEwsIElOVCBvciBET1VCTEUgKi8K IAl7Ci0JCS8qIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHZhbHVlVHlwZU5hbWUgb25s eSBpcyBhbHdheXMgY2FsbGVkICovCi0JCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7 Ci0KLQkJcGdiZW5jaF9lcnJvcihMT0csICJjYW5ub3QgY29lcmNlICVzIHRvIGJvb2xlYW5cbiIs Ci0JCQkJCSAgdmFsdWVUeXBlTmFtZShwdmFsKSk7CisJCS8qIGNhbGwgdGhlIGZ1bmN0aW9uIHZh bHVlVHlwZU5hbWUgb25seSBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKERFQlVHX0ZBSUwgPj0gbG9n X21pbl9tZXNzYWdlcykKKwkJeworCQkJcGdiZW5jaF9lcnJvcihERUJVR19GQUlMLCAiY2Fubm90 IGNvZXJjZSAlcyB0byBib29sZWFuXG4iLAorCQkJCQkJICB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsK KwkJfQogCQkqYnZhbCA9IGZhbHNlOwkJCS8qIHN1cHByZXNzIHVuaW5pdGlhbGl6ZWQtdmFyaWFi bGUgd2FybmluZ3MgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE3NzUsNyArMTk1NSw3IEBA IGNvZXJjZVRvSW50KFBnQmVuY2hWYWx1ZSAqcHZhbCwgaW50NjQgKml2YWwpCiAKIAkJaWYgKGR2 YWwgPCBQR19JTlQ2NF9NSU4gfHwgUEdfSU5UNjRfTUFYIDwgZHZhbCkKIAkJewotCQkJcGdiZW5j aF9lcnJvcihMT0csICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCk7CisJ CQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAl ZlxuIiwgZHZhbCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJKml2YWwgPSAoaW50NjQpIGR2 YWw7CkBAIC0xNzgzLDEwICsxOTYzLDEyIEBAIGNvZXJjZVRvSW50KFBnQmVuY2hWYWx1ZSAqcHZh bCwgaW50NjQgKml2YWwpCiAJfQogCWVsc2UJCQkJCQkvKiBCT09MRUFOIG9yIE5VTEwgKi8KIAl7 Ci0JCS8qIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHZhbHVlVHlwZU5hbWUgaXMgYWx3 YXlzIGNhbGxlZCAqLwotCQlBc3NlcnQoTE9HID49IGxvZ19taW5fbWVzc2FnZXMpOwotCi0JCXBn YmVuY2hfZXJyb3IoTE9HLCAiY2Fubm90IGNvZXJjZSAlcyB0byBpbnRcbiIsIHZhbHVlVHlwZU5h bWUocHZhbCkpOworCQkvKiBjYWxsIHRoZSBmdW5jdGlvbiB2YWx1ZVR5cGVOYW1lIG9ubHkgaWYg bmVjZXNzYXJ5ICovCisJCWlmIChERUJVR19GQUlMID49IGxvZ19taW5fbWVzc2FnZXMpCisJCXsK KwkJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJTCwgImNhbm5vdCBjb2VyY2UgJXMgdG8gaW50XG4i LAorCQkJCQkJICB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJfQogCQlyZXR1cm4gZmFsc2U7CiAJ fQogfQpAQCAtMTgwNywxMCArMTk4OSwxMiBAQCBjb2VyY2VUb0RvdWJsZShQZ0JlbmNoVmFsdWUg KnB2YWwsIGRvdWJsZSAqZHZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAq LwogCXsKLQkJLyogd2UgYXJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gdmFsdWVUeXBlTmFtZSBp cyBhbHdheXMgY2FsbGVkICovCi0JCUFzc2VydChMT0cgPj0gbG9nX21pbl9tZXNzYWdlcyk7Ci0K LQkJcGdiZW5jaF9lcnJvcihMT0csICJjYW5ub3QgY29lcmNlICVzIHRvIGRvdWJsZVxuIiwgdmFs dWVUeXBlTmFtZShwdmFsKSk7CisJCS8qIGNhbGwgdGhlIGZ1bmN0aW9uIHZhbHVlVHlwZU5hbWUg b25seSBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKERFQlVHX0ZBSUwgPj0gbG9nX21pbl9tZXNzYWdl cykKKwkJeworCQkJcGdiZW5jaF9lcnJvcihERUJVR19GQUlMLCAiY2Fubm90IGNvZXJjZSAlcyB0 byBkb3VibGVcbiIsCisJCQkJCQkgIHZhbHVlVHlwZU5hbWUocHZhbCkpOworCQl9CiAJCXJldHVy biBmYWxzZTsKIAl9CiB9CkBAIC0xOTkxLDcgKzIxNzUsOCBAQCBldmFsU3RhbmRhcmRGdW5jKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCiAJaWYgKGwgIT0gTlVMTCkKIAl7Ci0JCXBnYmVu Y2hfZXJyb3IoTE9HLCAidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYXhpbXVtIGlzICVk XG4iLAorCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsCisJCQkJCSAgInRvbyBtYW55IGZ1bmN0 aW9uIGFyZ3VtZW50cywgbWF4aW11bSBpcyAlZFxuIiwKIAkJCQkJICBNQVhfRkFSR1MpOwogCQly ZXR1cm4gZmFsc2U7CiAJfQpAQCAtMjExNSw3ICsyMzAwLDcgQEAgZXZhbFN0YW5kYXJkRnVuYyhU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCWNhc2UgUEdCRU5DSF9NT0Q6CiAJCQkJ CQkJaWYgKHJpID09IDApCiAJCQkJCQkJewotCQkJCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgImRp dmlzaW9uIGJ5IHplcm9cbiIpOworCQkJCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsICJk aXZpc2lvbiBieSB6ZXJvXG4iKTsKIAkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJCX0KIAkJ CQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9mIC0xIGRpdmlzb3IgKi8KQEAgLTIxMjYsNyArMjMx MSw3IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJ CQkJCQkvKiBvdmVyZmxvdyBjaGVjayAobmVlZGVkIGZvciBJTlQ2NF9NSU4pICovCiAJCQkJCQkJ CQlpZiAobGkgPT0gUEdfSU5UNjRfTUlOKQogCQkJCQkJCQkJewotCQkJCQkJCQkJCXBnYmVuY2hf ZXJyb3IoTE9HLAorCQkJCQkJCQkJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJTCwKIAkJCQkJCQkJ CQkJCQkgICJiaWdpbnQgb3V0IG9mIHJhbmdlXG4iKTsKIAkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7 CiAJCQkJCQkJCQl9CkBAIC0yMzkzLDEzICsyNTc4LDEzIEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJLyogY2hlY2sgcmFuZG9tIHJhbmdlICovCiAJ CQkJaWYgKGltaW4gPiBpbWF4KQogCQkJCXsKLQkJCQkJcGdiZW5jaF9lcnJvcihMT0csICJlbXB0 eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIpOworCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZB SUwsICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIpOwogCQkJCQlyZXR1cm4gZmFsc2U7 CiAJCQkJfQogCQkJCWVsc2UgaWYgKGltYXggLSBpbWluIDwgMCB8fCAoaW1heCAtIGltaW4pICsg MSA8IDApCiAJCQkJewogCQkJCQkvKiBwcmV2ZW50IGludCBvdmVyZmxvd3MgaW4gcmFuZG9tIGZ1 bmN0aW9ucyAqLwotCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgInJhbmRvbSByYW5nZSBpcyB0b28g bGFyZ2VcbiIpOworCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsICJyYW5kb20gcmFuZ2Ug aXMgdG9vIGxhcmdlXG4iKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIApAQCAtMjQyMSw3 ICsyNjA2LDcgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwK IAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDwgTUlOX0dBVVNTSUFOX1BBUkFNKQogCQkJCQkJewot CQkJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJ TCwKIAkJCQkJCQkJCQkgICJnYXVzc2lhbiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCAlZiAo bm90ICVmKVxuIiwKIAkJCQkJCQkJCQkgIE1JTl9HQVVTU0lBTl9QQVJBTSwgcGFyYW0pOwogCQkJ CQkJCXJldHVybiBmYWxzZTsKQEAgLTI0MzUsNyArMjYyMCw3IEBAIGV2YWxTdGFuZGFyZEZ1bmMo VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCXsKIAkJCQkJCWlmIChwYXJhbSA8PSAw LjAgfHwgcGFyYW0gPT0gMS4wIHx8IHBhcmFtID4gTUFYX1pJUEZJQU5fUEFSQU0pCiAJCQkJCQl7 Ci0JCQkJCQkJcGdiZW5jaF9lcnJvcihMT0csCisJCQkJCQkJcGdiZW5jaF9lcnJvcihERUJVR19G QUlMLAogCQkJCQkJCQkJCSAgInppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgKDAs IDEpIFUgKDEsICVkXSAoZ290ICVmKVxuIiwKIAkJCQkJCQkJCQkgIE1BWF9aSVBGSUFOX1BBUkFN LCBwYXJhbSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwpAQCAtMjQ0OSw3ICsyNjM0LDcgQEAgZXZh bFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJewogCQkJCQkJ aWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJ CQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsCiAJCQkJCQkJCQkJICAiZXhwb25lbnRpYWwg cGFyYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gKGdvdCAlZilcbiIsCiAJCQkJCQkJ CQkJICBwYXJhbSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwpAQCAtMjU2Miw3ICsyNzQ3LDcgQEAg ZXZhbHVhdGVFeHByKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBQZ0JlbmNoRXhwciAqZXhw ciwgUGdCZW5jaFZhbHVlICpyZXR2YWwKIAogCQkJCWlmICgodmFyID0gbG9va3VwVmFyaWFibGUo JnN0LT52YXJpYWJsZXMsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkpID09IE5VTEwpCiAJCQkJ ewotCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgInVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIs CisJCQkJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJTCwgInVuZGVmaW5lZCB2YXJpYWJsZSBcIiVz XCJcbiIsCiAJCQkJCQkJCSAgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKTsKIAkJCQkJcmV0dXJu IGZhbHNlOwogCQkJCX0KQEAgLTI2NjIsNyArMjg0Nyw3IEBAIHJ1blNoZWxsQ29tbWFuZChWYXJp YWJsZXMgKnZhcmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykK IAkJfQogCQllbHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsg MSkpID09IE5VTEwpCiAJCXsKLQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXM6IHVuZGVmaW5lZCB2 YXJpYWJsZSBcIiVzXCJcbiIsCisJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsICIlczogdW5k ZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKIAkJCQkJCSAgYXJndlswXSwgYXJndltpXSk7CiAJ CQlyZXR1cm4gZmFsc2U7CiAJCX0KQEAgLTI2NzAsNyArMjg1NSw4IEBAIHJ1blNoZWxsQ29tbWFu ZChWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQg YXJnYykKIAkJYXJnbGVuID0gc3RybGVuKGFyZyk7CiAJCWlmIChsZW4gKyBhcmdsZW4gKyAoaSA+ IDAgPyAxIDogMCkgPj0gU0hFTExfQ09NTUFORF9TSVpFIC0gMSkKIAkJewotCQkJcGdiZW5jaF9l cnJvcihMT0csICIlczogc2hlbGwgY29tbWFuZCBpcyB0b28gbG9uZ1xuIiwgYXJndlswXSk7CisJ CQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsICIlczogc2hlbGwgY29tbWFuZCBpcyB0b28gbG9u Z1xuIiwKKwkJCQkJCSAgYXJndlswXSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjY4 OSw4ICsyODc1LDggQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFy ICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl7CiAJCQlpZiAoIXRpbWVyX2V4 Y2VlZGVkKQogCQkJewotCQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXM6IGNvdWxkIG5vdCBsYXVu Y2ggc2hlbGwgY29tbWFuZFxuIiwKLQkJCQkJCQkgIGFyZ3ZbMF0pOworCQkJCXBnYmVuY2hfZXJy b3IoREVCVUdfRkFJTCwKKwkJCQkJCQkgICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21t YW5kXG4iLCBhcmd2WzBdKTsKIAkJCX0KIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMjcwMCwx NCArMjg4NiwxNiBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIg KnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJLyogRXhlY3V0ZSB0aGUgY29tbWFu ZCB3aXRoIHBpcGUgYW5kIHJlYWQgdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KIAlpZiAoKGZwID0g cG9wZW4oY29tbWFuZCwgInIiKSkgPT0gTlVMTCkKIAl7Ci0JCXBnYmVuY2hfZXJyb3IoTE9HLCAi JXM6IGNvdWxkIG5vdCBsYXVuY2ggc2hlbGwgY29tbWFuZFxuIiwgYXJndlswXSk7CisJCXBnYmVu Y2hfZXJyb3IoREVCVUdfRkFJTCwgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRc biIsCisJCQkJCSAgYXJndlswXSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGZnZXRzKHJl cywgc2l6ZW9mKHJlcyksIGZwKSA9PSBOVUxMKQogCXsKIAkJaWYgKCF0aW1lcl9leGNlZWRlZCkK IAkJewotCQkJcGdiZW5jaF9lcnJvcihMT0csICIlczogY291bGQgbm90IHJlYWQgcmVzdWx0IG9m IHNoZWxsIGNvbW1hbmRcbiIsCisJCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsCisJCQkJCQkg ICIlczogY291bGQgbm90IHJlYWQgcmVzdWx0IG9mIHNoZWxsIGNvbW1hbmRcbiIsCiAJCQkJCQkg IGFyZ3ZbMF0pOwogCQl9CiAJCSh2b2lkKSBwY2xvc2UoZnApOwpAQCAtMjcxNSw3ICsyOTAzLDgg QEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwg Y2hhciAqKmFyZ3YsIGludCBhcmdjKQogCX0KIAlpZiAocGNsb3NlKGZwKSA8IDApCiAJewotCQlw Z2JlbmNoX2Vycm9yKExPRywgIiVzOiBjb3VsZCBub3QgY2xvc2Ugc2hlbGwgY29tbWFuZFxuIiwg YXJndlswXSk7CisJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJTCwgIiVzOiBjb3VsZCBub3QgY2xv c2Ugc2hlbGwgY29tbWFuZFxuIiwKKwkJCQkJICBhcmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwog CX0KIApAQCAtMjcyNSw3ICsyOTE0LDcgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFy aWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQllbmRwdHIr KzsKIAlpZiAoKnJlcyA9PSAnXDAnIHx8ICplbmRwdHIgIT0gJ1wwJykKIAl7Ci0JCXBnYmVuY2hf ZXJyb3IoTE9HLAorCQlwZ2JlbmNoX2Vycm9yKERFQlVHX0ZBSUwsCiAJCQkJCSAgIiVzOiBzaGVs bCBjb21tYW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXIgKG5vdCBcIiVzXCIpXG4iLAogCQkJCQkg IGFyZ3ZbMF0sIHJlcyk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTI3NDcsMTEgKzI5MzYsMjAgQEAg cHJlcGFyZWRTdGF0ZW1lbnROYW1lKGNoYXIgKmJ1ZmZlciwgaW50IGZpbGUsIGludCBzdGF0ZSkK IH0KIAogc3RhdGljIHZvaWQKLWNvbW1hbmRGYWlsZWQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAq Y21kLCBjb25zdCBjaGFyICptZXNzYWdlKQorY29tbWFuZEZhaWxlZChDU3RhdGUgKnN0LCBjb25z dCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGJvb2wgYWJvcnRlZCkKIHsKLQlwZ2Jl bmNoX2Vycm9yKExPRywKLQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkICgl cykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwKLQkJCQkgIHN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwg c3QtPnVzZV9maWxlLCBtZXNzYWdlKTsKKwlpZiAoYWJvcnRlZCkKKwl7CisJCXBnYmVuY2hfZXJy b3IoTE9HLAorCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkICglcykgb2Yg c2NyaXB0ICVkOyAlc1xuIiwKKwkJCQkJICBzdC0+aWQsIHN0LT5jb21tYW5kLCBjbWQsIHN0LT51 c2VfZmlsZSwgbWVzc2FnZSk7CisJfQorCWVsc2UKKwl7CisJCXBnYmVuY2hfZXJyb3IoREVCVUdf RkFJTCwKKwkJCQkJICAiY2xpZW50ICVkIGdvdCBhIGZhaWx1cmUgaW4gY29tbWFuZCAlZCAoJXMp IG9mIHNjcmlwdCAlZDsgJXNcbiIsCisJCQkJCSAgc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBz dC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCX0KIH0KIAogLyogcmV0dXJuIGEgc2NyaXB0IG51bWJl ciB3aXRoIGEgd2VpZ2h0ZWQgY2hvaWNlLiAqLwpAQCAtMjg1MCw3ICszMDQ4LDYgQEAgc2VuZENv bW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAl7CiAJCXBnYmVuY2hfZXJyb3Io REVCVUcsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNcbiIsCiAJCQkJCSAgc3QtPmlkLCBj b21tYW5kLT5hcmd2WzBdKTsKLQkJc3QtPmVjbnQrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAll bHNlCkBAIC0yODcxLDcgKzMwNjgsNyBAQCBldmFsdWF0ZVNsZWVwKFZhcmlhYmxlcyAqdmFyaWFi bGVzLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqdXNlY3MpCiAJewogCQlpZiAoKHZhciA9 IGdldFZhcmlhYmxlKHZhcmlhYmxlcywgYXJndlsxXSArIDEpKSA9PSBOVUxMKQogCQl7Ci0JCQlw Z2JlbmNoX2Vycm9yKExPRywgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAorCQkJ cGdiZW5jaF9lcnJvcihERUJVR19GQUlMLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJc biIsCiAJCQkJCQkgIGFyZ3ZbMF0sIGFyZ3ZbMV0pOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBA IC0yODk1LDYgKzMwOTIsMjI1IEBAIGV2YWx1YXRlU2xlZXAoVmFyaWFibGVzICp2YXJpYWJsZXMs IGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2VjcykKIH0KIAogLyoKKyAqIEdldCB0aGUg bnVtYmVyIG9mIGFsbCBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIGluY2x1ZGluZyBza2lwcGVkIG9u ZXMgYW5kCisgKiBlcnJvcnMuCisgKi8KK3N0YXRpYyBpbnQ2NAorZ2V0VG90YWxDbnQoY29uc3Qg Q1N0YXRlICpzdCkKK3sKKwlyZXR1cm4gc3QtPmNudCArIHN0LT5lY250OworfQorCitzdGF0aWMg aW50NjQKK2dldEVjbnQoY29uc3QgU3RhdHNEYXRhICpzdGF0cykKK3sKKwlyZXR1cm4gKHN0YXRz LT5zZXJpYWxpemF0aW9uX2Vycm9ycyArCisJCQlzdGF0cy0+ZGVhZGxvY2tfZXJyb3JzICsKKwkJ CXN0YXRzLT5vdGhlcl9zcWxfZXJyb3JzICsKKwkJCXN0YXRzLT5tZXRhX2NvbW1hbmRfZXJyb3Jz KTsKK30KKworLyoKKyAqIENsZWFyIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGFycmF5LiBUaGUgYXJy YXkgaXRzZWxmIGlzIG5vdCBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQKK2NsZWFyVmFyaWFibGVz KFZhcmlhYmxlcyAqdmFyaWFibGVzKQoreworCVZhcmlhYmxlICAgKnZhcnMsCisJCQkgICAqdmFy OworCWludAkJCW52YXJzOworCisJaWYgKCF2YXJpYWJsZXMpCisJCXJldHVybjsJCQkJCS8qIG5v dGhpbmcgdG8gZG8gaGVyZSAqLworCisJdmFycyA9IHZhcmlhYmxlcy0+dmFyczsKKwludmFycyA9 IHZhcmlhYmxlcy0+bnZhcnM7CisJZm9yICh2YXIgPSB2YXJzOyB2YXIgLSB2YXJzIDwgbnZhcnM7 ICsrdmFyKQorCXsKKwkJcGdfZnJlZSh2YXItPm5hbWUpOworCQlwZ19mcmVlKHZhci0+c3ZhbHVl KTsKKwl9CisKKwl2YXJpYWJsZXMtPm52YXJzID0gMDsKK30KKworLyoKKyAqIE1ha2UgYSBkZWVw IGNvcHkgb2YgdmFyaWFibGVzIGFycmF5LgorICogQmVmb3JlIGNvcHlpbmcgdGhlIGZ1bmN0aW9u IGZyZWVzIHRoZSBzdHJpbmcgZmllbGRzIG9mIHRoZSBkZXN0aW5hdGlvbgorICogdmFyaWFibGVz IGFuZCBpZiBuZWNlc3NhcnkgZW5sYXJnZXMgdGhlaXIgYXJyYXkuCisgKiBPbiBmYWlsdXJlICh0 b28gbWFueSB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gdGhlIHNvdXJjZSkgcmV0dXJucyBmYWxzZS4K KyAqLworc3RhdGljIGJvb2wKK2NvcHlWYXJpYWJsZXMoVmFyaWFibGVzICpkZXN0LCBjb25zdCBW YXJpYWJsZXMgKnNvdXJjZSkKK3sKKwlWYXJpYWJsZSAgICpkZXN0X3ZhcjsKKwljb25zdCBWYXJp YWJsZSAqc291cmNlX3ZhcnMsCisJCQkJICAgKnNvdXJjZV92YXI7CisJaW50CQkJbnZhcnM7CisK KwlpZiAoIWRlc3QgfHwgIXNvdXJjZSB8fCBkZXN0ID09IHNvdXJjZSkKKwkJcmV0dXJuIHRydWU7 CQkJLyogbm90aGluZyB0byBkbyBoZXJlICovCisKKwlzb3VyY2VfdmFycyA9IHNvdXJjZS0+dmFy czsKKwludmFycyA9IHNvdXJjZS0+bnZhcnM7CisKKwkvKgorCSAqIENsZWFyIHRoZSBvcmlnaW5h bCB2YXJpYWJsZXMgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvcgor CSAqIHRoZSBuZXcgdmFyaWFibGVzLgorCSAqLworCisJY2xlYXJWYXJpYWJsZXMoZGVzdCk7CisK KwkvKgorCSAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIGNsaWVudCB3aWxsIGJlIGFib3J0ZWQg c28gYWx3YXlzIHByaW50IGFuIGVycm9yCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAoIWVubGFy Z2VWYXJpYWJsZXMoZGVzdCwgTlVMTCwgbnZhcnMsIExPRykpCisJCXJldHVybiBmYWxzZTsKKwor CS8qIE1ha2UgYSBkZWVwIGNvcHkgb2YgdmFyaWFibGVzIGFycmF5ICovCisJZm9yIChzb3VyY2Vf dmFyID0gc291cmNlX3ZhcnMsIGRlc3RfdmFyID0gZGVzdC0+dmFyczsKKwkJIHNvdXJjZV92YXIg LSBzb3VyY2VfdmFycyA8IG52YXJzOworCQkgKytzb3VyY2VfdmFyLCArK2Rlc3RfdmFyKQorCXsK KwkJZGVzdF92YXItPm5hbWUgPSBwZ19zdHJkdXAoc291cmNlX3Zhci0+bmFtZSk7CisJCWlmIChz b3VyY2VfdmFyLT5zdmFsdWUgPT0gTlVMTCkKKwkJCWRlc3RfdmFyLT5zdmFsdWUgPSBOVUxMOwor CQllbHNlCisJCQlkZXN0X3Zhci0+c3ZhbHVlID0gcGdfc3RyZHVwKHNvdXJjZV92YXItPnN2YWx1 ZSk7CisJCWRlc3RfdmFyLT52YWx1ZSA9IHNvdXJjZV92YXItPnZhbHVlOworCX0KKwlkZXN0LT5u dmFycyA9IG52YXJzOworCWRlc3QtPnZhcnNfc29ydGVkID0gc291cmNlLT52YXJzX3NvcnRlZDsK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHR5cGUgb2Yg ZmFpbHVyZSBjYW4gYmUgcmV0cmllZC4KKyAqLworc3RhdGljIGJvb2wKK2NhblJldHJ5RmFpbHVy ZShGYWlsdXJlU3RhdHVzIGZhaWx1cmVfc3RhdHVzKQoreworCXJldHVybiAoZmFpbHVyZV9zdGF0 dXMgPT0gU0VSSUFMSVpBVElPTl9GQUlMVVJFIHx8CisJCQlmYWlsdXJlX3N0YXR1cyA9PSBERUFE TE9DS19GQUlMVVJFKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmFpbHVyZSBj YW4gYmUgcmV0cmllZC4KKyAqLworc3RhdGljIGJvb2wKK2NhblJldHJ5KENTdGF0ZSAqc3QsIGlu c3RyX3RpbWUgKm5vdykKK3sKKwlGYWlsdXJlU3RhdHVzIGZhaWx1cmVfc3RhdHVzID0gc3QtPmZh aWx1cmVfc3RhdHVzOworCisJQXNzZXJ0KGZhaWx1cmVfc3RhdHVzICE9IE5PX0ZBSUxVUkUpOwor CisJLyogV2UgY2FuIG9ubHkgcmV0cnkgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJl cy4gKi8KKwlpZiAoIWNhblJldHJ5RmFpbHVyZShmYWlsdXJlX3N0YXR1cykpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogV2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvcHRpb24gdG8gbGlt aXQgdGhlIHJldHJ5aW5nIG9mIGZhaWxlZAorCSAqIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlBc3Nl cnQobWF4X3RyaWVzIHx8IGxhdGVuY3lfbGltaXQpOworCisJLyoKKwkgKiBXZSBjYW5ub3QgcmV0 cnkgdGhlIGZhaWx1cmUgaWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZgor CSAqIHRyaWVzLgorCSAqLworCWlmIChtYXhfdHJpZXMgJiYgc3QtPnJldHJpZXMgKyAxID49IG1h eF90cmllcykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSBjYW5ub3QgcmV0cnkgdGhl IGZhaWx1cmUgaWYgd2Ugc3BlbnQgdG9vIG11Y2ggdGltZSBvbiB0aGlzCisJICogdHJhbnNhY3Rp b24uCisJICovCisJaWYgKGxhdGVuY3lfbGltaXQpCisJeworCQlpZiAoSU5TVFJfVElNRV9JU19a RVJPKCpub3cpKQorCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsKKworCQlpZiAoSU5T VFJfVElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+dHhuX3NjaGVkdWxlZCA+PSBsYXRlbmN5 X2xpbWl0KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE9LICovCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qCisgKiBHZXQgdGhlIGZhaWx1cmUgc3RhdHVzIGZyb20gdGhlIGVycm9yIGNvZGUu CisgKi8KK3N0YXRpYyBGYWlsdXJlU3RhdHVzCitnZXRTUUxGYWlsdXJlU3RhdHVzKGNoYXIgKnNx bFN0YXRlKQoreworCWlmIChzcWxTdGF0ZSkKKwl7CisJCWlmIChzdHJjbXAoc3FsU3RhdGUsIEVS UkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSkgPT0gMCkKKwkJCXJldHVybiBTRVJJQUxJ WkFUSU9OX0ZBSUxVUkU7CisJCWVsc2UgaWYgKHN0cmNtcChzcWxTdGF0ZSwgRVJSQ09ERV9UX1Jf REVBRExPQ0tfREVURUNURUQpID09IDApCisJCQlyZXR1cm4gREVBRExPQ0tfRkFJTFVSRTsKKwl9 CisKKwlyZXR1cm4gQU5PVEhFUl9TUUxfRkFJTFVSRTsKK30KKworc3RhdGljIGJvb2wKK2luVHJh bnNhY3Rpb25CbG9jayhDU3RhdGUgKnN0KQoreworCVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHR4 X3N0YXR1czsKKworCXR4X3N0YXR1cyA9IFBRdHJhbnNhY3Rpb25TdGF0dXMoc3QtPmNvbik7CisJ c3dpdGNoICh0eF9zdGF0dXMpCisJeworCQljYXNlIFBRVFJBTlNfSURMRToKKwkJCXJldHVybiBm YWxzZTsKKwkJY2FzZSBQUVRSQU5TX0lOVFJBTlM6CisJCWNhc2UgUFFUUkFOU19JTkVSUk9SOgor CQkJcmV0dXJuIHRydWU7CisJCWNhc2UgUFFUUkFOU19VTktOT1dOOgorCQkJLyogUFFUUkFOU19V TktOT1dOIGlzIGV4cGVjdGVkIGdpdmVuIGEgYnJva2VuIGNvbm5lY3Rpb24gKi8KKwkJCWlmIChQ UXN0YXR1cyhzdC0+Y29uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJCXsJCS8qIHRoZXJlJ3Mgc29t ZXRoaW5nIHdyb25nICovCisJCQkJcGdiZW5jaF9lcnJvcihMT0csCisJCQkJCQkJICAiY2xpZW50 ICVkIGFib3J0ZWQgd2hpbGUgcmVjZWl2aW5nIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXM7IHBlcmhh cHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nXG4iLAorCQkJCQkJCSAgc3QtPmlk KTsKKwkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQlyZXR1cm4gZmFsc2U7CS8q IHJldHVybiB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgKi8KKwkJCX0KKwkJY2FzZSBQUVRSQU5TX0FD VElWRToKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgZmluZCBvdXQgd2hldGhl ciB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBibG9jayBvciBub3QuCisJCQkgKiBJbnRlcm5hbCBl cnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIuCisJCQkgKi8KKwkJCXBnYmVuY2hfZXJyb3Io TE9HLAorCQkJCQkJICAiY2xpZW50ICVkIGFib3J0ZWQgd2hpbGUgcmVjZWl2aW5nIHRoZSB0cmFu c2FjdGlvbiBzdGF0dXM7IHVuZXhwZWN0ZWQgdHJhbnNhY3Rpb24gc3RhdHVzICVkXG4iLAorCQkJ CQkJICBzdC0+aWQsIHR4X3N0YXR1cyk7CisJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsK KwkJCXJldHVybiBmYWxzZTsJCS8qIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgKi8KKwl9 Cit9CisKKy8qCisgKiBJZiB0aGUgbGF0ZW5jeSBsaW1pdCBpcyB1c2VkLCByZXR1cm4gYSBwZXJj ZW50YWdlIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uCisgKiBsYXRlbmN5IGZyb20gdGhlIGxh dGVuY3kgbGltaXQuIE90aGVyd2lzZSByZXR1cm4gemVyby4KKyAqLworc3RhdGljIGRvdWJsZQor Z2V0TGF0ZW5jeVVzZWQoQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAqbm93KQoreworCWlmICghbGF0 ZW5jeV9saW1pdCkKKwkJcmV0dXJuIDAuMDsKKworCWlmIChJTlNUUl9USU1FX0lTX1pFUk8oKm5v dykpCisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoKm5vdyk7CisKKwlyZXR1cm4gKDEwMC4wICog KElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQpIC8KKwkJ CWxhdGVuY3lfbGltaXQpOworfQorCisvKgogICogQWR2YW5jZSB0aGUgc3RhdGUgbWFjaGluZSBv ZiBhIGNvbm5lY3Rpb24sIGlmIHBvc3NpYmxlLgogICovCiBzdGF0aWMgdm9pZApAQCAtMjk0NCw2 ICszMzYwLDExIEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0Rh dGEgKmFnZykKIAkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX1RYOwogCQkJCS8qIGNoZWNr IGNvbnNpc3RlbmN5ICovCiAJCQkJQXNzZXJ0KGNvbmRpdGlvbmFsX3N0YWNrX2VtcHR5KHN0LT5j c3RhY2spKTsKKworCQkJCS8qIHJlc2V0IHRyYW5zYWN0aW9uIHZhcmlhYmxlcyB0byBkZWZhdWx0 IHZhbHVlcyAqLworCQkJCXN0LT5mYWlsdXJlX3N0YXR1cyA9IE5PX0ZBSUxVUkU7CisJCQkJc3Qt PnJldHJpZXMgPSAwOworCiAJCQkJYnJlYWs7CiAKIAkJCQkvKgpAQCAtMjk5MSw3ICszNDEyLDcg QEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQog CQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOwogCQkJCQlub3dfdXMgPSBJTlNUUl9U SU1FX0dFVF9NSUNST1NFQyhub3cpOwogCQkJCQl3aGlsZSAodGhyZWFkLT50aHJvdHRsZV90cmln Z2VyIDwgbm93X3VzIC0gbGF0ZW5jeV9saW1pdCAmJgotCQkJCQkJICAgKG54YWN0cyA8PSAwIHx8 IHN0LT5jbnQgPCBueGFjdHMpKQorCQkJCQkJICAgKG54YWN0cyA8PSAwIHx8IGdldFRvdGFsQ250 KHN0KSA8IG54YWN0cykpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NYYWN0U3RhdHModGhyZWFkLCBz dCwgJm5vdywgdHJ1ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVuZGV6LXZvdXMgKi8KQEAgLTMw MDEsNyArMzQyMiw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0 c0RhdGEgKmFnZykKIAkJCQkJCXN0LT50eG5fc2NoZWR1bGVkID0gdGhyZWFkLT50aHJvdHRsZV90 cmlnZ2VyOwogCQkJCQl9CiAJCQkJCS8qIHN0b3AgY2xpZW50IGlmIC10IGV4Y2VlZGVkICovCi0J CQkJCWlmIChueGFjdHMgPiAwICYmIHN0LT5jbnQgPj0gbnhhY3RzKQorCQkJCQlpZiAobnhhY3Rz ID4gMCAmJiBnZXRUb3RhbENudChzdCkgPj0gbnhhY3RzKQogCQkJCQl7CiAJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfRklOSVNIRUQ7CiAJCQkJCQlicmVhazsKQEAgLTMwNTcsNiArMzQ3OCwyMiBA QCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJ CQkJfQogCiAJCQkJLyoKKwkJCQkgKiBJdCBpcyB0aGUgZmlyc3QgdHJ5IHRvIHJ1biB0aGlzIHRy YW5zYWN0aW9uLiBSZW1lbWJlciBpdHMKKwkJCQkgKiBwYXJhbWV0ZXJzIGp1c3QgaW4gY2FzZSBp ZiBpdCBmYWlscyBvciB3ZSBzaG91bGQgcmVwZWF0IGl0IGluCisJCQkJICogZnV0dXJlLgorCQkJ CSAqLworCQkJCW1lbWNweSgmKHN0LT5yZXRyeV9zdGF0ZS5yYW5kb21fc3RhdGUpLCAmKHN0LT5y YW5kb21fc3RhdGUpLAorCQkJCQkgICBzaXplb2YoUmFuZG9tU3RhdGUpKTsKKwkJCQlpZiAoIWNv cHlWYXJpYWJsZXMoJnN0LT5yZXRyeV9zdGF0ZS52YXJpYWJsZXMsICZzdC0+dmFyaWFibGVzKSkK KwkJCQl7CisJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJCQkgICJjbGllbnQgJWQgYWJv cnRlZCB3aGVuIHByZXBhcmluZyB0byBleGVjdXRlIGEgdHJhbnNhY3Rpb25cbiIsCisJCQkJCQkJ CSAgc3QtPmlkKTsKKwkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCWJyZWFr OworCQkJCX0KKworCQkJCS8qCiAJCQkJICogUmVjb3JkIHRyYW5zYWN0aW9uIHN0YXJ0IHRpbWUg dW5kZXIgbG9nZ2luZywgcHJvZ3Jlc3Mgb3IKIAkJCQkgKiB0aHJvdHRsaW5nLgogCQkJCSAqLwpA QCAtMzEwMCw3ICszNTM3LDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs IFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIFJlY29yZCBzdGF0ZW1lbnQgc3RhcnQgdGltZSBpZiBw ZXItY29tbWFuZCBsYXRlbmNpZXMgYXJlCiAJCQkJICogcmVxdWVzdGVkCiAJCQkJICovCi0JCQkJ aWYgKGlzX2xhdGVuY2llcykKKwkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJCXsKIAkJ CQkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChub3cpOwpAQCAtMzExMSw3ICszNTQ4LDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQs IENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCXsKIAkJCQkJaWYgKCFzZW5kQ29tbWFu ZChzdCwgY29tbWFuZCkpCiAJCQkJCXsKLQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJTUUwiLCAi U1FMIGNvbW1hbmQgc2VuZCBmYWlsZWQiKTsKKwkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJTUUwi LCAiU1FMIGNvbW1hbmQgc2VuZCBmYWlsZWQiLAorCQkJCQkJCQkJICB0cnVlKTsKIAkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwogCQkJCQl9CiAJCQkJCWVsc2UKQEAgLTMxNTEsOCAr MzU4OSwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAKIAkJCQkJCWlmICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywg YXJndiwgJnVzZWMpKQogCQkJCQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIs ICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsCisJCQkJ CQkJCQkJICAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAg ZmFsc2UpOworCQkJCQkJCXN0LT5mYWlsdXJlX3N0YXR1cyA9IE1FVEFfQ09NTUFORF9GQUlMVVJF OworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFrOwogCQkJ CQkJfQogCkBAIC0zMTgzLDE4ICszNjI0LDI0IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAogCQkJCQkJaWYgKCFldmFsdWF0ZUV4cHIodGhy ZWFkLCBzdCwgZXhwciwgJnJlc3VsdCkpCiAJCQkJCQl7Ci0JCQkJCQkJY29tbWFuZEZhaWxlZChz dCwgYXJndlswXSwgImV2YWx1YXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsIGFy Z3ZbMF0sCisJCQkJCQkJCQkJICAiZXZhbHVhdGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIiwK KwkJCQkJCQkJCQkgIGZhbHNlKTsKKwkJCQkJCQlzdC0+ZmFpbHVyZV9zdGF0dXMgPSBNRVRBX0NP TU1BTkRfRkFJTFVSRTsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKIAkJCQkJ CQlicmVhazsKIAkJCQkJCX0KIAogCQkJCQkJaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9TRVQp CiAJCQkJCQl7Ci0JCQkJCQkJaWYgKCFwdXRWYXJpYWJsZVZhbHVlKCZzdC0+dmFyaWFibGVzLCBh cmd2WzBdLAotCQkJCQkJCQkJCQkJICBhcmd2WzFdLCAmcmVzdWx0LCAgdHJ1ZSkpCisJCQkJCQkJ aWYgKCFwdXRWYXJpYWJsZVZhbHVlKCZzdC0+dmFyaWFibGVzLCAgYXJndlswXSwKKwkJCQkJCQkJ CQkJCSAgYXJndlsxXSwgJnJlc3VsdCwgdHJ1ZSkpCiAJCQkJCQkJewotCQkJCQkJCQljb21tYW5k RmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwot CQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQkJY29tbWFuZEZhaWxl ZChzdCwgInNldCIsCisJCQkJCQkJCQkJCSAgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZh aWxlZCIsCisJCQkJCQkJCQkJCSAgZmFsc2UpOworCQkJCQkJCQlzdC0+ZmFpbHVyZV9zdGF0dXMg PSBNRVRBX0NPTU1BTkRfRkFJTFVSRTsKKwkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZBSUxV UkU7CiAJCQkJCQkJCWJyZWFrOwogCQkJCQkJCX0KIAkJCQkJCX0KQEAgLTMyNTUsOCArMzcwMiwx MSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cp CiAJCQkJCQl9CiAJCQkJCQllbHNlIGlmICghcmV0KQkvKiBvbiBlcnJvciAqLwogCQkJCQkJewot CQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRzaGVsbCIsICJleGVjdXRpb24gb2YgbWV0YS1j b21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJ CQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRzaGVsbCIsCisJCQkJCQkJCQkJICAiZXhlY3V0aW9u IG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgZmFsc2UpOworCQkJCQkJCXN0 LT5mYWlsdXJlX3N0YXR1cyA9IE1FVEFfQ09NTUFORF9GQUlMVVJFOworCQkJCQkJCXN0LT5zdGF0 ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQkJZWxzZQpA QCAtMzI3Niw4ICszNzI2LDExIEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJCX0KIAkJCQkJCWVsc2UgaWYgKCFyZXQpCS8qIG9uIGVy cm9yICovCiAJCQkJCQl7Ci0JCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNoZWxsIiwgImV4ZWN1 dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIik7Ci0JCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRF X0FCT1JURUQ7CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNoZWxsIiwKKwkJCQkJCQkJCQkg ICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIsCisJCQkJCQkJCQkJICBmYWxzZSk7 CisJCQkJCQkJc3QtPmZhaWx1cmVfc3RhdHVzID0gTUVUQV9DT01NQU5EX0ZBSUxVUkU7CisJCQkJ CQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZBSUxVUkU7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJ CQkJCQllbHNlCkBAIC0zMzkzLDM2ICszODQ2LDU0IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFk LCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBXYWl0IGZvciB0aGUgY3VycmVu dCBTUUwgY29tbWFuZCB0byBjb21wbGV0ZQogCQkJCSAqLwogCQkJY2FzZSBDU1RBVEVfV0FJVF9S RVNVTFQ6Ci0JCQkJY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tz dC0+Y29tbWFuZF07Ci0JCQkJcGdiZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCByZWNlaXZp bmdcbiIsIHN0LT5pZCk7Ci0JCQkJaWYgKCFQUWNvbnN1bWVJbnB1dChzdC0+Y29uKSkKLQkJCQl7 CQkJCS8qIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nICovCi0JCQkJCWNvbW1hbmRGYWlsZWQoc3Qs ICJTUUwiLCAicGVyaGFwcyB0aGUgYmFja2VuZCBkaWVkIHdoaWxlIHByb2Nlc3NpbmciKTsKLQkJ CQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlp ZiAoUFFpc0J1c3koc3QtPmNvbikpCi0JCQkJCXJldHVybjsJCS8qIGRvbid0IGhhdmUgdGhlIHdo b2xlIHJlc3VsdCB5ZXQgKi8KLQotCQkJCS8qCi0JCQkJICogUmVhZCBhbmQgZGlzY2FyZCB0aGUg cXVlcnkgcmVzdWx0OwotCQkJCSAqLwotCQkJCXJlcyA9IFBRZ2V0UmVzdWx0KHN0LT5jb24pOwot CQkJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzKSkKIAkJCQl7Ci0JCQkJCWNhc2UgUEdSRVNf Q09NTUFORF9PSzoKLQkJCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6Ci0JCQkJCWNhc2UgUEdSRVNf RU1QVFlfUVVFUlk6Ci0JCQkJCQkvKiBPSyAqLwotCQkJCQkJUFFjbGVhcihyZXMpOwotCQkJCQkJ ZGlzY2FyZF9yZXNwb25zZShzdCk7Ci0JCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX0NPTU1B TkQ7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWNvbW1hbmRGYWlsZWQoc3Qs ICJTUUwiLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7Ci0JCQkJCQlQUWNsZWFyKHJlcyk7CisJ CQkJCWNoYXIJICAgKnNxbFN0YXRlOworCisJCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51 c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRdOworCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVH LCAiY2xpZW50ICVkIHJlY2VpdmluZ1xuIiwgc3QtPmlkKTsKKwkJCQkJaWYgKCFQUWNvbnN1bWVJ bnB1dChzdC0+Y29uKSkKKwkJCQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLwor CQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsCisJCQkJCQkJCQkgICJwZXJoYXBzIHRoZSBi YWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2luZyIsCisJCQkJCQkJCQkgIHRydWUpOwogCQkJCQkJ c3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CiAJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlp ZiAoUFFpc0J1c3koc3QtPmNvbikpCisJCQkJCQlyZXR1cm47CQkvKiBkb24ndCBoYXZlIHRoZSB3 aG9sZSByZXN1bHQgeWV0ICovCisKKwkJCQkJLyoKKwkJCQkJICogUmVhZCBhbmQgZGlzY2FyZCB0 aGUgcXVlcnkgcmVzdWx0OworCQkJCQkgKi8KKwkJCQkJcmVzID0gUFFnZXRSZXN1bHQoc3QtPmNv bik7CisJCQkJCXNxbFN0YXRlID0gUFFyZXN1bHRFcnJvckZpZWxkKHJlcywgUEdfRElBR19TUUxT VEFURSk7CisJCQkJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzKSkKKwkJCQkJeworCQkJCQkJ Y2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6CisJCQkJ CQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCQkJCS8qIE9LICovCisJCQkJCQkJc3QtPmZh aWx1cmVfc3RhdHVzID0gTk9fRkFJTFVSRTsKKwkJCQkJCQlQUWNsZWFyKHJlcyk7CisJCQkJCQkJ ZGlzY2FyZF9yZXNwb25zZShzdCk7CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9DT01N QU5EOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBQR1JFU19OT05GQVRBTF9FUlJPUjoKKwkJ CQkJCWNhc2UgUEdSRVNfRkFUQUxfRVJST1I6CisJCQkJCQkJc3QtPmZhaWx1cmVfc3RhdHVzID0g Z2V0U1FMRmFpbHVyZVN0YXR1cyhzcWxTdGF0ZSk7CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwg IlNRTCIsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pLAorCQkJCQkJCQkJCSAgZmFsc2UpOworCQkJ CQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJCQlkaXNjYXJkX3Jlc3BvbnNlKHN0KTsKKwkJCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6 CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24p LAorCQkJCQkJCQkJCSAgdHJ1ZSk7CisJCQkJCQkJUFFjbGVhcihyZXMpOworCQkJCQkJCXN0LT5z dGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJfQogCQkJ CWJyZWFrOwogCkBAIC0zNDUxLDcgKzM5MjIsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogaW4gdGhyZWFkLWxvY2FsIGRhdGEg c3RydWN0dXJlLCBpZiBwZXItY29tbWFuZCBsYXRlbmNpZXMKIAkJCQkgKiBhcmUgcmVxdWVzdGVk LgogCQkJCSAqLwotCQkJCWlmIChpc19sYXRlbmNpZXMpCisJCQkJaWYgKHJlcG9ydF9wZXJfY29t bWFuZCkKIAkJCQl7CiAJCQkJCWlmIChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkKIAkJCQkJCUlO U1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsKQEAgLTM0NjksNiArMzk0MCwxNjkgQEAgZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQlDU1RB VEVfU1RBUlRfQ09NTUFORCA6IENTVEFURV9TS0lQX0NPTU1BTkQ7CiAJCQkJYnJlYWs7CiAKKwkJ CS8qCisJCQkgKiBDbGVhbiB1cCBhZnRlciBhIGZhaWxlZCB0cmFuc2FjdGlvbi4KKwkJCSAqLwor CQkJY2FzZSBDU1RBVEVfRkFJTFVSRToKKwkJCQl7CisJCQkJCWJvb2wJCWluX3R4X2Jsb2NrOwor CisJCQkJCUFzc2VydChzdC0+ZmFpbHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSk7CisKKwkJCQkJ LyoKKwkJCQkJICogQ2hlY2sgaWYgd2UgaGF2ZSBhIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jayBv ciBub3QsIGFuZAorCQkJCQkgKiByb2xsIGl0IGJhY2sgaWYgYW55LgorCQkJCQkgKi8KKwkJCQkJ aW5fdHhfYmxvY2sgPSBpblRyYW5zYWN0aW9uQmxvY2soc3QpOworCQkJCQlpZiAoc3QtPnN0YXRl ID09IENTVEFURV9BQk9SVEVEKQorCQkJCQkJYnJlYWs7CQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3 cm9uZyAqLworCQkJCQlpZiAoaW5fdHhfYmxvY2spCisJCQkJCXsKKwkJCQkJCVBHcmVzdWx0ICAg KnJlczsKKworCQkJCQkJcmVzID0gUFFleGVjKHN0LT5jb24sICJST0xMQkFDSyIpOworCQkJCQkJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQkJCXsKKwkJ CQkJCQkvKgorCQkJCQkJCSAqIFdlIGFyZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIFBRZXJyb3JN ZXNzYWdlIGlzCisJCQkJCQkJICogYWx3YXlzIGNhbGxlZC4KKwkJCQkJCQkgKi8KKwkJCQkJCQlB c3NlcnQoTE9HID49IGxvZ19taW5fbWVzc2FnZXMpOworCisJCQkJCQkJcGdiZW5jaF9lcnJvcihM T0csCisJCQkJCQkJCQkJICAiY2xpZW50ICVkIGFib3J0ZWQgZHVyaW5nIHRoZSB0ZXJtaW5hdGlv biBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGJsb2NrOyAlc1xuIiwKKwkJCQkJCQkJCQkgIHN0 LT5pZCwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJCQkJCVBRY2xlYXIocmVzKTsKKwkJ CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0K KwkJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJfQorCisJCQkJCS8qIENsZWFyIHRoZSBjb25kaXRp b25hbCBzdGFjayAqLworCQkJCQljb25kaXRpb25hbF9zdGFja19yZXNldChzdC0+Y3N0YWNrKTsK KworCQkJCQkvKiBDaGVjayBpZiB3ZSBjYW4gcmV0cnkgdGhlIGZhaWx1cmUgKi8KKwkJCQkJc3Qt PnN0YXRlID0gQ1NUQVRFX1JFVFJZOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAq IFJldHJ5IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaWYgcG9zc2libGUuCisJCQkgKi8KKwkJCWNh c2UgQ1NUQVRFX1JFVFJZOgorCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0u Y29tbWFuZHNbc3QtPmNvbW1hbmRdOworCisJCQkJaWYgKGNhblJldHJ5KHN0LCAmbm93KSkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXRy aWVkLiBTbyBhY2N1bXVsYXRlCisJCQkJCSAqIHRoZSByZXRyeS4KKwkJCQkJICovCisJCQkJCXN0 LT5yZXRyaWVzKys7CisJCQkJCWNvbW1hbmQtPnJldHJpZXMrKzsKKworCQkJCQkvKgorCQkJCQkg KiBJbmZvcm0gdGhhdCB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmV0cmllZC4KKwkJ CQkJICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbWVzc2FnZSBvbmx5IGlmIG5lY2Vzc2FyeS4K KwkJCQkJICovCisJCQkJCWlmIChERUJVR19GQUlMID49IGxvZ19taW5fbWVzc2FnZXMpCisJCQkJ CXsKKwkJCQkJCVBRRXhwQnVmZmVyRGF0YSBlcnJtc2dfYnVmOworCisJCQkJCQlpbml0UFFFeHBC dWZmZXIoJmVycm1zZ19idWYpOworCQkJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmVycm1zZ19idWYs CisJCQkJCQkJCQkJICAiY2xpZW50ICVkIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAo dHJ5ICVkIiwKKwkJCQkJCQkJCQkgIHN0LT5pZCwgc3QtPnJldHJpZXMgKyAxKTsKKwkJCQkJCWlm IChtYXhfdHJpZXMpCisJCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsICIvJWQi LCBtYXhfdHJpZXMpOworCQkJCQkJaWYgKGxhdGVuY3lfbGltaXQpCisJCQkJCQl7CisJCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmVycm1zZ19idWYsCisJCQkJCQkJCQkJCSAgIiwgJS4zZiUlIG9m IHRoZSBtYXhpbXVtIHRpbWUgb2YgdHJpZXMgd2FzIHVzZWQiLAorCQkJCQkJCQkJCQkgIGdldExh dGVuY3lVc2VkKHN0LCAmbm93KSk7CisJCQkJCQl9CisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmZXJybXNnX2J1ZiwgIilcbiIpOworCQkJCQkJcGdiZW5jaF9lcnJvcihERUJVR19GQUlMLCAi JXMiLCBlcnJtc2dfYnVmLmRhdGEpOworCQkJCQkJdGVybVBRRXhwQnVmZmVyKCZlcnJtc2dfYnVm KTsKKwkJCQkJfQorCisJCQkJCS8qCisJCQkJCSAqIFJlc2V0IHRoZSBleGVjdXRpb24gcGFyYW1l dGVycyBhcyB0aGV5IHdlcmUgYXQgdGhlCisJCQkJCSAqIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNh Y3Rpb24uCisJCQkJCSAqLworCQkJCQltZW1jcHkoJihzdC0+cmFuZG9tX3N0YXRlKSwgJihzdC0+ cmV0cnlfc3RhdGUucmFuZG9tX3N0YXRlKSwKKwkJCQkJCSAgIHNpemVvZihSYW5kb21TdGF0ZSkp OworCQkJCQlpZiAoIWNvcHlWYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsCisJCQkJCQkJCQkgICAm c3QtPnJldHJ5X3N0YXRlLnZhcmlhYmxlcykpCisJCQkJCXsKKwkJCQkJCXBnYmVuY2hfZXJyb3Io TE9HLAorCQkJCQkJCQkJICAiY2xpZW50ICVkIGFib3J0ZWQgd2hlbiBwcmVwYXJpbmcgdG8gcmV0 cnkgdGhlIGZhaWxlZCB0cmFuc2FjdGlvblxuIiwKKwkJCQkJCQkJCSAgc3QtPmlkKTsKKwkJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJ CQkvKiBQcm9jZXNzIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJCQkJCXN0LT5j b21tYW5kID0gMDsKKwkJCQkJc3QtPmZhaWx1cmVfc3RhdHVzID0gTk9fRkFJTFVSRTsKKwkJCQkJ c3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIFdlIHdpbGwgbm90IGJlIGFibGUgdG8gcmV0cnkgdGhpcyBmYWls ZWQgdHJhbnNhY3Rpb24uCisJCQkJCSAqIFNvIGFjY3VtdWxhdGUgdGhlIGVycm9yLgorCQkJCQkg Ki8KKwkJCQkJY29tbWFuZC0+ZWNudCsrOworCisJCQkJCS8qCisJCQkJCSAqIElmIHRoaXMgaXMg YSBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmUsIGluZm9ybQorCQkJCQkgKiB0aGF0 IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbCBub3QgYmUgcmV0cmllZC4gQWxsb2NhdGUKKwkJ CQkJICogbWVtb3J5IGZvciB0aGUgbWVzc2FnZSBvbmx5IGlmIG5lY2Vzc2FyeS4KKwkJCQkJICov CisJCQkJCWlmIChERUJVR19GQUlMID49IGxvZ19taW5fbWVzc2FnZXMgJiYKKwkJCQkJCWNhblJl dHJ5RmFpbHVyZShzdC0+ZmFpbHVyZV9zdGF0dXMpKQorCQkJCQl7CisJCQkJCQlQUUV4cEJ1ZmZl ckRhdGEgZXJybXNnX2J1ZjsKKworCQkJCQkJaW5pdFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmKTsK KwkJCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLAorCQkJCQkJCQkJCSAgImNsaWVu dCAlZCBlbmRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gKHRyeSAlZCIsCisJCQkJCQkJCQkJICBz dC0+aWQsIHN0LT5yZXRyaWVzICsgMSk7CisJCQkJCQlpZiAobWF4X3RyaWVzKQorCQkJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZlcnJtc2dfYnVmLCAiLyVkIiwgbWF4X3RyaWVzKTsKKwkJCQkJCWlm IChsYXRlbmN5X2xpbWl0KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZlcnJt c2dfYnVmLAorCQkJCQkJCQkJCQkgICIsICUuM2YlJSBvZiB0aGUgbWF4aW11bSB0aW1lIG9mIHRy aWVzIHdhcyB1c2VkIiwKKwkJCQkJCQkJCQkJICBnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOwor CQkJCQkJfQorCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmVycm1zZ19idWYsICIpXG4iKTsK KwkJCQkJCXBnYmVuY2hfZXJyb3IoREVCVUdfRkFJTCwgIiVzIiwgZXJybXNnX2J1Zi5kYXRhKTsK KwkJCQkJCXRlcm1QUUV4cEJ1ZmZlcigmZXJybXNnX2J1Zik7CisJCQkJCX0KKworCQkJCQkvKgor CQkJCQkgKiBSZXNldCB0aGUgZXhlY3V0aW9uIHBhcmFtZXRlcnMgYXMgdGhleSB3ZXJlIGF0IHRo ZQorCQkJCQkgKiBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zYWN0aW9uIGV4Y2VwdCBmb3IgYSByYW5k b20KKwkJCQkJICogc3RhdGUuCisJCQkJCSAqLworCQkJCQlpZiAoIWNvcHlWYXJpYWJsZXMoJnN0 LT52YXJpYWJsZXMsCisJCQkJCQkJCQkgICAmc3QtPnJldHJ5X3N0YXRlLnZhcmlhYmxlcykpCisJ CQkJCXsKKwkJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJCQkJICAiY2xpZW50ICVkIGFi b3J0ZWQgd2hlbiBlbmRpbmcgdGhlIGZhaWxlZCB0cmFuc2FjdGlvblxuIiwKKwkJCQkJCQkJCSAg c3QtPmlkKTsKKwkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJYnJlYWs7 CisJCQkJCX0KKworCQkJCQkvKiBFbmQgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAqLworCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfRU5EX1RYOworCQkJCX0KKwkJCQlicmVhazsKKwogCQkJCS8qCiAJ CQkJICogRW5kIG9mIHRyYW5zYWN0aW9uLgogCQkJCSAqLwpAQCAtMzQ5MCw3ICs0MTI0LDggQEAg ZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJ CQlJTlNUUl9USU1FX1NFVF9aRVJPKG5vdyk7CiAJCQkJfQogCi0JCQkJaWYgKChzdC0+Y250ID49 IG54YWN0cyAmJiBkdXJhdGlvbiA8PSAwKSB8fCB0aW1lcl9leGNlZWRlZCkKKwkJCQlpZiAoKGdl dFRvdGFsQ250KHN0KSA+PSBueGFjdHMgJiYgZHVyYXRpb24gPD0gMCkgfHwKKwkJCQkJdGltZXJf ZXhjZWVkZWQpCiAJCQkJewogCQkJCQkvKiBleGl0IHN1Y2Nlc3MgKi8KIAkJCQkJc3QtPnN0YXRl ID0gQ1NUQVRFX0ZJTklTSEVEOwpAQCAtMzU3Myw2ICs0MjA4LDIwIEBAIGRvTG9nKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQlhZ2ctPmxhdGVuY3kuc3VtMiwKIAkJCQkJYWdnLT5s YXRlbmN5Lm1pbiwKIAkJCQkJYWdnLT5sYXRlbmN5Lm1heCk7CisKKwkJCWlmIChlcnJvcnNfZGV0 YWlsZWQpCisJCQl7CisJCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJ TlQ2NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1BVCAiICIgSU5UNjRfRk9STUFULAorCQkJCQkJYWdn LT5zZXJpYWxpemF0aW9uX2Vycm9ycywKKwkJCQkJCWFnZy0+ZGVhZGxvY2tfZXJyb3JzLAorCQkJ CQkJYWdnLT5vdGhlcl9zcWxfZXJyb3JzLAorCQkJCQkJYWdnLT5tZXRhX2NvbW1hbmRfZXJyb3Jz KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2NF9G T1JNQVQsIGdldEVjbnQoYWdnKSk7CisJCQl9CisKIAkJCWlmICh0aHJvdHRsZV9kZWxheSkKIAkJ CXsKIAkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJS4wZiAlLjBmICUuMGYgJS4wZiIsCkBAIC0zNTgz LDYgKzQyMzIsMTAgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJaWYg KGxhdGVuY3lfbGltaXQpCiAJCQkJCWZwcmludGYobG9nZmlsZSwgIiAiIElOVDY0X0ZPUk1BVCwg YWdnLT5za2lwcGVkKTsKIAkJCX0KKwkJCWlmIChSRVRSSUVTX0VOQUJMRUQpCisJCQkJZnByaW50 Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQlhZ2ct PnJldHJpZWQsCisJCQkJCQlhZ2ctPnJldHJpZXMpOwogCQkJZnB1dGMoJ1xuJywgbG9nZmlsZSk7 CiAKIAkJCS8qIHJlc2V0IGRhdGEgYW5kIG1vdmUgdG8gbmV4dCBpbnRlcnZhbCAqLwpAQCAtMzU5 MCw3ICs0MjQzLDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCX0KIAog CQkvKiBhY2N1bXVsYXRlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi0JCWFjY3VtU3RhdHMo YWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKGFnZywgc2tpcHBlZCwg bGF0ZW5jeSwgbGFnLCBzdC0+ZmFpbHVyZV9zdGF0dXMsIHN0LT5yZXRyaWVzKTsKIAl9CiAJZWxz ZQogCXsKQEAgLTM2MDAsMTQgKzQyNTMsNDYgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsCiAJCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogCQlpZiAoc2tpcHBlZCkKIAkJCWZw cmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCAlZCAlbGQgJWxkIiwK LQkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUsCisJCQkJCXN0LT5pZCwgZ2V0VG90 YWxDbnQoc3QpLCBzdC0+dXNlX2ZpbGUsCiAJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0 di50dl91c2VjKTsKLQkJZWxzZQorCQllbHNlIGlmIChzdC0+ZmFpbHVyZV9zdGF0dXMgPT0gTk9f RkFJTFVSRSkKIAkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgJS4wZiAl ZCAlbGQgJWxkIiwKLQkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNlX2ZpbGUs CisJCQkJCXN0LT5pZCwgZ2V0VG90YWxDbnQoc3QpLCBsYXRlbmN5LCBzdC0+dXNlX2ZpbGUsCisJ CQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJZWxzZSBpZiAoZXJy b3JzX2RldGFpbGVkKQorCQl7CisJCQlpZiAoc3QtPmZhaWx1cmVfc3RhdHVzID09IFNFUklBTEla QVRJT05fRkFJTFVSRSkKKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAi IHNlcmlhbGl6YXRpb25fZXJyb3IgJWQgJWxkICVsZCIsCisJCQkJCQlzdC0+aWQsIGdldFRvdGFs Q250KHN0KSwgc3QtPnVzZV9maWxlLAorCQkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2 LnR2X3VzZWMpOworCQkJZWxzZSBpZiAoc3QtPmZhaWx1cmVfc3RhdHVzID09IERFQURMT0NLX0ZB SUxVUkUpCisJCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBkZWFkbG9j a19lcnJvciAlZCAlbGQgJWxkIiwKKwkJCQkJCXN0LT5pZCwgZ2V0VG90YWxDbnQoc3QpLCBzdC0+ dXNlX2ZpbGUsCisJCQkJCQkobG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJ CQllbHNlIGlmIChzdC0+ZmFpbHVyZV9zdGF0dXMgPT0gQU5PVEhFUl9TUUxfRkFJTFVSRSkKKwkJ CQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGFub3RoZXJfc3FsX2Vycm9y ICVkICVsZCAlbGQiLAorCQkJCQkJc3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmls ZSwKKwkJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJCWVsc2Ug aWYgKHN0LT5mYWlsdXJlX3N0YXR1cyA9PSBNRVRBX0NPTU1BTkRfRkFJTFVSRSkKKwkJCQlmcHJp bnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIG1ldGFfY29tbWFuZF9lcnJvciAlZCAl bGQgJWxkIiwKKwkJCQkJCXN0LT5pZCwgZ2V0VG90YWxDbnQoc3QpLCBzdC0+dXNlX2ZpbGUsCisJ CQkJCQkobG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJCQllbHNlCisJCQl7 CisJCQkJLyogaW50ZXJuYWwgZXJyb3Igd2hpY2ggc2hvdWxkIG5ldmVyIG9jY3VyICovCisJCQkJ cGdiZW5jaF9lcnJvcihFUlJPUiwgInVuZXhwZWN0ZWQgZmFpbHVyZSBzdGF0dXM6ICVkIiwKKwkJ CQkJCQkgIHN0LT5mYWlsdXJlX3N0YXR1cyk7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJZnByaW50 Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBmYWlsZWQgJWQgJWxkICVsZCIsCisJCQkJ CXN0LT5pZCwgZ2V0VG90YWxDbnQoc3QpLCBzdC0+dXNlX2ZpbGUsCiAJCQkJCShsb25nKSB0di50 dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwogCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQlm cHJpbnRmKGxvZ2ZpbGUsICIgJS4wZiIsIGxhZyk7CisJCWlmIChSRVRSSUVTX0VOQUJMRUQpCisJ CQlmcHJpbnRmKGxvZ2ZpbGUsICIgJWQiLCBzdC0+cmV0cmllcyk7CiAJCWZwdXRjKCdcbicsIGxv Z2ZpbGUpOwogCX0KIH0KQEAgLTM2MjQsMTAgKzQzMDksMTEgQEAgcHJvY2Vzc1hhY3RTdGF0cyhU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAqbm93LAogewogCWRvdWJsZQkJ bGF0ZW5jeSA9IDAuMCwKIAkJCQlsYWcgPSAwLjA7Ci0JYm9vbAkJdGhyZWFkX2RldGFpbHMgPSBw cm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0LAotCQkJCWRldGFpbGVk ID0gdGhyZWFkX2RldGFpbHMgfHwgdXNlX2xvZyB8fCBwZXJfc2NyaXB0X3N0YXRzOworCWJvb2wJ CWRldGFpbGVkID0gcHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCB8 fAorCQkJCQkJICAgdXNlX2xvZyB8fCBwZXJfc2NyaXB0X3N0YXRzOwogCi0JaWYgKGRldGFpbGVk ICYmICFza2lwcGVkKQorCWlmIChkZXRhaWxlZCAmJiAhc2tpcHBlZCAmJgorCQkoc3QtPmZhaWx1 cmVfc3RhdHVzID09IE5PX0ZBSUxVUkUgfHwgbGF0ZW5jeV9saW1pdCkpCiAJewogCQlpZiAoSU5T VFJfVElNRV9JU19aRVJPKCpub3cpKQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsK QEAgLTM2MzcsMzAgKzQzMjMsMjkgQEAgcHJvY2Vzc1hhY3RTdGF0cyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgaW5zdHJfdGltZSAqbm93LAogCQlsYWcgPSBJTlNUUl9USU1FX0dFVF9NSUNS T1NFQyhzdC0+dHhuX2JlZ2luKSAtIHN0LT50eG5fc2NoZWR1bGVkOwogCX0KIAotCWlmICh0aHJl YWRfZGV0YWlscykKLQl7Ci0JCS8qIGtlZXAgZGV0YWlsZWQgdGhyZWFkIHN0YXRzICovCi0JCWFj Y3VtU3RhdHMoJnRocmVhZC0+c3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CisJLyoga2Vl cCBkZXRhaWxlZCB0aHJlYWQgc3RhdHMgKi8KKwlhY2N1bVN0YXRzKCZ0aHJlYWQtPnN0YXRzLCBz a2lwcGVkLCBsYXRlbmN5LCBsYWcsIHN0LT5mYWlsdXJlX3N0YXR1cywKKwkJCSAgIHN0LT5yZXRy aWVzKTsKIAotCQkvKiBjb3VudCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgbGF0ZW5jeSBsaW1pdCwg aWYgbmVlZGVkICovCi0JCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRlbmN5X2xp bWl0KQotCQkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsKLQl9Ci0JZWxzZQotCXsKLQkJLyogbm8g ZGV0YWlsZWQgc3RhdHMsIGp1c3QgY291bnQgKi8KLQkJdGhyZWFkLT5zdGF0cy5jbnQrKzsKLQl9 CisJLyogY291bnQgdHJhbnNhY3Rpb25zIG92ZXIgdGhlIGxhdGVuY3kgbGltaXQsIGlmIG5lZWRl ZCAqLworCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRlbmN5X2xpbWl0KQorCQl0 aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOwogCiAJLyogY2xpZW50IHN0YXQgaXMganVzdCBjb3VudGlu ZyAqLwotCXN0LT5jbnQrKzsKKwlpZiAoc3QtPmZhaWx1cmVfc3RhdHVzID09IE5PX0ZBSUxVUkUp CisJCXN0LT5jbnQrKzsKKwllbHNlCisJCXN0LT5lY250Kys7CiAKIAlpZiAodXNlX2xvZykKIAkJ ZG9Mb2codGhyZWFkLCBzdCwgYWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOwogCiAJLyogWFhY IGNvdWxkIHVzZSBhIG11dGV4IGhlcmUsIGJ1dCB3ZSBjaG9vc2Ugbm90IHRvICovCiAJaWYgKHBl cl9zY3JpcHRfc3RhdHMpCi0JCWFjY3VtU3RhdHMoJnNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5z dGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsKKwl7CisJCWFjY3VtU3RhdHMoJnNxbF9zY3Jp cHRbc3QtPnVzZV9maWxlXS5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnLAorCQkJCSAgIHN0 LT5mYWlsdXJlX3N0YXR1cywgc3QtPnJldHJpZXMpOworCX0KIH0KIAogCkBAIC00ODIxLDcgKzU1 MDYsOSBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBp bnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJZG91YmxlCQl0aW1lX2luY2x1ZGUsCiAJCQkJdHBzX2lu Y2x1ZGUsCiAJCQkJdHBzX2V4Y2x1ZGU7Ci0JaW50NjQJCW50eCA9IHRvdGFsLT5jbnQgLSB0b3Rh bC0+c2tpcHBlZDsKKwlpbnQ2NAkJZWNudCA9IGdldEVjbnQodG90YWwpOworCWludDY0CQludHgg PSB0b3RhbC0+Y250IC0gdG90YWwtPnNraXBwZWQsCisJCQkJdG90YWxfbnR4ID0gdG90YWwtPmNu dCArIGVjbnQ7CiAJaW50CQkJaSwKIAkJCQl0b3RhbENhY2hlT3ZlcmZsb3dzID0gMDsKIApAQCAt NDg0Miw4ICs1NTI5LDggQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRh ICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCWlmIChkdXJhdGlvbiA8PSAwKQogCXsK IAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBjbGllbnQ6ICVkXG4iLCBueGFj dHMpOwotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2Vk OiAiIElOVDY0X0ZPUk1BVCAiLyVkXG4iLAotCQkJICAgbnR4LCBueGFjdHMgKiBuY2xpZW50cyk7 CisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIg SU5UNjRfRk9STUFUICIvIiBJTlQ2NF9GT1JNQVQgIlxuIiwKKwkJCSAgIG50eCwgdG90YWxfbnR4 KTsKIAl9CiAJZWxzZQogCXsKQEAgLTQ4NTEsNiArNTUzOCw2NyBAQCBwcmludFJlc3VsdHMoVFN0 YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJ CXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5U NjRfRk9STUFUICJcbiIsCiAJCQkgICBudHgpOwogCX0KKworCWlmIChlY250ID4gMCkKKwl7CisJ CXByaW50ZigibnVtYmVyIG9mIGVycm9yczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwK KwkJCSAgIGVjbnQsIDEwMC4wICogZWNudCAvIHRvdGFsX250eCk7CisKKwkJaWYgKGVycm9yc19k ZXRhaWxlZCkKKwkJeworCQkJLyogU1FMIGVycm9ycyAqLworCQkJaWYgKHRvdGFsLT5zZXJpYWxp emF0aW9uX2Vycm9ycyB8fCB0b3RhbC0+b3RoZXJfc3FsX2Vycm9ycykKKwkJCXsKKwkJCQlwcmlu dGYoIm51bWJlciBvZiBzZXJpYWxpemF0aW9uIGVycm9yczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4z ZiUlKVxuIiwKKwkJCQkJICAgdG90YWwtPnNlcmlhbGl6YXRpb25fZXJyb3JzLAorCQkJCQkgICAx MDAuMCAqIHRvdGFsLT5zZXJpYWxpemF0aW9uX2Vycm9ycyAvIHRvdGFsX250eCk7CisJCQl9CisJ CQlpZiAodG90YWwtPmRlYWRsb2NrX2Vycm9ycyB8fCB0b3RhbC0+b3RoZXJfc3FsX2Vycm9ycykK KwkJCXsKKwkJCQlwcmludGYoIm51bWJlciBvZiBkZWFkbG9jayBlcnJvcnM6ICIgSU5UNjRfRk9S TUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCSAgIHRvdGFsLT5kZWFkbG9ja19lcnJvcnMsCisJCQkJ CSAgIDEwMC4wICogdG90YWwtPmRlYWRsb2NrX2Vycm9ycyAvIHRvdGFsX250eCk7CisJCQl9CisJ CQlpZiAodG90YWwtPm90aGVyX3NxbF9lcnJvcnMpCisJCQl7CisJCQkJcHJpbnRmKCJudW1iZXIg b2Ygb3RoZXIgU1FMIGVycm9yczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJ ICAgdG90YWwtPm90aGVyX3NxbF9lcnJvcnMsCisJCQkJCSAgIDEwMC4wICogdG90YWwtPm90aGVy X3NxbF9lcnJvcnMgLyB0b3RhbF9udHgpOworCQkJfQorCisJCQkvKiBlcnJvcnMgaW4gbWV0YSBj b21tYW5kcyAqLworCQkJaWYgKHRvdGFsLT5tZXRhX2NvbW1hbmRfZXJyb3JzID4gMCkKKwkJCXsK KwkJCQlwcmludGYoIm51bWJlciBvZiBlcnJvcnMgaW4gbWV0YS1jb21tYW5kczogIiBJTlQ2NF9G T1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJICAgdG90YWwtPm1ldGFfY29tbWFuZF9lcnJvcnMs CisJCQkJCSAgIDEwMC4wICogdG90YWwtPm1ldGFfY29tbWFuZF9lcnJvcnMgLyB0b3RhbF9udHgp OworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJdCBjYW4gYmUgbm9uLXplcm8gb25seSBpZiBt YXhfdHJpZXMgaXMgZ3JlYXRlciB0aGFuIG9uZSBvcgorCSAqIGxhdGVuY3lfbGltaXQgaXMgdXNl ZC4KKwkgKi8KKwlpZiAodG90YWwtPnJldHJpZWQgPiAwKQorCXsKKwkJcHJpbnRmKCJudW1iZXIg b2YgcmV0cmllZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCSAgIHRvdGFsLT5y ZXRyaWVkLCAxMDAuMCAqIHRvdGFsLT5yZXRyaWVkIC8gdG90YWxfbnR4KTsKKwkJcHJpbnRmKCJu dW1iZXIgb2YgcmV0cmllczogIiBJTlQ2NF9GT1JNQVQgIlxuIiwgdG90YWwtPnJldHJpZXMpOwor CX0KKworCWlmIChtYXhfdHJpZXMpCisJCXByaW50ZigibWF4aW11bSBudW1iZXIgb2YgdHJpZXM6 ICVkXG4iLCBtYXhfdHJpZXMpOworCisJaWYgKGxhdGVuY3lfbGltaXQpCisJeworCQkvKiB0aGlz IHN0YXRpc3RpY3MgaW5jbHVkZXMgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgdHJhbnNhY3Rp b25zICovCisJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBt cyBsYXRlbmN5IGxpbWl0OiAiIElOVDY0X0ZPUk1BVCAiLyIgSU5UNjRfRk9STUFUICIgKCUuM2Yg JSUpJXNcbiIsCisJCQkgICBsYXRlbmN5X2xpbWl0IC8gMTAwMC4wLCBsYXRlbmN5X2xhdGUsIHRv dGFsX250eCwKKwkJCSAgICh0b3RhbF9udHggPiAwKSA/IDEwMC4wICogbGF0ZW5jeV9sYXRlIC8g dG90YWxfbnR4IDogMC4wLAorCQkJICAgZWNudCA+IDAgPyAiIChpbmNsdWRpbmcgZXJyb3JzKSIg OiAiIik7CisJfQorCiAJLyogUmVwb3J0IHppcGZpYW4gY2FjaGUgb3ZlcmZsb3cgKi8KIAlmb3Ig KGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykKIAl7CkBAIC00ODcwLDE4ICs1NjE4LDE0IEBAIHBy aW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUg dG90YWxfdGltZSwKIAkJCSAgIHRvdGFsLT5za2lwcGVkLAogCQkJICAgMTAwLjAgKiB0b3RhbC0+ c2tpcHBlZCAvIHRvdGFsLT5jbnQpOwogCi0JaWYgKGxhdGVuY3lfbGltaXQpCi0JCXByaW50Zigi bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5IGxpbWl0OiAi IElOVDY0X0ZPUk1BVCAiLyIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLAotCQkJICAgbGF0 ZW5jeV9saW1pdCAvIDEwMDAuMCwgbGF0ZW5jeV9sYXRlLCBudHgsCi0JCQkgICAobnR4ID4gMCkg PyAxMDAuMCAqIGxhdGVuY3lfbGF0ZSAvIG50eCA6IDAuMCk7Ci0KIAlpZiAodGhyb3R0bGVfZGVs YXkgfHwgcHJvZ3Jlc3MgfHwgbGF0ZW5jeV9saW1pdCkKIAkJcHJpbnRTaW1wbGVTdGF0cygibGF0 ZW5jeSIsICZ0b3RhbC0+bGF0ZW5jeSk7CiAJZWxzZQogCXsKIAkJLyogbm8gbWVhc3VyZW1lbnQs IHNob3cgYXZlcmFnZSBsYXRlbmN5IGNvbXB1dGVkIGZyb20gcnVuIHRpbWUgKi8KLQkJcHJpbnRm KCJsYXRlbmN5IGF2ZXJhZ2UgPSAlLjNmIG1zXG4iLAotCQkJICAgMTAwMC4wICogdGltZV9pbmNs dWRlICogbmNsaWVudHMgLyB0b3RhbC0+Y250KTsKKwkJcHJpbnRmKCJsYXRlbmN5IGF2ZXJhZ2Ug PSAlLjNmIG1zJXNcbiIsCisJCQkgICAxMDAwLjAgKiB0aW1lX2luY2x1ZGUgKiBuY2xpZW50cyAv IHRvdGFsX250eCwKKwkJCSAgIGVjbnQgPiAwID8gIiAoaW5jbHVkaW5nIGVycm9ycykiIDogIiIp OwogCX0KIAogCWlmICh0aHJvdHRsZV9kZWxheSkKQEAgLTQ5MDAsNyArNTY0NCw3IEBAIHByaW50 UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwKIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOwogCiAJLyogUmVwb3J0IHBlci1zY3JpcHQvY29tbWFu ZCBzdGF0aXN0aWNzICovCi0JaWYgKHBlcl9zY3JpcHRfc3RhdHMgfHwgaXNfbGF0ZW5jaWVzKQor CWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IHJlcG9ydF9wZXJfY29tbWFuZCkKIAl7CiAJCWludAkJ CWk7CiAKQEAgLTQ5MDksNiArNTY1Myw4IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCWlmIChwZXJfc2Ny aXB0X3N0YXRzKQogCQkJewogCQkJCVN0YXRzRGF0YSAgKnNzdGF0cyA9ICZzcWxfc2NyaXB0W2ld LnN0YXRzOworCQkJCWludDY0CQlzY3JpcHRfZWNudCA9IGdldEVjbnQoc3N0YXRzKTsKKwkJCQlp bnQ2NAkJc2NyaXB0X3RvdGFsX250eCA9IHNzdGF0cy0+Y250ICsgc2NyaXB0X2VjbnQ7CiAKIAkJ CQlwcmludGYoIlNRTCBzY3JpcHQgJWQ6ICVzXG4iCiAJCQkJCSAgICIgLSB3ZWlnaHQ6ICVkICh0 YXJnZXRzICUuMWYlJSBvZiB0b3RhbClcbiIKQEAgLTQ5MjAsNiArNTY2Niw2MiBAQCBwcmludFJl c3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFs X3RpbWUsCiAJCQkJCSAgIDEwMC4wICogc3N0YXRzLT5jbnQgLyB0b3RhbC0+Y250LAogCQkJCQkg ICAoc3N0YXRzLT5jbnQgLSBzc3RhdHMtPnNraXBwZWQpIC8gdGltZV9pbmNsdWRlKTsKIAorCQkJ CWlmIChlY250ID4gMCkKKwkJCQl7CisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIGVycm9yczog IiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJCSAgIHNjcmlwdF9lY250LCAxMDAu MCAqIHNjcmlwdF9lY250IC8gc2NyaXB0X3RvdGFsX250eCk7CisKKwkJCQkJaWYgKGVycm9yc19k ZXRhaWxlZCkKKwkJCQkJeworCQkJCQkJLyogU1FMIGVycm9ycyAqLworCQkJCQkJaWYgKHRvdGFs LT5zZXJpYWxpemF0aW9uX2Vycm9ycyB8fAorCQkJCQkJCXRvdGFsLT5vdGhlcl9zcWxfZXJyb3Jz KQorCQkJCQkJeworCQkJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHNlcmlhbGl6YXRpb24gZXJy b3JzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkJCQkgICBzc3RhdHMtPnNl cmlhbGl6YXRpb25fZXJyb3JzLAorCQkJCQkJCQkgICAoMTAwLjAgKiBzc3RhdHMtPnNlcmlhbGl6 YXRpb25fZXJyb3JzIC8KKwkJCQkJCQkJCXNjcmlwdF90b3RhbF9udHgpKTsKKwkJCQkJCX0KKwkJ CQkJCWlmICh0b3RhbC0+ZGVhZGxvY2tfZXJyb3JzIHx8CisJCQkJCQkJdG90YWwtPm90aGVyX3Nx bF9lcnJvcnMpCisJCQkJCQl7CisJCQkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgZGVhZGxvY2sg ZXJyb3JzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkJCQkgICBzc3RhdHMt PmRlYWRsb2NrX2Vycm9ycywKKwkJCQkJCQkJICAgKDEwMC4wICogc3N0YXRzLT5kZWFkbG9ja19l cnJvcnMgLworCQkJCQkJCQkJc2NyaXB0X3RvdGFsX250eCkpOworCQkJCQkJfQorCQkJCQkJaWYg KHRvdGFsLT5vdGhlcl9zcWxfZXJyb3JzKQorCQkJCQkJeworCQkJCQkJCXByaW50ZigiIC0gbnVt YmVyIG9mIG90aGVyIFNRTCBlcnJvcnM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJ CQkJCQkJCSAgIHNzdGF0cy0+b3RoZXJfc3FsX2Vycm9ycywKKwkJCQkJCQkJICAgKDEwMC4wICog c3N0YXRzLT5vdGhlcl9zcWxfZXJyb3JzIC8KKwkJCQkJCQkJCXNjcmlwdF90b3RhbF9udHgpKTsK KwkJCQkJCX0KKworCQkJCQkJLyogZXJyb3JzIGluIG1ldGEgY29tbWFuZHMgKi8KKwkJCQkJCWlm ICh0b3RhbC0+bWV0YV9jb21tYW5kX2Vycm9ycyA+IDApCisJCQkJCQl7CisJCQkJCQkJcHJpbnRm KCIgLSBudW1iZXIgb2YgZXJyb3JzIGluIG1ldGEtY29tbWFuZHM6ICIgSU5UNjRfRk9STUFUICIg KCUuM2YlJSlcbiIsCisJCQkJCQkJCSAgIHNzdGF0cy0+bWV0YV9jb21tYW5kX2Vycm9ycywKKwkJ CQkJCQkJICAgKDEwMC4wICogc3N0YXRzLT5tZXRhX2NvbW1hbmRfZXJyb3JzIC8KKwkJCQkJCQkJ CXNjcmlwdF90b3RhbF9udHgpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCS8qCisJ CQkJICogSXQgY2FuIGJlIG5vbi16ZXJvIG9ubHkgaWYgbWF4X3RyaWVzIGlzIGdyZWF0ZXIgdGhh biBvbmUgb3IKKwkJCQkgKiBsYXRlbmN5X2xpbWl0IGlzIHVzZWQuCisJCQkJICovCisJCQkJaWYg KHRvdGFsLT5yZXRyaWVkID4gMCkKKwkJCQl7CisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHJl dHJpZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCQkgICBzc3RhdHMtPnJl dHJpZWQsCisJCQkJCQkgICAxMDAuMCAqIHNzdGF0cy0+cmV0cmllZCAvIHNjcmlwdF90b3RhbF9u dHgpOworCQkJCQlwcmludGYoIiAtIG51bWJlciBvZiByZXRyaWVzOiAiIElOVDY0X0ZPUk1BVCAi XG4iLAorCQkJCQkJICAgc3N0YXRzLT5yZXRyaWVzKTsKKwkJCQl9CisKIAkJCQlpZiAodGhyb3R0 bGVfZGVsYXkgJiYgbGF0ZW5jeV9saW1pdCAmJiBzc3RhdHMtPmNudCA+IDApCiAJCQkJCXByaW50 ZigiIC0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAiIElOVDY0X0ZPUk1BVCAiICgl LjNmJSUpXG4iLAogCQkJCQkJICAgc3N0YXRzLT5za2lwcGVkLApAQCAtNDkyOCwxNSArNTczMCwx NiBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0 cl90aW1lIHRvdGFsX3RpbWUsCiAJCQkJcHJpbnRTaW1wbGVTdGF0cygiIC0gbGF0ZW5jeSIsICZz c3RhdHMtPmxhdGVuY3kpOwogCQkJfQogCi0JCQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5j aWVzICovCi0JCQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJLyogUmVwb3J0IHBlci1jb21tYW5kIGxh dGVuY2llcyBhbmQgZXJyb3JzICovCisJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJewog CQkJCUNvbW1hbmQgICAqKmNvbW1hbmRzOwogCi0JCQkJaWYgKHBlcl9zY3JpcHRfc3RhdHMpCi0J CQkJCXByaW50ZigiIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHM6XG4iKTsK LQkJCQllbHNlCi0JCQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29u ZHM6XG4iKTsKKwkJCQlwcmludGYoIiVzc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29u ZHMlczpcbiIsCisJCQkJCSAgIHBlcl9zY3JpcHRfc3RhdHMgPyAiIC0gIiA6ICIiLAorCQkJCQkg ICAoUkVUUklFU19FTkFCTEVEID8KKwkJCQkJCSIsIGVycm9ycyBhbmQgcmV0cmllcyIgOgorCQkJ CQkJIiBhbmQgZXJyb3JzIikpOwogCiAJCQkJZm9yIChjb21tYW5kcyA9IHNxbF9zY3JpcHRbaV0u Y29tbWFuZHM7CiAJCQkJCSAqY29tbWFuZHMgIT0gTlVMTDsKQEAgLTQ5NDQsMTAgKzU3NDcsMjMg QEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJf dGltZSB0b3RhbF90aW1lLAogCQkJCXsKIAkJCQkJU2ltcGxlU3RhdHMgKmNzdGF0cyA9ICYoKmNv bW1hbmRzKS0+c3RhdHM7CiAKLQkJCQkJcHJpbnRmKCIgICAlMTEuM2YgICVzXG4iLAotCQkJCQkJ ICAgKGNzdGF0cy0+Y291bnQgPiAwKSA/Ci0JCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAv IGNzdGF0cy0+Y291bnQgOiAwLjAsCi0JCQkJCQkgICAoKmNvbW1hbmRzKS0+bGluZSk7CisJCQkJ CWlmIChSRVRSSUVTX0VOQUJMRUQpCisJCQkJCXsKKwkJCQkJCXByaW50ZigiICAgJTExLjNmICAl MTAiIElOVDY0X01PRElGSUVSICJkICAlMTAiIElOVDY0X01PRElGSUVSICJkICAlc1xuIiwKKwkJ CQkJCQkgICAoY3N0YXRzLT5jb3VudCA+IDApID8KKwkJCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMt PnN1bSAvIGNzdGF0cy0+Y291bnQgOiAwLjAsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPmVjbnQs CisJCQkJCQkJICAgKCpjb21tYW5kcyktPnJldHJpZXMsCisJCQkJCQkJICAgKCpjb21tYW5kcykt PmxpbmUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcHJpbnRmKCIgICAlMTEu M2YgICUxMCIgSU5UNjRfTU9ESUZJRVIgImQgICVzXG4iLAorCQkJCQkJCSAgIChjc3RhdHMtPmNv dW50ID4gMCkgPworCQkJCQkJCSAgIDEwMDAuMCAqIGNzdGF0cy0+c3VtIC8gY3N0YXRzLT5jb3Vu dCA6IDAuMCwKKwkJCQkJCQkgICAoKmNvbW1hbmRzKS0+ZWNudCwKKwkJCQkJCQkgICAoKmNvbW1h bmRzKS0+bGluZSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTUwMzgsNyArNTg1NCw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InByb2dyZXNzIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdQJ30sCiAJCXsicHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ00nfSwKIAkJeyJxdWlldCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncSd9LAotCQl7InJl cG9ydC1sYXRlbmNpZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwKKwkJeyJyZXBvcnQtcGVy LWNvbW1hbmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwKIAkJeyJyYXRlIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdSJ30sCiAJCXsic2NhbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ3MnfSwKIAkJeyJzZWxlY3Qtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9LApAQCAt NTA1Nyw2ICs1ODczLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsibG9nLXBy ZWZpeCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAkJeyJmb3JlaWduLWtleXMiLCBu b19hcmd1bWVudCwgTlVMTCwgOH0sCiAJCXsicmFuZG9tLXNlZWQiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgOX0sCisJCXsiZGVidWctZmFpbHMiLCBub19hcmd1bWVudCwgTlVMTCwgMTB9LAor CQl7ImVycm9ycy1kZXRhaWxlZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMX0sCisJCXsibWF4LXRy aWVzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEyfSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9 CiAJfTsKIApAQCAtNTIxOCw3ICs2MDM3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJYnJlYWs7CiAJCQljYXNlICdyJzoKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9 IHRydWU7Ci0JCQkJaXNfbGF0ZW5jaWVzID0gdHJ1ZTsKKwkJCQlyZXBvcnRfcGVyX2NvbW1hbmQg PSB0cnVlOwogCQkJCWJyZWFrOwogCQkJY2FzZSAncyc6CiAJCQkJc2NhbGVfZ2l2ZW4gPSB0cnVl OwpAQCAtNTQwOSw2ICs2MjI4LDI4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ CQkJCQkgICJlcnJvciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBzZWVkIGZyb20gLS1yYW5kb20tc2Vl ZCBvcHRpb25cbiIpOwogCQkJCX0KIAkJCQlicmVhazsKKwkJCWNhc2UgMTA6CQkJLyogZGVidWct ZmFpbHMgKi8KKwkJCQkvKiBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aGUgb3B0aW9uIC0tZGVidWcg Ki8KKwkJCQlpZiAobG9nX21pbl9tZXNzYWdlcyA+IERFQlVHX0ZBSUwpCisJCQkJCWxvZ19taW5f bWVzc2FnZXMgPSBERUJVR19GQUlMOworCQkJCWJyZWFrOworCQkJY2FzZSAxMToJCQkvKiBlcnJv cnMtZGV0YWlsZWQgKi8KKwkJCQllcnJvcnNfZGV0YWlsZWQgPSB0cnVlOworCQkJCWJyZWFrOwor CQkJY2FzZSAxMjoJCQkvKiBtYXgtdHJpZXMgKi8KKwkJCQl7CisJCQkJCWludDMyCQltYXhfdHJp ZXNfYXJnID0gYXRvaShvcHRhcmcpOworCisJCQkJCWlmIChtYXhfdHJpZXNfYXJnIDw9IDApCisJ CQkJCXsKKwkJCQkJCXBnYmVuY2hfZXJyb3IoRVJST1IsCisJCQkJCQkJCQkgICJpbnZhbGlkIG51 bWJlciBvZiBtYXhpbXVtIHRyaWVzOiBcIiVzXCJcbiIsCisJCQkJCQkJCQkgIG9wdGFyZyk7CisJ CQkJCX0KKwkJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOworCQkJCQltYXhfdHJp ZXMgPSAodWludDMyKSBtYXhfdHJpZXNfYXJnOworCQkJCX0KKwkJCQlicmVhazsKIAkJCWRlZmF1 bHQ6CiAJCQkJcGdiZW5jaF9lcnJvcihFUlJPUiwKIAkJCQkJCQkgIF8oIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksCkBAIC01NTc4LDYgKzY0MTksMTAgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSAgIi0tcHJvZ3Jlc3MtdGltZXN0YW1wIGlz IGFsbG93ZWQgb25seSB1bmRlciAtLXByb2dyZXNzXG4iKTsKIAl9CiAKKwkvKiBJZiBuZWNlc3Nh cnkgc2V0IHRoZSBkZWZhdWx0IHRyaWVzIGxpbWl0ICAqLworCWlmICghbWF4X3RyaWVzICYmICFs YXRlbmN5X2xpbWl0KQorCQltYXhfdHJpZXMgPSAxOworCiAJLyoKIAkgKiBzYXZlIG1haW4gcHJv Y2VzcyBpZCBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIGJlY2F1c2UgcHJvY2VzcyBpZCB3aWxsIGJl CiAJICogY2hhbmdlZCBhZnRlciBmb3JrLgpAQCAtNTg2MSw2ICs2NzA2LDEyIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltZXJnZVNpbXBsZVN0YXRzKCZzdGF0cy5sYWcsICZ0aHJl YWQtPnN0YXRzLmxhZyk7CiAJCXN0YXRzLmNudCArPSB0aHJlYWQtPnN0YXRzLmNudDsKIAkJc3Rh dHMuc2tpcHBlZCArPSB0aHJlYWQtPnN0YXRzLnNraXBwZWQ7CisJCXN0YXRzLnJldHJpZXMgKz0g dGhyZWFkLT5zdGF0cy5yZXRyaWVzOworCQlzdGF0cy5yZXRyaWVkICs9IHRocmVhZC0+c3RhdHMu cmV0cmllZDsKKwkJc3RhdHMuc2VyaWFsaXphdGlvbl9lcnJvcnMgKz0gdGhyZWFkLT5zdGF0cy5z ZXJpYWxpemF0aW9uX2Vycm9yczsKKwkJc3RhdHMuZGVhZGxvY2tfZXJyb3JzICs9IHRocmVhZC0+ c3RhdHMuZGVhZGxvY2tfZXJyb3JzOworCQlzdGF0cy5vdGhlcl9zcWxfZXJyb3JzICs9IHRocmVh ZC0+c3RhdHMub3RoZXJfc3FsX2Vycm9yczsKKwkJc3RhdHMubWV0YV9jb21tYW5kX2Vycm9ycyAr PSB0aHJlYWQtPnN0YXRzLm1ldGFfY29tbWFuZF9lcnJvcnM7CiAJCWxhdGVuY3lfbGF0ZSArPSB0 aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJSU5TVFJfVElNRV9BREQoY29ubl90b3RhbF90aW1lLCB0 aHJlYWQtPmNvbm5fdGltZSk7CiAJfQpAQCAtNjE2NCw3ICs3MDE1LDEwIEBAIHRocmVhZFJ1bih2 b2lkICphcmcpCiAJCQkJLyogZ2VuZXJhdGUgYW5kIHNob3cgcmVwb3J0ICovCiAJCQkJU3RhdHNE YXRhCWN1cjsKIAkJCQlpbnQ2NAkJcnVuID0gbm93IC0gbGFzdF9yZXBvcnQsCi0JCQkJCQkJbnR4 OworCQkJCQkJCW50eCwKKwkJCQkJCQlyZXRyaWVzLAorCQkJCQkJCXJldHJpZWQsCisJCQkJCQkJ ZWNudDsKIAkJCQlkb3VibGUJCXRwcywKIAkJCQkJCQl0b3RhbF9ydW4sCiAJCQkJCQkJbGF0ZW5j eSwKQEAgLTYxOTIsNiArNzA0NiwxNCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCQltZXJn ZVNpbXBsZVN0YXRzKCZjdXIubGFnLCAmdGhyZWFkW2ldLnN0YXRzLmxhZyk7CiAJCQkJCWN1ci5j bnQgKz0gdGhyZWFkW2ldLnN0YXRzLmNudDsKIAkJCQkJY3VyLnNraXBwZWQgKz0gdGhyZWFkW2ld LnN0YXRzLnNraXBwZWQ7CisJCQkJCWN1ci5yZXRyaWVzICs9IHRocmVhZFtpXS5zdGF0cy5yZXRy aWVzOworCQkJCQljdXIucmV0cmllZCArPSB0aHJlYWRbaV0uc3RhdHMucmV0cmllZDsKKwkJCQkJ Y3VyLnNlcmlhbGl6YXRpb25fZXJyb3JzICs9CisJCQkJCQl0aHJlYWRbaV0uc3RhdHMuc2VyaWFs aXphdGlvbl9lcnJvcnM7CisJCQkJCWN1ci5kZWFkbG9ja19lcnJvcnMgKz0gdGhyZWFkW2ldLnN0 YXRzLmRlYWRsb2NrX2Vycm9yczsKKwkJCQkJY3VyLm90aGVyX3NxbF9lcnJvcnMgKz0gdGhyZWFk W2ldLnN0YXRzLm90aGVyX3NxbF9lcnJvcnM7CisJCQkJCWN1ci5tZXRhX2NvbW1hbmRfZXJyb3Jz ICs9CisJCQkJCQl0aHJlYWRbaV0uc3RhdHMubWV0YV9jb21tYW5kX2Vycm9yczsKIAkJCQl9CiAK IAkJCQkvKiB3ZSBjb3VudCBvbmx5IGFjdHVhbGx5IGV4ZWN1dGVkIHRyYW5zYWN0aW9ucyAqLwpA QCAtNjIwOSw2ICs3MDcxLDkgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQl7CiAJCQkJCWxh dGVuY3kgPSBzcWxhdCA9IHN0ZGV2ID0gbGFnID0gMDsKIAkJCQl9CisJCQkJcmV0cmllcyA9IGN1 ci5yZXRyaWVzIC0gbGFzdC5yZXRyaWVzOworCQkJCXJldHJpZWQgPSBjdXIucmV0cmllZCAtIGxh c3QucmV0cmllZDsKKwkJCQllY250ID0gZ2V0RWNudCgmY3VyKSAtIGdldEVjbnQoJmxhc3QpOwog CiAJCQkJaWYgKHByb2dyZXNzX3RpbWVzdGFtcCkKIAkJCQl7CkBAIC02MjQxLDYgKzcxMDYsMTIg QEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJCQkJICAicHJvZ3Jlc3M6ICVzLCAlLjFmIHRw cywgbGF0ICUuM2YgbXMgc3RkZGV2ICUuM2YiLAogCQkJCQkJCQkgIHRidWYsIHRwcywgbGF0ZW5j eSwgc3RkZXYpOwogCisJCQkJaWYgKGVjbnQgPiAwKQorCQkJCXsKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJnByb2dyZXNzX2J1ZiwKKwkJCQkJCQkJCSAgIiwgIiBJTlQ2NF9GT1JNQVQgIiBmYWls ZWQiLCBlY250KTsKKwkJCQl9CisKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQkJewogCQkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJvZ3Jlc3NfYnVmLCAiLCBsYWcgJS4zZiBtcyIsIGxhZyk7 CkBAIC02MjQ5LDYgKzcxMjAsMTcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJCQkJCQkg ICIsICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCIsCiAJCQkJCQkJCQkJICBjdXIuc2tpcHBlZCAt IGxhc3Quc2tpcHBlZCk7CiAJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJdCBjYW4gYmUgbm9uLXpl cm8gb25seSBpZiBtYXhfdHJpZXMgaXMgZ3JlYXRlciB0aGFuIG9uZSBvcgorCQkJCSAqIGxhdGVu Y3lfbGltaXQgaXMgdXNlZC4KKwkJCQkgKi8KKwkJCQlpZiAocmV0cmllZCA+IDApCisJCQkJewor CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJvZ3Jlc3NfYnVmLAorCQkJCQkJCQkJICAiLCAiIElO VDY0X0ZPUk1BVCAiIHJldHJpZWQsICIgSU5UNjRfRk9STUFUICIgcmV0cmllcyIsCisJCQkJCQkJ CQkgIHJldHJpZWQsIHJldHJpZXMpOworCQkJCX0KIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIo JnByb2dyZXNzX2J1ZiwgJ1xuJyk7CiAKIAkJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVzIiwgcHJv Z3Jlc3NfYnVmLmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVu Y2hfd2l0aF9zZXJ2ZXIucGwgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3Nl cnZlci5wbAppbmRleCAyZmMwMjFkLi4yMTE0MzI5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVu Y2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8w MDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbApAQCAtNSw5ICs1LDIwIEBAIHVzZSBQb3N0Z3Jlc05v ZGU7CiB1c2UgVGVzdExpYjsKIHVzZSBUZXN0OjpNb3JlOwogCit1c2UgY29uc3RhbnQKK3sKKwlT UUxfRVJST1IgICAgICAgICAgID0+IDAsCisJTUVUQV9DT01NQU5EX0VSUk9SICA9PiAxLAorCVNZ TlRBWF9FUlJPUiAgICAgICAgPT4gMiwKK307CisKICMgc3RhcnQgYSBwZ2JlbmNoIHNwZWNpZmlj IHNlcnZlcgogbXkgJG5vZGUgPSBnZXRfbmV3X25vZGUoJ21haW4nKTsKLSRub2RlLT5pbml0Owor CisjIFNldCB0byB1bnRyYW5zbGF0ZWQgbWVzc2FnZXMsIHRvIGJlIGFibGUgdG8gY29tcGFyZSBw cm9ncmFtIG91dHB1dCB3aXRoCisjIGV4cGVjdGVkIHN0cmluZ3MuCiskbm9kZS0+aW5pdChleHRy YSA9PiBbICctLWxvY2FsZScsICdDJyBdKTsKKwogJG5vZGUtPnN0YXJ0OwogCiAjIGludm9rZSBw Z2JlbmNoCkBAIC0xMzYsNyArMTQ3LDggQEAgcGdiZW5jaCgKIAkJcXJ7YnVpbHRpbjogVFBDLUJ9 LAogCQlxcntjbGllbnRzOiAyXGJ9LAogCQlxcntwcm9jZXNzZWQ6IDEwLzEwfSwKLQkJcXJ7bW9k ZTogc2ltcGxlfQorCQlxcnttb2RlOiBzaW1wbGV9LAorCQlxcnttYXhpbXVtIG51bWJlciBvZiB0 cmllczogMX0KIAldLAogCVtxcnteJH1dLAogCSdwZ2JlbmNoIHRwY2ItbGlrZScpOwpAQCAtNTMw LDExICs1NDIsMTIgQEAgcGdiZW5jaCgKICMgdHJpZ2dlciBtYW55IGV4cHJlc3Npb24gZXJyb3Jz CiBteSBAZXJyb3JzID0gKAogCi0JIyBbIHRlc3QgbmFtZSwgZXhwZWN0ZWQgc3RhdHVzLCBleHBl Y3RlZCBzdGRlcnIsIHNjcmlwdCBdCisJIyBbIHRlc3QgbmFtZSwgZXhwZWN0ZWQgc3RhdHVzLCBl cnJvciB0eXBlLCBleHBlY3RlZCBzdGRlcnIsIHNjcmlwdCBdCiAJIyBTUUwKIAlbCiAJCSdzcWwg c3ludGF4IGVycm9yJywKIAkJMCwKKwkJU1FMX0VSUk9SLAogCQlbCiAJCQlxcntFUlJPUjogIHN5 bnRheCBlcnJvcn0sCiAJCQlxcntwcmVwYXJlZCBzdGF0ZW1lbnQgLiogZG9lcyBub3QgZXhpc3R9 CkBAIC01NDQsMjggKzU1NywzNiBAQCBteSBAZXJyb3JzID0gKAogfQogCV0sCiAJWwotCQknc3Fs IHRvbyBtYW55IGFyZ3MnLCAxLCBbcXJ7c3RhdGVtZW50IGhhcyB0b28gbWFueSBhcmd1bWVudHMu KlxiOVxifV0sCisJCSdzcWwgdG9vIG1hbnkgYXJncycsIDEsIFNZTlRBWF9FUlJPUiwKKwkJW3Fy e3N0YXRlbWVudCBoYXMgdG9vIG1hbnkgYXJndW1lbnRzLipcYjlcYn1dLAogCQlxey0tIE1BWF9B UkdTPTEwIGZvciBwcmVwYXJlZAogXHNldCBpIDAKIFNFTEVDVCBMRUFTVCg6aSwgOmksIDppLCA6 aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmkpOwogfQogCV0sCisJWyAgICdzcWwgZGl2aXNp b24gYnkgemVybycsIDAsIFNRTF9FUlJPUiwgW3Fye0VSUk9SOiAgZGl2aXNpb24gYnkgemVyb31d LAorCQlxey0tIFNRTCBkaXZpc2lvbiBieSB6ZXJvCitTRUxFQ1QgMSAvIDA7Cit9CisJXSwKIAog CSMgU0hFTEwKIAlbCi0JCSdzaGVsbCBiYWQgY29tbWFuZCcsICAgICAgICAgICAgICAgICAgICAw LAorCQknc2hlbGwgYmFkIGNvbW1hbmQnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntc KHNoZWxsXCkgLiogbWV0YS1jb21tYW5kIGZhaWxlZH1dLCBxe1xzaGVsbCBuby1zdWNoLWNvbW1h bmR9CiAJXSwKIAlbCi0JCSdzaGVsbCB1bmRlZmluZWQgdmFyaWFibGUnLCAwLAorCQknc2hlbGwg dW5kZWZpbmVkIHZhcmlhYmxlJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7dW5kZWZp bmVkIHZhcmlhYmxlICI6bm9zdWNodmFyaWFibGUifV0sCiAJCXF7LS0gdW5kZWZpbmVkIHZhcmlh YmxlIGluIHNoZWxsCiBcc2hlbGwgZWNobyA6OmZvbyA6bm9zdWNodmFyaWFibGUKIH0KIAldLAot CVsgJ3NoZWxsIG1pc3NpbmcgY29tbWFuZCcsIDEsIFtxcnttaXNzaW5nIGNvbW1hbmQgfV0sIHF7 XHNoZWxsfSBdLAorCVsgICAnc2hlbGwgbWlzc2luZyBjb21tYW5kJywgMSwgU1lOVEFYX0VSUk9S LCBbcXJ7bWlzc2luZyBjb21tYW5kIH1dLAorCQlxe1xzaGVsbH0gXSwKIAlbCi0JCSdzaGVsbCB0 b28gbWFueSBhcmdzJywgMSwgW3Fye3RvbyBtYW55IGFyZ3VtZW50cyBpbiBjb21tYW5kICJzaGVs bCJ9XSwKKwkJJ3NoZWxsIHRvbyBtYW55IGFyZ3MnLCAxLCBTWU5UQVhfRVJST1IsCisJCVtxcnt0 b28gbWFueSBhcmd1bWVudHMgaW4gY29tbWFuZCAic2hlbGwifV0sCiAJCXF7LS0gMjU3IGFyZ3Vt ZW50cyB0byBcc2hlbGwKIFxzaGVsbCBlY2hvIFwKICAwIDEgMiAzIDQgNSA2IDcgOCA5IEEgQiBD IEQgRSBGIFwKQEAgLTU4OSwxNjIgKzYxMCwyMzIgQEAgU0VMRUNUIExFQVNUKDppLCA6aSwgOmks IDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSk7CiAKIAkjIFNFVAogCVsKLQkJJ3NldCBz eW50YXggZXJyb3InLCAgICAgICAgICAgICAgICAgIDEsCisJCSdzZXQgc3ludGF4IGVycm9yJywg MSwgU1lOVEFYX0VSUk9SLAogCQlbcXJ7c3ludGF4IGVycm9yIGluIGNvbW1hbmQgInNldCJ9XSwg cXtcc2V0IGkgMSArfQogCV0sCiAJWwotCQknc2V0IG5vIHN1Y2ggZnVuY3Rpb24nLCAgICAgICAg IDEsCisJCSdzZXQgbm8gc3VjaCBmdW5jdGlvbicsIDEsIFNZTlRBWF9FUlJPUiwKIAkJW3Fye3Vu ZXhwZWN0ZWQgZnVuY3Rpb24gbmFtZX1dLCBxe1xzZXQgaSBub1N1Y2hGdW5jdGlvbigpfQogCV0s CiAJWwotCQknc2V0IGludmFsaWQgdmFyaWFibGUgbmFtZScsIDAsCisJCSdzZXQgaW52YWxpZCB2 YXJpYWJsZSBuYW1lJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7aW52YWxpZCB2YXJp YWJsZSBuYW1lfV0sIHF7XHNldCAuIDF9CiAJXSwKIAlbCi0JCSdzZXQgaW50IG92ZXJmbG93Jywg ICAgICAgICAgICAgICAgICAgMCwKKwkJJ3NldCBpbnQgb3ZlcmZsb3cnLCAwLCBNRVRBX0NPTU1B TkRfRVJST1IsCiAJCVtxcntkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAxMDB9XSwgcXtcc2V0 IGkgaW50KDFFMzIpfQogCV0sCi0JWyAnc2V0IGRpdmlzaW9uIGJ5IHplcm8nLCAwLCBbcXJ7ZGl2 aXNpb24gYnkgemVyb31dLCBxe1xzZXQgaSAxLzB9IF0sCiAJWwotCQknc2V0IGJpZ2ludCBvdXQg b2YgcmFuZ2UnLCAwLAorCQknc2V0IGRpdmlzaW9uIGJ5IHplcm8nLCAwLCBNRVRBX0NPTU1BTkRf RVJST1IsCisJCVtxcntkaXZpc2lvbiBieSB6ZXJvfV0sIHF7XHNldCBpIDEvMH0KKwldLAorCVsK KwkJJ3NldCBiaWdpbnQgb3V0IG9mIHJhbmdlJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlb cXJ7YmlnaW50IG91dCBvZiByYW5nZX1dLCBxe1xzZXQgaSA5MjIzMzcyMDM2ODU0Nzc1ODA4IC8g LTF9CiAJXSwKIAlbCiAJCSdzZXQgdW5kZWZpbmVkIHZhcmlhYmxlJywKIAkJMCwKKwkJTUVUQV9D T01NQU5EX0VSUk9SLAogCQlbcXJ7dW5kZWZpbmVkIHZhcmlhYmxlICJub3N1Y2h2YXJpYWJsZSJ9 XSwKIAkJcXtcc2V0IGkgOm5vc3VjaHZhcmlhYmxlfQogCV0sCi0JWyAnc2V0IHVuZXhwZWN0ZWQg Y2hhcicsIDEsIFtxcnt1bmV4cGVjdGVkIGNoYXJhY3RlciAuOy59XSwgcXtcc2V0IGkgO30gXSwK KwlbCisJCSdzZXQgdW5leHBlY3RlZCBjaGFyJywgMSwgU1lOVEFYX0VSUk9SLAorCQlbcXJ7dW5l eHBlY3RlZCBjaGFyYWN0ZXIgLjsufV0sIHF7XHNldCBpIDt9CisJXSwKIAlbCiAJCSdzZXQgdG9v IG1hbnkgYXJncycsCiAJCTAsCisJCU1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fye3RvbyBtYW55 IGZ1bmN0aW9uIGFyZ3VtZW50c31dLAogCQlxe1xzZXQgaSBsZWFzdCgwLDEsMiwzLDQsNSw2LDcs OCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2KX0KIAldLAogCVsKLQkJJ3NldCBlbXB0eSByYW5kb20g cmFuZ2UnLCAgICAgICAgICAwLAorCQknc2V0IGVtcHR5IHJhbmRvbSByYW5nZScsIDAsIE1FVEFf Q09NTUFORF9FUlJPUiwKIAkJW3Fye2VtcHR5IHJhbmdlIGdpdmVuIHRvIHJhbmRvbX1dLCBxe1xz ZXQgaSByYW5kb20oNSwzKX0KIAldLAogCVsKIAkJJ3NldCByYW5kb20gcmFuZ2UgdG9vIGxhcmdl JywKIAkJMCwKKwkJTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7cmFuZG9tIHJhbmdlIGlzIHRv byBsYXJnZX1dLAogCQlxe1xzZXQgaSByYW5kb20oLTkyMjMzNzIwMzY4NTQ3NzU4MDgsIDkyMjMz NzIwMzY4NTQ3NzU4MDcpfQogCV0sCiAJWwogCQknc2V0IGdhdXNzaWFuIHBhcmFtIHRvbyBzbWFs bCcsCiAJCTAsCisJCU1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fye2dhdXNzaWFuIHBhcmFtLiog YXQgbGVhc3QgMn1dLAogCQlxe1xzZXQgaSByYW5kb21fZ2F1c3NpYW4oMCwgMTAsIDEuMCl9CiAJ XSwKIAlbCiAJCSdzZXQgZXhwb25lbnRpYWwgcGFyYW0gZ3JlYXRlciAwJywKIAkJMCwKKwkJTUVU QV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7ZXhwb25lbnRpYWwgcGFyYW1ldGVyIG11c3QgYmUgZ3Jl YXRlciB9XSwKIAkJcXtcc2V0IGkgcmFuZG9tX2V4cG9uZW50aWFsKDAsIDEwLCAwLjApfQogCV0s CiAJWwogCQknc2V0IHppcGZpYW4gcGFyYW0gdG8gMScsCiAJCTAsCisJCU1FVEFfQ09NTUFORF9F UlJPUiwKIAkJW3Fye3ppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgXCgwLCAxXCkg VSBcKDEsIFxkK1xdfV0sCiAJCXF7XHNldCBpIHJhbmRvbV96aXBmaWFuKDAsIDEwLCAxKX0KIAld LAogCVsKIAkJJ3NldCB6aXBmaWFuIHBhcmFtIHRvbyBsYXJnZScsCiAJCTAsCisJCU1FVEFfQ09N TUFORF9FUlJPUiwKIAkJW3Fye3ppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgXCgw LCAxXCkgVSBcKDEsIFxkK1xdfV0sCiAJCXF7XHNldCBpIHJhbmRvbV96aXBmaWFuKDAsIDEwLCAx MDAwMDAwKX0KIAldLAogCVsKLQkJJ3NldCBub24gbnVtZXJpYyB2YWx1ZScsICAgICAgICAgICAg ICAgICAgICAgMCwKKwkJJ3NldCBub24gbnVtZXJpYyB2YWx1ZScsIDAsIE1FVEFfQ09NTUFORF9F UlJPUiwKIAkJW3Fye21hbGZvcm1lZCB2YXJpYWJsZSAiZm9vIiB2YWx1ZTogImJsYSJ9XSwgcXtc c2V0IGkgOmZvbyArIDF9CiAJXSwKLQlbICdzZXQgbm8gZXhwcmVzc2lvbicsICAgIDEsIFtxcntz eW50YXggZXJyb3J9XSwgICAgICBxe1xzZXQgaX0gXSwKLQlbICdzZXQgbWlzc2luZyBhcmd1bWVu dCcsIDEsIFtxcnttaXNzaW5nIGFyZ3VtZW50fWldLCBxe1xzZXR9IF0sCisJWyAnc2V0IG5vIGV4 cHJlc3Npb24nLCAxLCBTWU5UQVhfRVJST1IsIFtxcntzeW50YXggZXJyb3J9XSwgcXtcc2V0IGl9 IF0sCiAJWwotCQknc2V0IG5vdCBhIGJvb2wnLCAgICAgICAgICAgICAgICAgICAgICAwLAorCQkn c2V0IG1pc3NpbmcgYXJndW1lbnQnLCAxLCBTWU5UQVhfRVJST1IsCisJCVtxcnttaXNzaW5nIGFy Z3VtZW50fWldLCBxe1xzZXR9CisJXSwKKwlbCisJCSdzZXQgbm90IGEgYm9vbCcsIDAsIE1FVEFf Q09NTUFORF9FUlJPUiwKIAkJW3Fye2Nhbm5vdCBjb2VyY2UgZG91YmxlIHRvIGJvb2xlYW59XSwg cXtcc2V0IGIgTk9UIDAuMH0KIAldLAogCVsKLQkJJ3NldCBub3QgYW4gaW50JywgICAgICAgICAg ICAgICAgICAgMCwKKwkJJ3NldCBub3QgYW4gaW50JywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAog CQlbcXJ7Y2Fubm90IGNvZXJjZSBib29sZWFuIHRvIGludH1dLCBxe1xzZXQgaSBUUlVFICsgMn0K IAldLAogCVsKLQkJJ3NldCBub3QgYSBkb3VibGUnLCAgICAgICAgICAgICAgICAgICAgMCwKKwkJ J3NldCBub3QgYSBkb3VibGUnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntjYW5ub3Qg Y29lcmNlIGJvb2xlYW4gdG8gZG91YmxlfV0sIHF7XHNldCBkIGxuKFRSVUUpfQogCV0sCiAJWwog CQknc2V0IGNhc2UgZXJyb3InLAogCQkxLAorCQlTWU5UQVhfRVJST1IsCiAJCVtxcntzeW50YXgg ZXJyb3IgaW4gY29tbWFuZCAic2V0In1dLAogCQlxe1xzZXQgaSBDQVNFIFRSVUUgVEhFTiAxIEVM U0UgMCBFTkR9CiAJXSwKIAlbCi0JCSdzZXQgcmFuZG9tIGVycm9yJywgICAgICAgICAgICAgICAg IDAsCisJCSdzZXQgcmFuZG9tIGVycm9yJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7 Y2Fubm90IGNvZXJjZSBib29sZWFuIHRvIGludH1dLCBxe1xzZXQgYiByYW5kb20oRkFMU0UsIFRS VUUpfQogCV0sCiAJWwotCQknc2V0IG51bWJlciBvZiBhcmdzIG1pc21hdGNoJywgICAgICAgIDEs CisJCSdzZXQgbnVtYmVyIG9mIGFyZ3MgbWlzbWF0Y2gnLCAxLCBTWU5UQVhfRVJST1IsCiAJCVtx cnt1bmV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVudHN9XSwgcXtcc2V0IGQgbG4oMS4wLCAyLjAp KX0KIAldLAogCVsKLQkJJ3NldCBhdCBsZWFzdCBvbmUgYXJnJywgICAgICAgICAgICAgICAxLAor CQknc2V0IGF0IGxlYXN0IG9uZSBhcmcnLCAxLCBTWU5UQVhfRVJST1IsCiAJCVtxcnthdCBsZWFz dCBvbmUgYXJndW1lbnQgZXhwZWN0ZWR9XSwgcXtcc2V0IGkgZ3JlYXRlc3QoKSl9CiAJXSwKIAog CSMgU0VUU0hFTEwKIAlbCi0JCSdzZXRzaGVsbCBub3QgYW4gaW50JywgICAgICAgICAgICAgICAg MCwKKwkJJ3NldHNoZWxsIG5vdCBhbiBpbnQnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtx cntjb21tYW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXJ9XSwgcXtcc2V0c2hlbGwgaSBlY2hvIC1u IG9uZX0KIAldLAotCVsgJ3NldHNoZWxsIG1pc3NpbmcgYXJnJywgMSwgW3Fye21pc3NpbmcgYXJn dW1lbnQgfV0sIHF7XHNldHNoZWxsIHZhcn0gXSwKIAlbCi0JCSdzZXRzaGVsbCBubyBzdWNoIGNv bW1hbmQnLCAgIDAsCisJCSdzZXRzaGVsbCBtaXNzaW5nIGFyZycsIDEsIFNZTlRBWF9FUlJPUiwK KwkJW3Fye21pc3NpbmcgYXJndW1lbnQgfV0sIHF7XHNldHNoZWxsIHZhcn0KKwldLAorCVsKKwkJ J3NldHNoZWxsIG5vIHN1Y2ggY29tbWFuZCcsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fy e2NvdWxkIG5vdCByZWFkIHJlc3VsdCB9XSwgcXtcc2V0c2hlbGwgdmFyIG5vLXN1Y2gtY29tbWFu ZH0KIAldLAogCiAJIyBTTEVFUAogCVsKLQkJJ3NsZWVwIHVuZGVmaW5lZCB2YXJpYWJsZScsICAg ICAgMCwKKwkJJ3NsZWVwIHVuZGVmaW5lZCB2YXJpYWJsZScsIDAsIE1FVEFfQ09NTUFORF9FUlJP UiwKIAkJW3Fye3NsZWVwOiB1bmRlZmluZWQgdmFyaWFibGV9XSwgcXtcc2xlZXAgOm5vc3VjaHZh cmlhYmxlfQogCV0sCiAJWwotCQknc2xlZXAgdG9vIG1hbnkgYXJncycsICAgIDEsCisJCSdzbGVl cCB0b28gbWFueSBhcmdzJywgMSwgU1lOVEFYX0VSUk9SLAogCQlbcXJ7dG9vIG1hbnkgYXJndW1l bnRzfV0sIHF7XHNsZWVwIHRvbyBtYW55IGFyZ3N9CiAJXSwKIAlbCi0JCSdzbGVlcCBtaXNzaW5n IGFyZycsIDEsCisJCSdzbGVlcCBtaXNzaW5nIGFyZycsIDEsIFNZTlRBWF9FUlJPUiwKIAkJWyBx cnttaXNzaW5nIGFyZ3VtZW50fSwgcXJ7XFxzbGVlcH0gXSwgcXtcc2xlZXB9CiAJXSwKIAlbCi0J CSdzbGVlcCB1bmtub3duIHVuaXQnLCAgICAgICAgIDEsCisJCSdzbGVlcCB1bmtub3duIHVuaXQn LCAxLCBTWU5UQVhfRVJST1IsCiAJCVtxcnt1bnJlY29nbml6ZWQgdGltZSB1bml0fV0sIHF7XHNs ZWVwIDEgd2Vla30KIAldLAogCisJIyBDT05ESVRJT05BTCBCTE9DS1MKKwlbICAgJ2Vycm9yIGlu c2lkZSBhIGNvbmRpdGlvbmFsIGJsb2NrJywgMCwgU1FMX0VSUk9SLAorCQlbcXJ7RVJST1I6ICBk aXZpc2lvbiBieSB6ZXJvfV0sCisJCXF7LS0gZXJyb3IgaW5zaWRlIGEgY29uZGl0aW9uYWwgYmxv Y2sKK1xpZiB0cnVlCitTRUxFQ1QgMSAvIDA7CitcZW5kaWYKK30KKwldLAorCiAJIyBNSVNDCiAJ WwotCQknbWlzYyBpbnZhbGlkIGJhY2tzbGFzaCBjb21tYW5kJywgICAgICAgICAxLAorCQknbWlz YyBpbnZhbGlkIGJhY2tzbGFzaCBjb21tYW5kJywgMSwgU1lOVEFYX0VSUk9SLAogCQlbcXJ7aW52 YWxpZCBjb21tYW5kIC4qICJub3N1Y2hjb21tYW5kIn1dLCBxe1xub3N1Y2hjb21tYW5kfQogCV0s Ci0JWyAnbWlzYyBlbXB0eSBzY3JpcHQnLCAxLCBbcXJ7ZW1wdHkgY29tbWFuZCBsaXN0IGZvciBz Y3JpcHR9XSwgcXt9IF0sCiAJWwotCQknYmFkIGJvb2xlYW4nLCAgICAgICAgICAgICAgICAgICAg IDAsCisJCSdtaXNjIGVtcHR5IHNjcmlwdCcsIDEsIFNZTlRBWF9FUlJPUiwKKwkJW3Fye2VtcHR5 IGNvbW1hbmQgbGlzdCBmb3Igc2NyaXB0fV0sIHF7fQorCV0sCisJWworCQknYmFkIGJvb2xlYW4n LCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcnttYWxmb3JtZWQgdmFyaWFibGUuKnRydWVY WFh9XSwgcXtcc2V0IGIgOmJhZHRydWUgb3IgdHJ1ZX0KIAldLCk7CiAKIAogZm9yIG15ICRlIChA ZXJyb3JzKQogewotCW15ICgkbmFtZSwgJHN0YXR1cywgJHJlLCAkc2NyaXB0KSA9IEAkZTsKKwlt eSAoJG5hbWUsICRzdGF0dXMsICRlcnJvcl90eXBlLCAkcmUsICRzY3JpcHQpID0gQCRlOwogCW15 ICRuID0gJzAwMV9wZ2JlbmNoX2Vycm9yXycgLiAkbmFtZTsKIAkkbiA9fiBzLyAvXy9nOworCW15 ICR0ZXN0X25hbWUgPSAncGdiZW5jaCBzY3JpcHQgZXJyb3I6ICcgLiAkbmFtZTsKKwlteSAkc3Rk b3V0X3JlOworCisJaWYgKCRzdGF0dXMpCisJeworCQkjIG9ubHkgc3ludGF4IGVycm9ycyBnZXQg bm9uLXplcm8gZXhpdCBzdGF0dXMKKwkJIyBpbnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2 ZXIgb2NjdXIKKwkJZGllICR0ZXN0X25hbWUgLiAiOiB1bmV4cGVjdGVkIGVycm9yIHR5cGU6ICIg LiAkZXJyb3JfdHlwZSAuICJcbiIKKwkJaWYgKCRlcnJvcl90eXBlICE9IFNZTlRBWF9FUlJPUik7 CisKKwkJJHN0ZG91dF9yZSA9IFsgcXJ7XiR9IF07CisJfQorCWVsc2UKKwl7CisJCSRzdGRvdXRf cmUgPQorCQkJWyBxcntwcm9jZXNzZWQ6IDAvMX0sIHFye251bWJlciBvZiBlcnJvcnM6IDEgXCgx MDAuMDAwJVwpfSwKKwkJCSAgcXJ7XigoPyFudW1iZXIgb2YgcmV0cmllZCkoLnxcbikpKiR9IF07 CisKKwkJaWYgKCRlcnJvcl90eXBlID09IFNRTF9FUlJPUikKKwkJeworCQkJcHVzaCBAJHN0ZG91 dF9yZSwKKwkJCQlxcntudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBlcnJvcnM6IDAgXCgwLjAwMCVc KX0sCisJCQkJcXJ7bnVtYmVyIG9mIGRlYWRsb2NrIGVycm9yczogMCBcKDAuMDAwJVwpfSwKKwkJ CQlxcntudW1iZXIgb2Ygb3RoZXIgU1FMIGVycm9yczogMSBcKDEwMC4wMDAlXCl9OworCQl9CisJ CWVsc2lmICgkZXJyb3JfdHlwZSA9PSBNRVRBX0NPTU1BTkRfRVJST1IpCisJCXsKKwkJCXB1c2gg QCRzdGRvdXRfcmUsCisJCQkJcXJ7bnVtYmVyIG9mIGVycm9ycyBpbiBtZXRhLWNvbW1hbmRzOiAx IFwoMTAwLjAwMCVcKX07CisJCX0KKwkJZWxzZQorCQl7CisJCQkjIGludGVybmFsIGVycm9yIHdo aWNoIHNob3VsZCBuZXZlciBvY2N1cgorCQkJZGllICR0ZXN0X25hbWUgLiAiOiB1bmV4cGVjdGVk IGVycm9yIHR5cGU6ICIgLiAkZXJyb3JfdHlwZSAuICJcbiI7CisJCX0KKwl9CisKIAlwZ2JlbmNo KAotCQknLW4gLXQgMSAtRGZvbz1ibGEgLURudWxsPW51bGwgLUR0cnVlPXRydWUgLURvbmU9MSAt RHplcm89MC4wIC1EYmFkdHJ1ZT10cnVlWFhYIC1NIHByZXBhcmVkJywKKwkJJy1uIC10IDEgLURm b289YmxhIC1EbnVsbD1udWxsIC1EdHJ1ZT10cnVlIC1Eb25lPTEgLUR6ZXJvPTAuMCAtRGJhZHRy dWU9dHJ1ZVhYWCAtTSBwcmVwYXJlZCAtLWRlYnVnLWZhaWxzIC0tZXJyb3JzLWRldGFpbGVkJywK IAkJJHN0YXR1cywKLQkJWyAkc3RhdHVzID8gcXJ7XiR9IDogcXJ7cHJvY2Vzc2VkOiAwLzF9IF0s CisJCSRzdGRvdXRfcmUsCiAJCSRyZSwKLQkJJ3BnYmVuY2ggc2NyaXB0IGVycm9yOiAnIC4gJG5h bWUsCisJCSR0ZXN0X25hbWUsCiAJCXsgJG4gPT4gJHNjcmlwdCB9KTsKIH0KIApAQCAtODQ4LDYg KzkzOSwyMDkgQEAgcGdiZW5jaCgKIGNoZWNrX3BnYmVuY2hfbG9ncygiJGJkaXIvMDAxX3BnYmVu Y2hfbG9nXzMiLCAxLCAxMCwgMTAsCiAJcXJ7XlxkIFxkezEsMn0gXGQrIFxkIFxkKyBcZCskfSk7 CiAKKyMgVGVzdCB0aGUgY29uY3VycmVudCB1cGRhdGUgaW4gdGhlIHRhYmxlIHJvdyBhbmQgZGVh ZGxvY2tzLgorCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0NSRUFURSBVTkxPR0dF RCBUQUJMRSBmaXJzdF9jbGllbnRfdGFibGUgKHZhbHVlIGludGVnZXIpOyAnCisgIC4gJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSB4eSAoeCBpbnRlZ2VyLCB5IGludGVnZXIpOyAnCisgIC4gJ0lOU0VS VCBJTlRPIHh5IFZBTFVFUyAoMSwgMik7Jyk7CisKKyMgU2VyaWFsaXphdGlvbiBmYWlsdXJlIGFu ZCByZXRyeQorCitsb2NhbCAkRU5We1BHT1BUSU9OU30gPSAiLWMgZGVmYXVsdF90cmFuc2FjdGlv bl9pc29sYXRpb249cmVwZWF0YWJsZVxcIHJlYWQiOworCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBh IHNlcmlhbGl6YXRpb24gZmFpbHVyZSBhbmQgdGhlIHNhbWUgcmFuZG9tIHZhbHVlIG9mIHRoZQor IyBkZWx0YSB2YXJpYWJsZSBpbiB0aGUgbmV4dCB0cnkKK215ICRlcnJfcGF0dGVybiA9CisJIihj bGllbnQgKDB8MSkgc2VuZGluZyBVUERBVEUgeHkgU0VUIHkgPSB5IFxcKyAtP1xcZCtcXGIpLioi CisgIC4gImNsaWVudCBcXGcyIGdvdCBhIGZhaWx1cmUgaW4gY29tbWFuZCAzIFxcKFNRTFxcKSBv ZiBzY3JpcHQgMDsgIgorICAuICJFUlJPUjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1 ZSB0byBjb25jdXJyZW50IHVwZGF0ZVxcYi4qIgorICAuICJcXGcxIjsKKworcGdiZW5jaCgKKwki LW4gLWMgMiAtdCAxIC1kIC0tbWF4LXRyaWVzIDIiLAorCTAsCisJWyBxcntwcm9jZXNzZWQ6IDIv MlxifSwgcXJ7XigoPyFudW1iZXIgb2YgZXJyb3JzKSgufFxuKSkqJH0sCisJICBxcntudW1iZXIg b2YgcmV0cmllZDogMVxifSwgcXJ7bnVtYmVyIG9mIHJldHJpZXM6IDFcYn0gXSwKKwlbIHFyLyRl cnJfcGF0dGVybi9zIF0sCisJJ2NvbmN1cnJlbnQgdXBkYXRlIHdpdGggcmV0cnlpbmcnLAorCXsK KwkJJzAwMV9wZ2JlbmNoX3NlcmlhbGl6YXRpb24nID0+IHF7CistLSBXaGF0J3MgaGFwcGVuaW5n OgorLS0gVGhlIGZpcnN0IGNsaWVudCBzdGFydHMgdGhlIHRyYW5zYWN0aW9uIHdpdGggdGhlIGlz b2xhdGlvbiBsZXZlbCBSZXBlYXRhYmxlCistLSBSZWFkOgorLS0KKy0tIEJFR0lOOworLS0gVVBE QVRFIHh5IFNFVCB5ID0gLi4uIFdIRVJFIHggPSAxOworLS0KKy0tIFRoZSBzZWNvbmQgY2xpZW50 IHN0YXJ0cyBhIHNpbWlsYXIgdHJhbnNhY3Rpb24gd2l0aCB0aGUgc2FtZSBpc29sYXRpb24gbGV2 ZWw6CistLQorLS0gQkVHSU47CistLSBVUERBVEUgeHkgU0VUIHkgPSAuLi4gV0hFUkUgeCA9IDE7 CistLSA8d2FpdGluZyBmb3IgdGhlIGZpcnN0IGNsaWVudD4KKy0tCistLSBUaGUgZmlyc3QgY2xp ZW50IGNvbW1pdHMgaXRzIHRyYW5zYWN0aW9uLCBhbmQgdGhlIHNlY29uZCBjbGllbnQgZ2V0cyBh CistLSBzZXJpYWxpemF0aW9uIGZhaWx1cmUuCisKK1xzZXQgZGVsdGEgcmFuZG9tKC01MDAwLCA1 MDAwKQorCistLSBUaGUgc2Vjb25kIGNsaWVudCB3aWxsIHN0b3AgaGVyZQorU0VMRUNUIHBnX2Fk dmlzb3J5X2xvY2soMCk7CisKKy0tIFN0YXJ0IHRyYW5zYWN0aW9uIHdpdGggY29uY3VycmVudCB1 cGRhdGUKK0JFR0lOOworVVBEQVRFIHh5IFNFVCB5ID0geSArIDpkZWx0YSBXSEVSRSB4ID0gMSBB TkQgcGdfYWR2aXNvcnlfbG9jaygxKSBJUyBOT1QgTlVMTDsKKworLS0gV2FpdCBmb3IgdGhlIHNl Y29uZCBjbGllbnQKK0RPICQkCitERUNMQVJFCisgIGV4aXN0cyBib29sZWFuOworICB3YWl0ZXJz IGludGVnZXI7CitCRUdJTgorICAtLSBUaGUgc2Vjb25kIGNsaWVudCBhbHdheXMgY29tZXMgaW4g c2Vjb25kLCBhbmQgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZQorICAtLSB0YWJsZSBmaXJzdF9j bGllbnRfdGFibGUgcmVmbGVjdCB0aGlzLiBIZXJlIHRoZSBmaXJzdCBjbGllbnQgaW5zZXJ0cyBh IHJvdywKKyAgLS0gc28gdGhlIHNlY29uZCBjbGllbnQgd2lsbCBzZWUgYSBub24tZW1wdHkgdGFi bGUgaW4gdGhlIHNlY29uZCB0cnkgdG8gcnVuIGEKKyAgLS0gcHJldmlvdXNseSBmYWlsZWQgdHJh bnNhY3Rpb24uCisgIFNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00gZmlyc3RfY2xpZW50X3Rh YmxlKSBJTlRPIFNUUklDVCBleGlzdHM7CisgIElGIE5PVCBleGlzdHMgVEhFTgorCS0tIExldCB0 aGUgc2Vjb25kIGNsaWVudCBiZWdpbgorCVBFUkZPUk0gcGdfYWR2aXNvcnlfdW5sb2NrKDApOwor CS0tIEFuZCB3YWl0IHVudGlsIHRoZSBzZWNvbmQgY2xpZW50IHRyaWVzIHRvIGdldCB0aGUgc2Ft ZSBsb2NrCisJTE9PUAorCSAgU0VMRUNUIENPVU5UKCopIElOVE8gU1RSSUNUIHdhaXRlcnMgRlJP TSBwZ19sb2NrcyBXSEVSRQorCSAgbG9ja3R5cGUgPSAnYWR2aXNvcnknIEFORCBvYmpzdWJpZCA9 IDEgQU5ECisJICAoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gMTo6 YmlnaW50KSBBTkQgTk9UIGdyYW50ZWQ7CisJICBJRiB3YWl0ZXJzID0gMSBUSEVOCisJCUlOU0VS VCBJTlRPIGZpcnN0X2NsaWVudF90YWJsZSBWQUxVRVMgKDEpOworCisJCS0tIEV4aXQgbG9vcAor CQlFWElUOworCSAgRU5EIElGOworCUVORCBMT09QOworICBFTkQgSUY7CitFTkQkJDsKKworQ09N TUlUOworU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTsKK30KKwl9KTsKKworIyBDbGVh biB1cAorCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdERUxFVEUgRlJPTSBmaXJzdF9j bGllbnRfdGFibGU7Jyk7CisKK2xvY2FsICRFTlZ7UEdPUFRJT05TfSA9ICItYyBkZWZhdWx0X3Ry YW5zYWN0aW9uX2lzb2xhdGlvbj1yZWFkXFwgY29tbWl0dGVkIjsKKworIyBEZWFkbG9jayBmYWls dXJlIGFuZCByZXRyeQorCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIGRlYWRsb2NrIGZhaWx1cmUK KyRlcnJfcGF0dGVybiA9CisJImNsaWVudCAoMHwxKSBnb3QgYSBmYWlsdXJlIGluIGNvbW1hbmQg KDN8NSkgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAiCisgIC4gIkVSUk9SOiAgZGVhZGxvY2sgZGV0 ZWN0ZWRcXGIiOworCitwZ2JlbmNoKAorCSItbiAtYyAyIC10IDEgLS1kZWJ1Zy1mYWlscyAtLW1h eC10cmllcyAyIiwKKwkwLAorCVsgcXJ7cHJvY2Vzc2VkOiAyLzJcYn0sIHFye14oKD8hbnVtYmVy IG9mIGVycm9ycykoLnxcbikpKiR9LAorCSAgcXJ7bnVtYmVyIG9mIHJldHJpZWQ6IDFcYn0sIHFy e251bWJlciBvZiByZXRyaWVzOiAxXGJ9IF0sCisJWyBxcnskZXJyX3BhdHRlcm59IF0sCisJJ2Rl YWRsb2NrIHdpdGggcmV0cnlpbmcnLAorCXsKKwkJJzAwMV9wZ2JlbmNoX2RlYWRsb2NrJyA9PiBx eworLS0gV2hhdCdzIGhhcHBlbmluZzoKKy0tIFRoZSBmaXJzdCBjbGllbnQgZ2V0cyB0aGUgbG9j ayAyLgorLS0gVGhlIHNlY29uZCBjbGllbnQgZ2V0cyB0aGUgbG9jayAzIGFuZCB0cmllcyB0byBn ZXQgdGhlIGxvY2sgMi4KKy0tIFRoZSBmaXJzdCBjbGllbnQgdHJpZXMgdG8gZ2V0IHRoZSBsb2Nr IDMgYW5kIG9uZSBvZiB0aGVtIGdldHMgYSBkZWFkbG9jaworLS0gZmFsdXJlLgorLS0KKy0tIEEg Y2xpZW50IHdobyBoYXMgcmVjZWl2ZWQgYSBkZWFkbG9jayBmYWlsdXJlIGlzIGNhbGxlZCBhIChm dXR1cmUpIGZhaWxlZAorLS0gY2xpZW50IGFsdGhvdWdoIGl0IHdpbGwgcmV0cnkgdGhlIGZhaWxl ZCB0cmFuc2FjdGlvbi4KKy0tCistLSBBbHNvIGFueSBzdWNjZXNzZnVsbCBjbGllbnQgbXVzdCBo b2xkIGEgbG9jayBhdCB0aGUgdHJhbnNhY3Rpb24gc3RhcnQgc28gdGhlCistLSBmYWlsZWQgY2xp ZW50IHdpbGwgd2FpdCB1bnRpbCB0aGUgc3VjY2Vzc2Z1bGwgb25lIHJlbGVhc2VzIGFsbCBvZiBp dHMgbG9ja3MKKy0tIGF0IHRoZSB0cmFuc2FjdGlvbiBlbmQgKHdlIGRvIG5vdCB3YW50IGFueSBm YWlsdXJlcyBhZ2FpbikuCisKKy0tIFNpbmNlIHRoZSBjbGllbnQgaW4gdGhlIGZhaWxlZCB0cmFu c2FjdGlvbiBoYXMgbm90IHJlbGVhc2VkIHRoZSBibG9ja2luZworLS0gbG9ja3MsIGxldCdzIGRv IHRoaXMgaGVyZS4KK1NFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7CisKKy0tIFRoZSBz ZWNvbmQgYW5kIGZ1dHVyZSBmYWlsZWQgY2xpZW50cyB3aWxsIHN0b3AgaGVyZQorU0VMRUNUIHBn X2Fkdmlzb3J5X2xvY2soMCk7CitTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygxKTsKKworLS0gVGhl IHNlY29uZCBhbmQgZnV0dXJlIGZhaWxlZCBjbGllbnRzIGFsd2F5cyBjb21lIGFmdGVyIHRoZSBm aXJzdCBhbmQgdGhlCistLSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUgZmlyc3RfY2xpZW50 X3RhYmxlIHJlZmxlY3QgdGhpcy4gSGVyZSB0aGUgZmlyc3QKKy0tIGNsaWVudCBpbnNlcnRzIGEg cm93LCBzbyB0aGUgc2Vjb25kIGFuZCBmdXR1cmUgZmFpbGVkIGNsaWVudHMgd2lsbCBzZWUgYQor LS0gbm9uLWVtcHR5IHRhYmxlLgorRE8gJCQKK0RFQ0xBUkUKKyAgZXhpc3RzIGJvb2xlYW47CitC RUdJTgorICBTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgKiBGUk9NIGZpcnN0X2NsaWVudF90YWJsZSkg SU5UTyBTVFJJQ1QgZXhpc3RzOworICBJRiBleGlzdHMgVEhFTgorCS0tIFdlIGFyZSB0aGUgc2Vj b25kIG9yIHRoZSBmYWlsZWQgY2xpZW50CisKKwktLSBUaGUgZmlyc3QgY2xpZW50IHdpbGwgdGFr ZSBjYXJlIGJ5IGl0c2VsZiBvZiB0aGlzIGxvY2sgKHNlZSBiZWxvdykKKwlQRVJGT1JNIHBnX2Fk dmlzb3J5X3VubG9jaygwKTsKKworCVBFUkZPUk0gcGdfYWR2aXNvcnlfbG9jaygzKTsKKworCS0t IFRoZSBzZWNvbmQgY2xpZW50IGNhbiBnZXQgYSBkZWFkbG9jayBoZXJlCisJUEVSRk9STSBwZ19h ZHZpc29yeV9sb2NrKDIpOworICBFTFNFCisJLS0gV2UgYXJlIHRoZSBmaXJzdCBjbGllbnQKKwor CS0tIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIHVzZWQgaW4gYSBuZXcgdHJhbnNhY3Rpb24gYWZ0 ZXIgYSBmYWlsdXJlCisJSU5TRVJUIElOVE8gZmlyc3RfY2xpZW50X3RhYmxlIFZBTFVFUyAoMSk7 CisKKwlQRVJGT1JNIHBnX2Fkdmlzb3J5X2xvY2soMik7CisgIEVORCBJRjsKK0VORCQkOworCitE TyAkJAorREVDTEFSRQorICBudW1fcm93cyBpbnRlZ2VyOworICB3YWl0ZXJzIGludGVnZXI7CitC RUdJTgorICAtLSBDaGVjayBpZiB3ZSBhcmUgdGhlIGZpcnN0IGNsaWVudAorICBTRUxFQ1QgQ09V TlQoKikgRlJPTSBmaXJzdF9jbGllbnRfdGFibGUgSU5UTyBTVFJJQ1QgbnVtX3Jvd3M7CisgIElG IG51bV9yb3dzID0gMSBUSEVOCisJLS0gVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgdXNlZCBpbiBh IG5ldyB0cmFuc2FjdGlvbiBhZnRlciBhIGZhaWx1cmUKKwlJTlNFUlQgSU5UTyBmaXJzdF9jbGll bnRfdGFibGUgVkFMVUVTICgyKTsKKworCS0tIExldCB0aGUgc2Vjb25kIGNsaWVudCBiZWdpbgor CVBFUkZPUk0gcGdfYWR2aXNvcnlfdW5sb2NrKDApOworCVBFUkZPUk0gcGdfYWR2aXNvcnlfdW5s b2NrKDEpOworCisJLS0gTWFrZSBzdXJlIHRoZSBzZWNvbmQgY2xpZW50IGlzIHJlYWR5IGZvciBk ZWFkbG9jaworCUxPT1AKKwkgIFNFTEVDVCBDT1VOVCgqKSBJTlRPIFNUUklDVCB3YWl0ZXJzIEZS T00gcGdfbG9ja3MgV0hFUkUKKwkgIGxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBBTkQKKwkgIG9ianN1 YmlkID0gMSBBTkQKKwkgICgoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQg PSAyOjpiaWdpbnQpIEFORAorCSAgTk9UIGdyYW50ZWQ7CisKKwkgIElGIHdhaXRlcnMgPSAxIFRI RU4KKwkgICAgLS0gRXhpdCBsb29wCisJCUVYSVQ7CisJICBFTkQgSUY7CisJRU5EIExPT1A7CisK KwlQRVJGT1JNIHBnX2Fkdmlzb3J5X2xvY2soMCk7CisgICAgLS0gQW5kIHRoZSBzZWNvbmQgY2xp ZW50IHRvb2sgY2FyZSBieSBpdHNlbGYgb2YgdGhlIGxvY2sgMQorICBFTkQgSUY7CitFTkQkJDsK KworLS0gVGhlIGZpcnN0IGNsaWVudCBjYW4gZ2V0IGEgZGVhZGxvY2sgaGVyZQorU0VMRUNUIHBn X2Fkdmlzb3J5X2xvY2soMyk7CisKK1NFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7Cit9 CisJfSk7CisKKyMgQ2xlYW4gdXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RFTEVU RSBGUk9NIGZpcnN0X2NsaWVudF90YWJsZTsnKTsKKwogIyBkb25lCiAkbm9kZS0+c3RvcDsKIGRv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hf bm9fc2VydmVyLnBsIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBs CmluZGV4IGMxYzJjMWUuLjUwNjI2YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAw Ml9wZ2JlbmNoX25vX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdiZW5j aF9ub19zZXJ2ZXIucGwKQEAgLTE1Nyw2ICsxNTcsMTEgQEAgbXkgQG9wdGlvbnMgPSAoCiAJCQlx cntlcnJvciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBzZWVkIGZyb20gLS1yYW5kb20tc2VlZCBvcHRp b259CiAJCV0KIAldLAorCVsKKwkJJ2JhZCBtYXhpbXVtIG51bWJlciBvZiB0cmllcycsCisJCSct LW1heC10cmllcyAtMTAnLAorCQlbIHFye2ludmFsaWQgbnVtYmVyIG9mIG1heGltdW0gdHJpZXM6 ICItMTAifSBdCisJXSwKIAogCSMgbG9naW5nIHN1Yi1vcHRpb25zCiAJWwpkaWZmIC0tZ2l0IGEv c3JjL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmMgYi9zcmMvZmVfdXRpbHMvY29uZGl0aW9uYWwuYwpp bmRleCBkYjJhMGE1Li40ZDE0MDY2IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY29uZGl0aW9u YWwuYworKysgYi9zcmMvZmVfdXRpbHMvY29uZGl0aW9uYWwuYwpAQCAtMjQsMTMgKzI0LDI1IEBA IGNvbmRpdGlvbmFsX3N0YWNrX2NyZWF0ZSh2b2lkKQogfQogCiAvKgotICogZGVzdHJveSBzdGFj aworICogRGVzdHJveSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrLiBUaGUgc3RhY2sg aXRzZWxmIGlzIG5vdCBmcmVlZC4KICAqLwogdm9pZAotY29uZGl0aW9uYWxfc3RhY2tfZGVzdHJv eShDb25kaXRpb25hbFN0YWNrIGNzdGFjaykKK2NvbmRpdGlvbmFsX3N0YWNrX3Jlc2V0KENvbmRp dGlvbmFsU3RhY2sgY3N0YWNrKQogeworCWlmICghY3N0YWNrKQorCQlyZXR1cm47CQkJCQkvKiBu b3RoaW5nIHRvIGRvIGhlcmUgKi8KKwogCXdoaWxlIChjb25kaXRpb25hbF9zdGFja19wb3AoY3N0 YWNrKSkKIAkJY29udGludWU7Cit9CisKKy8qCisgKiBkZXN0cm95IHN0YWNrCisgKi8KK3ZvaWQK K2NvbmRpdGlvbmFsX3N0YWNrX2Rlc3Ryb3koQ29uZGl0aW9uYWxTdGFjayBjc3RhY2spCit7CisJ Y29uZGl0aW9uYWxfc3RhY2tfcmVzZXQoY3N0YWNrKTsKIAlmcmVlKGNzdGFjayk7CiB9CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmggYi9zcmMvaW5jbHVk ZS9mZV91dGlscy9jb25kaXRpb25hbC5oCmluZGV4IDliOTFkZTUuLjU5YzhkOGEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUv ZmVfdXRpbHMvY29uZGl0aW9uYWwuaApAQCAtNzMsNiArNzMsOCBAQCB0eXBlZGVmIHN0cnVjdCBD b25kaXRpb25hbFN0YWNrRGF0YSAqQ29uZGl0aW9uYWxTdGFjazsKIAogZXh0ZXJuIENvbmRpdGlv bmFsU3RhY2sgY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRlKHZvaWQpOwogCitleHRlcm4gdm9pZCBj b25kaXRpb25hbF9zdGFja19yZXNldChDb25kaXRpb25hbFN0YWNrIGNzdGFjayk7CisKIGV4dGVy biB2b2lkIGNvbmRpdGlvbmFsX3N0YWNrX2Rlc3Ryb3koQ29uZGl0aW9uYWxTdGFjayBjc3RhY2sp OwogCiBleHRlcm4gaW50CWNvbmRpdGlvbmFsX3N0YWNrX2RlcHRoKENvbmRpdGlvbmFsU3RhY2sg Y3N0YWNrKTsKLS0gCjIuNy40Cgo= --=_0fcde9e0009f3dabf741403de401e796--