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 1fxcPC-0008U1-HG for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Sep 2018 18:19:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fxcPB-0005Dz-0t for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Sep 2018 18:19:53 +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 1fxcPA-0005Dk-Eq for pgsql-hackers@lists.postgresql.org; Wed, 05 Sep 2018 18:19:52 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fxcOy-0003Ay-6Y for pgsql-hackers@postgresql.org; Wed, 05 Sep 2018 18:19:52 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id A6C5521C295C; Wed, 5 Sep 2018 21:19:38 +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 362FD21C292A; Wed, 5 Sep 2018 21:19:38 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1536171578; bh=7pDIvh0wxvqgx8AvEYz8lP2Y8DUgLv9E9DO2JJ7yttc=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=Yj6Oej8WZ0v0v/+EAKZzrOgxMkENFaBhC3F2YRVChdUJmKuSgQ0tq+Z9nOr8odVlx zbc0IocSLr9SA08zty6GYDcLg5to/qhcR6EHPNVJ77rJMijVd1tbVIJa9PaKRxwhip k+XD2BxAD03p0PcW8mc5Fqa2dCXk//x/h44rBQuQ= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_7447d1297f0d17f37364b73324d85298" Date: Wed, 05 Sep 2018 21:19:38 +0300 From: Marina Polyakova To: Fabien COELHO Cc: pgsql-hackers@postgresql.org, 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> <25d7b1f518c218a8c335bdfc6c858ea1@postgrespro.ru> <92869f967d690848c456ac44b371482c@postgrespro.ru> <48b325aa26bb51381a21b27b1553878d@postgrespro.ru> Message-ID: 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 --=_7447d1297f0d17f37364b73324d85298 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello, hackers! This is the eleventh version of the patch for error handling and retrying of transactions with serialization/deadlock failures in pgbench (based on the commit 14e9b2a752efaa427ce1b400b9aaa5a636898a04) thanks to the comments of Fabien Coelho and Arthur Zakirov in this thread. v11-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). v11-0002-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). v11-0003-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). v11-0004-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). Although this is a try to fix a duplicate code for debug messages (see [1]), this may seem mostly refactoring and therefore may not seem very necessary for this set of patches (see [2], [3]), so this patch becomes the last as an optional. Any suggestions are welcome! [1] https://www.postgresql.org/message-id/20180405180807.0bc1114f%40wp.localdomain > There is a lot of checks like "if (debug_level >= DEBUG_FAILS)" with > corresponding fprintf(stderr..) I think it's time to do it like in the > main code, wrap with some function like log(level, msg). [2] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808071823540.13466%40lancre > However ISTM that it is not as necessary as the previous one, i.e. we > could do without it to get the desired feature, so I see it more as a > refactoring done "in passing", and I'm wondering whether it is > really worth it because it adds some new complexity, so I'm not sure of > the net benefit. [3] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808101027390.9120%40lancre > I'm still not over enthousiastic with these changes, and still think > that > it should be an independent patch, not submitted together with the > "retry > on error" feature. All that was fixed from the previous version: [4] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808071823540.13466%40lancre > I'm at odds with the proposed levels. ISTM that pgbench internal > errors which warrant an immediate exit should be dubbed "FATAL", > I'm unsure about the "log_min_messages" variable name, I'd suggest > "log_level". > > I do not see the asserts on LOG >= log_min_messages as useful, because > the level can only be LOG or DEBUG anyway. > * PQExpBuffer > > I still do not see a positive value from importing PQExpBuffer > complexity and cost into pgbench, as the resulting code is not very > readable and it adds malloc/free cycles, so I'd try to avoid using > PQExpBuf as much as possible. ISTM that all usages could be avoided in > the patch, and most should be avoided even if ExpBuffer is imported > because it is really useful somewhere. > > - to call pgbench_error from pgbench_simple_error, you can do a > pgbench_log_va(level, format, va_list) version called both from > pgbench_error & pgbench_simple_error. > > - for PGBENCH_DEBUG function, do separate calls per type, the very > small partial code duplication is worth avoiding ExpBuf IMO. > > - for doCustom debug: I'd just let the printf as it is, with a > comment, as it is really very internal stuff for debug. Or I'd just > snprintf a something in a static buffer. > > ... > > - for listAvailableScript: I'd simply call "pgbench_error(LOG" several > time, once per line. > > I see building a string with a format (printfExpBuf..) and then > calling the pgbench_error function with just a "%s" format on the > result as not very elegant, because the second format is somehow > hacked around. [5] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808101027390.9120%40lancre > I suggest that the called function does only one simple thing, > probably "DEBUG", and that the *caller* prints a message if it is > unhappy > about the failure of the called function, as it is currently done. This > allows to provide context as well from the caller, eg "setting variable > %s > failed while ". The user call rerun under debug > for > precision if they need it. [6] https://www.postgresql.org/message-id/20180810125327.GA2374%40zakirov.localdomain > I agree with Fabien. Calling pgbench_error() inside pgbench_error() > could be dangerous. I think "fmt" checking could be removed, or we may > use Assert() or fprintf()+exit(1) at least. [7] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808121057540.6189%40lancre > * typo in comments: "varaibles" > > * About enlargeVariables: > > multiple INT_MAX error handling looks strange, especially as this code > can > never be triggered because pgbench would be dead long before having > allocated INT_MAX variables. So I would not bother to add such checks. > I'm not sure that the size_t cast here and there are useful for any > practical values likely to be encountered by pgbench. > > The exponential allocation seems overkill. I'd simply add a constant > number of slots, with a simple rule: > > /* reallocated with a margin */ > if (max_vars < needed) max_vars = needed + 8; [8] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808151046090.30050%40lancre > A few comments about the doc. > > According to the documentation, the feature is triggered by --max-tries > and > --latency-limit. I disagree with the later, because it means that > having > latency limit without retrying is not supported anymore. > > Maybe you can allow an "unlimited" max-tries, say with special value > zero, > and the latency limit does its job if set, over all tries. > > Doc: "error in meta commands" -> "meta command errors", for homogeneity > with > other cases? > Doc: "never occur.." -> "never occur", or eventually "...". > > Doc: "Directly client errors" -> "Direct client errors". > > I'm still in favor of asserting that the sql connection is idle (no tx > in > progress) at the beginning and/or end of a script, and report a user > error > if not, instead of writing complex caveats. > I do not think that the RETRIES_ENABLED macro is a good thing. I'd > suggest > to write the condition four times. > > ISTM that "skipped" transactions are NOT "successful" so there are a > problem > with comments. I believe that your formula are probably right, it has > more to do > with what is "success". For cnt decomposition, ISTM that "other > transactions" > are really "directly successful transactions". > > I'd suggest to put "ANOTHER_SQL_FAILURE" as the last option, otherwise > "another" > does not make sense yet. I'd suggest to name it "OTHER_SQL_FAILURE". > I'm not sure of > the LOG -> DEBUG_FAIL changes. I do not understand the name > "DEBUG_FAIL", has it > is not related to debug, they just seem to be internal errors. > inTransactionBlock: I disagree with any function other than doCustom > changing > the client state, because it makes understanding the state machine > harder. There > is already one exception to that (threadRun) that I wish to remove. All > state > changes must be performed explicitely in doCustom. > PQexec("ROOLBACK"): you are inserting a synchronous command, for which > the > thread will have to wait for the result, in a middle of a framework > which > takes great care to use only asynchronous stuff so that one thread can > manage several clients efficiently. You cannot call PQexec there. > From where I sit, I'd suggest to sendQuery("ROLLBACK"), then switch to > a new state CSTATE_WAIT_ABORT_RESULT which would be similar to > CSTATE_WAIT_RESULT, but on success would skip to RETRY or ABORT instead > of proceeding to the next command. > > ISTM that it would be more logical to only get into RETRY if there is a > retry, > i.e. move the test RETRY/ABORT in FAILURE. For that, instead of > "canRetry", > maybe you want "doRetry", which tells that a retry is possible (the > error > is serializable or deadlock) and that the current parameters allow it > (timeout, max retries). > > * Minor C style comments: > > if / else if / else if ... on *_FAILURE: I'd suggest a switch. > > The following line removal does not seem useful, I'd have kept it: > > stats->cnt++; > - > if (skipped) > > copyVariables: I'm not convinced that source_vars & nvars variables are > that > useful. > > memcpy(&(st->retry_state.random_state), &(st->random_state), > sizeof(RandomState)); > > Is there a problem with "st->retry_state.random_state = > st->random_state;" > instead of memcpy? ISTM that simple assignments work in C. Idem in the > reverse > copy under RETRY. > commandFailed: I'm not thrilled by the added boolean, which is > partially > redundant with the second argument. > > if (per_script_stats) > - accumStats(&sql_script[st->use_file].stats, skipped, > latency, lag); > + { > + accumStats(&sql_script[st->use_file].stats, skipped, > latency, lag, > + st->failure_status, st->retries); > + } > } > > I do not see the point of changing the style here. [9] https://www.postgresql.org/message-id/alpine.DEB.2.21.1808170917510.20841%40lancre > Here is an attempt at having a more precise and shorter version, not > sure > it is much better than yours, though: > > """ > Transactions are counted depending on their execution and outcome. > First > a transaction may have started or not: skipped transactions occur under > --rate and --latency-limit when the client is too late to execute them. > Secondly, a started transaction may ultimately succeed or fail on some > error, possibly after some retries when --max-tries is not one. Thus > """ -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_7447d1297f0d17f37364b73324d85298 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v11-0001-Pgbench-errors-use-the-RandomState-structure-for.patch Content-Disposition: attachment; filename=v11-0001-Pgbench-errors-use-the-RandomState-structure-for.patch; size=11051 RnJvbSBkNjE1YTNlMmNkYzY5NDlmNGZhZTgzYTRhN2E3MzI4OTM3ZjdhY2JmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCA0IFNlcCAyMDE4IDE5OjAyOjMyICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMS80XSBQZ2JlbmNoIGVycm9yczogdXNlIHRoZSBSYW5kb21TdGF0ZSBzdHJ1Y3R1 cmUgZm9yCiB0aHJlYWQvY2xpZW50IHJhbmRvbSBzZWVkLgoKVGhpcyBpcyBtb3N0IGltcG9ydGFu dCB3aGVuIGl0IGlzIHVzZWQgdG8gcmVzZXQgYSBjbGllbnQncyByYW5kb20gc2VlZCBkdXJpbmcK dGhlIHJlcGVhdGluZyBvZiB0cmFuc2FjdGlvbnMgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZWFkbG9j ayBmYWlsdXJlcy4KClVzZSB0aGUgcmFuZG9tIHN0YXRlIG9mIHRoZSBjbGllbnQgZm9yIHJhbmRv bSBmdW5jdGlvbnMgUEdCRU5DSF9SQU5ET01fKiBkdXJpbmcKdGhlIGV4ZWN1dGlvbiBvZiB0aGUg c2NyaXB0LiBVc2UgdGhlIHJhbmRvbSBzdGF0ZSBvZiB0aGUgZWFjaCB0aHJlYWQgb3B0aW9uICh0 bwpjaG9vc2UgdGhlIHNjcmlwdCAvIGdldCB0aGUgdGhyb3R0bGUgZGVsYXkgLyB0byBsb2cgd2l0 aCBhIHNhbXBsZSByYXRlKSB0byBtYWtlCmFsbCBvZiB0aGVtIGluZGVwZW5kZW50IG9mIGVhY2gg b3RoZXIgYW5kIHRoZXJlZm9yZSBkZXRlcm1pbmlzdGljIGF0IHRoZSB0aHJlYWQKbGV2ZWwuCi0t LQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDEwNCArKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDMwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDQxYjc1NmMwODkuLjk4OGUzN2JjZTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYwpAQCAtMjUwLDYgKzI1MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0c0RhdGEKIAlT aW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0YTsKIAorLyoKKyAqIERhdGEgc3RydWN0dXJlIGZv ciB0aHJlYWQvY2xpZW50IHJhbmRvbSBzZWVkLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCXVu c2lnbmVkIHNob3J0IHhzZWVkWzNdOworfSBSYW5kb21TdGF0ZTsKKwogLyoKICAqIENvbm5lY3Rp b24gc3RhdGUgbWFjaGluZSBzdGF0ZXMuCiAgKi8KQEAgLTMzMSw2ICszMzksMTIgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAlDb25uZWN0aW9uU3RhdGVFbnVtIHN0YXRlOwkvKiBzdGF0ZSBtYWNoaW5lJ3Mg Y3VycmVudCBzdGF0ZS4gKi8KIAlDb25kaXRpb25hbFN0YWNrIGNzdGFjazsJLyogZW5jbG9zaW5n IGNvbmRpdGlvbmFscyBzdGF0ZSAqLwogCisJLyoKKwkgKiBTZXBhcmF0ZSByYW5kb21uZXNzIGZv ciBlYWNoIGNsaWVudC4gVGhpcyBpcyB1c2VkIGZvciByYW5kb20gZnVuY3Rpb25zCisJICogUEdC RU5DSF9SQU5ET01fKiBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0LgorCSAqLwor CVJhbmRvbVN0YXRlIHJhbmRvbV9zdGF0ZTsKKwogCWludAkJCXVzZV9maWxlOwkJLyogaW5kZXgg aW4gc3FsX3NjcmlwdCBmb3IgdGhpcyBjbGllbnQgKi8KIAlpbnQJCQljb21tYW5kOwkJLyogY29t bWFuZCBudW1iZXIgaW4gc2NyaXB0ICovCiAKQEAgLTM5MCw3ICs0MDQsMTYgQEAgdHlwZWRlZiBz dHJ1Y3QKIAlwdGhyZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8KIAlDU3RhdGUJ ICAgKnN0YXRlOwkJCS8qIGFycmF5IG9mIENTdGF0ZSAqLwogCWludAkJCW5zdGF0ZTsJCQkvKiBs ZW5ndGggb2Ygc3RhdGVbXSAqLwotCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsgLyog c2VwYXJhdGUgcmFuZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8KKworCS8qCisJICogU2VwYXJh dGUgcmFuZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQuIEVhY2ggdGhyZWFkIG9wdGlvbiB1c2VzIGl0 cyBvd24KKwkgKiByYW5kb20gc3RhdGUgdG8gbWFrZSBhbGwgb2YgdGhlbSBpbmRlcGVuZGVudCBv ZiBlYWNoIG90aGVyIGFuZCB0aGVyZWZvcmUKKwkgKiBkZXRlcm1pbmlzdGljIGF0IHRoZSB0aHJl YWQgbGV2ZWwuCisJICovCisJUmFuZG9tU3RhdGUgY2hvb3NlX3NjcmlwdF9yczsJLyogcmFuZG9t IHN0YXRlIGZvciBzZWxlY3RpbmcgYSBzY3JpcHQgKi8KKwlSYW5kb21TdGF0ZSB0aHJvdHRsaW5n X3JzOwkvKiByYW5kb20gc3RhdGUgZm9yIHRyYW5zYWN0aW9uIHRocm90dGxpbmcgKi8KKwlSYW5k b21TdGF0ZSBzYW1wbGluZ19yczsJLyogcmFuZG9tIHN0YXRlIGZvciBsb2cgc2FtcGxpbmcgKi8K KwogCWludDY0CQl0aHJvdHRsZV90cmlnZ2VyOwkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcg KHVzKSAqLwogCUZJTEUJICAgKmxvZ2ZpbGU7CQkvKiB3aGVyZSB0byBsb2csIG9yIE5VTEwgKi8K IAlaaXBmQ2FjaGUJemlwZl9jYWNoZTsJCS8qIGZvciB0aHJlYWQtc2FmZSAgemlwZmlhbiByYW5k b20gbnVtYmVyCkBAIC02OTQsNyArNzE3LDcgQEAgZ290ZGlnaXRzOgogCiAvKiByYW5kb20gbnVt YmVyIGdlbmVyYXRvcjogdW5pZm9ybSBkaXN0cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGluY2x1 c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4s IGludDY0IG1heCkKK2dldHJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWlu LCBpbnQ2NCBtYXgpCiB7CiAJLyoKIAkgKiBPZGQgY29kaW5nIGlzIHNvIHRoYXQgbWluIGFuZCBt YXggaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGNoYW5jZSBvZgpAQCAtNzA1LDcgKzcyOCw3 IEBAIGdldHJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogCSAqIHBy b3RlY3RlZCBieSBhIG11dGV4LCBhbmQgdGhlcmVmb3JlIGEgYm90dGxlbmVjayBvbiBtYWNoaW5l cyB3aXRoIG1hbnkKIAkgKiBDUFVzLgogCSAqLwotCXJldHVybiBtaW4gKyAoaW50NjQpICgobWF4 IC0gbWluICsgMSkgKiBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSk7CisJcmV0dXJu IG1pbiArIChpbnQ2NCkgKChtYXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRl LT54c2VlZCkpOwogfQogCiAvKgpAQCAtNzE0LDcgKzczNyw4IEBAIGdldHJhbmQoVFN0YXRlICp0 aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogICogdmFsdWUgaXMgZXhwKC1wYXJhbWV0ZXIp LgogICovCiBzdGF0aWMgaW50NjQKLWdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwg aW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCitnZXRFeHBvbmVudGlhbFJh bmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLCBpbnQ2NCBtYXgsCisJCQkJ ICAgZG91YmxlIHBhcmFtZXRlcikKIHsKIAlkb3VibGUJCWN1dCwKIAkJCQl1bmlmb3JtLApAQCAt NzI0LDcgKzc0OCw3IEBAIGdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQg bWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAJQXNzZXJ0KHBhcmFtZXRlciA+IDAu MCk7CiAJY3V0ID0gZXhwKC1wYXJhbWV0ZXIpOwogCS8qIGVyYW5kIGluIFswLCAxKSwgdW5pZm9y bSBpbiAoMCwgMV0gKi8KLQl1bmlmb3JtID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRv bV9zdGF0ZSk7CisJdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlLT54c2Vl ZCk7CiAKIAkvKgogCSAqIGlubmVyIGV4cHJlc3Npb24gaW4gKGN1dCwgMV0gKGlmIHBhcmFtZXRl ciA+IDApLCByYW5kIGluIFswLCAxKQpAQCAtNzM3LDcgKzc2MSw4IEBAIGdldEV4cG9uZW50aWFs UmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0 ZXIpCiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiBnYXVzc2lhbiBkaXN0cmlidXRpb24g ZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRHYXVzc2lhblJh bmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVy KQorZ2V0R2F1c3NpYW5SYW5kKFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG1pbiwg aW50NjQgbWF4LAorCQkJCWRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91YmxlCQlzdGRldjsKIAlk b3VibGUJCXJhbmQ7CkBAIC03NjUsOCArNzkwLDggQEAgZ2V0R2F1c3NpYW5SYW5kKFRTdGF0ZSAq dGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIAkJICogYXJl IGV4cGVjdGVkIGluICgwLCAxXSAoc2VlCiAJCSAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93 aWtpL0JveC1NdWxsZXJfdHJhbnNmb3JtKQogCQkgKi8KLQkJZG91YmxlCQlyYW5kMSA9IDEuMCAt IHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwotCQlkb3VibGUJCXJhbmQyID0gMS4w IC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJCWRvdWJsZQkJcmFuZDEgPSAx LjAgLSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOworCQlkb3VibGUJCXJhbmQyID0g MS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsKIAogCQkvKiBCb3gtTXVsbGVy IGJhc2ljIGZvcm0gdHJhbnNmb3JtICovCiAJCWRvdWJsZQkJdmFyX3NxcnQgPSBzcXJ0KC0yLjAg KiBsb2cocmFuZDEpKTsKQEAgLTc5Myw3ICs4MTgsNyBAQCBnZXRHYXVzc2lhblJhbmQoVFN0YXRl ICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogICogd2ls bCBhcHByb3hpbWF0ZSBhIFBvaXNzb24gZGlzdHJpYnV0aW9uIGNlbnRlcmVkIG9uIHRoZSBnaXZl biB2YWx1ZS4KICAqLwogc3RhdGljIGludDY0Ci1nZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVh ZCwgaW50NjQgY2VudGVyKQorZ2V0UG9pc3NvblJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0 ZSwgaW50NjQgY2VudGVyKQogewogCS8qCiAJICogVXNlIGludmVyc2UgdHJhbnNmb3JtIHNhbXBs aW5nIHRvIGdlbmVyYXRlIGEgdmFsdWUgPiAwLCBzdWNoIHRoYXQgdGhlCkBAIC04MDIsNyArODI3 LDcgQEAgZ2V0UG9pc3NvblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IGNlbnRlcikKIAlkb3Vi bGUJCXVuaWZvcm07CiAKIAkvKiBlcmFuZCBpbiBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICov Ci0JdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCXVu aWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOwogCiAJcmV0dXJu IChpbnQ2NCkgKC1sb2codW5pZm9ybSkgKiAoKGRvdWJsZSkgY2VudGVyKSArIDAuNSk7CiB9CkBA IC04ODAsNyArOTA1LDcgQEAgemlwZkZpbmRPckNyZWF0ZUNhY2hlQ2VsbChaaXBmQ2FjaGUgKmNh Y2hlLCBpbnQ2NCBuLCBkb3VibGUgcykKICAqIEx1YyBEZXZyb3llLCBwLiA1NTAtNTUxLCBTcHJp bmdlciAxOTg2LgogICovCiBzdGF0aWMgaW50NjQKLWNvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFRT dGF0ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVJdGVyYXRpdmVaaXBmaWFu KFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG4sIGRvdWJsZSBzKQogewogCWRvdWJs ZQkJYiA9IHBvdygyLjAsIHMgLSAxLjApOwogCWRvdWJsZQkJeCwKQEAgLTg5MSw4ICs5MTYsOCBA QCBjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91Ymxl IHMpCiAJd2hpbGUgKHRydWUpCiAJewogCQkvKiByYW5kb20gdmFyaWF0ZXMgKi8KLQkJdSA9IHBn X2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwotCQl2ID0gcGdfZXJhbmQ0OCh0aHJlYWQt PnJhbmRvbV9zdGF0ZSk7CisJCXUgPSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+eHNlZWQpOwor CQl2ID0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsKIAogCQl4ID0gZmxvb3IocG93 KHUsIC0xLjAgLyAocyAtIDEuMCkpKTsKIApAQCAtOTEwLDEwICs5MzUsMTEgQEAgY29tcHV0ZUl0 ZXJhdGl2ZVppcGZpYW4oVFN0YXRlICp0aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQogICogSmlt IEdyYXkgZXQgYWwsIFNJR01PRCAxOTk0CiAgKi8KIHN0YXRpYyBpbnQ2NAotY29tcHV0ZUhhcm1v bmljWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCitjb21wdXRlSGFy bW9uaWNaaXBmaWFuKFppcGZDYWNoZSAqemlwZl9jYWNoZSwgUmFuZG9tU3RhdGUgKnJhbmRvbV9z dGF0ZSwKKwkJCQkJICAgaW50NjQgbiwgZG91YmxlIHMpCiB7Ci0JWmlwZkNlbGwgICAqY2VsbCA9 IHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoJnRocmVhZC0+emlwZl9jYWNoZSwgbiwgcyk7Ci0J ZG91YmxlCQl1bmlmb3JtID0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJWmlw ZkNlbGwgICAqY2VsbCA9IHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoemlwZl9jYWNoZSwgbiwg cyk7CisJZG91YmxlCQl1bmlmb3JtID0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPnhzZWVkKTsK IAlkb3VibGUJCXV6ID0gdW5pZm9ybSAqIGNlbGwtPmhhcm1vbmljbjsKIAogCWlmICh1eiA8IDEu MCkKQEAgLTkyNSw3ICs5NTEsOCBAQCBjb21wdXRlSGFybW9uaWNaaXBmaWFuKFRTdGF0ZSAqdGhy ZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKIAogLyogcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6IHpp cGZpYW4gZGlzdHJpYnV0aW9uIGZyb20gbWluIHRvIG1heCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBp bnQ2NAotZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4 LCBkb3VibGUgcykKK2dldFppcGZpYW5SYW5kKFppcGZDYWNoZSAqemlwZl9jYWNoZSwgUmFuZG9t U3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLAorCQkJICAgaW50NjQgbWF4LCBkb3VibGUg cykKIHsKIAlpbnQ2NAkJbiA9IG1heCAtIG1pbiArIDE7CiAKQEAgLTkzNCw4ICs5NjEsOCBAQCBn ZXRaaXBmaWFuUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJs ZSBzKQogCiAKIAlyZXR1cm4gbWluIC0gMSArICgocyA+IDEpCi0JCQkJCSAgPyBjb21wdXRlSXRl cmF0aXZlWmlwZmlhbih0aHJlYWQsIG4sIHMpCi0JCQkJCSAgOiBjb21wdXRlSGFybW9uaWNaaXBm aWFuKHRocmVhZCwgbiwgcykpOworCQkJCQkgID8gY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4ocmFu ZG9tX3N0YXRlLCBuLCBzKQorCQkJCQkgIDogY29tcHV0ZUhhcm1vbmljWmlwZmlhbih6aXBmX2Nh Y2hlLCByYW5kb21fc3RhdGUsIG4sIHMpKTsKIH0KIAogLyoKQEAgLTIyMDksNyArMjIzNiw3IEBA IGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJaWYgKGZ1 bmMgPT0gUEdCRU5DSF9SQU5ET00pCiAJCQkJewogCQkJCQlBc3NlcnQobmFyZ3MgPT0gMik7Ci0J CQkJCXNldEludFZhbHVlKHJldHZhbCwgZ2V0cmFuZCh0aHJlYWQsIGltaW4sIGltYXgpKTsKKwkJ CQkJc2V0SW50VmFsdWUocmV0dmFsLCBnZXRyYW5kKCZzdC0+cmFuZG9tX3N0YXRlLCBpbWluLCBp bWF4KSk7CiAJCQkJfQogCQkJCWVsc2UJCQkvKiBnYXVzc2lhbiAmIGV4cG9uZW50aWFsICovCiAJ CQkJewpAQCAtMjIzMSw3ICsyMjU4LDggQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJ CQkJCQkJZ2V0R2F1c3NpYW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJCQkJ CQkJCWdldEdhdXNzaWFuUmFuZCgmc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJCQkJCQkJCQkJ CQlpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGZ1bmMgPT0gUEdCRU5DSF9S QU5ET01fWklQRklBTikKIAkJCQkJewpAQCAtMjI0Myw3ICsyMjcxLDkgQEAgZXZhbFN0YW5kYXJk RnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJ CQkJCQl9CiAJCQkJCQlzZXRJbnRWYWx1ZShyZXR2YWwsCi0JCQkJCQkJCQlnZXRaaXBmaWFuUmFu ZCh0aHJlYWQsIGltaW4sIGltYXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRaaXBmaWFuUmFuZCgm dGhyZWFkLT56aXBmX2NhY2hlLAorCQkJCQkJCQkJCQkJICAgJnN0LT5yYW5kb21fc3RhdGUsIGlt aW4sCisJCQkJCQkJCQkJCQkgICBpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVsc2UJCS8q IGV4cG9uZW50aWFsICovCiAJCQkJCXsKQEAgLTIyNTYsNyArMjI4Niw4IEBAIGV2YWxTdGFuZGFy ZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQl9CiAKIAkJCQkJCXNldElu dFZhbHVlKHJldHZhbCwKLQkJCQkJCQkJCWdldEV4cG9uZW50aWFsUmFuZCh0aHJlYWQsIGltaW4s IGltYXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRFeHBvbmVudGlhbFJhbmQoJnN0LT5yYW5kb21f c3RhdGUsIGltaW4sCisJCQkJCQkJCQkJCQkJICAgaW1heCwgcGFyYW0pKTsKIAkJCQkJfQogCQkJ CX0KIApAQCAtMjU1MSw3ICsyNTgyLDcgQEAgY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFkKQog CWlmIChudW1fc2NyaXB0cyA9PSAxKQogCQlyZXR1cm4gMDsKIAotCXcgPSBnZXRyYW5kKHRocmVh ZCwgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CisJdyA9IGdldHJhbmQoJnRocmVhZC0+Y2hvb3NlX3Nj cmlwdF9ycywgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CiAJZG8KIAl7CiAJCXcgLT0gc3FsX3Njcmlw dFtpKytdLndlaWdodDsKQEAgLTI3NDUsNyArMjc3Niw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBhd2F5LgogCQkJCSAqLwog CQkJCUFzc2VydCh0aHJvdHRsZV9kZWxheSA+IDApOwotCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFu ZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQoJnRo cmVhZC0+dGhyb3R0bGluZ19ycywgdGhyb3R0bGVfZGVsYXkpOwogCiAJCQkJdGhyZWFkLT50aHJv dHRsZV90cmlnZ2VyICs9IHdhaXQ7CiAJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRo cm90dGxlX3RyaWdnZXI7CkBAIC0yNzc5LDcgKzI4MTAsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NY YWN0U3RhdHModGhyZWFkLCBzdCwgJm5vdywgdHJ1ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVu ZGV6LXZvdXMgKi8KLQkJCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxl X2RlbGF5KTsKKwkJCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCgmdGhyZWFkLT50aHJvdHRsaW5n X3JzLAorCQkJCQkJCQkJCQkgIHRocm90dGxlX2RlbGF5KTsKIAkJCQkJCXRocmVhZC0+dGhyb3R0 bGVfdHJpZ2dlciArPSB3YWl0OwogCQkJCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRo cm90dGxlX3RyaWdnZXI7CiAJCQkJCX0KQEAgLTMzMjIsNyArMzM1NCw3IEBAIGRvTG9nKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCSAqIHRvIHRoZSByYW5kb20gc2FtcGxlLgogCSAqLwog CWlmIChzYW1wbGVfcmF0ZSAhPSAwLjAgJiYKLQkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9z dGF0ZSkgPiBzYW1wbGVfcmF0ZSkKKwkJcGdfZXJhbmQ0OCh0aHJlYWQtPnNhbXBsaW5nX3JzLnhz ZWVkKSA+IHNhbXBsZV9yYXRlKQogCQlyZXR1cm47CiAKIAkvKiBzaG91bGQgd2UgYWdncmVnYXRl IHRoZSByZXN1bHRzIG9yIG5vdD8gKi8KQEAgLTQ3NTAsNiArNDc4MiwxNyBAQCBzZXRfcmFuZG9t X3NlZWQoY29uc3QgY2hhciAqc2VlZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIEluaXRp YWxpemUgdGhlIHJhbmRvbSBzdGF0ZSBvZiB0aGUgY2xpZW50L3RocmVhZC4KKyAqLworc3RhdGlj IHZvaWQKK2luaXRSYW5kb21TdGF0ZShSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlKQoreworCXJh bmRvbV9zdGF0ZS0+eHNlZWRbMF0gPSByYW5kb20oKTsKKwlyYW5kb21fc3RhdGUtPnhzZWVkWzFd ID0gcmFuZG9tKCk7CisJcmFuZG9tX3N0YXRlLT54c2VlZFsyXSA9IHJhbmRvbSgpOworfQorCiAK IGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC01MzU4LDYgKzU0MDEsNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkr KykKIAl7CiAJCXN0YXRlW2ldLmNzdGFjayA9IGNvbmRpdGlvbmFsX3N0YWNrX2NyZWF0ZSgpOwor CQlpbml0UmFuZG9tU3RhdGUoJnN0YXRlW2ldLnJhbmRvbV9zdGF0ZSk7CiAJfQogCiAJaWYgKGRl YnVnKQpAQCAtNTQ5MSw5ICs1NTM1LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CXRocmVhZC0+c3RhdGUgPSAmc3RhdGVbbmNsaWVudHNfZGVhbHRdOwogCQl0aHJlYWQtPm5zdGF0 ZSA9CiAJCQkobmNsaWVudHMgLSBuY2xpZW50c19kZWFsdCArIG50aHJlYWRzIC0gaSAtIDEpIC8g KG50aHJlYWRzIC0gaSk7Ci0JCXRocmVhZC0+cmFuZG9tX3N0YXRlWzBdID0gcmFuZG9tKCk7Ci0J CXRocmVhZC0+cmFuZG9tX3N0YXRlWzFdID0gcmFuZG9tKCk7Ci0JCXRocmVhZC0+cmFuZG9tX3N0 YXRlWzJdID0gcmFuZG9tKCk7CisJCWluaXRSYW5kb21TdGF0ZSgmdGhyZWFkLT5jaG9vc2Vfc2Ny aXB0X3JzKTsKKwkJaW5pdFJhbmRvbVN0YXRlKCZ0aHJlYWQtPnRocm90dGxpbmdfcnMpOworCQlp bml0UmFuZG9tU3RhdGUoJnRocmVhZC0+c2FtcGxpbmdfcnMpOwogCQl0aHJlYWQtPmxvZ2ZpbGUg PSBOVUxMOyAvKiBmaWxsZWQgaW4gbGF0ZXIgKi8KIAkJdGhyZWFkLT5sYXRlbmN5X2xhdGUgPSAw OwogCQl0aHJlYWQtPnppcGZfY2FjaGUubmJfY2VsbHMgPSAwOwotLSAKMi4xNy4xCgo= --=_7447d1297f0d17f37364b73324d85298 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v11-0002-Pgbench-errors-use-the-Variables-structure-for-c.patch Content-Disposition: attachment; filename=v11-0002-Pgbench-errors-use-the-Variables-structure-for-c.patch; size=15372 RnJvbSBmZmJmMzRkNDg5ZjhmMDE2MjE4NjY5MDhiOWRkNDE4NDU5YmIwYjQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogV2VkLCA1IFNlcCAyMDE4IDE2OjAzOjE1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMi80XSBQZ2JlbmNoIGVycm9yczogdXNlIHRoZSBWYXJpYWJsZXMgc3RydWN0dXJl IGZvcgogY2xpZW50IHZhcmlhYmxlcwoKVGhpcyBpcyBtb3N0IGltcG9ydGFudCB3aGVuIGl0IGlz IHVzZWQgdG8gcmVzZXQgY2xpZW50IHZhcmlhYmxlcyBkdXJpbmcgdGhlCnJlcGVhdGluZyBvZiB0 cmFuc2FjdGlvbnMgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlcy4KCkRvbid0 IGFsbG9jYXRlIFZhcmlhYmxlIHN0cnVjdHMgb25lIGJ5IG9uZS4gSW5zdGVhZCwgYWRkIGEgY29u c3RhbnQgbWFyZ2luIGVhY2gKdGltZSBpdCBvdmVyZmxvd3MuCi0tLQogc3JjL2Jpbi9wZ2JlbmNo L3BnYmVuY2guYyB8IDE3MSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYwppbmRleCA5ODhlMzdiY2U1Li4xYjI1NDg3YmZjIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn YmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTIwMSw2 ICsyMDEsMTIgQEAgY29uc3QgY2hhciAqcHJvZ25hbWU7CiAKIHZvbGF0aWxlIGJvb2wgdGltZXJf ZXhjZWVkZWQgPSBmYWxzZTsJLyogZmxhZyBmcm9tIHNpZ25hbCBoYW5kbGVyICovCiAKKy8qCisg KiBXZSBkb24ndCB3YW50IHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBvbmUgYnkgb25lOyBmb3IgZWZm aWNpZW5jeSwgYWRkIGEKKyAqIGNvbnN0YW50IG1hcmdpbiBlYWNoIHRpbWUgaXQgb3ZlcmZsb3dz LgorICovCisjZGVmaW5lIFZBUklBQkxFU19BTExPQ19NQVJHSU4JOAorCiAvKgogICogVmFyaWFi bGUgZGVmaW5pdGlvbnMuCiAgKgpAQCAtMjE4LDYgKzIyNCwyNCBAQCB0eXBlZGVmIHN0cnVjdAog CVBnQmVuY2hWYWx1ZSB2YWx1ZTsJCQkvKiBhY3R1YWwgdmFyaWFibGUncyB2YWx1ZSAqLwogfSBW YXJpYWJsZTsKIAorLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBjbGllbnQgdmFyaWFibGVzLgor ICovCit0eXBlZGVmIHN0cnVjdAoreworCVZhcmlhYmxlICAgKnZhcnM7CQkJLyogYXJyYXkgb2Yg dmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KKwlpbnQJCQludmFyczsJCQkvKiBudW1iZXIgb2YgdmFy aWFibGVzICovCisKKwkvKgorCSAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB2YXJpYWJsZXMgdGhh dCB3ZSBjYW4gY3VycmVudGx5IHN0b3JlIGluICd2YXJzJworCSAqIHdpdGhvdXQgaGF2aW5nIHRv IHJlYWxsb2NhdGUgbW9yZSBzcGFjZS4gV2UgbXVzdCBhbHdheXMgaGF2ZSBtYXhfdmFycyA+PQor CSAqIG52YXJzLgorCSAqLworCWludAkJCW1heF92YXJzOworCisJYm9vbAkJdmFyc19zb3J0ZWQ7 CS8qIGFyZSB2YXJpYWJsZXMgc29ydGVkIGJ5IG5hbWU/ICovCit9IFZhcmlhYmxlczsKKwogI2Rl ZmluZSBNQVhfU0NSSVBUUwkJMTI4CQkvKiBtYXggbnVtYmVyIG9mIFNRTCBzY3JpcHRzIGFsbG93 ZWQgKi8KICNkZWZpbmUgU0hFTExfQ09NTUFORF9TSVpFCTI1NiAvKiBtYXhpbXVtIHNpemUgYWxs b3dlZCBmb3Igc2hlbGwgY29tbWFuZCAqLwogCkBAIC0zNDksOSArMzczLDcgQEAgdHlwZWRlZiBz dHJ1Y3QKIAlpbnQJCQljb21tYW5kOwkJLyogY29tbWFuZCBudW1iZXIgaW4gc2NyaXB0ICovCiAK IAkvKiBjbGllbnQgdmFyaWFibGVzICovCi0JVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJy YXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KLQlpbnQJCQludmFyaWFibGVzOwkJLyogbnVt YmVyIG9mIHZhcmlhYmxlcyAqLwotCWJvb2wJCXZhcnNfc29ydGVkOwkvKiBhcmUgdmFyaWFibGVz IHNvcnRlZCBieSBuYW1lPyAqLworCVZhcmlhYmxlcyAgIHZhcmlhYmxlczsKIAogCS8qIHZhcmlv dXMgdGltZXMgYWJvdXQgY3VycmVudCB0cmFuc2FjdGlvbiAqLwogCWludDY0CQl0eG5fc2NoZWR1 bGVkOwkvKiBzY2hlZHVsZWQgc3RhcnQgdGltZSBvZiB0cmFuc2FjdGlvbiAodXNlYykgKi8KQEAg LTEyMTIsMzkgKzEyMzQsMzkgQEAgY29tcGFyZVZhcmlhYmxlTmFtZXMoY29uc3Qgdm9pZCAqdjEs IGNvbnN0IHZvaWQgKnYyKQogCiAvKiBMb2NhdGUgYSB2YXJpYWJsZSBieSBuYW1lOyByZXR1cm5z IE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cFZhcmlhYmxlKENT dGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitsb29rdXBWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxl cywgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZQlrZXk7CiAKIAkvKiBPbiBzb21lIHZlcnNpb25z IG9mIFNvbGFyaXMsIGJzZWFyY2ggb2YgemVybyBpdGVtcyBkdW1wcyBjb3JlICovCi0JaWYgKHN0 LT5udmFyaWFibGVzIDw9IDApCisJaWYgKHZhcmlhYmxlcy0+bnZhcnMgPD0gMCkKIAkJcmV0dXJu IE5VTEw7CiAKIAkvKiBTb3J0IGlmIHdlIGhhdmUgdG8gKi8KLQlpZiAoIXN0LT52YXJzX3NvcnRl ZCkKKwlpZiAoIXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQpCiAJewotCQlxc29ydCgodm9pZCAqKSBz dC0+dmFyaWFibGVzLCBzdC0+bnZhcmlhYmxlcywgc2l6ZW9mKFZhcmlhYmxlKSwKKwkJcXNvcnQo KHZvaWQgKikgdmFyaWFibGVzLT52YXJzLCB2YXJpYWJsZXMtPm52YXJzLCBzaXplb2YoVmFyaWFi bGUpLAogCQkJICBjb21wYXJlVmFyaWFibGVOYW1lcyk7Ci0JCXN0LT52YXJzX3NvcnRlZCA9IHRy dWU7CisJCXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQgPSB0cnVlOwogCX0KIAogCS8qIE5vdyB3ZSBj YW4gc2VhcmNoICovCiAJa2V5Lm5hbWUgPSBuYW1lOwogCXJldHVybiAoVmFyaWFibGUgKikgYnNl YXJjaCgodm9pZCAqKSAma2V5LAotCQkJCQkJCQkodm9pZCAqKSBzdC0+dmFyaWFibGVzLAotCQkJ CQkJCQlzdC0+bnZhcmlhYmxlcywKKwkJCQkJCQkJKHZvaWQgKikgdmFyaWFibGVzLT52YXJzLAor CQkJCQkJCQl2YXJpYWJsZXMtPm52YXJzLAogCQkJCQkJCQlzaXplb2YoVmFyaWFibGUpLAogCQkJ CQkJCQljb21wYXJlVmFyaWFibGVOYW1lcyk7CiB9CiAKIC8qIEdldCB0aGUgdmFsdWUgb2YgYSB2 YXJpYWJsZSwgaW4gc3RyaW5nIGZvcm07IHJldHVybnMgTlVMTCBpZiB1bmtub3duICovCiBzdGF0 aWMgY2hhciAqCi1nZXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjaGFyICpuYW1lKQorZ2V0VmFyaWFi bGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIgKm5hbWUpCiB7CiAJVmFyaWFibGUgICAqdmFy OwogCWNoYXIJCXN0cmluZ2Zvcm1bNjRdOwogCi0JdmFyID0gbG9va3VwVmFyaWFibGUoc3QsIG5h bWUpOworCXZhciA9IGxvb2t1cFZhcmlhYmxlKHZhcmlhYmxlcywgbmFtZSk7CiAJaWYgKHZhciA9 PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsJCQkvKiBub3QgZm91bmQgKi8KIApAQCAtMTM2MiwyMSAr MTM4NCw0MyBAQCB2YWxpZF92YXJpYWJsZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiAJcmV0dXJu IHRydWU7CiB9CiAKKy8qCisgKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciAn bmVlZGVkJyBtb3JlIHZhcmlhYmxlIGluIHRoZSB2YXJpYWJsZXMKKyAqIGFycmF5LiBJdCBpcyBh c3N1bWVkIHRoYXQgdGhlIHN1bSBvZiB0aGUgbnVtYmVyIG9mIGN1cnJlbnQgdmFyaWFibGVzIGFu ZCB0aGUKKyAqIG51bWJlciBvZiBuZWVkZWQgdmFyaWFibGVzIGlzIGxlc3MgdGhhbiBvciBlcXVh bCB0byAoSU5UX01BWCAtCisgKiBWQVJJQUJMRVNfQUxMT0NfTUFSR0lOKS4KKyAqLworc3RhdGlj IHZvaWQKK2VubGFyZ2VWYXJpYWJsZXMoVmFyaWFibGVzICp2YXJpYWJsZXMsIGludCBuZWVkZWQp Cit7CisJLyogdG90YWwgbnVtYmVyIG9mIHZhcmlhYmxlcyByZXF1aXJlZCBub3cgKi8KKwluZWVk ZWQgKz0gdmFyaWFibGVzLT5udmFyczsKKworCWlmICh2YXJpYWJsZXMtPm1heF92YXJzIDwgbmVl ZGVkKQorCXsKKwkJLyoKKwkJICogV2UgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSB2YXJpYWJsZXMg b25lIGJ5IG9uZTsgZm9yIGVmZmljaWVuY3ksIGFkZCBhCisJCSAqIGNvbnN0YW50IG1hcmdpbiBl YWNoIHRpbWUgaXQgb3ZlcmZsb3dzLgorCQkgKi8KKwkJdmFyaWFibGVzLT5tYXhfdmFycyA9IG5l ZWRlZCArIFZBUklBQkxFU19BTExPQ19NQVJHSU47CisJCXZhcmlhYmxlcy0+dmFycyA9IChWYXJp YWJsZSAqKQorCQkJcGdfcmVhbGxvYyh2YXJpYWJsZXMtPnZhcnMsIHZhcmlhYmxlcy0+bWF4X3Zh cnMgKiBzaXplb2YoVmFyaWFibGUpKTsKKwl9Cit9CisKIC8qCiAgKiBMb29rdXAgYSB2YXJpYWJs ZSBieSBuYW1lLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlLgogICogQ2FsbGVyIGlzIGV4cGVjdGVk IHRvIGFzc2lnbiBhIHZhbHVlIHRvIHRoZSB2YXJpYWJsZS4KICAqIFJldHVybnMgTlVMTCBvbiBm YWlsdXJlIChiYWQgbmFtZSkuCiAgKi8KIHN0YXRpYyBWYXJpYWJsZSAqCi1sb29rdXBDcmVhdGVW YXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lKQorbG9v a3VwQ3JlYXRlVmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRl eHQsIGNoYXIgKm5hbWUpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCi0JdmFyID0gbG9va3VwVmFy aWFibGUoc3QsIG5hbWUpOworCXZhciA9IGxvb2t1cFZhcmlhYmxlKHZhcmlhYmxlcywgbmFtZSk7 CiAJaWYgKHZhciA9PSBOVUxMKQogCXsKLQkJVmFyaWFibGUgICAqbmV3dmFyczsKLQogCQkvKgog CQkgKiBDaGVjayBmb3IgdGhlIG5hbWUgb25seSB3aGVuIGRlY2xhcmluZyBhIG5ldyB2YXJpYWJs ZSB0byBhdm9pZAogCQkgKiBvdmVyaGVhZC4KQEAgLTEzODksMjMgKzE0MzMsMTcgQEAgbG9va3Vw Q3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFt ZSkKIAkJfQogCiAJCS8qIENyZWF0ZSB2YXJpYWJsZSBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheSAq LwotCQlpZiAoc3QtPnZhcmlhYmxlcykKLQkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikgcGdfcmVh bGxvYyhzdC0+dmFyaWFibGVzLAotCQkJCQkJCQkJCQkgIChzdC0+bnZhcmlhYmxlcyArIDEpICog c2l6ZW9mKFZhcmlhYmxlKSk7Ci0JCWVsc2UKLQkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikgcGdf bWFsbG9jKHNpemVvZihWYXJpYWJsZSkpOwotCi0JCXN0LT52YXJpYWJsZXMgPSBuZXd2YXJzOwor CQllbmxhcmdlVmFyaWFibGVzKHZhcmlhYmxlcywgMSk7CiAKLQkJdmFyID0gJm5ld3ZhcnNbc3Qt Pm52YXJpYWJsZXNdOworCQl2YXIgPSAmKHZhcmlhYmxlcy0+dmFyc1t2YXJpYWJsZXMtPm52YXJz XSk7CiAKIAkJdmFyLT5uYW1lID0gcGdfc3RyZHVwKG5hbWUpOwogCQl2YXItPnN2YWx1ZSA9IE5V TEw7CiAJCS8qIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHJlbWFpbmluZyBmaWVs ZHMgKi8KIAotCQlzdC0+bnZhcmlhYmxlcysrOworCQl2YXJpYWJsZXMtPm52YXJzKys7CiAJCS8q IHdlIGRvbid0IHJlLXNvcnQgdGhlIGFycmF5IHRpbGwgd2UgaGF2ZSB0byAqLwotCQlzdC0+dmFy c19zb3J0ZWQgPSBmYWxzZTsKKwkJdmFyaWFibGVzLT52YXJzX3NvcnRlZCA9IGZhbHNlOwogCX0K IAogCXJldHVybiB2YXI7CkBAIC0xNDE0LDEyICsxNDUyLDEzIEBAIGxvb2t1cENyZWF0ZVZhcmlh YmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUpCiAvKiBBc3Np Z24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZSAq LwogLyogUmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlIChiYWQgbmFtZSkgKi8KIHN0YXRpYyBib29s Ci1wdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICp2YWx1ZSkKK3B1dFZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBj b25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAorCQkJY29uc3QgY2hhciAqdmFsdWUpCiB7 CiAJVmFyaWFibGUgICAqdmFyOwogCWNoYXIJICAgKnZhbDsKIAotCXZhciA9IGxvb2t1cENyZWF0 ZVZhcmlhYmxlKHN0LCBjb250ZXh0LCBuYW1lKTsKKwl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJs ZSh2YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUpOwogCWlmICghdmFyKQogCQlyZXR1cm4gZmFsc2U7 CiAKQEAgLTE0MzcsMTIgKzE0NzYsMTIgQEAgcHV0VmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3Qg Y2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCiAvKiBBc3NpZ24g YSB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICovCiAvKiBSZXR1 cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLwogc3RhdGljIGJvb2wKLXB1dFZhcmlh YmxlVmFsdWUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKK3B1 dFZhcmlhYmxlVmFsdWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQs IGNoYXIgKm5hbWUsCiAJCQkJIGNvbnN0IFBnQmVuY2hWYWx1ZSAqdmFsdWUpCiB7CiAJVmFyaWFi bGUgICAqdmFyOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5h bWUpOworCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwgbmFt ZSk7CiAJaWYgKCF2YXIpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTQ1NywxMiArMTQ5NiwxMyBA QCBwdXRWYXJpYWJsZVZhbHVlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIg Km5hbWUsCiAvKiBBc3NpZ24gYW4gaW50ZWdlciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGlu ZyBpdCBpZiBuZWVkIGJlICovCiAvKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1l KSAqLwogc3RhdGljIGJvb2wKLXB1dFZhcmlhYmxlSW50KENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIg KmNvbnRleHQsIGNoYXIgKm5hbWUsIGludDY0IHZhbHVlKQorcHV0VmFyaWFibGVJbnQoVmFyaWFi bGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkgICBp bnQ2NCB2YWx1ZSkKIHsKIAlQZ0JlbmNoVmFsdWUgdmFsOwogCiAJc2V0SW50VmFsdWUoJnZhbCwg dmFsdWUpOwotCXJldHVybiBwdXRWYXJpYWJsZVZhbHVlKHN0LCBjb250ZXh0LCBuYW1lLCAmdmFs KTsKKwlyZXR1cm4gcHV0VmFyaWFibGVWYWx1ZSh2YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUsICZ2 YWwpOwogfQogCiAvKgpAQCAtMTUxNyw3ICsxNTU3LDcgQEAgcmVwbGFjZVZhcmlhYmxlKGNoYXIg KipzcWwsIGNoYXIgKnBhcmFtLCBpbnQgbGVuLCBjaGFyICp2YWx1ZSkKIH0KIAogc3RhdGljIGNo YXIgKgotYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKK2Fzc2lnblZhcmlh YmxlcyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqc3FsKQogewogCWNoYXIJICAgKnAsCiAJ CQkgICAqbmFtZSwKQEAgLTE1MzgsNyArMTU3OCw3IEBAIGFzc2lnblZhcmlhYmxlcyhDU3RhdGUg KnN0LCBjaGFyICpzcWwpCiAJCQljb250aW51ZTsKIAkJfQogCi0JCXZhbCA9IGdldFZhcmlhYmxl KHN0LCBuYW1lKTsKKwkJdmFsID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAkJZnJl ZShuYW1lKTsKIAkJaWYgKHZhbCA9PSBOVUxMKQogCQl7CkBAIC0xNTUzLDEyICsxNTkzLDEzIEBA IGFzc2lnblZhcmlhYmxlcyhDU3RhdGUgKnN0LCBjaGFyICpzcWwpCiB9CiAKIHN0YXRpYyB2b2lk Ci1nZXRRdWVyeVBhcmFtcyhDU3RhdGUgKnN0LCBjb25zdCBDb21tYW5kICpjb21tYW5kLCBjb25z dCBjaGFyICoqcGFyYW1zKQorZ2V0UXVlcnlQYXJhbXMoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNv bnN0IENvbW1hbmQgKmNvbW1hbmQsCisJCQkgICBjb25zdCBjaGFyICoqcGFyYW1zKQogewogCWlu dAkJCWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWFuZC0+YXJnYyAtIDE7IGkrKykKLQkJcGFy YW1zW2ldID0gZ2V0VmFyaWFibGUoc3QsIGNvbW1hbmQtPmFyZ3ZbaSArIDFdKTsKKwkJcGFyYW1z W2ldID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBjb21tYW5kLT5hcmd2W2kgKyAxXSk7CiB9CiAK IHN0YXRpYyBjaGFyICoKQEAgLTIzOTAsNyArMjQzMSw3IEBAIGV2YWx1YXRlRXhwcihUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgUGdCZW5jaEV4cHIgKmV4cHIsIFBnQmVuY2hWYWx1ZSAqcmV0 dmFsCiAJCQl7CiAJCQkJVmFyaWFibGUgICAqdmFyOwogCi0JCQkJaWYgKCh2YXIgPSBsb29rdXBW YXJpYWJsZShzdCwgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVMTCkKKwkJCQlpZiAo KHZhciA9IGxvb2t1cFZhcmlhYmxlKCZzdC0+dmFyaWFibGVzLCBleHByLT51LnZhcmlhYmxlLnZh cm5hbWUpKSA9PSBOVUxMKQogCQkJCXsKIAkJCQkJZnByaW50ZihzdGRlcnIsICJ1bmRlZmluZWQg dmFyaWFibGUgXCIlc1wiXG4iLAogCQkJCQkJCWV4cHItPnUudmFyaWFibGUudmFybmFtZSk7CkBA IC0yNDU0LDcgKzI0OTUsNyBAQCBnZXRNZXRhQ29tbWFuZChjb25zdCBjaGFyICpjbWQpCiAgKiBS ZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQsIG9yIGZhbHNlIG9uIGVycm9yLgogICovCiBzdGF0aWMg Ym9vbAotcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoq YXJndiwgaW50IGFyZ2MpCitydW5TaGVsbENvbW1hbmQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNo YXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiB7CiAJY2hhcgkJY29tbWFuZFtT SEVMTF9DT01NQU5EX1NJWkVdOwogCWludAkJCWksCkBAIC0yNDg1LDcgKzI1MjYsNyBAQCBydW5T aGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQg YXJnYykKIAkJewogCQkJYXJnID0gYXJndltpXSArIDE7CS8qIGEgc3RyaW5nIGxpdGVyYWwgc3Rh cnRpbmcgd2l0aCBjb2xvbnMgKi8KIAkJfQotCQllbHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUo c3QsIGFyZ3ZbaV0gKyAxKSkgPT0gTlVMTCkKKwkJZWxzZSBpZiAoKGFyZyA9IGdldFZhcmlhYmxl KHZhcmlhYmxlcywgYXJndltpXSArIDEpKSA9PSBOVUxMKQogCQl7CiAJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAogCQkJCQlhcmd2WzBdLCBhcmd2 W2ldKTsKQEAgLTI1NDgsNyArMjU4OSw3IEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBj aGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQkJCWFyZ3ZbMF0sIHJlcyk7 CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKCFwdXRWYXJpYWJsZUludChzdCwgInNldHNoZWxs IiwgdmFyaWFibGUsIHJldHZhbCkpCisJaWYgKCFwdXRWYXJpYWJsZUludCh2YXJpYWJsZXMsICJz ZXRzaGVsbCIsIHZhcmlhYmxlLCByZXR2YWwpKQogCQlyZXR1cm4gZmFsc2U7CiAKICNpZmRlZiBE RUJVRwpAQCAtMjYwMiw3ICsyNjQzLDcgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFu ZCAqY29tbWFuZCkKIAkJY2hhcgkgICAqc3FsOwogCiAJCXNxbCA9IHBnX3N0cmR1cChjb21tYW5k LT5hcmd2WzBdKTsKLQkJc3FsID0gYXNzaWduVmFyaWFibGVzKHN0LCBzcWwpOworCQlzcWwgPSBh c3NpZ25WYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsIHNxbCk7CiAKIAkJaWYgKGRlYnVnKQogCQkJ ZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3QtPmlkLCBzcWwpOwpA QCAtMjYxNCw3ICsyNjU1LDcgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29t bWFuZCkKIAkJY29uc3QgY2hhciAqc3FsID0gY29tbWFuZC0+YXJndlswXTsKIAkJY29uc3QgY2hh ciAqcGFyYW1zW01BWF9BUkdTXTsKIAotCQlnZXRRdWVyeVBhcmFtcyhzdCwgY29tbWFuZCwgcGFy YW1zKTsKKwkJZ2V0UXVlcnlQYXJhbXMoJnN0LT52YXJpYWJsZXMsIGNvbW1hbmQsIHBhcmFtcyk7 CiAKIAkJaWYgKGRlYnVnKQogCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAl c1xuIiwgc3QtPmlkLCBzcWwpOwpAQCAtMjY0OCw3ICsyNjg5LDcgQEAgc2VuZENvbW1hbmQoQ1N0 YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJCXN0LT5wcmVwYXJlZFtzdC0+dXNlX2ZpbGVd ID0gdHJ1ZTsKIAkJfQogCi0JCWdldFF1ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOwor CQlnZXRRdWVyeVBhcmFtcygmc3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAkJcHJl cGFyZWRTdGF0ZW1lbnROYW1lKG5hbWUsIHN0LT51c2VfZmlsZSwgc3QtPmNvbW1hbmQpOwogCiAJ CWlmIChkZWJ1ZykKQEAgLTI2NzYsMTQgKzI3MTcsMTQgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpz dCwgQ29tbWFuZCAqY29tbWFuZCkKICAqIG9mIGRlbGF5LCBpbiBtaWNyb3NlY29uZHMuICBSZXR1 cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBib29sCi1l dmFsdWF0ZVNsZWVwKENTdGF0ZSAqc3QsIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICp1c2Vj cykKK2V2YWx1YXRlU2xlZXAoVmFyaWFibGVzICp2YXJpYWJsZXMsIGludCBhcmdjLCBjaGFyICoq YXJndiwgaW50ICp1c2VjcykKIHsKIAljaGFyCSAgICp2YXI7CiAJaW50CQkJdXNlYzsKIAogCWlm ICgqYXJndlsxXSA9PSAnOicpCiAJewotCQlpZiAoKHZhciA9IGdldFZhcmlhYmxlKHN0LCBhcmd2 WzFdICsgMSkpID09IE5VTEwpCisJCWlmICgodmFyID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBh cmd2WzFdICsgMSkpID09IE5VTEwpCiAJCXsKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVm aW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCiAJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pOwpAQCAtMjk1 Niw3ICsyOTk3LDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRz RGF0YSAqYWdnKQogCQkJCQkJICovCiAJCQkJCQlpbnQJCQl1c2VjOwogCi0JCQkJCQlpZiAoIWV2 YWx1YXRlU2xlZXAoc3QsIGFyZ2MsIGFyZ3YsICZ1c2VjKSkKKwkJCQkJCWlmICghZXZhbHVhdGVT bGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywgYXJndiwgJnVzZWMpKQogCQkJCQkJewogCQkJCQkJ CWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZh aWxlZCIpOwogCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwpAQCAtMjk5Nyw3ICsz MDM4LDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAq YWdnKQogCiAJCQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVCkKIAkJCQkJCXsKLQkJ CQkJCQlpZiAoIXB1dFZhcmlhYmxlVmFsdWUoc3QsIGFyZ3ZbMF0sIGFyZ3ZbMV0sICZyZXN1bHQp KQorCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3QtPnZhcmlhYmxlcywgYXJndlswXSwK KwkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3VsdCkpCiAJCQkJCQkJewogCQkJCQkJCQljb21t YW5kRmFpbGVkKHN0LCAic2V0IiwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIp OwogCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKQEAgLTMwNTAsNyArMzA5Miw5 IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykK IAkJCQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0VUU0hFTEwpCiAJ CQkJCXsKLQkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZChzdCwgYXJndlsxXSwgYXJn diArIDIsIGFyZ2MgLSAyKTsKKwkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZCgmc3Qt PnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJCQkJICBhcmd2WzFdLCBhcmd2ICsgMiwKKwkJCQkJCQkJ CQkJCQkJICBhcmdjIC0gMik7CiAKIAkJCQkJCWlmICh0aW1lcl9leGNlZWRlZCkgLyogdGltZW91 dCAqLwogCQkJCQkJewpAQCAtMzA3MCw3ICszMTE0LDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGNv bW1hbmQtPm1ldGEgPT0gTUVUQV9TSEVMTCkKIAkJCQkJewotCQkJCQkJYm9vbAkJcmV0ID0gcnVu U2hlbGxDb21tYW5kKHN0LCBOVUxMLCBhcmd2ICsgMSwgYXJnYyAtIDEpOworCQkJCQkJYm9vbAkJ cmV0ID0gcnVuU2hlbGxDb21tYW5kKCZzdC0+dmFyaWFibGVzLCBOVUxMLAorCQkJCQkJCQkJCQkJ CQkgIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CiAKIAkJCQkJCWlmICh0aW1lcl9leGNlZWRlZCkgLyog dGltZW91dCAqLwogCQkJCQkJewpAQCAtNTA3NSw3ICs1MTIwLDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJCX0KIAogCQkJCQkqcCsrID0gJ1wwJzsKLQkJCQkJaWYgKCFwdXRW YXJpYWJsZSgmc3RhdGVbMF0sICJvcHRpb24iLCBvcHRhcmcsIHApKQorCQkJCQlpZiAoIXB1dFZh cmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJvcHRpb24iLCBvcHRhcmcsIHApKQogCQkJCQkJ ZXhpdCgxKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC01Mzc3LDE5ICs1NDIyLDE5IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaW50CQkJajsKIAogCQkJc3RhdGVbaV0uaWQgPSBp OwotCQkJZm9yIChqID0gMDsgaiA8IHN0YXRlWzBdLm52YXJpYWJsZXM7IGorKykKKwkJCWZvciAo aiA9IDA7IGogPCBzdGF0ZVswXS52YXJpYWJsZXMubnZhcnM7IGorKykKIAkJCXsKLQkJCQlWYXJp YWJsZSAgICp2YXIgPSAmc3RhdGVbMF0udmFyaWFibGVzW2pdOworCQkJCVZhcmlhYmxlICAgKnZh ciA9ICZzdGF0ZVswXS52YXJpYWJsZXMudmFyc1tqXTsKIAogCQkJCWlmICh2YXItPnZhbHVlLnR5 cGUgIT0gUEdCVF9OT19WQUxVRSkKIAkJCQl7Ci0JCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgm c3RhdGVbaV0sICJzdGFydHVwIiwKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZVZhbHVlKCZzdGF0ZVtp XS52YXJpYWJsZXMsICJzdGFydHVwIiwKIAkJCQkJCQkJCQkgIHZhci0+bmFtZSwgJnZhci0+dmFs dWUpKQogCQkJCQkJZXhpdCgxKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFw dXRWYXJpYWJsZSgmc3RhdGVbaV0sICJzdGFydHVwIiwKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZSgm c3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCiAJCQkJCQkJCQkgdmFyLT5uYW1lLCB2YXIt PnN2YWx1ZSkpCiAJCQkJCQlleGl0KDEpOwogCQkJCX0KQEAgLTU0NjUsMTEgKzU1MTAsMTEgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxs eSBnZXQgLXMgb3IgZGF0YWJhc2Ugc2NhbGUsIGJ1dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4 cGxpY2l0IC1EIHN3aXRjaAogCSAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJz Y2FsZSIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMs ICJzY2FsZSIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykK IAkJewotCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxl Iiwgc2NhbGUpKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAi c3RhcnR1cCIsICJzY2FsZSIsIHNjYWxlKSkKIAkJCQlleGl0KDEpOwogCQl9CiAJfQpAQCAtNTQ3 OCwxNSArNTUyMywxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBEZWZpbmUg YSA6Y2xpZW50X2lkIHZhcmlhYmxlIHRoYXQgaXMgdW5pcXVlIHBlciBjb25uZWN0aW9uLiBCdXQg ZG9uJ3QKIAkgKiBvdmVycmlkZSBhbiBleHBsaWNpdCAtRCBzd2l0Y2guCiAJICovCi0JaWYgKGxv b2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCisJaWYgKGxvb2t1 cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJjbGllbnRfaWQiKSA9PSBOVUxMKQogCXsK IAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCi0JCQlpZiAoIXB1dFZhcmlhYmxlSW50 KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSkpCisJCQlpZiAoIXB1dFZhcmlh YmxlSW50KCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwgImNsaWVudF9pZCIsIGkpKQog CQkJCWV4aXQoMSk7CiAJfQogCiAJLyogc2V0IGRlZmF1bHQgc2VlZCBmb3IgaGFzaCBmdW5jdGlv bnMgKi8KLQlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLCAiZGVmYXVsdF9zZWVkIikgPT0g TlVMTCkKKwlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLnZhcmlhYmxlcywgImRlZmF1bHRf c2VlZCIpID09IE5VTEwpCiAJewogCQl1aW50NjQJCXNlZWQgPSAoKHVpbnQ2NCkgKHJhbmRvbSgp ICYgMHhGRkZGKSA8PCA0OCkgfAogCQkoKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCAz MikgfApAQCAtNTQ5NCwxNSArNTUzOSwxNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbmNs aWVudHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIs ICJkZWZhdWx0X3NlZWQiLCAoaW50NjQpIHNlZWQpKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgm c3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJkZWZhdWx0X3NlZWQiLAorCQkJCQkJCQko aW50NjQpIHNlZWQpKQogCQkJCWV4aXQoMSk7CiAJfQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVu bGVzcyBvdmVyd3JpdHRlbiAqLwotCWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJyYW5k b21fc2VlZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJs ZXMsICJyYW5kb21fc2VlZCIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVu dHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJy YW5kb21fc2VlZCIsIHJhbmRvbV9zZWVkKSkKKwkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRl W2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLAorCQkJCQkJCQlyYW5kb21f c2VlZCkpCiAJCQkJZXhpdCgxKTsKIAl9CiAKLS0gCjIuMTcuMQoK --=_7447d1297f0d17f37364b73324d85298 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v11-0003-Pgbench-errors-and-serialization-deadlock-retrie.patch Content-Disposition: attachment; filename=v11-0003-Pgbench-errors-and-serialization-deadlock-retrie.patch; size=119772 RnJvbSA3ZjVkMTVkNTY0YzNiMzVhMmVkMGU5YjBmMzM3ZWE1NDgwYjRiZTgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogV2VkLCA1IFNlcCAyMDE4IDE4OjIzOjA3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgMy80XSBQZ2JlbmNoIGVycm9ycyBhbmQgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBy ZXRyaWVzCgpDbGllbnQncyBydW4gaXMgYWJvcnRlZCBvbmx5IGluIGNhc2Ugb2YgYSBzZXJpb3Vz IGVycm9yLCBmb3IgZXhhbXBsZSwgdGhlCmNvbm5lY3Rpb24gd2l0aCB0aGUgZGF0YWJhc2Ugc2Vy dmVyIHdhcyBsb3N0IG9yIHRoZSBlbmQgb2Ygc2NyaXB0IHJlYWNoZWQKd2l0aG91dCBjb21wbGV0 aW5nIHRoZSBsYXN0IHRyYW5zYWN0aW9uLiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBT UUwgb3IKbWV0YSBjb21tYW5kIGZhaWxzLCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBhbHdh eXMgcm9sbGVkIGJhY2sgd2hpY2ggYWxzbwppbmNsdWRlcyBzZXR0aW5nIHRoZSBjbGllbnQgdmFy aWFibGVzIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhlIHJ1biBvZiB0aGlzCnRyYW5zYWN0aW9uIChp dCBpcyBhc3N1bWVkIHRoYXQgb25lIHRyYW5zYWN0aW9uIHNjcmlwdCBjb250YWlucyBvbmx5IG9u ZQp0cmFuc2FjdGlvbikuCgpUcmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRs b2NrIGVycm9ycyBhcmUgcm9sbGVkIGJhY2sgYW5kIHJlcGVhdGVkCnVudGlsIHRoZXkgY29tcGxl dGUgc3VjY2Vzc2Z1bGx5IG9yIHJlYWNoIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmllcyAoc3Bl Y2lmaWVkCmJ5IHRoZSAtLW1heC10cmllcyBvcHRpb24pIC8gdGhlIG1heGltdW0gdGltZSBvZiB0 cmllcyAoc3BlY2lmaWVkIGJ5IHRoZQotLWxhdGVuY3ktbGltaXQgb3B0aW9uKS4gVGhlc2Ugb3B0 aW9ucyBjYW4gYmUgY29tYmluZWQgdG9nZXRoZXI7IG1vcmUgb3ZlciwgeW91CmNhbm5vdCB1c2Ug YW4gaW5maW5pdGUgbnVtYmVyIG9mIHRyaWVzICgtLW1heC10cmllcz0wKSB3aXRob3V0IHRoZSBv cHRpb24KLS1sYXRlbmN5LWxpbWl0LiBCeSBkZWZhdWx0IHRoZSBvcHRpb24gLS1tYXgtdHJpZXMg aXMgc2V0IHRvIDEgYW5kIHRyYW5zYWN0aW9ucwp3aXRoIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sg ZXJyb3JzIGFyZSBub3QgcmV0cmllZCBhdCBhbGwuIElmIHRoZSBsYXN0CnRyYW5zYWN0aW9uIHJ1 biBmYWlscywgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJlcG9ydGVkIGFzIGZhaWxlZCwgYW5k IHRoZQpjbGllbnQgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhl IGZpcnN0IHJ1biBvZiB0aGlzCnRyYW5zYWN0aW9uLgoKSWYgdGhlcmUncmUgcmV0cmllcyBhbmQv b3IgZmFpbHVyZXMgdGhlaXIgc3RhdGlzdGljcyBhcmUgcHJpbnRlZCBpbiB0aGUKcHJvZ3Jlc3Ms IGluIHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9uIGxvZ3MgYW5kIGluIHRoZSBlbmQgd2l0 aCBvdGhlcgpyZXN1bHRzIChhbGwgYW5kIGZvciBlYWNoIHNjcmlwdCkuIEFsc28gcmV0cmllcyBh bmQgZmFpbHVyZXMgYXJlIHByaW50ZWQKcGVyLWNvbW1hbmQgd2l0aCBhdmVyYWdlIGxhdGVuY2ll cyBpZiB5b3UgdXNlIHRoZSBhcHByb3ByaWF0ZSBiZW5jaG1hcmtpbmcKb3B0aW9uICgtLXJlcG9y dC1wZXItY29tbWFuZCwgLXIpLiBJZiB5b3Ugd2FudCB0byBncm91cCBmYWlsdXJlcyBieSBiYXNp YyB0eXBlcwooc2VyaWFsaXphdGlvbiBmYWlsdXJlcyAvIGRlYWRsb2NrIGZhaWx1cmVzIC8gb3Ro ZXIgU1FMIGZhaWx1cmVzIC8gZmFpbHVyZXMgaW4KbWV0YSBjb21tYW5kcyksIHVzZSB0aGUgb3B0 aW9uIC0tZmFpbHVyZXMtZGV0YWlsZWQuCgpJZiB5b3Ugd2FudCB0byBkaXN0aW5ndWlzaCBhbGwg ZXJyb3JzIGFuZCBmYWlsdXJlcyAoZXJyb3JzIHdpdGhvdXQgcmV0cnlpbmcpIGJ5CnR5cGUgaW5j bHVkaW5nIHdoaWNoIGxpbWl0IGZvciByZXRyaWVzIHdhcyB2aW9sYXRlZCBhbmQgaG93IGZhciBp dCB3YXMgZXhjZWVkZWQKZm9yIHRoZSBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1cmVzLCB1 c2UgdGhlIG9wdGlvbnMgLS1wcmludC1lcnJvcnMgb3IKLS1kZWJ1Zy4gVGhlIGZpcnN0IG9wdGlv biBpcyByZWNvbW1lbmRlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2Ugd2l0aCB0aGUKc2Vjb25k IG9wdGlvbiB0aGUgb3V0cHV0IGNhbiBiZSBzaWduaWZpY2FudGx5IGluY3JlYXNlZCBkdWUgdG8g ZGVidWcgbWVzc2FnZXMgb2YKc3VjY2Vzc2Z1bCBjb21tYW5kcyBvZiBhbGwgdGhlIHRyYW5zYWN0 aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbCAgICAgICAgICAgICAgICB8 ICA0MjAgKysrKystCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAgICAg ICB8IDEzNTggKysrKysrKysrKysrKysrLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5j aF93aXRoX3NlcnZlci5wbCB8ICA0MDggKysrKystCiBzcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdi ZW5jaF9ub19zZXJ2ZXIucGwgICB8ICAgMTAgKwogc3JjL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmMg ICAgICAgICAgICAgICAgICAgfCAgIDE2ICstCiBzcmMvaW5jbHVkZS9mZV91dGlscy9jb25kaXRp b25hbC5oICAgICAgICAgICB8ICAgIDIgKwogNiBmaWxlcyBjaGFuZ2VkLCAxOTYyIGluc2VydGlv bnMoKyksIDI1MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn YmVuY2guc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCmluZGV4IDg4Y2Y4YjM5 MzMuLjRhZmM5OTY4MjUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCkBAIC01NSwxNiArNTUsMjAgQEAg bnVtYmVyIG9mIGNsaWVudHM6IDEwCiBudW1iZXIgb2YgdGhyZWFkczogMQogbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBwZXIgY2xpZW50OiAxMDAwCiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVh bGx5IHByb2Nlc3NlZDogMTAwMDAvMTAwMDAKK21heGltdW0gbnVtYmVyIG9mIHRyaWVzOiAxCiB0 cHMgPSA4NS4xODQ4NzEgKGluY2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCiB0cHMg PSA4NS4yOTYzNDYgKGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCiA8L3NjcmVl bj4KIAogICBUaGUgZmlyc3Qgc2l4IGxpbmVzIHJlcG9ydCBzb21lIG9mIHRoZSBtb3N0IGltcG9y dGFudCBwYXJhbWV0ZXIKLSAgc2V0dGluZ3MuICBUaGUgbmV4dCBsaW5lIHJlcG9ydHMgdGhlIG51 bWJlciBvZiB0cmFuc2FjdGlvbnMgY29tcGxldGVkCisgIHNldHRpbmdzLiAgVGhlIHNldmVudGgg bGluZSByZXBvcnRzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGNvbXBsZXRlZAogICBhbmQg aW50ZW5kZWQgKHRoZSBsYXR0ZXIgYmVpbmcganVzdCB0aGUgcHJvZHVjdCBvZiBudW1iZXIgb2Yg Y2xpZW50cwogICBhbmQgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50KTsgdGhlc2Ug d2lsbCBiZSBlcXVhbCB1bmxlc3MgdGhlIHJ1bgotICBmYWlsZWQgYmVmb3JlIGNvbXBsZXRpb24u ICAoSW4gPG9wdGlvbj4tVDwvb3B0aW9uPiBtb2RlLCBvbmx5IHRoZSBhY3R1YWwKLSAgbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBpcyBwcmludGVkLikKKyAgZmFpbGVkIGJlZm9yZSBjb21wbGV0aW9u IG9yIHNvbWUgU1FML21ldGEgY29tbWFuZChzKSBmYWlsZWQuICAoSW4KKyAgPG9wdGlvbj4tVDwv b3B0aW9uPiBtb2RlLCBvbmx5IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBpcyBw cmludGVkLikKKyAgVGhlIG5leHQgbGluZSByZXBvcnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0 cmllcyBmb3IgdHJhbnNhY3Rpb25zIHdpdGgKKyAgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBl cnJvcnMgKHNlZSA8eHJlZiBsaW5rZW5kPSJmYWlsdXJlcy1hbmQtcmV0cmllcyIKKyAgZW5kdGVy bT0iZmFpbHVyZXMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgog ICBUaGUgbGFzdCB0d28gbGluZXMgcmVwb3J0IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBl ciBzZWNvbmQsCiAgIGZpZ3VyZWQgd2l0aCBhbmQgd2l0aG91dCBjb3VudGluZyB0aGUgdGltZSB0 byBzdGFydCBkYXRhYmFzZSBzZXNzaW9ucy4KICA8L3BhcmE+CkBAIC0zODQsNyArMzg4LDggQEAg cGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9v cHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgIDx0ZXJtPjxvcHRpb24+LS1kZWJ1Zzwvb3B0 aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KLSAgICAgICAgUHJp bnQgZGVidWdnaW5nIG91dHB1dC4KKyAgICAgICAgUHJpbnQgZGVidWdnaW5nIG91dHB1dC4gVGhp cyBvcHRpb24gYXV0b21hdGljYWxseSB0dXJucyBvbiB0aGUgb3B0aW9uCisgICAgICAgIDxvcHRp b24+LS1wcmludC1lcnJvcnM8L29wdGlvbj4uCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0 aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC00NTMsNiArNDU4LDE3IEBAIHBnYmVuY2gg PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kCiAgICAgICAgIGF0IGFsbC4gVGhleSBhcmUgY291bnRlZCBhbmQgcmVw b3J0ZWQgc2VwYXJhdGVseSBhcwogICAgICAgICA8Zmlyc3R0ZXJtPnNraXBwZWQ8L2ZpcnN0dGVy bT4uCiAgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBvcHRp b24gPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBpcyB1c2VkLCB0aGUgdHJhbnNhY3Rpb24K KyAgICAgICAgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGVycm9yIGNhbm5vdCBiZSBy ZXRyaWVkIGlmIHRoZSB0b3RhbCB0aW1lCisgICAgICAgIG9mIGFsbCBpdHMgdHJpZXMgaXMgZ3Jl YXRlciB0aGFuIDxyZXBsYWNlYWJsZT5saW1pdDwvcmVwbGFjZWFibGU+IG1zLiBUbworICAgICAg ICBsaW1pdCBvbmx5IHRoZSB0aW1lIG9mIHRyaWVzIGFuZCBub3QgdGhlaXIgbnVtYmVyLCB1c2UK KyAgICAgICAgPGxpdGVyYWw+LS1tYXgtdHJpZXM9MDwvbGl0ZXJhbD4uIEJ5IGRlZmF1bHQgdGhl IG9wdGlvbgorICAgICAgICA8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+IGlzIHNldCB0byAx IGFuZCB0cmFuc2FjdGlvbnMgd2l0aAorICAgICAgICBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGVy cm9ycyBhcmUgbm90IHJldHJpZWQgYXQgYWxsLiBTZWUgPHhyZWYKKyAgICAgICAgbGlua2VuZD0i ZmFpbHVyZXMtYW5kLXJldHJpZXMiIGVuZHRlcm09ImZhaWx1cmVzLWFuZC1yZXRyaWVzLXRpdGxl Ii8+CisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJldHJ5aW5nIHN1Y2ggdHJh bnNhY3Rpb25zLgorICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zh cmxpc3RlbnRyeT4KIApAQCAtNTEzLDIyICs1MjksMzEgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxl PmQKICAgICAgICAgU2hvdyBwcm9ncmVzcyByZXBvcnQgZXZlcnkgPHJlcGxhY2VhYmxlPnNlYzwv cmVwbGFjZWFibGU+IHNlY29uZHMuICBUaGUgcmVwb3J0CiAgICAgICAgIGluY2x1ZGVzIHRoZSB0 aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwgdGhlIFRQUyBzaW5jZSB0aGUKICAg ICAgICAgbGFzdCByZXBvcnQsIGFuZCB0aGUgdHJhbnNhY3Rpb24gbGF0ZW5jeSBhdmVyYWdlIGFu ZCBzdGFuZGFyZAotICAgICAgICBkZXZpYXRpb24gc2luY2UgdGhlIGxhc3QgcmVwb3J0LiAgVW5k ZXIgdGhyb3R0bGluZyAoPG9wdGlvbj4tUjwvb3B0aW9uPiksCi0gICAgICAgIHRoZSBsYXRlbmN5 IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0byB0aGUgdHJhbnNhY3Rpb24gc2NoZWR1bGVkCi0g ICAgICAgIHN0YXJ0IHRpbWUsIG5vdCB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJlZ2lubmluZyB0 aW1lLCB0aHVzIGl0IGFsc28KLSAgICAgICAgaW5jbHVkZXMgdGhlIGF2ZXJhZ2Ugc2NoZWR1bGUg bGFnIHRpbWUuCisgICAgICAgIGRldmlhdGlvbiBzaW5jZSB0aGUgbGFzdCByZXBvcnQuICBJZiBh bnkgdHJhbnNhY3Rpb25zIGhhdmUgcmVjZWl2ZWQgYQorICAgICAgICBmYWlsdXJlIGluIHRoZSBT UUwgb3IgbWV0YSBjb21tYW5kIHNpbmNlIHRoZSBsYXN0IHJlcG9ydCwgdGhleSBhcmUgYWxzbwor ICAgICAgICByZXBvcnRlZCBhcyBmYWlsZWQuICBVbmRlciB0aHJvdHRsaW5nICg8b3B0aW9uPi1S PC9vcHRpb24+KSwgdGhlIGxhdGVuY3kKKyAgICAgICAgaXMgY29tcHV0ZWQgd2l0aCByZXNwZWN0 IHRvIHRoZSB0cmFuc2FjdGlvbiBzY2hlZHVsZWQgc3RhcnQgdGltZSwgbm90CisgICAgICAgIHRo ZSBhY3R1YWwgdHJhbnNhY3Rpb24gYmVnaW5uaW5nIHRpbWUsIHRodXMgaXQgYWxzbyBpbmNsdWRl cyB0aGUgYXZlcmFnZQorICAgICAgICBzY2hlZHVsZSBsYWcgdGltZS4gIElmIGFueSB0cmFuc2Fj dGlvbnMgaGF2ZSBiZWVuIHJvbGxlZCBiYWNrIGFuZAorICAgICAgICByZXRyaWVkIGFmdGVyIGEg c2VyaWFsaXphdGlvbi9kZWFkbG9jayBlcnJvciBzaW5jZSB0aGUgbGFzdCByZXBvcnQsIHRoZQor ICAgICAgICByZXBvcnQgaW5jbHVkZXMgdGhlIG51bWJlciBvZiBzdWNoIHRyYW5zYWN0aW9ucyBh bmQgdGhlIHN1bSBvZiBhbGwKKyAgICAgICAgcmV0cmllcy4gVXNlIHRoZSBvcHRpb24gPG9wdGlv bj4tLW1heC10cmllczwvb3B0aW9uPiB0byBlbmFibGUKKyAgICAgICAgdHJhbnNhY3Rpb25zIHJl dHJpZXMgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBlcnJvcnMuCiAgICAgICAgPC9wYXJh PgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+Ci0gICAgICA8 dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2llczwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LS1yZXBvcnQtcGVyLWNvbW1hbmQ8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZlcmFnZSBwZXIt c3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCi0gICAgICAgIHBlcnNw ZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVhY2ggY29tbWFuZCBhZnRlciB0aGUgYmVuY2htYXJr Ci0gICAgICAgIGZpbmlzaGVzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICAgICAgICBSZXBv cnQgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0ZXIgdGhlIGJl bmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJhZ2UgcGVyLXN0YXRlbWVudCBsYXRl bmN5IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQorICAgICAgICBwZXJzcGVjdGl2ZSBvZiB0aGUg Y2xpZW50KSwgdGhlIG51bWJlciBvZiBmYWlsdXJlcyBhbmQgdGhlIG51bWJlciBvZgorICAgICAg ICByZXRyaWVzIGFmdGVyIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZXJyb3JzIGluIHRoaXMg Y29tbWFuZC4gIFRoZQorICAgICAgICByZXBvcnQgZGlzcGxheXMgcmV0cnkgc3RhdGlzdGljcyBv bmx5IGlmIHRoZSBvcHRpb24KKyAgICAgICAgPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBp cyBub3QgZXF1YWwgdG8gMS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KICAgICAgICA8L3BhcmE+ CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY1Niw2ICs2ODEs MzIgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJs ZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi0tZmFpbHVyZXMtZGV0YWlsZWQ8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFJlcG9ydCBmYWlsdXJlcyBpbiBwZXItdHJhbnNhY3Rpb24g YW5kIGFnZ3JlZ2F0aW9uIGxvZ3MsIGFzIHdlbGwgYXMgaW4KKyAgICAgICAgdGhlIG1haW4gYW5k IHBlci1zY3JpcHQgcmVwb3J0cywgZ3JvdXBlZCBieSB0aGUgZm9sbG93aW5nIHR5cGVzOgorICAg ICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PnNlcmlhbGl6YXRpb24gZmFpbHVyZXM7PC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5kZWFkbG9jayBmYWlsdXJlczs8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPm90aGVyIFNRTCBmYWlsdXJlczs8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgor ICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPm1ldGEgY29tbWFuZCBmYWlsdXJl cy48L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4K KyAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImZhaWx1cmVzLWFuZC1yZXRyaWVzIgorICAgICAg ICBlbmR0ZXJtPSJmYWlsdXJlcy1hbmQtcmV0cmllcy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1h dGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWxvZy1w cmVmaXg9PHJlcGxhY2VhYmxlPnByZWZpeDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgog ICAgICAgPGxpc3RpdGVtPgpAQCAtNjY2LDYgKzcxNywzOSBAQCBwZ2JlbmNoIDxvcHRpb25hbD4g PHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFi bGU+ZAogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1tYXgtdHJpZXM9PHJlcGxhY2VhYmxl Pm51bWJlcl9vZl90cmllczwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGUgcmV0cmllcyBmb3IgdHJhbnNh Y3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbi9kZWFkbG9jayBlcnJvcnMgYW5kCisgICAgICAgIHNl dCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhlc2UgdHJpZXMuIFRoaXMgb3B0aW9uIGNhbiBiZSBj b21iaW5lZCB3aXRoCisgICAgICAgIHRoZSBvcHRpb24gPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8 L29wdGlvbj4gd2hpY2ggbGltaXRzIHRoZSB0b3RhbCB0aW1lCisgICAgICAgIG9mIGFsbCB0cmFu c2FjdGlvbiB0cmllczsgbW9yZSBvdmVyLCB5b3UgY2Fubm90IHVzZSBhbiBpbmZpbml0ZSBudW1i ZXIKKyAgICAgICAgb2YgdHJpZXMgKDxsaXRlcmFsPi0tbWF4LXRyaWVzPTA8L2xpdGVyYWw+KSB3 aXRob3V0IHRoZSBvcHRpb24KKyAgICAgICAgPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlv bj4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEgYW5kCisgICAgICAgIHRyYW5zYWN0aW9ucyB3aXRo IHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZXJyb3JzIGFyZSBub3QgcmV0cmllZCBhdCBhbGwuCisg ICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJmYWlsdXJlcy1hbmQtcmV0cmllcyIKKyAgICAgICAg ZW5kdGVybT0iZmFpbHVyZXMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRp b24gYWJvdXQKKyAgICAgICAgcmV0cnlpbmcgc3VjaCB0cmFuc2FjdGlvbnMuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1wcmludC1lcnJvcnM8L29wdGlvbj48 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFByaW50IG1l c3NhZ2VzIG9mIGFsbCBlcnJvcnMgYW5kIGZhaWx1cmVzIChlcnJvcnMgd2l0aG91dCByZXRyeWlu ZykKKyAgICAgICAgaW5jbHVkaW5nIHdoaWNoIGxpbWl0IGZvciByZXRyaWVzIHdhcyB2aW9sYXRl ZCBhbmQgaG93IGZhciBpdCB3YXMKKyAgICAgICAgZXhjZWVkZWQgZm9yIHRoZSBzZXJpYWxpemF0 aW9uL2RlYWRsb2NrIGZhaWx1cmVzLiAoTm90ZSB0aGF0IGluIHRoaXMKKyAgICAgICAgY2FzZSB0 aGUgb3V0cHV0IGNhbiBiZSBzaWduaWZpY2FudGx5IGluY3JlYXNlZC4pLiBUaGlzIG9wdGlvbiBp cworICAgICAgICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG9wdGlvbiA8b3B0aW9uPi0t ZGVidWc8L29wdGlvbj4gaXMgdXNlZC4KKyAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImZhaWx1 cmVzLWFuZC1yZXRyaWVzIgorICAgICAgICBlbmR0ZXJtPSJmYWlsdXJlcy1hbmQtcmV0cmllcy10 aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xp c3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLXByb2dyZXNzLXRpbWVzdGFtcDwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDxsaXN0aXRlbT4KQEAgLTgwNyw4ICs4OTEsOCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZAogIDxyZWZzZWN0MT4KICAgPHRpdGxlPk5vdGVzPC90aXRsZT4KIAotIDxyZWZzZWN0Mj4KLSAg PHRpdGxlPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvcXVvdGU+IEFjdHVhbGx5IFBl cmZvcm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+PzwvdGl0bGU+Cisg PHJlZnNlY3QyIGlkPSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMiPgorICA8dGl0bGUgaWQ9InRy YW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSI+V2hhdCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0 aW9uPC9xdW90ZT4gQWN0dWFsbHkgUGVyZm9ybWVkIGluIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9h cHBsaWNhdGlvbj4/PC90aXRsZT4KIAogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNo PC9hcHBsaWNhdGlvbj4gZXhlY3V0ZXMgdGVzdCBzY3JpcHRzIGNob3NlbiByYW5kb21seQpAQCAt ODgxLDYgKzk2NSwxMSBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8 L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ZAogICAgIGJvdGggb2xkIGFu ZCBuZXcgdmVyc2lvbnMgb2YgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiwgYmUg c3VyZSB0byB3cml0ZQogICAgIGVhY2ggU1FMIGNvbW1hbmQgb24gYSBzaW5nbGUgbGluZSBlbmRp bmcgd2l0aCBhIHNlbWljb2xvbi4KICAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIEl0IGlzIGFz c3VtZWQgdGhhdCB0aGUgc2NyaXB0cyB1c2VkIGRvIG5vdCBjb250YWluIGluY29tcGxldGUgYmxv Y2tzIG9mIFNRTAorICAgIHRyYW5zYWN0aW9ucy4gSWYgYXQgcnVudGltZSB0aGUgY2xpZW50IHJl YWNoZXMgdGhlIGVuZCBvZiB0aGUgc2NyaXB0IHdpdGhvdXQKKyAgICBjb21wbGV0aW5nIHRoZSBs YXN0IHRyYW5zYWN0aW9uIGJsb2NrLCBoZSB3aWxsIGJlIGFib3J0ZWQuCisgICA8L3BhcmE+CiAg IDwvbm90ZT4KIAogICA8cGFyYT4KQEAgLTE1ODMsNyArMTY3Miw3IEBAIEVORDsKICAgIFRoZSBm b3JtYXQgb2YgdGhlIGxvZyBpczoKIAogPHN5bm9wc2lzPgotPHJlcGxhY2VhYmxlPmNsaWVudF9p ZDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvcmVwbGFjZWFibGU+ IDxyZXBsYWNlYWJsZT50aW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNjcmlwdF9ubzwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lX2Vwb2NoPC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPnRpbWVfdXM8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zY2hl ZHVsZV9sYWc8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmNsaWVudF9p ZDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvcmVwbGFjZWFibGU+ IDxyZXBsYWNlYWJsZT50aW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNjcmlwdF9ubzwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lX2Vwb2NoPC9yZXBsYWNlYWJsZT4gPHJlcGxh Y2VhYmxlPnRpbWVfdXM8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zY2hl ZHVsZV9sYWc8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5yZXRyaWVzPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KIDwvc3lub3BzaXM+CiAKICAgIHdo ZXJlCkBAIC0xNjA0LDYgKzE2OTMsMTggQEAgRU5EOwogICAgV2hlbiBib3RoIDxvcHRpb24+LS1y YXRlPC9vcHRpb24+IGFuZCA8b3B0aW9uPi0tbGF0ZW5jeS1saW1pdDwvb3B0aW9uPiBhcmUgdXNl ZCwKICAgIHRoZSA8cmVwbGFjZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IGZvciBhIHNraXBwZWQg dHJhbnNhY3Rpb24gd2lsbCBiZSByZXBvcnRlZCBhcwogICAgPGxpdGVyYWw+c2tpcHBlZDwvbGl0 ZXJhbD4uCisgICA8cmVwbGFjZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IGlzIHRoZSBzdW0g b2YgYWxsIHRoZSByZXRyaWVzIGFmdGVyIHRoZQorICAgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9j ayBlcnJvcnMgZHVyaW5nIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24uIEl0IGlzCisgICBw cmVzZW50IG9ubHkgaWYgdGhlIG9wdGlvbiA8b3B0aW9uPi0tbWF4LXRyaWVzPC9vcHRpb24+IGlz IG5vdCBlcXVhbCB0byAxLgorICAgSWYgdGhlIHRyYW5zYWN0aW9uIGVuZGVkIHdpdGggYSBmYWls dXJlLCBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPgorICAgd2lsbCBiZSByZXBv cnRlZCBhcyA8bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+LiBJZiB5b3UgdXNlIHRoZSBvcHRpb24K KyAgIDxvcHRpb24+LS1mYWlsdXJlcy1kZXRhaWxlZDwvb3B0aW9uPiwgdGhlIDxyZXBsYWNlYWJs ZT50aW1lPC9yZXBsYWNlYWJsZT4gb2YKKyAgIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbCBi ZSByZXBvcnRlZCBhcworICAgPGxpdGVyYWw+c2VyaWFsaXphdGlvbl9mYWlsdXJlPC9saXRlcmFs PiAvCisgICA8bGl0ZXJhbD5kZWFkbG9ja19mYWlsdXJlPC9saXRlcmFsPiAvIDxsaXRlcmFsPm90 aGVyX3NxbF9mYWlsdXJlPC9saXRlcmFsPiAvCisgICA8bGl0ZXJhbD5tZXRhX2NvbW1hbmRfZmFp bHVyZTwvbGl0ZXJhbD4gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGZhaWx1cmUgKHNlZQorICAg PHhyZWYgbGlua2VuZD0iZmFpbHVyZXMtYW5kLXJldHJpZXMiIGVuZHRlcm09ImZhaWx1cmVzLWFu ZC1yZXRyaWVzLXRpdGxlIi8+CisgICBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KQEAgLTE2MzIsNiArMTczMywyNCBAQCBFTkQ7CiAgICB3ZXJlIGFscmVhZHkg bGF0ZSBiZWZvcmUgdGhleSB3ZXJlIGV2ZW4gc3RhcnRlZC4KICAgPC9wYXJhPgogCisgIDxwYXJh PgorICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGEgc25pcHBldCBvZiBhIGxvZyBmaWxl IHdpdGggZmFpbHVyZXMgYW5kCisgICByZXRyaWVzLCB3aXRoIHRoZSBtYXhpbXVtIG51bWJlciBv ZiB0cmllcyBzZXQgdG8gMTAgKG5vdGUgdGhlIGFkZGl0aW9uYWwKKyAgIDxyZXBsYWNlYWJsZT5y ZXRyaWVzPC9yZXBsYWNlYWJsZT4gY29sdW1uKToKKzxzY3JlZW4+CiszIDAgNDc0MjMgMCAxNDk5 NDE0NDk4IDM0NTAxIDMKKzMgMSA4MzMzIDAgMTQ5OTQxNDQ5OCA0Mjg0OCAwCiszIDIgODM1OCAw IDE0OTk0MTQ0OTggNTEyMTkgMAorNCAwIDcyMzQ1IDAgMTQ5OTQxNDQ5OCA1OTQzMyA2CisxIDMg NDE3MTggMCAxNDk5NDE0NDk4IDY3ODc5IDQKKzEgNCA4NDE2IDAgMTQ5OTQxNDQ5OCA3NjMxMSAw CiszIDMgMzMyMzUgMCAxNDk5NDE0NDk4IDg0NDY5IDMKKzAgMCBmYWlsZWQgMCAxNDk5NDE0NDk4 IDg0OTA1IDkKKzIgMCBmYWlsZWQgMCAxNDk5NDE0NDk4IDg2MjQ4IDkKKzMgNCA4MzA3IDAgMTQ5 OTQxNDQ5OCA5Mjc4OCAwCis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgV2hl biBydW5uaW5nIGEgbG9uZyB0ZXN0IG9uIGhhcmR3YXJlIHRoYXQgY2FuIGhhbmRsZSBhIGxvdCBv ZiB0cmFuc2FjdGlvbnMsCiAgICB0aGUgbG9nIGZpbGVzIGNhbiBiZWNvbWUgdmVyeSBsYXJnZS4g IFRoZSA8b3B0aW9uPi0tc2FtcGxpbmctcmF0ZTwvb3B0aW9uPiBvcHRpb24KQEAgLTE2NDcsNyAr MTc2Niw3IEBAIEVORDsKICAgIGZvcm1hdCBpcyB1c2VkIGZvciB0aGUgbG9nIGZpbGVzOgogCiA8 c3lub3BzaXM+Ci08cmVwbGFjZWFibGU+aW50ZXJ2YWxfc3RhcnQ8L3JlcGxhY2VhYmxlPiA8cmVw bGFjZWFibGU+bnVtX3RyYW5zYWN0aW9uczwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zdW1f bGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zdW1fbGF0ZW5jeV8yPC9yZXBsYWNl YWJsZT4gPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxl Pm1heF9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c3VtX2xh ZzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiA8cmVw bGFjZWFibGU+bWluX2xhZzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tYXhfbGFnPC9yZXBs YWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+IDwv b3B0aW9uYWw+IDwvb3B0aW9uYWw+Cis8cmVwbGFjZWFibGU+aW50ZXJ2YWxfc3RhcnQ8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+bnVtX3RyYW5zYWN0aW9uczwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5zdW1fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zdW1fbGF0ZW5j eV8yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPm1heF9sYXRlbmN5PC9yZXBsYWNlYWJsZT4geyA8cmVwbGFjZWFibGU+ZmFp bHVyZXM8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IHwgPHJlcGxhY2VhYmxlPnNlcmlhbGl6YXRp b25fZmFpbHVyZXM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZGVhZGxvY2tfZmFpbHVyZXM8 L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+b3RoZXJfc3FsX2ZhaWx1cmVzPC9yZXBsYWNlYWJs ZT4gPHJlcGxhY2VhYmxlPm1ldGFfY29tbWFuZF9mYWlsdXJlczwvcmVwbGFjZWFibGU+IDwvb3B0 aW9uYWw+IH0gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+IDxy ZXBsYWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWluX2xhZzwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tYXhfbGFnPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDwvb3B0aW9u YWw+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnJldHJpZWQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAg ICB3aGVyZQpAQCAtMTY2MSw3ICsxNzgwLDIyIEBAIEVORDsKICAgIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB3aXRoaW4gdGhlIGludGVydmFsLAogICAgPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9y ZXBsYWNlYWJsZT4gaXMgdGhlIG1pbmltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAog ICAgYW5kCi0gICA8cmVwbGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUg bWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUgaW50ZXJ2YWwuCisgICA8cmVwbGFjZWFibGU+bWF4 X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUg aW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+ZmFpbHVyZXM8L3JlcGxhY2VhYmxlPiBpcyB0aGUg bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGVuZGVkCisgICB3aXRoIGEgZmFpbGVkIFNRTCBv ciBtZXRhIGNvbW1hbmQgd2l0aGluIHRoZSBpbnRlcnZhbC4gSWYgeW91IHVzZSB0aGUgb3B0aW9u CisgICA8b3B0aW9uPi0tZmFpbHVyZXMtZGV0YWlsZWQ8L29wdGlvbj4sIGluc3RlYWQgb2YgdGhl IHN1bSBvZiBhbGwgZmFpbGVkCisgICB0cmFuc2FjdGlvbnMgeW91IHdpbGwgZ2V0IG1vcmUgZGV0 YWlsZWQgc3RhdGlzdGljcyBmb3IgdGhlIGZhaWxlZAorICAgdHJhbnNhY3Rpb25zIGdyb3VwZWQg YnkgdGhlIGZvbGxvd2luZyB0eXBlczoKKyAgIDxyZXBsYWNlYWJsZT5zZXJpYWxpemF0aW9uX2Zh aWx1cmVzPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZgorICAgdHJhbnNhY3Rpb25zIHRo YXQgZ290IGEgc2VyaWFsaXphdGlvbiBlcnJvciBhbmQgd2VyZSBub3QgcmV0cmllZCBhZnRlciB0 aGlzLAorICAgPHJlcGxhY2VhYmxlPmRlYWRsb2NrX2ZhaWx1cmVzPC9yZXBsYWNlYWJsZT4gaXMg dGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMKKyAgIHRoYXQgZ290IGEgZGVhZGxvY2sgZXJyb3Ig YW5kIHdlcmUgbm90IHJldHJpZWQgYWZ0ZXIgdGhpcywKKyAgIDxyZXBsYWNlYWJsZT5vdGhlcl9z cWxfZmFpbHVyZXM8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucwor ICAgdGhhdCBnb3QgYSBkaWZmZXJlbnQgZXJyb3IgaW4gdGhlIFNRTCBjb21tYW5kIChzdWNoIGVy cm9ycyBhcmUgbmV2ZXIKKyAgIHJldHJpZWQpLAorICAgPHJlcGxhY2VhYmxlPm1ldGFfY29tbWFu ZF9mYWlsdXJlczwvcmVwbGFjZWFibGU+IGlzIHRoZSBudW1iZXIgb2YKKyAgIHRyYW5zYWN0aW9u cyB0aGF0IGdvdCBhbiBlcnJvciBpbiB0aGUgbWV0YSBjb21tYW5kIChzdWNoIGVycm9ycyBhcmUg bmV2ZXIKKyAgIHJldHJpZWQpLgogICAgVGhlIG5leHQgZmllbGRzLAogICAgPHJlcGxhY2VhYmxl PnN1bV9sYWc8L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnN1bV9sYWdfMjwvcmVwbGFjZWFi bGU+LCA8cmVwbGFjZWFibGU+bWluX2xhZzwvcmVwbGFjZWFibGU+LAogICAgYW5kIDxyZXBsYWNl YWJsZT5tYXhfbGFnPC9yZXBsYWNlYWJsZT4sIGFyZSBvbmx5IHByZXNlbnQgaWYgdGhlIDxvcHRp b24+LS1yYXRlPC9vcHRpb24+CkBAIC0xNjY5LDIxICsxODAzLDI1IEBAIEVORDsKICAgIFRoZXkg cHJvdmlkZSBzdGF0aXN0aWNzIGFib3V0IHRoZSB0aW1lIGVhY2ggdHJhbnNhY3Rpb24gaGFkIHRv IHdhaXQgZm9yIHRoZQogICAgcHJldmlvdXMgb25lIHRvIGZpbmlzaCwgaS5lLiB0aGUgZGlmZmVy ZW5jZSBiZXR3ZWVuIGVhY2ggdHJhbnNhY3Rpb24ncwogICAgc2NoZWR1bGVkIHN0YXJ0IHRpbWUg YW5kIHRoZSB0aW1lIGl0IGFjdHVhbGx5IHN0YXJ0ZWQuCi0gICBUaGUgdmVyeSBsYXN0IGZpZWxk LCA8cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+LAorICAgVGhlIG5leHQgZmllbGQs IDxyZXBsYWNlYWJsZT5za2lwcGVkPC9yZXBsYWNlYWJsZT4sCiAgICBpcyBvbmx5IHByZXNlbnQg aWYgdGhlIDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRpb24+IG9wdGlvbiBpcyB1c2VkLCB0 b28uCiAgICBJdCBjb3VudHMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZCBiZWNh dXNlIHRoZXkgd291bGQgaGF2ZQogICAgc3RhcnRlZCB0b28gbGF0ZS4KKyAgIFRoZSA8cmVwbGFj ZWFibGU+cmV0cmllZDwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+cmV0cmllczwvcmVw bGFjZWFibGU+CisgICBmaWVsZHMgYXJlIHByZXNlbnQgb25seSBpZiB0aGUgb3B0aW9uIDxvcHRp b24+LS1tYXgtdHJpZXM8L29wdGlvbj4gaXMgbm90CisgICBlcXVhbCB0byAxLiBUaGV5IHJlcG9y dCB0aGUgbnVtYmVyIG9mIHJldHJpZWQgdHJhbnNhY3Rpb25zIGFuZCB0aGUgc3VtIG9mIGFsbAor ICAgdGhlIHJldHJpZXMgYWZ0ZXIgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBlcnJvcnMgd2l0 aGluIHRoZSBpbnRlcnZhbC4KICAgIEVhY2ggdHJhbnNhY3Rpb24gaXMgY291bnRlZCBpbiB0aGUg aW50ZXJ2YWwgd2hlbiBpdCB3YXMgY29tbWl0dGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAg ICBIZXJlIGlzIHNvbWUgZXhhbXBsZSBvdXRwdXQ6CiA8c2NyZWVuPgotMTM0NTgyODUwMSA1NjAx IDE1NDI3NDQgNDgzNTUyNDE2IDYxIDI1NzMKLTEzNDU4Mjg1MDMgNzg4NCAxOTc5ODEyIDU2NTgw NjczNiA2MCAxNDc5Ci0xMzQ1ODI4NTA1IDcyMDggMTk3OTQyMiA1NjcyNzc1NTIgNTkgMTM5MQot MTM0NTgyODUwNyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTgKLTEzNDU4Mjg1MDkgNzA3 MyAxOTc5Nzc5IDU3MzQ4OTk0MSAyMzYgMTQxMQorMTM0NTgyODUwMSA1NjAxIDE1NDI3NDQgNDgz NTUyNDE2IDYxIDI1NzMgMAorMTM0NTgyODUwMyA3ODg0IDE5Nzk4MTIgNTY1ODA2NzM2IDYwIDE0 NzkgMAorMTM0NTgyODUwNSA3MjA4IDE5Nzk0MjIgNTY3Mjc3NTUyIDU5IDEzOTEgMAorMTM0NTgy ODUwNyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTggMAorMTM0NTgyODUwOSA3MDczIDE5 Nzk3NzkgNTczNDg5OTQxIDIzNiAxNDExIDAKIDwvc2NyZWVuPjwvcGFyYT4KIAogICA8cGFyYT4K QEAgLTE2OTUsMTMgKzE4MzMsNDQgQEAgRU5EOwogIDwvcmVmc2VjdDI+CiAKICA8cmVmc2VjdDI+ Ci0gIDx0aXRsZT5QZXItU3RhdGVtZW50IExhdGVuY2llczwvdGl0bGU+CisgIDx0aXRsZT5QZXIt U3RhdGVtZW50IFJlcG9ydDwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBXaXRoIHRoZSA8b3B0aW9u Pi1yPC9vcHRpb24+IG9wdGlvbiwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPgor ICAgY29sbGVjdHMgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIHN0YXRlbWVudDoK KyAgIDxpdGVtaXplZGxpc3Q+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgIDxsaXRlcmFsPmxhdGVuY3k8L2xpdGVyYWw+ICZtZGFzaDsgZWxhcHNlZCB0cmFuc2FjdGlv biB0aW1lIGZvciBlYWNoCisgICAgICAgICBzdGF0ZW1lbnQuIDxhcHBsaWNhdGlvbj5wZ2JlbmNo PC9hcHBsaWNhdGlvbj4gcmVwb3J0cyBhbiBhdmVyYWdlIHZhbHVlCisgICAgICAgICBvZiBhbGwg c3VjY2Vzc2Z1bCBydW5zIG9mIHRoZSBzdGF0ZW1lbnQuCisgICAgICAgPC9wYXJhPgorICAgICA8 L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUg bnVtYmVyIG9mIGZhaWx1cmVzIGluIHRoaXMgc3RhdGVtZW50LiBTZWUKKyAgICAgICAgIDx4cmVm IGxpbmtlbmQ9ImZhaWx1cmVzLWFuZC1yZXRyaWVzIgorICAgICAgICAgZW5kdGVybT0iZmFpbHVy ZXMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgPC9w YXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgICBUaGUgbnVtYmVyIG9mIHJldHJpZXMgYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIG9yIGEg ZGVhZGxvY2sgZXJyb3IgaW4gdGhpcworICAgICAgICAgc3RhdGVtZW50LiBTZWUgPHhyZWYgbGlu a2VuZD0iZmFpbHVyZXMtYW5kLXJldHJpZXMiCisgICAgICAgICBlbmR0ZXJtPSJmYWlsdXJlcy1h bmQtcmV0cmllcy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+ CisgICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIHJlcG9ydCBkaXNwbGF5cyByZXRyeSBzdGF0aXN0aWNzIG9ubHkgaWYgdGhl IG9wdGlvbgorICAgPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiBpcyBub3QgZXF1YWwgdG8g MS4KKyAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgV2l0aCB0aGUgPG9wdGlvbj4tcjwvb3B0aW9u PiBvcHRpb24sIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gY29sbGVjdHMKLSAg IHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9uIHRpbWUgb2YgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQg YnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0IHRoZW4gcmVwb3J0cyBhbiBhdmVyYWdlIG9mIHRob3Nl IHZhbHVlcywgcmVmZXJyZWQgdG8KLSAgIGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0YXRlbWVu dCwgYWZ0ZXIgdGhlIGJlbmNobWFyayBoYXMgZmluaXNoZWQuCisgICBBbGwgdmFsdWVzIGFyZSBj b21wdXRlZCBmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkgY2xpZW50IGFuZCBh cmUKKyAgIHJlcG9ydGVkIGFmdGVyIHRoZSBiZW5jaG1hcmsgaGFzIGZpbmlzaGVkLgogICA8L3Bh cmE+CiAKICAgPHBhcmE+CkBAIC0xNzE1LDI3ICsxODg0LDY0IEBAIG51bWJlciBvZiBjbGllbnRz OiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEKIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNs aWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEw MDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBvZiB0cmllczogMQogbGF0ZW5jeSBhdmVyYWdlID0g MTUuODQ0IG1zCiBsYXRlbmN5IHN0ZGRldiA9IDIuNzE1IG1zCiB0cHMgPSA2MTguNzY0NTU1IChp bmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogdHBzID0gNjIyLjk3NzY5OCAoZXhj bHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKLXN0YXRlbWVudCBsYXRlbmNpZXMgaW4g bWlsbGlzZWNvbmRzOgotICAgICAgICAwLjAwMiAgXHNldCBhaWQgcmFuZG9tKDEsIDEwMDAwMCAq IDpzY2FsZSkKLSAgICAgICAgMC4wMDUgIFxzZXQgYmlkIHJhbmRvbSgxLCAxICogOnNjYWxlKQot ICAgICAgICAwLjAwMiAgXHNldCB0aWQgcmFuZG9tKDEsIDEwICogOnNjYWxlKQotICAgICAgICAw LjAwMSAgXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApCi0gICAgICAgIDAuMzI2ICBCRUdJ TjsKLSAgICAgICAgMC42MDMgIFVQREFURSBwZ2JlbmNoX2FjY291bnRzIFNFVCBhYmFsYW5jZSA9 IGFiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGFpZCA9IDphaWQ7Ci0gICAgICAgIDAuNDU0ICBTRUxF Q1QgYWJhbGFuY2UgRlJPTSBwZ2JlbmNoX2FjY291bnRzIFdIRVJFIGFpZCA9IDphaWQ7Ci0gICAg ICAgIDUuNTI4ICBVUERBVEUgcGdiZW5jaF90ZWxsZXJzIFNFVCB0YmFsYW5jZSA9IHRiYWxhbmNl ICsgOmRlbHRhIFdIRVJFIHRpZCA9IDp0aWQ7Ci0gICAgICAgIDcuMzM1ICBVUERBVEUgcGdiZW5j aF9icmFuY2hlcyBTRVQgYmJhbGFuY2UgPSBiYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBiaWQgPSA6 YmlkOwotICAgICAgICAwLjM3MSAgSU5TRVJUIElOVE8gcGdiZW5jaF9oaXN0b3J5ICh0aWQsIGJp ZCwgYWlkLCBkZWx0YSwgbXRpbWUpIFZBTFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRhLCBD VVJSRU5UX1RJTUVTVEFNUCk7Ci0gICAgICAgIDEuMjEyICBFTkQ7CitzdGF0ZW1lbnQgbGF0ZW5j aWVzIGluIG1pbGxpc2Vjb25kcyBhbmQgZmFpbHVyZXM6CisgIDAuMDAyICAwICBcc2V0IGFpZCBy YW5kb20oMSwgMTAwMDAwICogOnNjYWxlKQorICAwLjAwNSAgMCAgXHNldCBiaWQgcmFuZG9tKDEs IDEgKiA6c2NhbGUpCisgIDAuMDAyICAwICBcc2V0IHRpZCByYW5kb20oMSwgMTAgKiA6c2NhbGUp CisgIDAuMDAxICAwICBcc2V0IGRlbHRhIHJhbmRvbSgtNTAwMCwgNTAwMCkKKyAgMC4zMjYgIDAg IEJFR0lOOworICAwLjYwMyAgMCAgVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMgU0VUIGFiYWxhbmNl ID0gYWJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlkID0gOmFpZDsKKyAgMC40NTQgIDAgIFNFTEVD VCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDsKKyAgNS41 MjggIDAgIFVQREFURSBwZ2JlbmNoX3RlbGxlcnMgU0VUIHRiYWxhbmNlID0gdGJhbGFuY2UgKyA6 ZGVsdGEgV0hFUkUgdGlkID0gOnRpZDsKKyAgNy4zMzUgIDAgIFVQREFURSBwZ2JlbmNoX2JyYW5j aGVzIFNFVCBiYmFsYW5jZSA9IGJiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7Cisg IDAuMzcxICAwICBJTlNFUlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRl bHRhLCBtdGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENVUlJFTlRfVElN RVNUQU1QKTsKKyAgMS4yMTIgIDAgIEVORDsKKzwvc2NyZWVuPgorCisgICBBbm90aGVyIGV4YW1w bGUgb2Ygb3V0cHV0IGZvciB0aGUgZGVmYXVsdCBzY3JpcHQgdXNpbmcgc2VyaWFsaXphYmxlIGRl ZmF1bHQKKyAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAoPGNvbW1hbmQ+UEdPUFRJT05T PSctYworICAgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249c2VyaWFsaXphYmxlJyBwZ2Jl bmNoIC4uLjwvY29tbWFuZD4pOgorPHNjcmVlbj4KK3N0YXJ0aW5nIHZhY3V1bS4uLmVuZC4KK3Ry YW5zYWN0aW9uIHR5cGU6ICZsdDtidWlsdGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7CitzY2FsaW5n IGZhY3RvcjogMQorcXVlcnkgbW9kZTogc2ltcGxlCitudW1iZXIgb2YgY2xpZW50czogMTAKK251 bWJlciBvZiB0aHJlYWRzOiAxCitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBjbGllbnQ6IDEw MDAKK251bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiA5Njc2LzEwMDAw CitudW1iZXIgb2YgZmFpbHVyZXM6IDMyNCAoMy4yNDAlKQorbnVtYmVyIG9mIHNlcmlhbGl6YXRp b24gZmFpbHVyZXM6IDMyNCAoMy4yNDAlKQorbnVtYmVyIG9mIHJldHJpZWQ6IDU2MjkgKDU2LjI5 MCUpCitudW1iZXIgb2YgcmV0cmllczogMTAzMjk5CittYXhpbXVtIG51bWJlciBvZiB0cmllczog MTAwCitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAxMDAuMCBtcyBsYXRlbmN5IGxp bWl0OiAyMS85Njc2ICgwLjIxNyAlKQorbGF0ZW5jeSBhdmVyYWdlID0gMTYuMTM4IG1zCitsYXRl bmN5IHN0ZGRldiA9IDIxLjAxNyBtcwordHBzID0gNDEzLjY1MDIyNCAoaW5jbHVkaW5nIGNvbm5l Y3Rpb25zIGVzdGFibGlzaGluZykKK3RwcyA9IDQxMy42ODY1NjAgKGV4Y2x1ZGluZyBjb25uZWN0 aW9ucyBlc3RhYmxpc2hpbmcpCitzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kcywg ZmFpbHVyZXMgYW5kIHJldHJpZXM6CisgIDAuMDAyICAgIDAgICAgICAwICBcc2V0IGFpZCByYW5k b20oMSwgMTAwMDAwICogOnNjYWxlKQorICAwLjAwMCAgICAwICAgICAgMCAgXHNldCBiaWQgcmFu ZG9tKDEsIDEgKiA6c2NhbGUpCisgIDAuMDAwICAgIDAgICAgICAwICBcc2V0IHRpZCByYW5kb20o MSwgMTAgKiA6c2NhbGUpCisgIDAuMDAwICAgIDAgICAgICAwICBcc2V0IGRlbHRhIHJhbmRvbSgt NTAwMCwgNTAwMCkKKyAgMC4xMjEgICAgMCAgICAgIDAgIEJFR0lOOworICAwLjI5MCAgICAwICAg ICAgMiAgVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMgU0VUIGFiYWxhbmNlID0gYWJhbGFuY2UgKyA6 ZGVsdGEgV0hFUkUgYWlkID0gOmFpZDsKKyAgMC4yMjEgICAgMCAgICAgIDAgIFNFTEVDVCBhYmFs YW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDsKKyAgMC4yNjYgIDIx MiAgNzIxMjcgIFVQREFURSBwZ2JlbmNoX3RlbGxlcnMgU0VUIHRiYWxhbmNlID0gdGJhbGFuY2Ug KyA6ZGVsdGEgV0hFUkUgdGlkID0gOnRpZDsKKyAgMC4yMjIgIDExMiAgMzExNzAgIFVQREFURSBw Z2JlbmNoX2JyYW5jaGVzIFNFVCBiYmFsYW5jZSA9IGJiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGJp ZCA9IDpiaWQ7CisgIDAuMTc4ICAgIDAgICAgICAwICBJTlNFUlQgSU5UTyBwZ2JlbmNoX2hpc3Rv cnkgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBtdGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlk LCA6ZGVsdGEsIENVUlJFTlRfVElNRVNUQU1QKTsKKyAgMS4yMTAgICAgMCAgICAgIDAgIEVORDsK IDwvc2NyZWVuPgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJZiBtdWx0aXBsZSBzY3JpcHQg ZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlIGF2ZXJhZ2VzIGFyZSByZXBvcnRlZAorICAgSWYgbXVs dGlwbGUgc2NyaXB0IGZpbGVzIGFyZSBzcGVjaWZpZWQsIGFsbCBzdGF0aXN0aWNzIGFyZSByZXBv cnRlZAogICAgc2VwYXJhdGVseSBmb3IgZWFjaCBzY3JpcHQgZmlsZS4KICAgPC9wYXJhPgogCkBA IC0xNzQ5LDYgKzE5NTUsMTM4IEBAIHN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRz OgogICA8L3BhcmE+CiAgPC9yZWZzZWN0Mj4KIAorIDxyZWZzZWN0MiBpZD0iZmFpbHVyZXMtYW5k LXJldHJpZXMiPgorICA8dGl0bGUgaWQ9ImZhaWx1cmVzLWFuZC1yZXRyaWVzLXRpdGxlIj5GYWls dXJlcyBhbmQgU2VyaWFsaXphdGlvbi9EZWFkbG9jayBSZXRyaWVzPC90aXRsZT4KKworICA8cGFy YT4KKyAgIFdoZW4gZXhlY3V0aW5nIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4s IHRoZXJlJ3JlIHRocmVlIG1haW4gdHlwZXMKKyAgIG9mIGVycm9yczoKKyAgIDxpdGVtaXplZGxp c3Q+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgIEVycm9ycyBvZiB0 aGUgbWFpbiBwcm9ncmFtLiBUaGV5IGFyZSB0aGUgbW9zdCBzZXJpb3VzIGFuZCBhbHdheXMgcmVz dWx0CisgICAgICAgICBpbiBhbiBpbW1lZGlhdGUgZXhpdCBmcm9tIHRoZSA8YXBwbGljYXRpb24+ cGdiZW5jaDwvYXBwbGljYXRpb24+IHdpdGgKKyAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGVy cm9yIG1lc3NhZ2UuIFRoZXkgaW5jbHVkZToKKyAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIGVy cm9ycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGlj YXRpb24+CisgICAgICAgICAgICAgICAoZS5nLiBhbiBpbnZhbGlkIG9wdGlvbiB2YWx1ZSk7Cisg ICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBlcnJvcnMgaW4g dGhlIGluaXRpYWxpemF0aW9uIG1vZGUgKGUuZy4gdGhlIHF1ZXJ5IHRvIGNyZWF0ZQorICAgICAg ICAgICAgICAgdGFibGVzIGZvciBidWlsdC1pbiBzY3JpcHRzIGZhaWxzKTsKKyAgICAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIGVycm9ycyBiZWZvcmUgc3RhcnRp bmcgdGhyZWFkcyAoZS5nLiB3ZSBjb3VsZCBub3QgY29ubmVjdCB0byB0aGUKKyAgICAgICAgICAg ICAgIGRhdGFiYXNlIHNlcnZlciAvIHRoZSBzeW50YXggZXJyb3IgaW4gdGhlIG1ldGEgY29tbWFu ZCAvIHRocmVhZAorICAgICAgICAgICAgICAgY3JlYXRpb24gZmFpbHVyZSk7CisgICAgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBpbnRlcm5hbCA8YXBwbGljYXRp b24+cGdiZW5jaDwvYXBwbGljYXRpb24+IGVycm9ycyAod2hpY2ggYXJlCisgICAgICAgICAgICAg ICBzdXBwb3NlZCB0byBuZXZlciBvY2N1ci4uLikuCisgICAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgPC9w YXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgICBFcnJvcnMgd2hlbiB0aGUgdGhyZWFkIG1hbmFnZXMgaXRzIGNsaWVudHMgKGUuZy4g dGhlIGNsaWVudCBjb3VsZCBub3QKKyAgICAgICAgIHN0YXJ0IGEgY29ubmVjdGlvbiB0byB0aGUg ZGF0YWJhc2Ugc2VydmVyIC8gdGhlIHNvY2tldCBmb3IgY29ubmVjdGluZworICAgICAgICAgdGhl IGNsaWVudCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyIGhhcyBiZWNvbWUgaW52YWxpZCkuIEluIHN1 Y2ggY2FzZXMKKyAgICAgICAgIGFsbCBjbGllbnRzIG9mIHRoaXMgdGhyZWFkIHN0b3Agd2hpbGUg b3RoZXIgdGhyZWFkcyBjb250aW51ZSB0byB3b3JrLgorICAgICAgIDwvcGFyYT4KKyAgICAgPC9s aXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgRGlyZWN0 IGNsaWVudCBlcnJvcnMuIFRoZXkgbGVhZCB0byBpbW1lZGlhdGUgZXhpdCBmcm9tIHRoZQorICAg ICAgICAgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiB3aXRoIHRoZSBjb3JyZXNw b25kaW5nIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgIG9ubHkgaW4gdGhlIGNhc2Ugb2YgYW4gaW50 ZXJuYWwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPgorICAgICAgICAgZXJyb3Ig KHdoaWNoIGFyZSBzdXBwb3NlZCB0byBuZXZlciBvY2N1ci4uLikuIE90aGVyd2lzZSBpbiB0aGUg d29yc3QKKyAgICAgICAgIGNhc2UgdGhleSBvbmx5IGxlYWQgdG8gdGhlIGFib3J0aW9uIG9mIHRo ZSBmYWlsZWQgY2xpZW50IHdoaWxlIG90aGVyCisgICAgICAgICBjbGllbnRzIGNvbnRpbnVlIHRo ZWlyIHJ1biAoYnV0IG1vc3QgY2xpZW50IGVycm9ycyBhcmUgaGFuZGxlZCB3aXRob3V0CisgICAg ICAgICBhbiBhYm9ydGlvbiBvZiB0aGUgY2xpZW50IGFuZCByZXBvcnRlZCBzZXBhcmF0ZWx5LCBz ZWUgYmVsb3cpLiBMYXRlciBpbgorICAgICAgICAgdGhpcyBzZWN0aW9uIGl0IGlzIGFzc3VtZWQg dGhhdCB0aGUgZGlzY3Vzc2VkIGVycm9ycyBhcmUgb25seSB0aGUKKyAgICAgICAgIGRpcmVjdCBj bGllbnQgZXJyb3JzIGFuZCB0aGV5IGFyZSBub3QgaW50ZXJuYWwKKyAgICAgICAgIDxhcHBsaWNh dGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gZXJyb3JzLgorICAgICAgIDwvcGFyYT4KKyAgICAg PC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBDbGllbnQncyBydW4gaXMgYWJvcnRlZCBvbmx5IGluIGNhc2Ugb2YgYSBzZXJpb3VzIGVycm9y LCBmb3IgZXhhbXBsZSwgdGhlCisgICBjb25uZWN0aW9uIHdpdGggdGhlIGRhdGFiYXNlIHNlcnZl ciB3YXMgbG9zdCBvciB0aGUgZW5kIG9mIHNjcmlwdCByZWFjaGVkCisgICB3aXRob3V0IGNvbXBs ZXRpbmcgdGhlIGxhc3QgdHJhbnNhY3Rpb24uIE90aGVyd2lzZSBpZiB0aGUgZXhlY3V0aW9uIG9m IFNRTCBvcgorICAgbWV0YSBjb21tYW5kIGZhaWxzLCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBp cyBhbHdheXMgcm9sbGVkIGJhY2sgd2hpY2ggYWxzbworICAgaW5jbHVkZXMgc2V0dGluZyB0aGUg Y2xpZW50IHZhcmlhYmxlcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZSBydW4gb2YgdGhpcworICAg dHJhbnNhY3Rpb24gKGl0IGlzIGFzc3VtZWQgdGhhdCBvbmUgdHJhbnNhY3Rpb24gc2NyaXB0IGNv bnRhaW5zIG9ubHkgb25lCisgICB0cmFuc2FjdGlvbjsgc2VlIDx4cmVmIGxpbmtlbmQ9InRyYW5z YWN0aW9ucy1hbmQtc2NyaXB0cyIKKyAgIGVuZHRlcm09InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0 cy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICBUcmFuc2FjdGlvbnMgd2l0aCBz ZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGVycm9ycyBhcmUgcmVwZWF0ZWQgYWZ0ZXIKKyAgIHJv bGxiYWNrcyB1bnRpbCB0aGV5IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBvciByZWFjaCB0aGUgbWF4 aW11bSBudW1iZXIgb2YKKyAgIHRyaWVzIChzcGVjaWZpZWQgYnkgdGhlIDxvcHRpb24+LS1tYXgt dHJpZXM8L29wdGlvbj4gb3B0aW9uKSAvIHRoZSBtYXhpbXVtCisgICB0aW1lIG9mIHRyaWVzIChz cGVjaWZpZWQgYnkgdGhlIDxvcHRpb24+LS1sYXRlbmN5LWxpbWl0PC9vcHRpb24+IG9wdGlvbiku IElmCisgICB0aGUgbGFzdCB0cmFuc2FjdGlvbiBydW4gZmFpbHMsIHRoaXMgdHJhbnNhY3Rpb24g d2lsbCBiZSByZXBvcnRlZCBhcyBmYWlsZWQuCisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxw YXJhPgorICAgIEFsdGhvdWdoIHdpdGhvdXQgdGhlIG9wdGlvbiA8b3B0aW9uPi0tbWF4LXRyaWVz PC9vcHRpb24+IHRoZSB0cmFuc2FjdGlvbgorICAgIHdpbGwgbmV2ZXIgYmUgcmV0cmllZCBhZnRl ciBhbiBlcnJvciwgdXNlIGFuIGluZmluaXRlIG51bWJlciBvZiB0cmllcworICAgICg8bGl0ZXJh bD4tLW1heC10cmllcz0wPC9saXRlcmFsPikgYW5kIHRoZSBvcHRpb24KKyAgICA8b3B0aW9uPi0t bGF0ZW5jeS1saW1pdDwvb3B0aW9uPiB0byBsaW1pdCBvbmx5IHRoZSBtYXhpbXVtIHRpbWUgb2Yg dHJpZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBCZSBjYXJlZnVsIHdoZW4gcmVwZWF0 aW5nIHNjcmlwdHMgdGhhdCBjb250YWluIG11bHRpcGxlIHRyYW5zYWN0aW9uczogdGhlCisgICAg c2NyaXB0IGlzIGFsd2F5cyByZXRyaWVkIGNvbXBsZXRlbHksIHNvIHRoZSBzdWNjZXNzZnVsIHRy YW5zYWN0aW9ucyBjYW4gYmUKKyAgICBwZXJmb3JtZWQgc2V2ZXJhbCB0aW1lcy4KKyAgIDwvcGFy YT4KKyAgIDxwYXJhPgorICAgIEJlIGNhcmVmdWwgd2hlbiByZXBlYXRpbmcgdHJhbnNhY3Rpb25z IHdpdGggc2hlbGwgY29tbWFuZHMuIFVubGlrZSB0aGUKKyAgICByZXN1bHRzIG9mIFNRTCBjb21t YW5kcywgdGhlIHJlc3VsdHMgb2Ygc2hlbGwgY29tbWFuZHMgYXJlIG5vdCByb2xsZWQgYmFjaywK KyAgICBleGNlcHQgZm9yIHRoZSB2YXJpYWJsZSB2YWx1ZSBvZiB0aGUgPGNvbW1hbmQ+XHNldHNo ZWxsPC9jb21tYW5kPiBjb21tYW5kLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+ CisgICBUaGUgbGF0ZW5jeSBvZiBhIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb24gaW5jbHVkZXMgdGhl IGVudGlyZSB0aW1lIG9mCisgICB0cmFuc2FjdGlvbiBleGVjdXRpb24gd2l0aCByb2xsYmFja3Mg YW5kIHJldHJpZXMuIFRoZSBsYXRlbmN5IGZvciBmYWlsZWQKKyAgIHRyYW5zYWN0aW9ucyBhbmQg Y29tbWFuZHMgaXMgbm90IGNvbXB1dGVkIHNlcGFyYXRlbHkuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFRoZSBtYWluIHJlcG9ydCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGZhaWxlZCB0cmFu c2FjdGlvbnMgaWYgaXQgaXMgbm9uLXplcm8uCisgICBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJl dHJpZWQgdHJhbnNhY3Rpb25zIGlzIG5vbi16ZXJvLCB0aGUgbWFpbiByZXBvcnQgYWxzbworICAg Y29udGFpbnMgdGhlIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXRyaWVzOiB0aGUgdG90YWwgbnVt YmVyIG9mIHJldHJpZWQKKyAgIHRyYW5zYWN0aW9ucyBhbmQgdG90YWwgbnVtYmVyIG9mIHJldHJp ZXMuIFRoZSBwZXItc2NyaXB0IHJlcG9ydCBpbmhlcml0cyBhbGwKKyAgIHRoZXNlIGZpZWxkcyBm cm9tIHRoZSBtYWluIHJlcG9ydC4gVGhlIHBlci1zdGF0ZW1lbnQgcmVwb3J0IGRpc3BsYXlzIHJl dHJ5CisgICBzdGF0aXN0aWNzIG9ubHkgaWYgdGhlIG9wdGlvbiA8b3B0aW9uPi0tbWF4LXRyaWVz PC9vcHRpb24+IGlzIG5vdCBlcXVhbCB0byAxLgorICAgQSByZXRyeSBpcyByZXBvcnRlZCBmb3Ig dGhlIGNvbW1hbmQgaWYgaW4gdGhpcyBjb21tYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICAgd2hp Y2ggbGVhZHMgdG8gYSByZXRyeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgeW91IHdh bnQgdG8gZ3JvdXAgZmFpbHVyZXMgYnkgYmFzaWMgdHlwZXMgaW4gcGVyLXRyYW5zYWN0aW9uIGFu ZAorICAgYWdncmVnYXRpb24gbG9ncywgYXMgd2VsbCBhcyBpbiB0aGUgbWFpbiBhbmQgcGVyLXNj cmlwdCByZXBvcnRzLCB1c2UgdGhlCisgICBvcHRpb24gPG9wdGlvbj4tLWZhaWx1cmVzLWRldGFp bGVkPC9vcHRpb24+LiBJZiB5b3UgYWxzbyB3YW50IHRvIGRpc3Rpbmd1aXNoCisgICBhbGwgZXJy b3JzIGFuZCBmYWlsdXJlcyAoZXJyb3JzIHdpdGhvdXQgcmV0cnlpbmcpIGJ5IHR5cGUgaW5jbHVk aW5nIHdoaWNoCisgICBsaW1pdCBmb3IgcmV0cmllcyB3YXMgdmlvbGF0ZWQgYW5kIGhvdyBmYXIg aXQgd2FzIGV4Y2VlZGVkIGZvciB0aGUKKyAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVy ZXMsIHVzZSB0aGUgb3B0aW9ucworICAgPG9wdGlvbj4tLXByaW50LWVycm9yczwvb3B0aW9uPiBv ciA8b3B0aW9uPi0tZGVidWc8L29wdGlvbj4uIFRoZSBmaXJzdAorICAgdmFyaWFudCBpcyByZWNv bW1lbmRlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2UgaW4gdGhlIHNlY29uZCBjYXNlIHRoZSBv dXRwdXQKKyAgIGNhbiBiZSBzaWduaWZpY2FudGx5IGluY3JlYXNlZCBkdWUgdG8gZGVidWcgbWVz c2FnZXMgb2Ygc3VjY2Vzc2Z1bCBjb21tYW5kcworICAgb2YgYWxsIHRoZSB0cmFuc2FjdGlvbnMu CisgIDwvcGFyYT4KKyA8L3JlZnNlY3QyPgorCiAgPHJlZnNlY3QyPgogICA8dGl0bGU+R29vZCBQ cmFjdGljZXM8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j IGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCAxYjI1NDg3YmZjLi44ZGExMTIwOWFk IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKQEAgLTU5LDYgKzU5LDggQEAKIAogI2luY2x1ZGUgInBnYmVuY2guaCIK IAorI2RlZmluZSBFUlJDT0RFX1RfUl9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUgICI0MDAwMSIKKyNk ZWZpbmUgRVJSQ09ERV9UX1JfREVBRExPQ0tfREVURUNURUQgICI0MFAwMSIKICNkZWZpbmUgRVJS Q09ERV9VTkRFRklORURfVEFCTEUgICI0MlAwMSIKIAogLyoKQEAgLTE4Nyw5ICsxODksMzMgQEAg Ym9vbAkJcHJvZ3Jlc3NfdGltZXN0YW1wID0gZmFsc2U7IC8qIHByb2dyZXNzIHJlcG9ydCB3aXRo IFVuaXggdGltZSAqLwogaW50CQkJbmNsaWVudHMgPSAxOwkJLyogbnVtYmVyIG9mIGNsaWVudHMg Ki8KIGludAkJCW50aHJlYWRzID0gMTsJCS8qIG51bWJlciBvZiB0aHJlYWRzICovCiBib29sCQlp c19jb25uZWN0OwkJCS8qIGVzdGFibGlzaCBjb25uZWN0aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9u ICovCi1ib29sCQlpc19sYXRlbmNpZXM7CQkvKiByZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVz ICovCitib29sCQlyZXBvcnRfcGVyX2NvbW1hbmQgPSBmYWxzZTsJLyogcmVwb3J0IHBlci1jb21t YW5kIGxhdGVuY2llcywgcmV0cmllcworCQkJCQkJCQkJCSAqIGFmdGVyIHRoZSBlcnJvcnMgYW5k IGZhaWx1cmVzIChlcnJvcnMKKwkJCQkJCQkJCQkgKiB3aXRob3V0IHJldHJ5aW5nKSAqLwogaW50 CQkJbWFpbl9waWQ7CQkJLyogbWFpbiBwcm9jZXNzIGlkIHVzZWQgaW4gbG9nIGZpbGVuYW1lICov CiAKKy8qCisgKiBUaGVyZSdyZSBkaWZmZXJlbnQgdHlwZXMgb2YgcmVzdHJpY3Rpb25zIGZvciBk ZWNpZGluZyB0aGF0IHRoZSBjdXJyZW50CisgKiB0cmFuc2FjdGlvbiB3aXRoIGEgc2VyaWFsaXph dGlvbi9kZWFkbG9jayBlcnJvciBjYW4gbm8gbG9uZ2VyIGJlIHJldHJpZWQgYW5kCisgKiBzaG91 bGQgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkOgorICogLSBtYXhfdHJpZXMgY2FuIGJlIHVzZWQgdG8g bGltaXQgdGhlIG51bWJlciBvZiB0cmllczsKKyAqIC0gbGF0ZW5jeV9saW1pdCBjYW4gYmUgdXNl ZCB0byBsaW1pdCB0aGUgdG90YWwgdGltZSBvZiB0cmllcy4KKyAqCisgKiBUaGV5IGNhbiBiZSBj b21iaW5lZCB0b2dldGhlciwgYW5kIHlvdSBuZWVkIHRvIHVzZSBhdCBsZWFzdCBvbmUgb2YgdGhl bSB0bworICogcmV0cnkgdGhlIHRyYW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24vZGVhZGxv Y2sgZXJyb3JzLiBJZiBub25lIG9mIHRoZW0gaXMKKyAqIHVzZWQsIHRoZSBkZWZhdWx0IHZhbHVl IG9mIG1heF90cmllcyBpcyBzZXQgdG8gMSBhbmQgc3VjaCB0cmFuc2FjdGlvbnMgd2lsbAorICog bm90IGJlIHJldHJpZWQgYXQgYWxsLgorICovCisKKy8qCisgKiBXZSBjYW5ub3QgcmV0cnkgdGhl IHRyYW5zYWN0aW9uIGFmdGVyIHRoZSBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGVycm9yIGlmIGl0 cworICogbnVtYmVyIG9mIHRyaWVzIHJlYWNoZXMgdGhpcyBtYXhpbXVtOyBpZiBpdHMgdmFsdWUg aXMgemVybywgaXQgaXMgbm90IHVzZWQuCisgKi8KK3VpbnQzMgkJbWF4X3RyaWVzID0gMDsKKwor Ym9vbAkJZmFpbHVyZXNfZGV0YWlsZWQgPSBmYWxzZTsJLyogd2hldGhlciB0byBncm91cCBmYWls dXJlcyBpbiByZXBvcnRzCisJCQkJCQkJCQkJICogb3IgbG9ncyBieSBiYXNpYyB0eXBlcyAqLwor CiBjaGFyCSAgICpwZ2hvc3QgPSAiIjsKIGNoYXIJICAgKnBncG9ydCA9ICIiOwogY2hhcgkgICAq bG9naW4gPSBOVUxMOwpAQCAtMjY3LDkgKzI5Myw2NyBAQCB0eXBlZGVmIHN0cnVjdCBTaW1wbGVT dGF0cwogdHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiB7CiAJdGltZV90CQlzdGFydF90aW1lOwkJ LyogaW50ZXJ2YWwgc3RhcnQgdGltZSwgZm9yIGFnZ3JlZ2F0ZXMgKi8KLQlpbnQ2NAkJY250OwkJ CS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMsIGluY2x1ZGluZyBza2lwcGVkICovCisKKwkvKgor CSAqIFRyYW5zYWN0aW9ucyBhcmUgY291bnRlZCBkZXBlbmRpbmcgb24gdGhlaXIgZXhlY3V0aW9u IGFuZCBvdXRjb21lLiBGaXJzdAorCSAqIGEgdHJhbnNhY3Rpb24gbWF5IGhhdmUgc3RhcnRlZCBv ciBub3Q6IHNraXBwZWQgdHJhbnNhY3Rpb25zIG9jY3VyIHVuZGVyCisJICogLS1yYXRlIGFuZCAt LWxhdGVuY3ktbGltaXQgd2hlbiB0aGUgY2xpZW50IGlzIHRvbyBsYXRlIHRvIGV4ZWN1dGUgdGhl bS4KKwkgKiBTZWNvbmRseSwgYSBzdGFydGVkIHRyYW5zYWN0aW9uIG1heSB1bHRpbWF0ZWx5IHN1 Y2NlZWQgb3IgZ2V0IGEgZmFpbHVyZSwKKwkgKiBwb3NzaWJseSBhZnRlciBzb21lIHJldHJpZXMg d2hlbiAtLW1heC10cmllcyBpcyBub3Qgb25lLiBUaHVzCisJICoKKwkgKiB0aGUgbnVtYmVyIG9m IGFsbCB0cmFuc2FjdGlvbnMgPQorCSAqICAgc2tpcHBlZCAoaXQgd2FzIHRvbyBsYXRlIHRvIGV4 ZWN1dGUgdGhlbSkKKwkgKiAgIGNudCAodGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIHRyYW5zYWN0 aW9ucykgKworCSAqICAgZmFpbGVkICh0aGUgbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2FjdGlvbnMp LgorCSAqCisJICogQSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9uIGNhbiBoYXZlIHNldmVyYWwgdW5z dWNjZXNzZnVsIHRyaWVzIGJlZm9yZSBhCisJICogc3VjY2Vzc2Z1bCBydW4uIFRodXMKKwkgKgor CSAqIGNudCAodGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIHRyYW5zYWN0aW9ucykgPQorCSAqICAg c3VjY2Vzc2Z1bGx5IHJldHJpZWQgdHJhbnNhY3Rpb25zICh0aGV5IGdvdCBhIHNlcmlhbGl6YXRp b24gb3IgYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbG9j ayBlcnJvcihzKSwgYnV0IHdlcmUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3VjY2Vzc2Z1bGx5IHJldHJpZWQgZnJvbSB0aGUgdmVyeQorCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcpICsKKwkgKiAgIGRpcmVjdGx5IHN1 Y2Nlc3NmdWwgdHJhbnNhY3Rpb25zICh0aGV5IHdlcmUgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBv bgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB0cnkp LgorCSAqCisJICogQSBmYWlsZWQgdHJhbnNhY3Rpb24gY2FuIGJlIG9uZSBvZiBzZXZlcmFsIHR5 cGVzOgorCSAqCisJICogZmFpbGVkICh0aGUgbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2FjdGlvbnMp ID0KKwkgKiAgIHNlcmlhbGl6YXRpb25fZmFpbHVyZXMgKHRoZXkgZ290IGEgc2VyaWFsaXphdGlv biBlcnJvciBhbmQgd2VyZSBub3QKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJp ZWQpICsKKwkgKiAgIGRlYWRsb2NrX2ZhaWx1cmVzICh0aGV5IGdvdCBhIGRlYWRsb2NrIGVycm9y IGFuZCB3ZXJlIG5vdCByZXRyaWVkKSArCisJICogICBvdGhlcl9zcWxfZmFpbHVyZXMgKHRoZXkg Z290IGEgZGlmZmVyZW50IGVycm9yIGluIHRoZSBTUUwgY29tbWFuZDsgc3VjaAorCSAqICAgICAg ICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIG5ldmVyIHJldHJpZWQpICsKKwkgKiAgIG1ldGFf Y29tbWFuZF9mYWlsdXJlcyAodGhleSBnb3QgYW4gZXJyb3IgaW4gdGhlIG1ldGEgY29tbWFuZDsg c3VjaAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIG5ldmVyIHJldHJp ZWQpLgorCSAqCisJICogSWYgdGhlIHRyYW5zYWN0aW9uIHdhcyByZXRyaWVkIGFmdGVyIGEgc2Vy aWFsaXphdGlvbiBvciBhIGRlYWRsb2NrIGVycm9yCisJICogdGhpcyBkb2VzIG5vdCBndWFyYW50 ZWUgdGhhdCB0aGlzIHJldHJ5IHdhcyBzdWNjZXNzZnVsLiBUaHVzCisJICoKKwkgKiBudW1iZXIg b2YgcmV0cmllcyA9CisJICogICBudW1iZXIgb2YgcmV0cmllcyBpbiBhbGwgcmV0cmllZCB0cmFu c2FjdGlvbnMgPQorCSAqICAgbnVtYmVyIG9mIHJldHJpZXMgaW4gKHN1Y2Nlc3NmdWxseSByZXRy aWVkIHRyYW5zYWN0aW9ucyArCisJICogICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXph dGlvbiBmYWlsdXJlcyArCisJICogICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxvY2sgZmFp bHVyZXMpIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlpbnQ2NAkJY250OwkJCS8qIG51bWJlciBvZiBz dWNjZXNzZnVsIHRyYW5zYWN0aW9ucyAqLwogCWludDY0CQlza2lwcGVkOwkJLyogbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0ZQogCQkJCQkJCQkgKiBhbmQgLS1sYXRl bmN5LWxpbWl0ICovCisJaW50NjQJCXJldHJpZXM7CQkvKiBudW1iZXIgb2YgcmV0cmllcyBhZnRl ciBhIHNlcmlhbGl6YXRpb24gb3IgYQorCQkJCQkJCQkgKiBkZWFkbG9jayBlcnJvciBpbiBhbGwg dGhlIHRyYW5zYWN0aW9ucyAqLworCWludDY0CQlyZXRyaWVkOwkJLyogbnVtYmVyIG9mIGFsbCB0 cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIHJldHJpZWQKKwkJCQkJCQkJICogYWZ0ZXIgYSBzZXJpYWxp emF0aW9uIG9yIGEgZGVhZGxvY2sgZXJyb3IKKwkJCQkJCQkJICogKHBlcmhhcHMgdGhlIGxhc3Qg dHJ5IHdhcyB1bnN1Y2Nlc3NmdWwpICovCisJaW50NjQJCXNlcmlhbGl6YXRpb25fZmFpbHVyZXM7 CS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIG5vdAorCQkJCQkJCQkJCSAqIHJl dHJpZWQgYWZ0ZXIgYSBzZXJpYWxpemF0aW9uCisJCQkJCQkJCQkJICogZXJyb3IgKi8KKwlpbnQ2 NAkJZGVhZGxvY2tfZmFpbHVyZXM7CS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJl IG5vdAorCQkJCQkJCQkJICogcmV0cmllZCBhZnRlciBhIGRlYWRsb2NrIGVycm9yICovCisJaW50 NjQJCW90aGVyX3NxbF9mYWlsdXJlczsJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aXRoIGEg ZGlmZmVyZW50CisJCQkJCQkJCQkgKiBlcnJvciBpbiB0aGUgU1FMIGNvbW1hbmQgKi8KKwlpbnQ2 NAkJbWV0YV9jb21tYW5kX2ZhaWx1cmVzOwkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGgg YW4gZXJyb3IKKwkJCQkJCQkJCQkgKiBpbiB0aGUgbWV0YSBjb21tYW5kICovCiAJU2ltcGxlU3Rh dHMgbGF0ZW5jeTsKIAlTaW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0YTsKQEAgLTI4Miw2ICsz NjYsMzAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAl1bnNpZ25lZCBzaG9ydCB4c2VlZFszXTsKIH0gUmFu ZG9tU3RhdGU7CiAKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgcmVwZWF0aW5nIGEgdHJhbnNh Y3Rpb24gZnJvbSB0aGUgYmVnaW5ubmluZyB3aXRoIHRoZSBzYW1lCisgKiBwYXJhbWV0ZXJzLgor ICovCit0eXBlZGVmIHN0cnVjdAoreworCVJhbmRvbVN0YXRlIHJhbmRvbV9zdGF0ZTsJLyogcmFu ZG9tIHNlZWQgKi8KKwlWYXJpYWJsZXMgICB2YXJpYWJsZXM7CQkvKiBjbGllbnQgdmFyaWFibGVz ICovCit9IFJldHJ5U3RhdGU7CisKKy8qCisgKiBFcnJvciBzdGF0dXMgZm9yIGVycm9ycyBkdXJp bmcgc2NyaXB0IGV4ZWN1dGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIEVTdGF0dXMKK3sKKwlFU1RB VFVTX05PX0VSUk9SID0gMCwKKwlFU1RBVFVTX01FVEFfQ09NTUFORF9FUlJPUiwKKworCS8qIFNR TCBlcnJvcnMgKi8KKwlFU1RBVFVTX1NFUklBTElaQVRJT05fRVJST1IsCisJRVNUQVRVU19ERUFE TE9DS19FUlJPUiwKKwlFU1RBVFVTX09USEVSX1NRTF9FUlJPUgorfSBFU3RhdHVzOworCiAvKgog ICogQ29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4KICAqLwpAQCAtMzM2LDYgKzQ0NCwz NSBAQCB0eXBlZGVmIGVudW0KIAlDU1RBVEVfU0xFRVAsCiAJQ1NUQVRFX0VORF9DT01NQU5ELAog CisJLyoKKwkgKiBTdGF0ZXMgZm9yIGZhaWxlZCBjb21tYW5kcy4KKwkgKgorCSAqIElmIHRoZSBT UUwvbWV0YSBjb21tYW5kIGZhaWxzLCBpbiBDU1RBVEVfRVJST1IgY2xlYW4gdXAgYWZ0ZXIgYW4g ZXJyb3I6CisJICogLSBjbGVhciB0aGUgY29uZGl0aW9uYWwgc3RhY2s7CisJICogLSBpZiB3ZSBo YXZlIGFuIHVudGVybWluYXRlZCAocG9zc2libHkgZmFpbGVkKSB0cmFuc2FjdGlvbiBibG9jaywg c2VuZAorCSAqIHRoZSByb2xsYmFjayBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgYW5kIHdhaXQgZm9y IHRoZSByZXN1bHQgaW4KKwkgKiBDU1RBVEVfV0FJVF9ST0xMQkFDS19SRVNVTFQuIElmIHNvbWV0 aGluZyBnb2VzIHdyb25nIHdpdGggcm9sbGluZyBiYWNrLAorCSAqIGdvIHRvIENTVEFURV9BQk9S VEVELgorCSAqCisJICogQnV0IGlmIGV2ZXJ5dGhpbmcgaXMgb2sgd2UgYXJlIHJlYWR5IGZvciBm dXR1cmUgdHJhbnNhY3Rpb25zOiBpZiB0aGlzIGlzCisJICogYSBzZXJpYWxpemF0aW9uIG9yIGRl YWRsb2NrIGVycm9yIGFuZCB3ZSBjYW4gcmUtZXhlY3V0ZSB0aGUgdHJhbnNhY3Rpb24KKwkgKiBm cm9tIHRoZSB2ZXJ5IGJlZ2lubmluZywgZ28gdG8gQ1NUQVRFX1JFVFJZOyBvdGhlcndpc2UgZ28g dG8KKwkgKiBDU1RBVEVfRkFJTFVSRS4KKwkgKgorCSAqIEluIENTVEFURV9SRVRSWSByZXBvcnQg YW4gZXJyb3IsIHNldCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUKKwkgKiB0cmFuc2FjdGlv biBleGVjdXRpb24gYXMgaW4gdGhlIHByZXZpb3VzIHRyaWVzIGFuZCBwcm9jZXNzIHRoZSBmaXJz dAorCSAqIHRyYW5zYWN0aW9uIGNvbW1hbmQgaW4gQ1NUQVRFX1NUQVJUX0NPTU1BTkQuCisJICoK KwkgKiBJbiBDU1RBVEVfRkFJTFVSRSByZXBvcnQgYSBmYWlsdXJlLCBzZXQgdGhlIHBhcmFtZXRl cnMgZm9yIHRoZQorCSAqIHRyYW5zYWN0aW9uIGV4ZWN1dGlvbiBhcyB0aGV5IHdlcmUgYmVmb3Jl IHRoZSBmaXJzdCBydW4gb2YgdGhpcworCSAqIHRyYW5zYWN0aW9uIChleGNlcHQgZm9yIGEgcmFu ZG9tIHN0YXRlKSBhbmQgZ28gdG8gQ1NUQVRFX0VORF9UWCB0bworCSAqIGNvbXBsZXRlIHRoaXMg dHJhbnNhY3Rpb24uCisJICovCisJQ1NUQVRFX0VSUk9SLAorCUNTVEFURV9XQUlUX1JPTExCQUNL X1JFU1VMVCwKKwlDU1RBVEVfUkVUUlksCisJQ1NUQVRFX0ZBSUxVUkUsCisKIAkvKgogCSAqIENT VEFURV9FTkRfVFggcGVyZm9ybXMgZW5kLW9mLXRyYW5zYWN0aW9uIHByb2Nlc3NpbmcuICBDYWxj dWxhdGVzCiAJICogbGF0ZW5jeSwgYW5kIGxvZ3MgdGhlIHRyYW5zYWN0aW9uLiAgSW4gLS1jb25u ZWN0IG1vZGUsIGNsb3NlcyB0aGUKQEAgLTM4MiwxMCArNTE5LDI0IEBAIHR5cGVkZWYgc3RydWN0 CiAJaW5zdHJfdGltZQlzdG10X2JlZ2luOwkJLyogdXNlZCBmb3IgbWVhc3VyaW5nIHN0YXRlbWVu dCBsYXRlbmNpZXMgKi8KIAogCWJvb2wJCXByZXBhcmVkW01BWF9TQ1JJUFRTXTsJLyogd2hldGhl ciBjbGllbnQgcHJlcGFyZWQgdGhlIHNjcmlwdCAqLworCWJvb2wJCXJvbGxiYWNrX3ByZXBhcmVk OwkvKiB3aGV0aGVyIGNsaWVudCBwcmVwYXJlZCBhIHJvbGxiYWNrCisJCQkJCQkJCQkgKiBjb21t YW5kICovCisKKwkvKgorCSAqIEZvciBwcm9jZXNzaW5nIGZhaWx1cmVzIGFuZCByZXBlYXRpbmcg dHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBvcgorCSAqIGRlYWRsb2NrIGVycm9yczoK KwkgKi8KKwlFU3RhdHVzIAllc3RhdHVzOwkvKiB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBjdXJy ZW50IHRyYW5zYWN0aW9uCisJCQkJCQkJICogZXhlY3V0aW9uOyB0aGlzIGlzIEVTVEFUVVNfTk9f RVJST1IgaWYgdGhlcmUgd2VyZQorCQkJCQkJCSAqIG5vIGVycm9ycyAqLworCVJldHJ5U3RhdGUg IHJldHJ5X3N0YXRlOworCXVpbnQzMgkJCXJldHJpZXM7CS8qIGhvdyBtYW55IHRpbWVzIGhhdmUg d2UgYWxyZWFkeSByZXRyaWVkIHRoZQorCQkJCQkJCQkgKiBjdXJyZW50IHRyYW5zYWN0aW9uIGFm dGVyIGEgc2VyaWFsaXphdGlvbiBvcgorCQkJCQkJCQkgKiBhIGRlYWRsb2NrIGVycm9yPyAqLwog CiAJLyogcGVyIGNsaWVudCBjb2xsZWN0ZWQgc3RhdHMgKi8KLQlpbnQ2NAkJY250OwkJCS8qIGNs aWVudCB0cmFuc2FjdGlvbiBjb3VudCwgZm9yIC10ICovCi0JaW50CQkJZWNudDsJCQkvKiBlcnJv ciBjb3VudCAqLworCWludDY0CQljbnQ7CQkJLyogY2xpZW50IHRyYW5zYWN0aW9uIGNvdW50LCBm b3IgLXQ7IHNraXBwZWQgYW5kCisJCQkJCQkJCSAqIGZhaWxlZCB0cmFuc2FjdGlvbnMgYXJlIGFs c28gY291bnRlZCBoZXJlICovCiB9IENTdGF0ZTsKIAogLyoKQEAgLTQ5MSw2ICs2NDIsMTAgQEAg dHlwZWRlZiBzdHJ1Y3QKIAljaGFyCSAgICphcmd2W01BWF9BUkdTXTsgLyogY29tbWFuZCB3b3Jk IGxpc3QgKi8KIAlQZ0JlbmNoRXhwciAqZXhwcjsJCQkvKiBwYXJzZWQgZXhwcmVzc2lvbiwgaWYg bmVlZGVkICovCiAJU2ltcGxlU3RhdHMgc3RhdHM7CQkJLyogdGltZSBzcGVudCBpbiB0aGlzIGNv bW1hbmQgKi8KKwlpbnQ2NAkJcmV0cmllczsJCS8qIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEg c2VyaWFsaXphdGlvbiBvciBhCisJCQkJCQkJCSAqIGRlYWRsb2NrIGVycm9yIGluIHRoZSBjdXJy ZW50IGNvbW1hbmQgKi8KKwlpbnQ2NAkJZmFpbHVyZXM7CQkvKiBudW1iZXIgb2YgZXJyb3JzIGlu IHRoZSBjdXJyZW50IGNvbW1hbmQgdGhhdAorCQkJCQkJCQkgKiB3ZXJlIG5vdCByZXRyaWVkICov CiB9IENvbW1hbmQ7CiAKIHR5cGVkZWYgc3RydWN0IFBhcnNlZFNjcmlwdApAQCAtNTA2LDcgKzY2 MSwxNiBAQCBzdGF0aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVtYmVyIG9mIHNjcmlwdHMgaW4g c3FsX3NjcmlwdFtdICovCiBzdGF0aWMgaW50CW51bV9jb21tYW5kcyA9IDA7CS8qIHRvdGFsIG51 bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8KIHN0YXRpYyBpbnQ2NCB0b3RhbF93ZWlnaHQgPSAw OwogCi1zdGF0aWMgaW50CWRlYnVnID0gMDsJCQkvKiBkZWJ1ZyBmbGFnICovCit0eXBlZGVmIGVu dW0gRGVidWdMZXZlbAoreworCU5PX0RFQlVHID0gMCwJCQkJLyogbm8gZGVidWdnaW5nIG91dHB1 dCAoZXhjZXB0IFBHQkVOQ0hfREVCVUcpICovCisJREVCVUdfRVJST1JTLAkJCQkvKiBwcmludCBv bmx5IGVycm9yIG1lc3NhZ2VzLCByZXRyaWVzIGFuZAorCQkJCQkJCQkgKiBmYWlsdXJlcyAqLwor CURFQlVHX0FMTAkJCQkJLyogcHJpbnQgYWxsIGRlYnVnZ2luZyBvdXRwdXQgKHRocm90dGxpbmcs CisJCQkJCQkJCSAqIGV4ZWN1dGVkL3NlbnQvcmVjZWl2ZWQgY29tbWFuZHMgZXRjLikgKi8KK30g RGVidWdMZXZlbDsKKworc3RhdGljIERlYnVnTGV2ZWwgZGVidWdfbGV2ZWwgPSBOT19ERUJVRzsJ LyogZGVidWcgZmxhZyAqLwogCiAvKiBCdWlsdGluIHRlc3Qgc2NyaXB0cyAqLwogdHlwZWRlZiBz dHJ1Y3QgQnVpbHRpblNjcmlwdApAQCAtNjE4LDE1ICs3ODIsMTggQEAgdXNhZ2Uodm9pZCkKIAkJ ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGZvciBzdWJtaXR0aW5nIHF1 ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiIKIAkJICAgIiAgLW4sIC0tbm8tdmFjdXVtICAgICAg ICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0ZXN0c1xuIgogCQkgICAiICAtUCwgLS1wcm9n cmVzcz1OVU0gICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IE5VTSBzZWNv bmRzXG4iCi0JCSAgICIgIC1yLCAtLXJlcG9ydC1sYXRlbmNpZXMgICByZXBvcnQgYXZlcmFnZSBs YXRlbmN5IHBlciBjb21tYW5kXG4iCisJCSAgICIgIC1yLCAtLXJlcG9ydC1wZXItY29tbWFuZCBy ZXBvcnQgbGF0ZW5jaWVzLCBmYWlsdXJlcyBhbmQgcmV0cmllcyBwZXIgY29tbWFuZFxuIgogCQkg ICAiICAtUiwgLS1yYXRlPU5VTSAgICAgICAgICAgdGFyZ2V0IHJhdGUgaW4gdHJhbnNhY3Rpb25z IHBlciBzZWNvbmRcbiIKIAkJICAgIiAgLXMsIC0tc2NhbGU9TlVNICAgICAgICAgIHJlcG9ydCB0 aGlzIHNjYWxlIGZhY3RvciBpbiBvdXRwdXRcbiIKIAkJICAgIiAgLXQsIC0tdHJhbnNhY3Rpb25z PU5VTSAgIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgZWFjaCBjbGllbnQgcnVucyAoZGVmYXVsdDog MTApXG4iCiAJCSAgICIgIC1ULCAtLXRpbWU9TlVNICAgICAgICAgICBkdXJhdGlvbiBvZiBiZW5j aG1hcmsgdGVzdCBpbiBzZWNvbmRzXG4iCiAJCSAgICIgIC12LCAtLXZhY3V1bS1hbGwgICAgICAg ICB2YWN1dW0gYWxsIGZvdXIgc3RhbmRhcmQgdGFibGVzIGJlZm9yZSB0ZXN0c1xuIgogCQkgICAi ICAtLWFnZ3JlZ2F0ZS1pbnRlcnZhbD1OVU0gYWdncmVnYXRlIGRhdGEgb3ZlciBOVU0gc2Vjb25k c1xuIgorCQkgICAiICAtLWZhaWx1cmVzLWRldGFpbGVkICAgICAgcmVwb3J0IHRoZSBmYWlsdXJl cyBncm91cGVkIGJ5IGJhc2ljIHR5cGVzXG4iCiAJCSAgICIgIC0tbG9nLXByZWZpeD1QUkVGSVgg ICAgICBwcmVmaXggZm9yIHRyYW5zYWN0aW9uIHRpbWUgbG9nIGZpbGVcbiIKIAkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBcInBnYmVuY2hfbG9nXCIpXG4iCisJCSAg ICIgIC0tbWF4LXRyaWVzPU5VTSAgICAgICAgICBtYXggbnVtYmVyIG9mIHRyaWVzIHRvIHJ1biB0 cmFuc2FjdGlvbiAoZGVmYXVsdDogMSlcbiIKKwkJICAgIiAgLS1wcmludC1lcnJvcnMgICAgICAg ICAgIHByaW50IG1lc3NhZ2VzIG9mIGFsbCBlcnJvcnNcbiIKIAkJICAgIiAgLS1wcm9ncmVzcy10 aW1lc3RhbXAgICAgIHVzZSBVbml4IGVwb2NoIHRpbWVzdGFtcHMgZm9yIHByb2dyZXNzXG4iCiAJ CSAgICIgIC0tcmFuZG9tLXNlZWQ9U0VFRCAgICAgICBzZXQgcmFuZG9tIHNlZWQgKFwidGltZVwi LCBcInJhbmRcIiwgaW50ZWdlcilcbiIKIAkJICAgIiAgLS1zYW1wbGluZy1yYXRlPU5VTSAgICAg IGZyYWN0aW9uIG9mIHRyYW5zYWN0aW9ucyB0byBsb2cgKGUuZy4sIDAuMDEgZm9yIDElJSlcbiIK QEAgLTEwODQsNiArMTI1MSwxMiBAQCBpbml0U3RhdHMoU3RhdHNEYXRhICpzZCwgdGltZV90IHN0 YXJ0X3RpbWUpCiAJc2QtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwogCXNkLT5jbnQgPSAwOwog CXNkLT5za2lwcGVkID0gMDsKKwlzZC0+cmV0cmllcyA9IDA7CisJc2QtPnJldHJpZWQgPSAwOwor CXNkLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzID0gMDsKKwlzZC0+ZGVhZGxvY2tfZmFpbHVyZXMg PSAwOworCXNkLT5vdGhlcl9zcWxfZmFpbHVyZXMgPSAwOworCXNkLT5tZXRhX2NvbW1hbmRfZmFp bHVyZXMgPSAwOwogCWluaXRTaW1wbGVTdGF0cygmc2QtPmxhdGVuY3kpOwogCWluaXRTaW1wbGVT dGF0cygmc2QtPmxhZyk7CiB9CkBAIC0xMDkyLDIyICsxMjY1LDU1IEBAIGluaXRTdGF0cyhTdGF0 c0RhdGEgKnNkLCB0aW1lX3Qgc3RhcnRfdGltZSkKICAqIEFjY3VtdWxhdGUgb25lIGFkZGl0aW9u YWwgaXRlbSBpbnRvIHRoZSBnaXZlbiBzdGF0cyBvYmplY3QuCiAgKi8KIHN0YXRpYyB2b2lkCi1h Y2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91 YmxlIGxhZykKK2FjY3VtU3RhdHMoU3RhdHNEYXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3Vi bGUgbGF0LCBkb3VibGUgbGFnLAorCQkgICBFU3RhdHVzIGVzdGF0dXMsIGludDY0IHJldHJpZXMp CiB7Ci0Jc3RhdHMtPmNudCsrOwotCisJLyogUmVjb3JkIHRoZSBza2lwcGVkIHRyYW5zYWN0aW9u ICovCiAJaWYgKHNraXBwZWQpCiAJewogCQkvKiBubyBsYXRlbmN5IHRvIHJlY29yZCBvbiBza2lw cGVkIHRyYW5zYWN0aW9ucyAqLwogCQlzdGF0cy0+c2tpcHBlZCsrOworCQlyZXR1cm47CiAJfQot CWVsc2UKKworCS8qCisJICogUmVjb3JkIHRoZSBudW1iZXIgb2YgcmV0cmllcyByZWdhcmRsZXNz IG9mIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIHdhcworCSAqIHN1Y2Nlc3NmdWwgb3IgZmFpbGVk LgorCSAqLworCXN0YXRzLT5yZXRyaWVzICs9IHJldHJpZXM7CisJaWYgKHJldHJpZXMgPiAwKQor CQlzdGF0cy0+cmV0cmllZCsrOworCisJc3dpdGNoIChlc3RhdHVzKQogCXsKLQkJYWRkVG9TaW1w bGVTdGF0cygmc3RhdHMtPmxhdGVuY3ksIGxhdCk7CisJCQkvKiBSZWNvcmQgdGhlIHN1Y2Nlc3Nm dWwgdHJhbnNhY3Rpb24gKi8KKwkJY2FzZSBFU1RBVFVTX05PX0VSUk9SOgorCQkJc3RhdHMtPmNu dCsrOwogCi0JCS8qIGFuZCBwb3NzaWJseSB0aGUgc2FtZSBmb3Igc2NoZWR1bGUgbGFnICovCi0J CWlmICh0aHJvdHRsZV9kZWxheSkKLQkJCWFkZFRvU2ltcGxlU3RhdHMoJnN0YXRzLT5sYWcsIGxh Zyk7CisJCQlhZGRUb1NpbXBsZVN0YXRzKCZzdGF0cy0+bGF0ZW5jeSwgbGF0KTsKKworCQkJLyog YW5kIHBvc3NpYmx5IHRoZSBzYW1lIGZvciBzY2hlZHVsZSBsYWcgKi8KKwkJCWlmICh0aHJvdHRs ZV9kZWxheSkKKwkJCQlhZGRUb1NpbXBsZVN0YXRzKCZzdGF0cy0+bGFnLCBsYWcpOworCQkJYnJl YWs7CisKKwkJCS8qIFJlY29yZCB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uICovCisJCWNhc2UgRVNU QVRVU19NRVRBX0NPTU1BTkRfRVJST1I6CisJCQlzdGF0cy0+bWV0YV9jb21tYW5kX2ZhaWx1cmVz Kys7CisJCQlicmVhazsKKwkJY2FzZSBFU1RBVFVTX1NFUklBTElaQVRJT05fRVJST1I6CisJCQlz dGF0cy0+c2VyaWFsaXphdGlvbl9mYWlsdXJlcysrOworCQkJYnJlYWs7CisJCWNhc2UgRVNUQVRV U19ERUFETE9DS19FUlJPUjoKKwkJCXN0YXRzLT5kZWFkbG9ja19mYWlsdXJlcysrOworCQkJYnJl YWs7CisJCWNhc2UgRVNUQVRVU19PVEhFUl9TUUxfRVJST1I6CisJCQlzdGF0cy0+b3RoZXJfc3Fs X2ZhaWx1cmVzKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGludGVybmFsIGVycm9y IHdoaWNoIHNob3VsZCBuZXZlciBvY2N1ciAqLworCQkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVj dGVkIGVycm9yIHN0YXR1czogJWRcbiIsIGVzdGF0dXMpOworCQkJZXhpdCgxKTsKIAl9CiB9CiAK QEAgLTEzNDAsOSArMTU0NiwxMCBAQCBtYWtlVmFyaWFibGVWYWx1ZShWYXJpYWJsZSAqdmFyKQog CiAJCWlmIChzc2NhbmYodmFyLT5zdmFsdWUsICIlbGYlYyIsICZkdiwgJnhzKSAhPSAxKQogCQl7 Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJIm1hbGZvcm1lZCB2YXJpYWJsZSBcIiVzXCIgdmFs dWU6IFwiJXNcIlxuIiwKLQkJCQkJdmFyLT5uYW1lLCB2YXItPnN2YWx1ZSk7CisJCQlpZiAoZGVi dWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIm1h bGZvcm1lZCB2YXJpYWJsZSBcIiVzXCIgdmFsdWU6IFwiJXNcIlxuIiwKKwkJCQkJCXZhci0+bmFt ZSwgdmFyLT5zdmFsdWUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXNldERvdWJsZVZhbHVl KCZ2YXItPnZhbHVlLCBkdik7CkBAIC0xNDExLDcgKzE2MTgsOSBAQCBlbmxhcmdlVmFyaWFibGVz KFZhcmlhYmxlcyAqdmFyaWFibGVzLCBpbnQgbmVlZGVkKQogLyoKICAqIExvb2t1cCBhIHZhcmlh YmxlIGJ5IG5hbWUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUuCiAgKiBDYWxsZXIgaXMgZXhwZWN0 ZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8gdGhlIHZhcmlhYmxlLgotICogUmV0dXJucyBOVUxMIG9u IGZhaWx1cmUgKGJhZCBuYW1lKS4KKyAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlIChiYWQgbmFt ZSkuIEJlY2F1c2UgdGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQKKyAqIGNvbW1hbmRzLCBwcmlu dCBhbiBlcnJvciBtZXNzYWdlIG9ubHkgaW4gZGVidWcgbW9kZS4gVGhlIGNhbGxlciBjYW4gcHJp bnQgaGlzCisgKiBvd24gZXJyb3IgbWVzc2FnZS4KICAqLwogc3RhdGljIFZhcmlhYmxlICoKIGxv b2t1cENyZWF0ZVZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250 ZXh0LCBjaGFyICpuYW1lKQpAQCAtMTQyNyw4ICsxNjM2LDkgQEAgbG9va3VwQ3JlYXRlVmFyaWFi bGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUp CiAJCSAqLwogCQlpZiAoIXZhbGlkX3ZhcmlhYmxlX25hbWUobmFtZSkpCiAJCXsKLQkJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZTogXCIlc1wiXG4iLAotCQkJCQlj b250ZXh0LCBuYW1lKTsKKwkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJ ZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCisJ CQkJCQljb250ZXh0LCBuYW1lKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTE0NjAsNyAr MTY3MCwxMSBAQCBwdXRWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAq Y29udGV4dCwgY2hhciAqbmFtZSwKIAogCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlh YmxlcywgY29udGV4dCwgbmFtZSk7CiAJaWYgKCF2YXIpCisJeworCQlmcHJpbnRmKHN0ZGVyciwg IiVzOiBlcnJvciB3aGlsZSBzZXR0aW5nIHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJCQljb250ZXh0 LCBuYW1lKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCS8qIGR1cCB0aGVuIGZyZWUsIGluIGNh c2UgdmFsdWUgaXMgcG9pbnRpbmcgYXQgdGhpcyB2YXJpYWJsZSAqLwogCXZhbCA9IHBnX3N0cmR1 cCh2YWx1ZSk7CkBAIC0xNDczLDggKzE2ODcsMTIgQEAgcHV0VmFyaWFibGUoVmFyaWFibGVzICp2 YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCiAJcmV0dXJuIHRydWU7 CiB9CiAKLS8qIEFzc2lnbiBhIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlmIG5l ZWQgYmUgKi8KLS8qIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCisvKgor ICogQXNzaWduIGEgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZS4K KyAqIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpLiBCZWNhdXNlIHRoaXMgY2Fu IGJlIHVzZWQgYnkgY2xpZW50CisgKiBjb21tYW5kcywgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBv bmx5IGluIGRlYnVnIG1vZGUuIFRoZSBjYWxsZXIgY2FuIHByaW50IGhpcworICogb3duIGVycm9y IG1lc3NhZ2UuCisgKi8KIHN0YXRpYyBib29sCiBwdXRWYXJpYWJsZVZhbHVlKFZhcmlhYmxlcyAq dmFyaWFibGVzLCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAogCQkJCSBjb25zdCBQ Z0JlbmNoVmFsdWUgKnZhbHVlKQpAQCAtMTQ4Myw3ICsxNzAxLDEyIEBAIHB1dFZhcmlhYmxlVmFs dWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUs CiAKIAl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJsZSh2YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUp OwogCWlmICghdmFyKQorCXsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKKwkJ CWZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHNldHRpbmcgdmFyaWFibGUgXCIlc1wi XG4iLAorCQkJCQljb250ZXh0LCBuYW1lKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCWlmICh2 YXItPnN2YWx1ZSkKIAkJZnJlZSh2YXItPnN2YWx1ZSk7CkBAIC0xNDkzLDggKzE3MTYsMTIgQEAg cHV0VmFyaWFibGVWYWx1ZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4 dCwgY2hhciAqbmFtZSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogQXNzaWduIGFuIGludGVnZXIg dmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZSAqLwotLyogUmV0dXJu cyBmYWxzZSBvbiBmYWlsdXJlIChiYWQgbmFtZSkgKi8KKy8qCisgKiBBc3NpZ24gYW4gaW50ZWdl ciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlLgorICogUmV0dXJu cyBmYWxzZSBvbiBmYWlsdXJlIChiYWQgbmFtZSkuIEJlY2F1c2UgdGhpcyBjYW4gYmUgdXNlZCBi eSBjbGllbnQKKyAqIGNvbW1hbmRzLCBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9ubHkgaW4gZGVi dWcgbW9kZS4gVGhlIGNhbGxlciBjYW4gcHJpbnQgaGlzCisgKiBvd24gZXJyb3IgbWVzc2FnZS4K KyAqLwogc3RhdGljIGJvb2wKIHB1dFZhcmlhYmxlSW50KFZhcmlhYmxlcyAqdmFyaWFibGVzLCBj b25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAogCQkJICAgaW50NjQgdmFsdWUpCkBAIC0x NjM0LDcgKzE4NjEsOSBAQCBjb2VyY2VUb0Jvb2woUGdCZW5jaFZhbHVlICpwdmFsLCBib29sICpi dmFsKQogCX0KIAllbHNlCQkJCQkJLyogTlVMTCwgSU5UIG9yIERPVUJMRSAqLwogCXsKLQkJZnBy aW50ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVzIHRvIGJvb2xlYW5cbiIsIHZhbHVlVHlwZU5h bWUocHZhbCkpOworCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJZnByaW50 ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVzIHRvIGJvb2xlYW5cbiIsCisJCQkJCXZhbHVlVHlw ZU5hbWUocHZhbCkpOwogCQkqYnZhbCA9IGZhbHNlOwkJCS8qIHN1cHByZXNzIHVuaW5pdGlhbGl6 ZWQtdmFyaWFibGUgd2FybmluZ3MgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE2NzksNyAr MTkwOCw4IEBAIGNvZXJjZVRvSW50KFBnQmVuY2hWYWx1ZSAqcHZhbCwgaW50NjQgKml2YWwpCiAK IAkJaWYgKGR2YWwgPCBQR19JTlQ2NF9NSU4gfHwgUEdfSU5UNjRfTUFYIDwgZHZhbCkKIAkJewot CQkJZnByaW50ZihzdGRlcnIsICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZh bCk7CisJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJCWZwcmludGYoc3Rk ZXJyLCAiZG91YmxlIHRvIGludCBvdmVyZmxvdyBmb3IgJWZcbiIsIGR2YWwpOwogCQkJcmV0dXJu IGZhbHNlOwogCQl9CiAJCSppdmFsID0gKGludDY0KSBkdmFsOwpAQCAtMTY4Nyw3ICsxOTE3LDgg QEAgY29lcmNlVG9JbnQoUGdCZW5jaFZhbHVlICpwdmFsLCBpbnQ2NCAqaXZhbCkKIAl9CiAJZWxz ZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAqLwogCXsKLQkJZnByaW50ZihzdGRlcnIsICJjYW5u b3QgY29lcmNlICVzIHRvIGludFxuIiwgdmFsdWVUeXBlTmFtZShwdmFsKSk7CisJCWlmIChkZWJ1 Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBjb2Vy Y2UgJXMgdG8gaW50XG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKIAkJcmV0dXJuIGZhbHNlOwog CX0KIH0KQEAgLTE3MDgsNyArMTkzOSw5IEBAIGNvZXJjZVRvRG91YmxlKFBnQmVuY2hWYWx1ZSAq cHZhbCwgZG91YmxlICpkdmFsKQogCX0KIAllbHNlCQkJCQkJLyogQk9PTEVBTiBvciBOVUxMICov CiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBjb2VyY2UgJXMgdG8gZG91YmxlXG4iLCB2 YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykK KwkJCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0byBkb3VibGVcbiIsCisJCQkJ CXZhbHVlVHlwZU5hbWUocHZhbCkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQpAQCAtMTg4OSw4 ICsyMTIyLDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwK IAogCWlmIChsICE9IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkidG9vIG1hbnkg ZnVuY3Rpb24gYXJndW1lbnRzLCBtYXhpbXVtIGlzICVkXG4iLCBNQVhfRkFSR1MpOworCQlpZiAo ZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJ0 b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMsIG1heGltdW0gaXMgJWRcbiIsIE1BWF9GQVJHUyk7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTIwMTMsNyArMjI0Nyw4IEBAIGV2YWxTdGFuZGFy ZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQljYXNlIFBHQkVOQ0hfTU9E OgogCQkJCQkJCWlmIChyaSA9PSAwKQogCQkJCQkJCXsKLQkJCQkJCQkJZnByaW50ZihzdGRlcnIs ICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKKwkJCQkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVH X0VSUk9SUykKKwkJCQkJCQkJCWZwcmludGYoc3RkZXJyLCAiZGl2aXNpb24gYnkgemVyb1xuIik7 CiAJCQkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCQl9CiAJCQkJCQkJLyogc3BlY2lhbCBoYW5k bGluZyBvZiAtMSBkaXZpc29yICovCkBAIC0yMDI0LDcgKzIyNTksOSBAQCBldmFsU3RhbmRhcmRG dW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJCQkJLyogb3ZlcmZsb3cgY2hl Y2sgKG5lZWRlZCBmb3IgSU5UNjRfTUlOKSAqLwogCQkJCQkJCQkJaWYgKGxpID09IFBHX0lOVDY0 X01JTikKIAkJCQkJCQkJCXsKLQkJCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImJpZ2ludCBvdXQg b2YgcmFuZ2VcbiIpOworCQkJCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMp CisJCQkJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJCQkJCSJiaWdpbnQgb3V0IG9m IHJhbmdlXG4iKTsKIAkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJCQkJCQl9CiAJCQkJCQkJ CQllbHNlCkBAIC0yMjY0LDEzICsyNTAxLDE1IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0 aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJLyogY2hlY2sgcmFuZG9tIHJhbmdlICovCiAJCQkJaWYg KGltaW4gPiBpbWF4KQogCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBn aXZlbiB0byByYW5kb21cbiIpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JT KQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIp OwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGltYXggLSBpbWluIDwg MCB8fCAoaW1heCAtIGltaW4pICsgMSA8IDApCiAJCQkJewogCQkJCQkvKiBwcmV2ZW50IGludCBv dmVyZmxvd3MgaW4gcmFuZG9tIGZ1bmN0aW9ucyAqLwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJh bmRvbSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfRVJST1JTKQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJyYW5kb20gcmFuZ2UgaXMgdG9vIGxh cmdlXG4iKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIApAQCAtMjI5Miw5ICsyNTMxLDEw IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCXsK IAkJCQkJCWlmIChwYXJhbSA8IE1JTl9HQVVTU0lBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJCSJnYXVzc2lhbiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBs ZWFzdCAlZiAiCi0JCQkJCQkJCQkiKG5vdCAlZilcbiIsIE1JTl9HQVVTU0lBTl9QQVJBTSwgcGFy YW0pOworCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJCQkJCWZw cmludGYoc3RkZXJyLAorCQkJCQkJCQkJCSJnYXVzc2lhbiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBs ZWFzdCAlZiAobm90ICVmKVxuIiwKKwkJCQkJCQkJCQlNSU5fR0FVU1NJQU5fUEFSQU0sIHBhcmFt KTsKIAkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJCQl9CiAKQEAgLTIzMDYsOSArMjU0NiwxMCBA QCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJ CQkJCQlpZiAocGFyYW0gPD0gMC4wIHx8IHBhcmFtID09IDEuMCB8fCBwYXJhbSA+IE1BWF9aSVBG SUFOX1BBUkFNKQogCQkJCQkJewotCQkJCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJInpp cGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgKDAsIDEpIFUgKDEsICVkXSIKLQkJCQkJ CQkJCSIgKGdvdCAlZilcbiIsIE1BWF9aSVBGSUFOX1BBUkFNLCBwYXJhbSk7CisJCQkJCQkJaWYg KGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKKwkJCQkJCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCQkJCQkJInppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgKDAsIDEpIFUgKDEs ICVkXSAoZ290ICVmKVxuIiwKKwkJCQkJCQkJCQlNQVhfWklQRklBTl9QQVJBTSwgcGFyYW0pOwog CQkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCX0KIAkJCQkJCXNldEludFZhbHVlKHJldHZhbCwK QEAgLTIzMjAsOSArMjU2MSwxMCBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LAogCQkJCQl7CiAJCQkJCQlpZiAocGFyYW0gPD0gMC4wKQogCQkJCQkJewotCQkJ CQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJImV4cG9uZW50aWFsIHBhcmFtZXRlciBtdXN0 IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIgotCQkJCQkJCQkJIiAoZ290ICVmKVxuIiwgcGFyYW0pOwor CQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJCQkJCWZwcmludGYo c3RkZXJyLAorCQkJCQkJCQkJCSJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVy IHRoYW4gemVybyAoZ290ICVmKVxuIiwKKwkJCQkJCQkJCQlwYXJhbSk7CiAJCQkJCQkJcmV0dXJu IGZhbHNlOwogCQkJCQkJfQogCkBAIC0yNDMzLDggKzI2NzUsOSBAQCBldmFsdWF0ZUV4cHIoVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFBnQmVuY2hFeHByICpleHByLCBQZ0JlbmNoVmFsdWUg KnJldHZhbAogCiAJCQkJaWYgKCh2YXIgPSBsb29rdXBWYXJpYWJsZSgmc3QtPnZhcmlhYmxlcywg ZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJCWZwcmludGYo c3RkZXJyLCAidW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJCQlleHByLT51LnZh cmlhYmxlLnZhcm5hbWUpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQor CQkJCQkJZnByaW50ZihzdGRlcnIsICJ1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAorCQkJ CQkJCQlleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJ fQogCkBAIC0yNTI4LDE1ICsyNzcxLDE3IEBAIHJ1blNoZWxsQ29tbWFuZChWYXJpYWJsZXMgKnZh cmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkJfQogCQll bHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsgMSkpID09IE5V TEwpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVz XCJcbiIsCi0JCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOworCQkJaWYgKGRlYnVnX2xldmVsID49IERF QlVHX0VSUk9SUykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUg XCIlc1wiXG4iLAorCQkJCQkJYXJndlswXSwgYXJndltpXSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KIAogCQlhcmdsZW4gPSBzdHJsZW4oYXJnKTsKIAkJaWYgKGxlbiArIGFyZ2xlbiArIChpID4g MCA/IDEgOiAwKSA+PSBTSEVMTF9DT01NQU5EX1NJWkUgLSAxKQogCQl7Ci0JCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiBzaGVsbCBjb21tYW5kIGlzIHRvbyBsb25nXG4iLCBhcmd2WzBdKTsKKwkJCWlm IChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJZnByaW50ZihzdGRlcnIsICIlczog c2hlbGwgY29tbWFuZCBpcyB0b28gbG9uZ1xuIiwgYXJndlswXSk7CiAJCQlyZXR1cm4gZmFsc2U7 CiAJCX0KIApAQCAtMjU1Myw3ICsyNzk4LDcgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAq dmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCXsKIAkJ aWYgKHN5c3RlbShjb21tYW5kKSkKIAkJewotCQkJaWYgKCF0aW1lcl9leGNlZWRlZCkKKwkJCWlm ICghdGltZXJfZXhjZWVkZWQgJiYgZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQogCQkJCWZw cmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBsYXVuY2ggc2hlbGwgY29tbWFuZFxuIiwgYXJn dlswXSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KQEAgLTI1NjMsMTkgKzI4MDgsMjEgQEAgcnVu U2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAq KmFyZ3YsIGludCBhcmdjKQogCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aCBwaXBlIGFuZCBy ZWFkIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCiAJaWYgKChmcCA9IHBvcGVuKGNvbW1hbmQsICJy IikpID09IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgbGF1bmNo IHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOworCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdf RVJST1JTKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBj b21tYW5kXG4iLCBhcmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoZmdldHMocmVz LCBzaXplb2YocmVzKSwgZnApID09IE5VTEwpCiAJewotCQlpZiAoIXRpbWVyX2V4Y2VlZGVkKQor CQlpZiAoIXRpbWVyX2V4Y2VlZGVkICYmIGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKIAkJ CWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCByZWFkIHJlc3VsdCBvZiBzaGVsbCBjb21t YW5kXG4iLCBhcmd2WzBdKTsKIAkJKHZvaWQpIHBjbG9zZShmcCk7CiAJCXJldHVybiBmYWxzZTsK IAl9CiAJaWYgKHBjbG9zZShmcCkgPCAwKQogCXsKLQkJZnByaW50ZihzdGRlcnIsICIlczogY291 bGQgbm90IGNsb3NlIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOworCQlpZiAoZGVidWdfbGV2 ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGNs b3NlIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBA IC0yNTg1LDggKzI4MzIsMTAgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVz LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQllbmRwdHIrKzsKIAlp ZiAoKnJlcyA9PSAnXDAnIHx8ICplbmRwdHIgIT0gJ1wwJykKIAl7Ci0JCWZwcmludGYoc3RkZXJy LCAiJXM6IHNoZWxsIGNvbW1hbmQgbXVzdCByZXR1cm4gYW4gaW50ZWdlciAobm90IFwiJXNcIilc biIsCi0JCQkJYXJndlswXSwgcmVzKTsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9S UykKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiJXM6IHNoZWxsIGNvbW1hbmQgbXVzdCByZXR1 cm4gYW4gaW50ZWdlciAobm90IFwiJXNcIilcbiIsCisJCQkJCWFyZ3ZbMF0sIHJlcyk7CiAJCXJl dHVybiBmYWxzZTsKIAl9CiAJaWYgKCFwdXRWYXJpYWJsZUludCh2YXJpYWJsZXMsICJzZXRzaGVs bCIsIHZhcmlhYmxlLCByZXR2YWwpKQpAQCAtMjYwNSwxNCArMjg1NCwzMSBAQCBwcmVwYXJlZFN0 YXRlbWVudE5hbWUoY2hhciAqYnVmZmVyLCBpbnQgZmlsZSwgaW50IHN0YXRlKQogCXNwcmludGYo YnVmZmVyLCAiUCVkXyVkIiwgZmlsZSwgc3RhdGUpOwogfQogCisvKgorICogUmVwb3J0IHRoZSBl cnJvciBpbiB0aGUgY29tbWFuZCB3aGlsZSB0aGUgc2NyaXB0IGlzIGV4ZWN1dGluZy4KKyAqLwog c3RhdGljIHZvaWQKIGNvbW1hbmRGYWlsZWQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY21kLCBj b25zdCBjaGFyICptZXNzYWdlKQogewogCWZwcmludGYoc3RkZXJyLAotCQkJImNsaWVudCAlZCBh Ym9ydGVkIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAorCQkJImNsaWVu dCAlZCBnb3QgYW4gZXJyb3IgaW4gY29tbWFuZCAlZCAoJXMpIG9mIHNjcmlwdCAlZDsgJXNcbiIs CiAJCQlzdC0+aWQsIHN0LT5jb21tYW5kLCBjbWQsIHN0LT51c2VfZmlsZSwgbWVzc2FnZSk7CiB9 CiAKKy8qCisgKiBSZXBvcnQgdGhlIGFib3J0aW9uIG9mIHRoZSBjbGllbnQgd2hlbiBwcm9jZXNz aW5nIFNRTCBjb21tYW5kcy4KKyAqLworc3RhdGljIHZvaWQKK2NsaWVudEFib3J0ZWQoQ1N0YXRl ICpzdCwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwljb25zdCBDb21tYW5kICpjb21tYW5kID0g c3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKKworCUFzc2Vy dChjb21tYW5kLT50eXBlID09IFNRTF9DT01NQU5EKTsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJCSJj bGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkIChTUUwpIG9mIHNjcmlwdCAlZDsgJXNcbiIs CisJCQlzdC0+aWQsIHN0LT5jb21tYW5kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworfQorCiAv KiByZXR1cm4gYSBzY3JpcHQgbnVtYmVyIHdpdGggYSB3ZWlnaHRlZCBjaG9pY2UuICovCiBzdGF0 aWMgaW50CiBjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpCkBAIC0yNjQ1LDcgKzI5MTEsNyBA QCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogCQlzcWwgPSBwZ19z dHJkdXAoY29tbWFuZC0+YXJndlswXSk7CiAJCXNxbCA9IGFzc2lnblZhcmlhYmxlcygmc3QtPnZh cmlhYmxlcywgc3FsKTsKIAotCQlpZiAoZGVidWcpCisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJV R19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+ aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVyeShzdC0+Y29uLCBzcWwpOwogCQlmcmVlKHNxbCk7 CkBAIC0yNjU3LDcgKzI5MjMsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpj b21tYW5kKQogCiAJCWdldFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVzLCBjb21tYW5kLCBwYXJh bXMpOwogCi0JCWlmIChkZWJ1ZykKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKIAkJ CWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3FsKTsK IAkJciA9IFBRc2VuZFF1ZXJ5UGFyYW1zKHN0LT5jb24sIHNxbCwgY29tbWFuZC0+YXJnYyAtIDEs CiAJCQkJCQkJICBOVUxMLCBwYXJhbXMsIE5VTEwsIE5VTEwsIDApOwpAQCAtMjY5Miw3ICsyOTU4 LDcgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJZ2V0UXVl cnlQYXJhbXMoJnN0LT52YXJpYWJsZXMsIGNvbW1hbmQsIHBhcmFtcyk7CiAJCXByZXBhcmVkU3Rh dGVtZW50TmFtZShuYW1lLCBzdC0+dXNlX2ZpbGUsIHN0LT5jb21tYW5kKTsKIAotCQlpZiAoZGVi dWcpCisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwg ImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIG5hbWUpOwogCQlyID0gUFFzZW5kUXVl cnlQcmVwYXJlZChzdC0+Y29uLCBuYW1lLCBjb21tYW5kLT5hcmdjIC0gMSwKIAkJCQkJCQkJcGFy YW1zLCBOVUxMLCBOVUxMLCAwKTsKQEAgLTI3MDIsMTAgKzI5NjgsNjIgQEAgc2VuZENvbW1hbmQo Q1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAogCWlmIChyID09IDApCiAJewotCQlpZiAo ZGVidWcpCisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVy ciwgImNsaWVudCAlZCBjb3VsZCBub3Qgc2VuZCAlc1xuIiwKIAkJCQkJc3QtPmlkLCBjb21tYW5k LT5hcmd2WzBdKTsKLQkJc3QtPmVjbnQrKzsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJ CXJldHVybiB0cnVlOworfQorCisvKiBTZW5kIGEgcm9sbGJhY2sgY29tbWFuZCwgdXNpbmcgdGhl IGNob3NlbiBxdWVyeW1vZGUgKi8KK3N0YXRpYyBib29sCitzZW5kUm9sbGJhY2soQ1N0YXRlICpz dCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqcm9sbGJhY2tfY21kID0gIlJPTExCQUNLOyI7CisJ c3RhdGljIGNvbnN0IGNoYXIgKnByZXBhcmVkX25hbWUgPSAiUF9yb2xsYmFjayI7CS8qIGZvciBR VUVSWV9QUkVQQVJFRCAqLworCWludAkJCXI7CisKKwlpZiAocXVlcnltb2RlID09IFFVRVJZX1NJ TVBMRSkKKwl7CisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQlmcHJpbnRmKHN0 ZGVyciwgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHJvbGxiYWNrX2NtZCk7CisJ CXIgPSBQUXNlbmRRdWVyeShzdC0+Y29uLCByb2xsYmFja19jbWQpOworCX0KKwllbHNlIGlmIChx dWVyeW1vZGUgPT0gUVVFUllfRVhURU5ERUQpCisJeworCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfQUxMKQorCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3Qt PmlkLCByb2xsYmFja19jbWQpOworCQlyID0gUFFzZW5kUXVlcnlQYXJhbXMoc3QtPmNvbiwgcm9s bGJhY2tfY21kLCAwLAorCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7CisJfQor CWVsc2UgaWYgKHF1ZXJ5bW9kZSA9PSBRVUVSWV9QUkVQQVJFRCkKKwl7CisJCWlmICghc3QtPnJv bGxiYWNrX3ByZXBhcmVkKQorCQl7CisJCQlQR3Jlc3VsdCAgICpyZXM7CisKKwkJCXJlcyA9IFBR cHJlcGFyZShzdC0+Y29uLCBwcmVwYXJlZF9uYW1lLCByb2xsYmFja19jbWQsIDAsIE5VTEwpOwor CQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJUFFjbGVhcihy ZXMpOworCQkJc3QtPnJvbGxiYWNrX3ByZXBhcmVkID0gdHJ1ZTsKKwkJfQorCisJCWlmIChkZWJ1 Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5k aW5nICVzXG4iLCBzdC0+aWQsIHByZXBhcmVkX25hbWUpOworCQlyID0gUFFzZW5kUXVlcnlQcmVw YXJlZChzdC0+Y29uLCBwcmVwYXJlZF9uYW1lLCAwLAorCQkJCQkJCQlOVUxMLCBOVUxMLCBOVUxM LCAwKTsKKwl9CisJZWxzZQkJCQkJCS8qIHVua25vd24gc3FsIG1vZGUgKi8KKwkJciA9IDA7CisK KwlpZiAociA9PSAwKQorCXsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKKwkJCWZw cmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGNvdWxkIG5vdCBzZW5kICVzXG4iLAorCQkJCQlzdC0+ aWQsIHJvbGxiYWNrX2NtZCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJZWxzZQpAQCAtMjcyNiw4 ICszMDQ0LDkgQEAgZXZhbHVhdGVTbGVlcChWYXJpYWJsZXMgKnZhcmlhYmxlcywgaW50IGFyZ2Ms IGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQogCXsKIAkJaWYgKCh2YXIgPSBnZXRWYXJpYWJsZSh2 YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIs ICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJYXJndlswXSwgYXJndlsx XSk7CisJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCisJCQkJCQlhcmd2WzBdLCBh cmd2WzFdKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQl1c2VjID0gYXRvaSh2YXIpOwpAQCAt Mjc0OSw2ICszMDY4LDE5MiBAQCBldmFsdWF0ZVNsZWVwKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBp bnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqdXNlY3MpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8q CisgKiBDbGVhciB0aGUgdmFyaWFibGVzIGluIHRoZSBhcnJheS4gVGhlIGFycmF5IGl0c2VsZiBp cyBub3QgZnJlZWQuCisgKi8KK3N0YXRpYyB2b2lkCitjbGVhclZhcmlhYmxlcyhWYXJpYWJsZXMg KnZhcmlhYmxlcykKK3sKKwlWYXJpYWJsZSAgICp2YXJzLAorCQkJICAgKnZhcjsKKwlpbnQJCQlu dmFyczsKKworCWlmICghdmFyaWFibGVzKQorCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIGRv IGhlcmUgKi8KKworCXZhcnMgPSB2YXJpYWJsZXMtPnZhcnM7CisJbnZhcnMgPSB2YXJpYWJsZXMt Pm52YXJzOworCWZvciAodmFyID0gdmFyczsgdmFyIC0gdmFycyA8IG52YXJzOyArK3ZhcikKKwl7 CisJCXBnX2ZyZWUodmFyLT5uYW1lKTsKKwkJcGdfZnJlZSh2YXItPnN2YWx1ZSk7CisJfQorCisJ dmFyaWFibGVzLT5udmFycyA9IDA7Cit9CisKKy8qCisgKiBNYWtlIGEgZGVlcCBjb3B5IG9mIHZh cmlhYmxlcyBhcnJheS4KKyAqIEJlZm9yZSBjb3B5aW5nIHRoZSBmdW5jdGlvbiBmcmVlcyB0aGUg c3RyaW5nIGZpZWxkcyBvZiB0aGUgZGVzdGluYXRpb24KKyAqIHZhcmlhYmxlcyBhbmQgaWYgbmVj ZXNzYXJ5IGVubGFyZ2VzIHRoZWlyIGFycmF5LgorICovCitzdGF0aWMgdm9pZAorY29weVZhcmlh YmxlcyhWYXJpYWJsZXMgKmRlc3QsIGNvbnN0IFZhcmlhYmxlcyAqc291cmNlKQoreworCVZhcmlh YmxlICAgKmRlc3RfdmFyOworCWNvbnN0IFZhcmlhYmxlICpzb3VyY2VfdmFyOworCisJaWYgKCFk ZXN0IHx8ICFzb3VyY2UgfHwgZGVzdCA9PSBzb3VyY2UpCisJCXJldHVybjsJCQkJCS8qIG5vdGhp bmcgdG8gZG8gaGVyZSAqLworCisJLyoKKwkgKiBDbGVhciB0aGUgb3JpZ2luYWwgdmFyaWFibGVz IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IKKwkgKiB0aGUgbmV3 IHZhcmlhYmxlcy4KKwkgKi8KKwljbGVhclZhcmlhYmxlcyhkZXN0KTsKKwllbmxhcmdlVmFyaWFi bGVzKGRlc3QsIHNvdXJjZS0+bnZhcnMpOworCisJLyogTWFrZSBhIGRlZXAgY29weSBvZiB2YXJp YWJsZXMgYXJyYXkgKi8KKwlmb3IgKHNvdXJjZV92YXIgPSBzb3VyY2UtPnZhcnMsIGRlc3RfdmFy ID0gZGVzdC0+dmFyczsKKwkJIHNvdXJjZV92YXIgLSBzb3VyY2UtPnZhcnMgPCBzb3VyY2UtPm52 YXJzOworCQkgKytzb3VyY2VfdmFyLCArK2Rlc3RfdmFyKQorCXsKKwkJZGVzdF92YXItPm5hbWUg PSBwZ19zdHJkdXAoc291cmNlX3Zhci0+bmFtZSk7CisJCWlmIChzb3VyY2VfdmFyLT5zdmFsdWUg PT0gTlVMTCkKKwkJCWRlc3RfdmFyLT5zdmFsdWUgPSBOVUxMOworCQllbHNlCisJCQlkZXN0X3Zh ci0+c3ZhbHVlID0gcGdfc3RyZHVwKHNvdXJjZV92YXItPnN2YWx1ZSk7CisJCWRlc3RfdmFyLT52 YWx1ZSA9IHNvdXJjZV92YXItPnZhbHVlOworCX0KKwlkZXN0LT5udmFycyA9IHNvdXJjZS0+bnZh cnM7CisJZGVzdC0+dmFyc19zb3J0ZWQgPSBzb3VyY2UtPnZhcnNfc29ydGVkOworfQorCisvKgor ICogR2V0IHRoZSBlcnJvciBzdGF0dXMgZnJvbSB0aGUgZXJyb3IgY29kZS4KKyAqLworc3RhdGlj IEVTdGF0dXMKK2dldFNRTEVycm9yU3RhdHVzKGNvbnN0IGNoYXIgKnNxbFN0YXRlKQoreworCWlm IChzcWxTdGF0ZSkKKwl7CisJCWlmIChzdHJjbXAoc3FsU3RhdGUsIEVSUkNPREVfVF9SX1NFUklB TElaQVRJT05fRkFJTFVSRSkgPT0gMCkKKwkJCXJldHVybiBFU1RBVFVTX1NFUklBTElaQVRJT05f RVJST1I7CisJCWVsc2UgaWYgKHN0cmNtcChzcWxTdGF0ZSwgRVJSQ09ERV9UX1JfREVBRExPQ0tf REVURUNURUQpID09IDApCisJCQlyZXR1cm4gRVNUQVRVU19ERUFETE9DS19FUlJPUjsKKwl9CisK KwlyZXR1cm4gRVNUQVRVU19PVEhFUl9TUUxfRVJST1I7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRy dWUgaWYgdGhpcyB0eXBlIG9mIGVycm9yIGNhbiBiZSByZXRyaWVkLgorICovCitzdGF0aWMgYm9v bAorY2FuUmV0cnlFcnJvcihFU3RhdHVzIGVzdGF0dXMpCit7CisJcmV0dXJuIChlc3RhdHVzID09 IEVTVEFUVVNfU0VSSUFMSVpBVElPTl9FUlJPUiB8fAorCQkJZXN0YXR1cyA9PSBFU1RBVFVTX0RF QURMT0NLX0VSUk9SKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgY2Fu IGJlIHJldHJpZWQuCisgKi8KK3N0YXRpYyBib29sCitkb1JldHJ5KENTdGF0ZSAqc3QsIGluc3Ry X3RpbWUgKm5vdykKK3sKKwlBc3NlcnQoc3QtPmVzdGF0dXMgIT0gRVNUQVRVU19OT19FUlJPUik7 CisKKwkvKiBXZSBjYW4gb25seSByZXRyeSBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGVycm9y cy4gKi8KKwlpZiAoIWNhblJldHJ5RXJyb3Ioc3QtPmVzdGF0dXMpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKgorCSAqIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb3B0aW9uIHRvIGxpbWl0IHRo ZSByZXRyeWluZyBvZiB0cmFuc2FjdGlvbnMKKwkgKiB0aGF0IGdvdCBhbiBlcnJvci4KKwkgKi8K KwlBc3NlcnQobWF4X3RyaWVzIHx8IGxhdGVuY3lfbGltaXQpOworCisJLyoKKwkgKiBXZSBjYW5u b3QgcmV0cnkgdGhlIGVycm9yIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIg b2YgdHJpZXMuCisJICovCisJaWYgKG1heF90cmllcyAmJiBzdC0+cmV0cmllcyArIDEgPj0gbWF4 X3RyaWVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFdlIGNhbm5vdCByZXRyeSB0aGUg ZXJyb3IgaWYgd2Ugc3BlbnQgdG9vIG11Y2ggdGltZSBvbiB0aGlzIHRyYW5zYWN0aW9uLgorCSAq LworCWlmIChsYXRlbmN5X2xpbWl0KQorCXsKKwkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTygqbm93 KSkKKwkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoKm5vdyk7CisKKwkJaWYgKElOU1RSX1RJTUVf R0VUX01JQ1JPU0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQgPiBsYXRlbmN5X2xpbWl0KQor CQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE9LICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBTZXQgaW5fdHhfYmxvY2sgdG8gdHJ1ZSBpZiB3ZSBhcmUgaW4gYSAoZmFpbGVkKSB0cmFu c2FjdGlvbiBibG9jayBhbmQgZmFsc2UKKyAqIG90aGVyd2lzZS4KKyAqIFJldHVybnMgZmFsc2Ug b24gZmFpbHVyZSAoYnJva2VuIGNvbm5lY3Rpb24gb3IgaW50ZXJuYWwgZXJyb3IpLgorICovCitz dGF0aWMgYm9vbAorZ2V0VHJhbnNhY3Rpb25TdGF0dXMoUEdjb25uICpjb24sIGJvb2wgKmluX3R4 X2Jsb2NrKQoreworCVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHR4X3N0YXR1czsKKworCXR4X3N0 YXR1cyA9IFBRdHJhbnNhY3Rpb25TdGF0dXMoY29uKTsKKwlzd2l0Y2ggKHR4X3N0YXR1cykKKwl7 CisJCWNhc2UgUFFUUkFOU19JRExFOgorCQkJKmluX3R4X2Jsb2NrID0gZmFsc2U7CisJCQlicmVh azsKKwkJY2FzZSBQUVRSQU5TX0lOVFJBTlM6CisJCWNhc2UgUFFUUkFOU19JTkVSUk9SOgorCQkJ KmluX3R4X2Jsb2NrID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFBRVFJBTlNfVU5LTk9XTjoK KwkJCS8qIFBRVFJBTlNfVU5LTk9XTiBpcyBleHBlY3RlZCBnaXZlbiBhIGJyb2tlbiBjb25uZWN0 aW9uICovCisJCQlpZiAoUFFzdGF0dXMoY29uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJCXsJCS8q IHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nICovCisJCQkJZnByaW50ZihzdGRlcnIsICJwZXJoYXBz IHRoZSBiYWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2luZ1xuIik7CisJCQkJcmV0dXJuIGZhbHNl OworCQkJfQorCQljYXNlIFBRVFJBTlNfQUNUSVZFOgorCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAq IFdlIGNhbm5vdCBmaW5kIG91dCB3aGV0aGVyIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGJsb2Nr IG9yIG5vdC4KKwkJCSAqIEludGVybmFsIGVycm9yIHdoaWNoIHNob3VsZCBuZXZlciBvY2N1ci4K KwkJCSAqLworCQkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHRyYW5zYWN0aW9uIHN0YXR1 cyAlZFxuIiwgdHhfc3RhdHVzKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBPSyAqLwor CXJldHVybiB0cnVlOworfQorCisvKgorICogSWYgdGhlIGxhdGVuY3kgbGltaXQgaXMgdXNlZCwg cmV0dXJuIGEgcGVyY2VudGFnZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgorICogbGF0ZW5j eSBmcm9tIHRoZSBsYXRlbmN5IGxpbWl0LiBPdGhlcndpc2UgcmV0dXJuIHplcm8uCisgKi8KK3N0 YXRpYyBkb3VibGUKK2dldExhdGVuY3lVc2VkKENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdykK K3sKKwlpZiAoIWxhdGVuY3lfbGltaXQpCisJCXJldHVybiAwLjA7CisKKwlpZiAoSU5TVFJfVElN RV9JU19aRVJPKCpub3cpKQorCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKCpub3cpOworCisJcmV0 dXJuICgxMDAuMCAqIChJTlNUUl9USU1FX0dFVF9NSUNST1NFQygqbm93KSAtIHN0LT50eG5fc2No ZWR1bGVkKSAvCisJCQlsYXRlbmN5X2xpbWl0KTsKK30KKwogLyoKICAqIEFkdmFuY2UgdGhlIHN0 YXRlIG1hY2hpbmUgb2YgYSBjb25uZWN0aW9uLCBpZiBwb3NzaWJsZS4KICAqLwpAQCAtMjc5MCw5 ICszMjk1LDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0 YSAqYWdnKQogCiAJCQkJc3QtPnVzZV9maWxlID0gY2hvb3NlU2NyaXB0KHRocmVhZCk7CiAKLQkJ CQlpZiAoZGVidWcpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGV4ZWN1dGluZyBz Y3JpcHQgXCIlc1wiXG4iLCBzdC0+aWQsCi0JCQkJCQkJc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVd LmRlc2MpOworCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQkJCWZwcmludGYo c3RkZXJyLCAiY2xpZW50ICVkIGV4ZWN1dGluZyBzY3JpcHQgXCIlc1wiXG4iLAorCQkJCQkJCXN0 LT5pZCwgc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOwogCiAJCQkJaWYgKHRocm90dGxl X2RlbGF5ID4gMCkKIAkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX1RIUk9UVExFOwpAQCAt MjgwMCw2ICszMzA1LDEwIEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBT dGF0c0RhdGEgKmFnZykKIAkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX1RYOwogCQkJCS8q IGNoZWNrIGNvbnNpc3RlbmN5ICovCiAJCQkJQXNzZXJ0KGNvbmRpdGlvbmFsX3N0YWNrX2VtcHR5 KHN0LT5jc3RhY2spKTsKKworCQkJCS8qIHJlc2V0IHRyYW5zYWN0aW9uIHZhcmlhYmxlcyB0byBk ZWZhdWx0IHZhbHVlcyAqLworCQkJCXN0LT5lc3RhdHVzID0gRVNUQVRVU19OT19FUlJPUjsKKwkJ CQlzdC0+cmV0cmllcyA9IDA7CiAJCQkJYnJlYWs7CiAKIAkJCQkvKgpAQCAtMjg2NSw3ICszMzc0 LDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdn KQogCQkJCX0KIAogCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9USFJPVFRMRTsKLQkJCQlpZiAoZGVi dWcpCisJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKIAkJCQkJZnByaW50ZihzdGRl cnIsICJjbGllbnQgJWQgdGhyb3R0bGluZyAiIElOVDY0X0ZPUk1BVCAiIHVzXG4iLAogCQkJCQkJ CXN0LT5pZCwgd2FpdCk7CiAJCQkJYnJlYWs7CkBAIC0yOTA5LDggKzM0MTgsMTcgQEAgZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCiAJCQkJCS8q IFJlc2V0IHNlc3Npb24tbG9jYWwgc3RhdGUgKi8KIAkJCQkJbWVtc2V0KHN0LT5wcmVwYXJlZCwg MCwgc2l6ZW9mKHN0LT5wcmVwYXJlZCkpOworCQkJCQlzdC0+cm9sbGJhY2tfcHJlcGFyZWQgPSBm YWxzZTsKIAkJCQl9CiAKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHRoZSBmaXJzdCB0cnkgdG8gcnVu IHRoaXMgdHJhbnNhY3Rpb24uIFJlbWVtYmVyIGl0cworCQkJCSAqIHBhcmFtZXRlcnM6IG1heWJl IGl0IHdpbGwgZ2V0IGFuIGVycm9yIGFuZCB3ZSB3aWxsIG5lZWQgdG8KKwkJCQkgKiBydW4gaXQg YWdhaW4uCisJCQkJICovCisJCQkJc3QtPnJldHJ5X3N0YXRlLnJhbmRvbV9zdGF0ZSA9IHN0LT5y YW5kb21fc3RhdGU7CisJCQkJY29weVZhcmlhYmxlcygmc3QtPnJldHJ5X3N0YXRlLnZhcmlhYmxl cywgJnN0LT52YXJpYWJsZXMpOworCiAJCQkJLyoKIAkJCQkgKiBSZWNvcmQgdHJhbnNhY3Rpb24g c3RhcnQgdGltZSB1bmRlciBsb2dnaW5nLCBwcm9ncmVzcyBvcgogCQkJCSAqIHRocm90dGxpbmcu CkBAIC0yOTU1LDcgKzM0NzMsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogUmVjb3JkIHN0YXRlbWVudCBzdGFydCB0aW1lIGlm IHBlci1jb21tYW5kIGxhdGVuY2llcyBhcmUKIAkJCQkgKiByZXF1ZXN0ZWQKIAkJCQkgKi8KLQkJ CQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCiAJCQkJewog CQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpCiAJCQkJCQlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKG5vdyk7CkBAIC0yOTY2LDcgKzM0ODQsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJewogCQkJCQlpZiAoIXNlbmRDb21t YW5kKHN0LCBjb21tYW5kKSkKIAkJCQkJewotCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIs ICJTUUwgY29tbWFuZCBzZW5kIGZhaWxlZCIpOworCQkJCQkJY2xpZW50QWJvcnRlZChzdCwgIlNR TCBjb21tYW5kIHNlbmQgZmFpbGVkIik7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRF RDsKIAkJCQkJfQogCQkJCQllbHNlCkBAIC0yOTc4LDcgKzM0OTYsNyBAQCBkb0N1c3RvbShUU3Rh dGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQkJCWk7CiAJCQkJ CWNoYXIJICAqKmFyZ3YgPSBjb21tYW5kLT5hcmd2OwogCi0JCQkJCWlmIChkZWJ1ZykKKwkJCQkJ aWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKIAkJCQkJewogCQkJCQkJZnByaW50ZihzdGRl cnIsICJjbGllbnQgJWQgZXhlY3V0aW5nIFxcJXMiLCBzdC0+aWQsIGFyZ3ZbMF0pOwogCQkJCQkJ Zm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKQEAgLTI5OTksOCArMzUxNywxMSBAQCBkb0N1c3Rv bShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAKIAkJCQkJCWlm ICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywgYXJndiwgJnVzZWMpKQogCQkJ CQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsICJleGVjdXRpb24gb2YgbWV0 YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwor CQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJCQkJCWNvbW1hbmRG YWlsZWQoc3QsICJzbGVlcCIsCisJCQkJCQkJCQkJCSAgImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1h bmQgZmFpbGVkIik7CisJCQkJCQkJc3QtPmVzdGF0dXMgPSBFU1RBVFVTX01FVEFfQ09NTUFORF9F UlJPUjsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRVJST1I7CiAJCQkJCQkJYnJlYWs7CiAJ CQkJCQl9CiAKQEAgLTMwMzEsOCArMzU1MiwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAKIAkJCQkJCWlmICghZXZhbHVhdGVFeHByKHRo cmVhZCwgc3QsIGV4cHIsICZyZXN1bHQpKQogCQkJCQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQo c3QsIGFyZ3ZbMF0sICJldmFsdWF0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKLQkJCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0g REVCVUdfRVJST1JTKQorCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCBhcmd2WzBdLAorCQkJCQkJ CQkJCQkgICJldmFsdWF0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKKwkJCQkJCQlzdC0+ ZXN0YXR1cyA9IEVTVEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SOworCQkJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9FUlJPUjsKIAkJCQkJCQlicmVhazsKIAkJCQkJCX0KIApAQCAtMzA0MSw4ICszNTY1 LDExIEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQkJCQlpZiAoIXB1dFZhcmlhYmxlVmFsdWUoJnN0LT52YXJpYWJsZXMsIGFyZ3ZbMF0s CiAJCQkJCQkJCQkJCQkgIGFyZ3ZbMV0sICZyZXN1bHQpKQogCQkJCQkJCXsKLQkJCQkJCQkJY29t bWFuZEZhaWxlZChzdCwgInNldCIsICJhc3NpZ25tZW50IG9mIG1ldGEtY29tbWFuZCBmYWlsZWQi KTsKLQkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJCWlmIChkZWJ1 Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2V0 IiwKKwkJCQkJCQkJCQkJCSAgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwor CQkJCQkJCQlzdC0+ZXN0YXR1cyA9IEVTVEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SOworCQkJCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfRVJST1I7CiAJCQkJCQkJCWJyZWFrOwogCQkJCQkJCX0KIAkJ CQkJCX0KQEAgLTMxMDMsOCArMzYzMCwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQl9CiAJCQkJCQllbHNlIGlmICghcmV0KQkv KiBvbiBlcnJvciAqLwogCQkJCQkJewotCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRzaGVs bCIsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0 ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJP UlMpCisJCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRzaGVsbCIsCisJCQkJCQkJCQkJCSAg ImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIik7CisJCQkJCQkJc3QtPmVzdGF0dXMg PSBFU1RBVFVTX01FVEFfQ09NTUFORF9FUlJPUjsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVf RVJST1I7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJCQllbHNlCkBAIC0zMTI0LDggKzM2 NTQsMTEgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAq YWdnKQogCQkJCQkJfQogCQkJCQkJZWxzZSBpZiAoIXJldCkJLyogb24gZXJyb3IgKi8KIAkJCQkJ CXsKLQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLCAiZXhlY3V0aW9uIG9mIG1ldGEt Y29tbWFuZCBmYWlsZWQiKTsKLQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJ CQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQorCQkJCQkJCQljb21tYW5kRmFp bGVkKHN0LCAic2hlbGwiLAorCQkJCQkJCQkJCQkgICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5k IGZhaWxlZCIpOworCQkJCQkJCXN0LT5lc3RhdHVzID0gRVNUQVRVU19NRVRBX0NPTU1BTkRfRVJS T1I7CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VSUk9SOwogCQkJCQkJCWJyZWFrOwogCQkJ CQkJfQogCQkJCQkJZWxzZQpAQCAtMzI0MiwxMSArMzc3NSwxMiBAQCBkb0N1c3RvbShUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICovCiAJCQljYXNlIENT VEFURV9XQUlUX1JFU1VMVDoKIAkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVd LmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKLQkJCQlpZiAoZGVidWcpCisJCQkJaWYgKGRlYnVnX2xl dmVsID49IERFQlVHX0FMTCkKIAkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgcmVjZWl2 aW5nXG4iLCBzdC0+aWQpOwogCQkJCWlmICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCiAJCQkJ ewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLwotCQkJCQljb21tYW5kRmFpbGVkKHN0 LCAiU1FMIiwgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7CisJ CQkJCWNsaWVudEFib3J0ZWQoc3QsCisJCQkJCQkJCSAgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGll ZCB3aGlsZSBwcm9jZXNzaW5nIik7CiAJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwog CQkJCQlicmVhazsKIAkJCQl9CkBAIC0zMjYzLDEyICszNzk3LDY2IEBAIGRvQ3VzdG9tKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJY2FzZSBQR1JFU19U VVBMRVNfT0s6CiAJCQkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CiAJCQkJCQkvKiBPSyAqLwor CQkJCQkJc3QtPmVzdGF0dXMgPSBFU1RBVFVTX05PX0VSUk9SOwogCQkJCQkJUFFjbGVhcihyZXMp OwogCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVf RU5EX0NPTU1BTkQ7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBQR1JFU19OT05GQVRBTF9FUlJP UjoKKwkJCQkJY2FzZSBQR1JFU19GQVRBTF9FUlJPUjoKKwkJCQkJCXN0LT5lc3RhdHVzID0gZ2V0 U1FMRXJyb3JTdGF0dXMoCisJCQkJCQkJUFFyZXN1bHRFcnJvckZpZWxkKHJlcywgUEdfRElBR19T UUxTVEFURSkpOworCQkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKKwkJCQkJ CQljb21tYW5kRmFpbGVkKHN0LCAiU1FMIiwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJ CQkJUFFjbGVhcihyZXMpOworCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CisJCQkJCQlzdC0+ c3RhdGUgPSBDU1RBVEVfRVJST1I7CisJCQkJCQlicmVhazsKIAkJCQkJZGVmYXVsdDoKLQkJCQkJ CWNvbW1hbmRGYWlsZWQoc3QsICJTUUwiLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisJCQkJ CQljbGllbnRBYm9ydGVkKHN0LCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisJCQkJCQlQUWNs ZWFyKHJlcyk7CisJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCWJyZWFr OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCS8qCisJCQkJICogV2FpdCBmb3IgdGhlIHJvbGxi YWNrIGNvbW1hbmQgdG8gY29tcGxldGUKKwkJCQkgKi8KKwkJCWNhc2UgQ1NUQVRFX1dBSVRfUk9M TEJBQ0tfUkVTVUxUOgorCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQkJCWZw cmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlY2VpdmluZ1xuIiwgc3QtPmlkKTsKKwkJCQlpZiAo IVBRY29uc3VtZUlucHV0KHN0LT5jb24pKQorCQkJCXsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCQkJImNsaWVudCAlZCBhYm9ydGVkIHdoaWxlIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rp b24gYWZ0ZXIgYW4gZXJyb3I7IHBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNz aW5nXG4iLAorCQkJCQkJCXN0LT5pZCk7CisJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVE OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKFBRaXNCdXN5KHN0LT5jb24pKQorCQkJCQly ZXR1cm47CQkvKiBkb24ndCBoYXZlIHRoZSB3aG9sZSByZXN1bHQgeWV0ICovCisKKwkJCQkvKgor CQkJCSAqIFJlYWQgYW5kIGRpc2NhcmQgdGhlIHF1ZXJ5IHJlc3VsdDsKKwkJCQkgKi8KKwkJCQly ZXMgPSBQUWdldFJlc3VsdChzdC0+Y29uKTsKKwkJCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJl cykpCisJCQkJeworCQkJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJCQkJCQkvKiBPSyAqLwor CQkJCQkJUFFjbGVhcihyZXMpOworCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CisJCQkJCQkv KiBDaGVjayBpZiB3ZSBjYW4gcmV0cnkgdGhlIGVycm9yLiAqLworCQkJCQkJaWYgKGRvUmV0cnko c3QsICZub3cpKQorCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9SRVRSWTsKKwkJCQkJCWVsc2UK KwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKKwkJCQkJCWJyZWFrOworCQkJCQlk ZWZhdWx0OgorCQkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkJCSJjbGllbnQgJWQgYWJvcnRl ZCB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uIGFmdGVyIGFuIGVycm9yOyAlc1xu IiwKKwkJCQkJCQkJc3QtPmlkLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CiAJCQkJCQlQUWNs ZWFyKHJlcyk7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJCWJyZWFr OwpAQCAtMzMwMCw3ICszODg4LDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIGluIHRocmVhZC1sb2NhbCBkYXRhIHN0cnVjdHVy ZSwgaWYgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzCiAJCQkJICogYXJlIHJlcXVlc3RlZC4KIAkJCQkg Ki8KLQkJCQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCiAJ CQkJewogCQkJCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpCiAJCQkJCQlJTlNUUl9USU1F X1NFVF9DVVJSRU5UKG5vdyk7CkBAIC0zMzE5LDUyICszOTA3LDIxNSBAQCBkb0N1c3RvbShUU3Rh dGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJYnJlYWs7CiAKIAkJ CQkvKgotCQkJCSAqIEVuZCBvZiB0cmFuc2FjdGlvbi4KKwkJCQkgKiBDbGVhbiB1cCBhZnRlciBh biBlcnJvci4KIAkJCQkgKi8KLQkJCWNhc2UgQ1NUQVRFX0VORF9UWDoKKwkJCWNhc2UgQ1NUQVRF X0VSUk9SOgorCQkJCXsKKwkJCQkJYm9vbAkJaW5fdHhfYmxvY2s7CiAKLQkJCQkvKiB0cmFuc2Fj dGlvbiBmaW5pc2hlZDogY2FsY3VsYXRlIGxhdGVuY3kgYW5kIGRvIGxvZyAqLwotCQkJCXByb2Nl c3NYYWN0U3RhdHModGhyZWFkLCBzdCwgJm5vdywgZmFsc2UsIGFnZyk7CisJCQkJCUFzc2VydChz dC0+ZXN0YXR1cyAhPSBFU1RBVFVTX05PX0VSUk9SKTsKIAotCQkJCS8qIGNvbmRpdGlvbmFsIHN0 YWNrIG11c3QgYmUgZW1wdHkgKi8KLQkJCQlpZiAoIWNvbmRpdGlvbmFsX3N0YWNrX2VtcHR5KHN0 LT5jc3RhY2spKQotCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJlbmQgb2Ygc2NyaXB0IHJl YWNoZWQgd2l0aGluIGEgY29uZGl0aW9uYWwsIG1pc3NpbmcgXFxlbmRpZlxuIik7Ci0JCQkJCWV4 aXQoMSk7CisJCQkJCS8qIENsZWFyIHRoZSBjb25kaXRpb25hbCBzdGFjayAqLworCQkJCQljb25k aXRpb25hbF9zdGFja19yZXNldChzdC0+Y3N0YWNrKTsKKworCQkJCQkvKgorCQkJCQkgKiBDaGVj ayBpZiB3ZSBoYXZlIGEgKGZhaWxlZCkgdHJhbnNhY3Rpb24gYmxvY2sgb3Igbm90LCBhbmQKKwkJ CQkJICogcm9sbCBpdCBiYWNrIGlmIGFueS4KKwkJCQkJICovCisKKwkJCQkJaWYgKCFnZXRUcmFu c2FjdGlvblN0YXR1cyhzdC0+Y29uLCAmaW5fdHhfYmxvY2spKQorCQkJCQl7CisJCQkJCQkvKgor CQkJCQkJICogVGhlcmUncyBzb21ldGhpbmcgd3JvbmcuLi4KKwkJCQkJCSAqIEl0IGlzIGFzc3Vt ZWQgdGhhdCB0aGUgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25TdGF0dXMKKwkJCQkJCSAqIGhhcyBh bHJlYWR5IHByaW50ZWQgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UuCisJCQkJCQkgKi8K KwkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkiY2xpZW50ICVkIGFib3J0ZWQgd2hpbGUg cmVjZWl2aW5nIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXNcbiIsCisJCQkJCQkJCXN0LT5pZCk7CisJ CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisK KwkJCQkJaWYgKGluX3R4X2Jsb2NrKQorCQkJCQl7CisJCQkJCQkvKiBUcnkgdG8gcm9sbGJhY2sg YSAoZmFpbGVkKSB0cmFuc2FjdGlvbiBibG9jay4gKi8KKwkJCQkJCWlmICghc2VuZFJvbGxiYWNr KHN0KSkKKwkJCQkJCXsKKwkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCQkJCSJjbGllbnQg JWQgYWJvcnRlZDogZmFpbGVkIHRvIHNlbmQgc3FsIGNvbW1hbmQgZm9yIHJvbGxpbmcgYmFjayB0 aGUgZmFpbGVkIHRyYW5zYWN0aW9uXG4iLAorCQkJCQkJCQkJc3QtPmlkKTsKKwkJCQkJCQlzdC0+ c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlzdC0+ c3RhdGUgPSBDU1RBVEVfV0FJVF9ST0xMQkFDS19SRVNVTFQ7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQl7CisJCQkJCQkvKiBDaGVjayBpZiB3ZSBjYW4gcmV0cnkgdGhlIGVycm9yLiAqLworCQkJ CQkJaWYgKGRvUmV0cnkoc3QsICZub3cpKQorCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9SRVRS WTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKKwkJCQkJ fQogCQkJCX0KKwkJCQlicmVhazsKKworCQkJCS8qCisJCQkJICogUmV0cnkgdGhlIHRyYW5zYWN0 aW9uIGFmdGVyIGFuIGVycm9yLgorCQkJCSAqLworCQkJY2FzZSBDU1RBVEVfUkVUUlk6CisJCQkJ Y29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+Y29tbWFuZF07 CisKKwkJCQkvKiBBY2N1bXVsYXRlIHRoZSByZXRyeS4gKi8KKwkJCQlzdC0+cmV0cmllcysrOwor CQkJCWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCisJCQkJCWNvbW1hbmQtPnJldHJpZXMrKzsKIAot CQkJCWlmIChpc19jb25uZWN0KQorCQkJCS8qCisJCQkJICogSW5mb3JtIHRoYXQgdGhlIHRyYW5z YWN0aW9uIHdpbGwgYmUgcmV0cmllZCBhZnRlciB0aGUgZXJyb3IuCisJCQkJICovCisJCQkJaWYg KGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKIAkJCQl7Ci0JCQkJCWZpbmlzaENvbihzdCk7 Ci0JCQkJCUlOU1RSX1RJTUVfU0VUX1pFUk8obm93KTsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCQkJImNsaWVudCAlZCByZXBlYXRzIHRoZSB0cmFuc2FjdGlvbiBhZnRlciB0aGUgZXJyb3Ig KHRyeSAlZCIsCisJCQkJCQkJc3QtPmlkLCBzdC0+cmV0cmllcyArIDEpOworCQkJCQlpZiAobWF4 X3RyaWVzKQorCQkJCQkJZnByaW50ZihzdGRlcnIsICIvJWQiLCBtYXhfdHJpZXMpOworCQkJCQlp ZiAobGF0ZW5jeV9saW1pdCkKKwkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkiLCAlLjNm JSUgb2YgdGhlIG1heGltdW0gdGltZSBvZiB0cmllcyB3YXMgdXNlZCIsCisJCQkJCQkJCWdldExh dGVuY3lVc2VkKHN0LCAmbm93KSk7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiKVxuIik7CiAJCQkJ fQogCi0JCQkJaWYgKChzdC0+Y250ID49IG54YWN0cyAmJiBkdXJhdGlvbiA8PSAwKSB8fCB0aW1l cl9leGNlZWRlZCkKKwkJCQkvKgorCQkJCSAqIFJlc2V0IHRoZSBleGVjdXRpb24gcGFyYW1ldGVy cyBhcyB0aGV5IHdlcmUgYXQgdGhlIGJlZ2lubmluZworCQkJCSAqIG9mIHRoZSB0cmFuc2FjdGlv bi4KKwkJCQkgKi8KKwkJCQlzdC0+cmFuZG9tX3N0YXRlID0gc3QtPnJldHJ5X3N0YXRlLnJhbmRv bV9zdGF0ZTsKKwkJCQljb3B5VmFyaWFibGVzKCZzdC0+dmFyaWFibGVzLCAmc3QtPnJldHJ5X3N0 YXRlLnZhcmlhYmxlcyk7CisKKwkJCQkvKiBQcm9jZXNzIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBj b21tYW5kLiAqLworCQkJCXN0LT5jb21tYW5kID0gMDsKKwkJCQlzdC0+ZXN0YXR1cyA9IEVTVEFU VVNfTk9fRVJST1I7CisJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7CisJCQkJ YnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIENvbXBsZXRlIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24u CisJCQkJICovCisJCQljYXNlIENTVEFURV9GQUlMVVJFOgorCQkJCWNvbW1hbmQgPSBzcWxfc2Ny aXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRdOworCisJCQkJLyogQWNjdW11 bGF0ZSB0aGUgZmFpbHVyZS4gKi8KKwkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQorCQkJCQlj b21tYW5kLT5mYWlsdXJlcysrOworCisJCQkJLyoKKwkJCQkgKiBJZiB0aGlzIGlzIGEgc2VyaWFs aXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlLCBpbmZvcm0gdGhhdAorCQkJCSAqIHRoZSBmYWls ZWQgdHJhbnNhY3Rpb24gd2lsbCBub3QgYmUgcmV0cmllZC4KKwkJCQkgKi8KKwkJCQlpZiAoZGVi dWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTICYmIGNhblJldHJ5RXJyb3Ioc3QtPmVzdGF0dXMpKQog CQkJCXsKLQkJCQkJLyogZXhpdCBzdWNjZXNzICovCi0JCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9G SU5JU0hFRDsKLQkJCQkJYnJlYWs7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCSJjbGll bnQgJWQgZW5kcyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uICh0cnkgJWQiLAorCQkJCQkJCXN0LT5p ZCwgc3QtPnJldHJpZXMgKyAxKTsKKwkJCQkJaWYgKG1heF90cmllcykKKwkJCQkJCWZwcmludGYo c3RkZXJyLCAiLyVkIiwgbWF4X3RyaWVzKTsKKwkJCQkJaWYgKGxhdGVuY3lfbGltaXQpCisJCQkJ CQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCQkJIiwgJS4zZiUlIG9mIHRoZSBtYXhpbXVtIHRpbWUg b2YgdHJpZXMgd2FzIHVzZWQiLAorCQkJCQkJCQlnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOwor CQkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOwogCQkJCX0KIAogCQkJCS8qCi0JCQkJICogTm8g dHJhbnNhY3Rpb24gaXMgdW5kZXJ3YXkgYW55bW9yZS4KKwkJCQkgKiBSZXNldCB0aGUgZXhlY3V0 aW9uIHBhcmFtZXRlcnMgYXMgdGhleSB3ZXJlIGF0IHRoZSBiZWdpbm5pbmcKKwkJCQkgKiBvZiB0 aGUgdHJhbnNhY3Rpb24gZXhjZXB0IGZvciBhIHJhbmRvbSBzdGF0ZS4KIAkJCQkgKi8KLQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfQ0hPT1NFX1NDUklQVDsKKwkJCQljb3B5VmFyaWFibGVzKCZzdC0+ dmFyaWFibGVzLCAmc3QtPnJldHJ5X3N0YXRlLnZhcmlhYmxlcyk7CisKKwkJCQkvKiBFbmQgdGhl IGZhaWxlZCB0cmFuc2FjdGlvbi4gKi8KKwkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX1RYOwor CQkJCWJyZWFrOwogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBwYWNlZCB0aHJvdWdoIGFsbCBjb21t YW5kcyBpbiB0aGUgc2NyaXB0IGluIHRoaXMKLQkJCQkgKiBsb29wLCB3aXRob3V0IHJldHVybmlu ZyB0byB0aGUgY2FsbGVyIGV2ZW4gb25jZSwgZG8gaXQgbm93LgotCQkJCSAqIFRoaXMgZ2l2ZXMg dGhlIHRocmVhZCBhIGNoYW5jZSB0byBwcm9jZXNzIG90aGVyCi0JCQkJICogY29ubmVjdGlvbnMs IGFuZCB0byBkbyBwcm9ncmVzcyByZXBvcnRpbmcuICBUaGlzIGNhbgotCQkJCSAqIGN1cnJlbnRs eSBvbmx5IGhhcHBlbiBpZiB0aGUgc2NyaXB0IGNvbnNpc3RzIGVudGlyZWx5IG9mCi0JCQkJICog bWV0YS1jb21tYW5kcy4KKwkJCQkgKiBFbmQgb2YgdHJhbnNhY3Rpb24uCiAJCQkJICovCi0JCQkJ aWYgKGVuZF90eF9wcm9jZXNzZWQpCi0JCQkJCXJldHVybjsKLQkJCQllbHNlCisJCQljYXNlIENT VEFURV9FTkRfVFg6CiAJCQkJewotCQkJCQllbmRfdHhfcHJvY2Vzc2VkID0gdHJ1ZTsKLQkJCQkJ YnJlYWs7CisJCQkJCWJvb2wJCWluX3R4X2Jsb2NrOworCisJCQkJCS8qIHRyYW5zYWN0aW9uIGZp bmlzaGVkOiBjYWxjdWxhdGUgbGF0ZW5jeSBhbmQgZG8gbG9nICovCisJCQkJCXByb2Nlc3NYYWN0 U3RhdHModGhyZWFkLCBzdCwgJm5vdywgZmFsc2UsIGFnZyk7CisKKwkJCQkJLyogY29uZGl0aW9u YWwgc3RhY2sgbXVzdCBiZSBlbXB0eSAqLworCQkJCQlpZiAoIWNvbmRpdGlvbmFsX3N0YWNrX2Vt cHR5KHN0LT5jc3RhY2spKQorCQkJCQl7CisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImVuZCBvZiBz Y3JpcHQgcmVhY2hlZCB3aXRoaW4gYSBjb25kaXRpb25hbCwgbWlzc2luZyBcXGVuZGlmXG4iKTsK KwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBXZSBtdXN0IGNvbXBs ZXRlIGFsbCB0aGUgdHJhbnNhY3Rpb24gYmxvY2tzIHRoYXQgd2VyZQorCQkJCQkgKiBzdGFydGVk IGluIHRoaXMgc2NyaXB0LgorCQkJCQkgKi8KKwkJCQkJaWYgKCFnZXRUcmFuc2FjdGlvblN0YXR1 cyhzdC0+Y29uLCAmaW5fdHhfYmxvY2spKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogVGhl cmUncyBzb21ldGhpbmcgd3JvbmcuLi4KKwkJCQkJCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUg ZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25TdGF0dXMKKwkJCQkJCSAqIGhhcyBhbHJlYWR5IHByaW50 ZWQgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UuCisJCQkJCQkgKi8KKwkJCQkJCWZwcmlu dGYoc3RkZXJyLAorCQkJCQkJCQkiY2xpZW50ICVkIGFib3J0ZWQgd2hpbGUgcmVjZWl2aW5nIHRo ZSB0cmFuc2FjdGlvbiBzdGF0dXNcbiIsCisJCQkJCQkJCXN0LT5pZCk7CisJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChpbl90 eF9ibG9jaykKKwkJCQkJeworCQkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkJCSJjbGllbnQg JWQgYWJvcnRlZDogZW5kIG9mIHNjcmlwdCByZWFjaGVkIHdpdGhvdXQgY29tcGxldGluZyB0aGUg bGFzdCB0cmFuc2FjdGlvblxuIiwKKwkJCQkJCQkJc3QtPmlkKTsKKwkJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9BQk9SVEVEOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAoaXNfY29u bmVjdCkKKwkJCQkJeworCQkJCQkJZmluaXNoQ29uKHN0KTsKKwkJCQkJCUlOU1RSX1RJTUVfU0VU X1pFUk8obm93KTsKKwkJCQkJfQorCisJCQkJCWlmICgoc3QtPmNudCA+PSBueGFjdHMgJiYgZHVy YXRpb24gPD0gMCkgfHwgdGltZXJfZXhjZWVkZWQpCisJCQkJCXsKKwkJCQkJCS8qIGV4aXQgc3Vj Y2VzcyAqLworCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZJTklTSEVEOworCQkJCQkJYnJlYWs7 CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBObyB0cmFuc2FjdGlvbiBpcyB1bmRlcndheSBh bnltb3JlLgorCQkJCQkgKi8KKwkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0NIT09TRV9TQ1JJUFQ7 CisKKwkJCQkJLyoKKwkJCQkJICogSWYgd2UgcGFjZWQgdGhyb3VnaCBhbGwgY29tbWFuZHMgaW4g dGhlIHNjcmlwdCBpbiB0aGlzCisJCQkJCSAqIGxvb3AsIHdpdGhvdXQgcmV0dXJuaW5nIHRvIHRo ZSBjYWxsZXIgZXZlbiBvbmNlLCBkbyBpdCBub3cuCisJCQkJCSAqIFRoaXMgZ2l2ZXMgdGhlIHRo cmVhZCBhIGNoYW5jZSB0byBwcm9jZXNzIG90aGVyCisJCQkJCSAqIGNvbm5lY3Rpb25zLCBhbmQg dG8gZG8gcHJvZ3Jlc3MgcmVwb3J0aW5nLiAgVGhpcyBjYW4KKwkJCQkJICogY3VycmVudGx5IG9u bHkgaGFwcGVuIGlmIHRoZSBzY3JpcHQgY29uc2lzdHMgZW50aXJlbHkgb2YKKwkJCQkJICogbWV0 YS1jb21tYW5kcy4KKwkJCQkJICovCisJCQkJCWlmIChlbmRfdHhfcHJvY2Vzc2VkKQorCQkJCQkJ cmV0dXJuOworCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWVuZF90eF9wcm9jZXNzZWQgPSB0cnVl OworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9CiAKIAkJCQkvKgpAQCAtMzM3OCw2ICs0MTI5 LDE1IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAl9CiB9CiAKK3N0YXRpYyBpbnQ2NAorZ2V0RmFpbHVyZXMoY29uc3QgU3RhdHNEYXRhICpz dGF0cykKK3sKKwlyZXR1cm4gKHN0YXRzLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzICsKKwkJCXN0 YXRzLT5kZWFkbG9ja19mYWlsdXJlcyArCisJCQlzdGF0cy0+b3RoZXJfc3FsX2ZhaWx1cmVzICsK KwkJCXN0YXRzLT5tZXRhX2NvbW1hbmRfZmFpbHVyZXMpOworfQorCiAvKgogICogUHJpbnQgbG9n IGVudHJ5IGFmdGVyIGNvbXBsZXRpbmcgb25lIHRyYW5zYWN0aW9uLgogICoKQEAgLTM0MjIsNiAr NDE4MiwxNiBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJYWdnLT5s YXRlbmN5LnN1bTIsCiAJCQkJCWFnZy0+bGF0ZW5jeS5taW4sCiAJCQkJCWFnZy0+bGF0ZW5jeS5t YXgpOworCisJCQlpZiAoZmFpbHVyZXNfZGV0YWlsZWQpCisJCQkJZnByaW50Zihsb2dmaWxlLCAi ICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1BVCAiICIgSU5U NjRfRk9STUFULAorCQkJCQkJYWdnLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzLAorCQkJCQkJYWdn LT5kZWFkbG9ja19mYWlsdXJlcywKKwkJCQkJCWFnZy0+b3RoZXJfc3FsX2ZhaWx1cmVzLAorCQkJ CQkJYWdnLT5tZXRhX2NvbW1hbmRfZmFpbHVyZXMpOworCQkJZWxzZQorCQkJCWZwcmludGYobG9n ZmlsZSwgIiAiIElOVDY0X0ZPUk1BVCwgZ2V0RmFpbHVyZXMoYWdnKSk7CisKIAkJCWlmICh0aHJv dHRsZV9kZWxheSkKIAkJCXsKIAkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJS4wZiAlLjBmICUuMGYg JS4wZiIsCkBAIC0zNDMyLDYgKzQyMDIsMTAgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsCiAJCQkJaWYgKGxhdGVuY3lfbGltaXQpCiAJCQkJCWZwcmludGYobG9nZmlsZSwgIiAi IElOVDY0X0ZPUk1BVCwgYWdnLT5za2lwcGVkKTsKIAkJCX0KKwkJCWlmIChtYXhfdHJpZXMgIT0g MSkKKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1B VCwKKwkJCQkJCWFnZy0+cmV0cmllZCwKKwkJCQkJCWFnZy0+cmV0cmllcyk7CiAJCQlmcHV0Yygn XG4nLCBsb2dmaWxlKTsKIAogCQkJLyogcmVzZXQgZGF0YSBhbmQgbW92ZSB0byBuZXh0IGludGVy dmFsICovCkBAIC0zNDM5LDcgKzQyMTMsNyBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwKIAkJfQogCiAJCS8qIGFjY3VtdWxhdGUgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8K LQkJYWNjdW1TdGF0cyhhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CisJCWFjY3VtU3RhdHMo YWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcsIHN0LT5lc3RhdHVzLCBzdC0+cmV0cmllcyk7CiAJ fQogCWVsc2UKIAl7CkBAIC0zNDUxLDEyICs0MjI1LDUwIEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFk LCBDU3RhdGUgKnN0LAogCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBz a2lwcGVkICVkICVsZCAlbGQiLAogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwK IAkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOwotCQllbHNlCisJCWVs c2UgaWYgKHN0LT5lc3RhdHVzID09IEVTVEFUVVNfTk9fRVJST1IpCiAJCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJWQgJWxkICVsZCIsCiAJCQkJCXN0LT5pZCwg c3QtPmNudCwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlLAogCQkJCQkobG9uZykgdHYudHZfc2VjLCAo bG9uZykgdHYudHZfdXNlYyk7CisJCWVsc2UgaWYgKGZhaWx1cmVzX2RldGFpbGVkKQorCQl7CisJ CQlzd2l0Y2ggKHN0LT5lc3RhdHVzKQorCQkJeworCQkJCWNhc2UgRVNUQVRVU19NRVRBX0NPTU1B TkRfRVJST1I6CisJCQkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgbWV0 YV9jb21tYW5kX2ZhaWx1cmUgJWQgJWxkICVsZCIsCisJCQkJCQkJc3QtPmlkLCBzdC0+Y250LCBz dC0+dXNlX2ZpbGUsCisJCQkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMp OworCQkJCQlicmVhazsKKwkJCQljYXNlIEVTVEFUVVNfU0VSSUFMSVpBVElPTl9FUlJPUjoKKwkJ CQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBzZXJpYWxpemF0aW9uX2Zh aWx1cmUgJWQgJWxkICVsZCIsCisJCQkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUs CisJCQkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCQkJCQlicmVh azsKKwkJCQljYXNlIEVTVEFUVVNfREVBRExPQ0tfRVJST1I6CisJCQkJCWZwcmludGYobG9nZmls ZSwgIiVkICIgSU5UNjRfRk9STUFUICIgZGVhZGxvY2tfZmFpbHVyZSAlZCAlbGQgJWxkIiwKKwkJ CQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwKKwkJCQkJCQkobG9uZykgdHYudHZf c2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgRVNUQVRVU19P VEhFUl9TUUxfRVJST1I6CisJCQkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFU ICIgb3RoZXJfc3FsX2ZhaWx1cmUgJWQgJWxkICVsZCIsCisJCQkJCQkJc3QtPmlkLCBzdC0+Y250 LCBzdC0+dXNlX2ZpbGUsCisJCQkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3Vz ZWMpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBpbnRlcm5hbCBlcnJvciB3 aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCQkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVj dGVkIGVycm9yIHN0YXR1czogJWRcbiIsCisJCQkJCQkJc3QtPmVzdGF0dXMpOworCQkJCQlleGl0 KDEpOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRf Rk9STUFUICIgZmFpbGVkICVkICVsZCAlbGQiLAorCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51 c2VfZmlsZSwKKwkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCiAJ CWlmICh0aHJvdHRsZV9kZWxheSkKIAkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmIiwgbGFnKTsK KwkJaWYgKG1heF90cmllcyAhPSAxKQorCQkJZnByaW50Zihsb2dmaWxlLCAiICVkIiwgc3QtPnJl dHJpZXMpOwogCQlmcHV0YygnXG4nLCBsb2dmaWxlKTsKIAl9CiB9CkBAIC0zNDY1LDcgKzQyNzcs OCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKICAqIEFjY3VtdWxhdGUgYW5k IHJlcG9ydCBzdGF0aXN0aWNzIGF0IGVuZCBvZiBhIHRyYW5zYWN0aW9uLgogICoKICAqIChUaGlz IGlzIGFsc28gY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBpcyBsYXRlIGFuZCB0aHVzIHNraXBw ZWQuCi0gKiBOb3RlIHRoYXQgZXZlbiBza2lwcGVkIHRyYW5zYWN0aW9ucyBhcmUgY291bnRlZCBp biB0aGUgImNudCIgZmllbGRzLikKKyAqIE5vdGUgdGhhdCBldmVuIHNraXBwZWQgYW5kIGZhaWxl ZCB0cmFuc2FjdGlvbnMgYXJlIGNvdW50ZWQgaW4gdGhlIENTdGF0ZQorICogImNudCIgZmllbGQu KQogICovCiBzdGF0aWMgdm9pZAogcHJvY2Vzc1hhY3RTdGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgaW5zdHJfdGltZSAqbm93LApAQCAtMzQ3MywxMCArNDI4NiwxMCBAQCBwcm9jZXNz WGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csCiB7 CiAJZG91YmxlCQlsYXRlbmN5ID0gMC4wLAogCQkJCWxhZyA9IDAuMDsKLQlib29sCQl0aHJlYWRf ZGV0YWlscyA9IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lfbGltaXQsCi0J CQkJZGV0YWlsZWQgPSB0aHJlYWRfZGV0YWlscyB8fCB1c2VfbG9nIHx8IHBlcl9zY3JpcHRfc3Rh dHM7CisJYm9vbAkJZGV0YWlsZWQgPSBwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRl bmN5X2xpbWl0IHx8CisJCQkJCQkgICB1c2VfbG9nIHx8IHBlcl9zY3JpcHRfc3RhdHM7CiAKLQlp ZiAoZGV0YWlsZWQgJiYgIXNraXBwZWQpCisJaWYgKGRldGFpbGVkICYmICFza2lwcGVkICYmIHN0 LT5lc3RhdHVzID09IEVTVEFUVVNfTk9fRVJST1IpCiAJewogCQlpZiAoSU5TVFJfVElNRV9JU19a RVJPKCpub3cpKQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsKQEAgLTM0ODYsMjAg KzQyOTksMTIgQEAgcHJvY2Vzc1hhY3RTdGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg aW5zdHJfdGltZSAqbm93LAogCQlsYWcgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdC0+dHhu X2JlZ2luKSAtIHN0LT50eG5fc2NoZWR1bGVkOwogCX0KIAotCWlmICh0aHJlYWRfZGV0YWlscykK LQl7Ci0JCS8qIGtlZXAgZGV0YWlsZWQgdGhyZWFkIHN0YXRzICovCi0JCWFjY3VtU3RhdHMoJnRo cmVhZC0+c3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CisJLyoga2VlcCBkZXRhaWxlZCB0 aHJlYWQgc3RhdHMgKi8KKwlhY2N1bVN0YXRzKCZ0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBsYXRl bmN5LCBsYWcsIHN0LT5lc3RhdHVzLCBzdC0+cmV0cmllcyk7CiAKLQkJLyogY291bnQgdHJhbnNh Y3Rpb25zIG92ZXIgdGhlIGxhdGVuY3kgbGltaXQsIGlmIG5lZWRlZCAqLwotCQlpZiAobGF0ZW5j eV9saW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkKLQkJCXRocmVhZC0+bGF0ZW5jeV9s YXRlKys7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIG5vIGRldGFpbGVkIHN0YXRzLCBqdXN0IGNvdW50 ICovCi0JCXRocmVhZC0+c3RhdHMuY250Kys7Ci0JfQorCS8qIGNvdW50IHRyYW5zYWN0aW9ucyBv dmVyIHRoZSBsYXRlbmN5IGxpbWl0LCBpZiBuZWVkZWQgKi8KKwlpZiAobGF0ZW5jeV9saW1pdCAm JiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkKKwkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsKIAog CS8qIGNsaWVudCBzdGF0IGlzIGp1c3QgY291bnRpbmcgKi8KIAlzdC0+Y250Kys7CkBAIC0zNTA5 LDcgKzQzMTQsOCBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBpbnN0cl90aW1lICpub3csCiAKIAkvKiBYWFggY291bGQgdXNlIGEgbXV0ZXggaGVyZSwgYnV0 IHdlIGNob29zZSBub3QgdG8gKi8KIAlpZiAocGVyX3NjcmlwdF9zdGF0cykKLQkJYWNjdW1TdGF0 cygmc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcp OworCQlhY2N1bVN0YXRzKCZzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQs IGxhdGVuY3ksIGxhZywKKwkJCQkgICBzdC0+ZXN0YXR1cywgc3QtPnJldHJpZXMpOwogfQogCiAK QEAgLTQ2NDQsMTUgKzU0NTAsMTYgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3Rh dHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCWRvdWJsZQkJdGltZV9pbmNs dWRlLAogCQkJCXRwc19pbmNsdWRlLAogCQkJCXRwc19leGNsdWRlOwotCWludDY0CQludHggPSB0 b3RhbC0+Y250IC0gdG90YWwtPnNraXBwZWQ7CisJaW50NjQJCWZhaWx1cmVzID0gZ2V0RmFpbHVy ZXModG90YWwpOworCWludDY0CQl0b3RhbF9jbnQgPSB0b3RhbC0+Y250ICsgdG90YWwtPnNraXBw ZWQgKyBmYWlsdXJlczsKIAlpbnQJCQlpLAogCQkJCXRvdGFsQ2FjaGVPdmVyZmxvd3MgPSAwOwog CiAJdGltZV9pbmNsdWRlID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHRvdGFsX3RpbWUpOwogCiAJ LyogdHBzIGlzIGFib3V0IGFjdHVhbGx5IGV4ZWN1dGVkIHRyYW5zYWN0aW9ucyAqLwotCXRwc19p bmNsdWRlID0gbnR4IC8gdGltZV9pbmNsdWRlOwotCXRwc19leGNsdWRlID0gbnR4IC8KKwl0cHNf aW5jbHVkZSA9IHRvdGFsLT5jbnQgLyB0aW1lX2luY2x1ZGU7CisJdHBzX2V4Y2x1ZGUgPSB0b3Rh bC0+Y250IC8KIAkJKHRpbWVfaW5jbHVkZSAtIChJTlNUUl9USU1FX0dFVF9ET1VCTEUoY29ubl90 b3RhbF90aW1lKSAvIG5jbGllbnRzKSk7CiAKIAkvKiBSZXBvcnQgdGVzdCBwYXJhbWV0ZXJzLiAq LwpAQCAtNDY2NiwxNCArNTQ3Myw1NSBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBT dGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJewogCQlwcmludGYoIm51 bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogJWRcbiIsIG54YWN0cyk7CiAJCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9S TUFUICIvJWRcbiIsCi0JCQkgICBudHgsIG54YWN0cyAqIG5jbGllbnRzKTsKKwkJCSAgIHRvdGFs LT5jbnQsIG54YWN0cyAqIG5jbGllbnRzKTsKIAl9CiAJZWxzZQogCXsKIAkJcHJpbnRmKCJkdXJh dGlvbjogJWQgc1xuIiwgZHVyYXRpb24pOwogCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlv bnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1BVCAiXG4iLAotCQkJICAgbnR4KTsK KwkJCSAgIHRvdGFsLT5jbnQpOworCX0KKworCWlmIChmYWlsdXJlcyA+IDApCisJeworCQlwcmlu dGYoIm51bWJlciBvZiBmYWlsdXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJ CSAgIGZhaWx1cmVzLCAxMDAuMCAqIGZhaWx1cmVzIC8gdG90YWxfY250KTsKKworCQlpZiAoZmFp bHVyZXNfZGV0YWlsZWQpCisJCXsKKwkJCS8qIFNRTCBmYWlsdXJlcyAqLworCQkJaWYgKHRvdGFs LT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzIHx8IHRvdGFsLT5vdGhlcl9zcWxfZmFpbHVyZXMpCisJ CQkJcHJpbnRmKCJudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBmYWlsdXJlczogIiBJTlQ2NF9GT1JN QVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJICAgdG90YWwtPnNlcmlhbGl6YXRpb25fZmFpbHVyZXMs CisJCQkJCSAgIDEwMC4wICogdG90YWwtPnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgLyB0b3RhbF9j bnQpOworCQkJaWYgKHRvdGFsLT5kZWFkbG9ja19mYWlsdXJlcyB8fCB0b3RhbC0+b3RoZXJfc3Fs X2ZhaWx1cmVzKQorCQkJCXByaW50ZigibnVtYmVyIG9mIGRlYWRsb2NrIGZhaWx1cmVzOiAiIElO VDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkgICB0b3RhbC0+ZGVhZGxvY2tfZmFpbHVy ZXMsCisJCQkJCSAgIDEwMC4wICogdG90YWwtPmRlYWRsb2NrX2ZhaWx1cmVzIC8gdG90YWxfY250 KTsKKwkJCWlmICh0b3RhbC0+b3RoZXJfc3FsX2ZhaWx1cmVzKQorCQkJCXByaW50ZigibnVtYmVy IG9mIG90aGVyIFNRTCBmYWlsdXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJ CQkJICAgdG90YWwtPm90aGVyX3NxbF9mYWlsdXJlcywKKwkJCQkJICAgMTAwLjAgKiB0b3RhbC0+ b3RoZXJfc3FsX2ZhaWx1cmVzIC8gdG90YWxfY250KTsKKworCQkJLyogbWV0YSBjb21tYW5kIGZh aWx1cmVzICovCisJCQlpZiAodG90YWwtPm1ldGFfY29tbWFuZF9mYWlsdXJlcyA+IDApCisJCQkJ cHJpbnRmKCJudW1iZXIgb2YgbWV0YS1jb21tYW5kIGZhaWx1cmVzOiAiIElOVDY0X0ZPUk1BVCAi ICglLjNmJSUpXG4iLAorCQkJCQkgICB0b3RhbC0+bWV0YV9jb21tYW5kX2ZhaWx1cmVzLAorCQkJ CQkgICAxMDAuMCAqIHRvdGFsLT5tZXRhX2NvbW1hbmRfZmFpbHVyZXMgLyB0b3RhbF9jbnQpOwor CQl9CisJfQorCisJLyogaXQgY2FuIGJlIG5vbi16ZXJvIG9ubHkgaWYgbWF4X3RyaWVzIGlzIG5v dCBlcXVhbCB0byBvbmUgKi8KKwlpZiAodG90YWwtPnJldHJpZWQgPiAwKQorCXsKKwkJcHJpbnRm KCJudW1iZXIgb2YgcmV0cmllZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCSAg IHRvdGFsLT5yZXRyaWVkLCAxMDAuMCAqIHRvdGFsLT5yZXRyaWVkIC8gdG90YWxfY250KTsKKwkJ cHJpbnRmKCJudW1iZXIgb2YgcmV0cmllczogIiBJTlQ2NF9GT1JNQVQgIlxuIiwgdG90YWwtPnJl dHJpZXMpOwogCX0KKworCWlmIChtYXhfdHJpZXMpCisJCXByaW50ZigibWF4aW11bSBudW1iZXIg b2YgdHJpZXM6ICVkXG4iLCBtYXhfdHJpZXMpOworCiAJLyogUmVwb3J0IHppcGZpYW4gY2FjaGUg b3ZlcmZsb3cgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykKIAl7CkBAIC00Njg1 LDI2ICs1NTMzLDI3IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAq dG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAl9CiAKIAkvKiBSZW1haW5pbmcgc3RhdHMg YXJlIG5vbnNlbnNpY2FsIGlmIHdlIGZhaWxlZCB0byBleGVjdXRlIGFueSB4YWN0cyAqLwotCWlm ICh0b3RhbC0+Y250IDw9IDApCisJaWYgKHRvdGFsLT5jbnQgKyB0b3RhbC0+c2tpcHBlZCA8PSAw KQogCQlyZXR1cm47CiAKIAlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0ZW5jeV9saW1pdCkKIAkJ cHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIg KCUuM2YgJSUpXG4iLAogCQkJICAgdG90YWwtPnNraXBwZWQsCi0JCQkgICAxMDAuMCAqIHRvdGFs LT5za2lwcGVkIC8gdG90YWwtPmNudCk7CisJCQkgICAxMDAuMCAqIHRvdGFsLT5za2lwcGVkIC8g dG90YWxfY250KTsKIAogCWlmIChsYXRlbmN5X2xpbWl0KQogCQlwcmludGYoIm51bWJlciBvZiB0 cmFuc2FjdGlvbnMgYWJvdmUgdGhlICUuMWYgbXMgbGF0ZW5jeSBsaW1pdDogIiBJTlQ2NF9GT1JN QVQgIi8iIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwKLQkJCSAgIGxhdGVuY3lfbGltaXQg LyAxMDAwLjAsIGxhdGVuY3lfbGF0ZSwgbnR4LAotCQkJICAgKG50eCA+IDApID8gMTAwLjAgKiBs YXRlbmN5X2xhdGUgLyBudHggOiAwLjApOworCQkJICAgbGF0ZW5jeV9saW1pdCAvIDEwMDAuMCwg bGF0ZW5jeV9sYXRlLCB0b3RhbC0+Y250LAorCQkJICAgKHRvdGFsLT5jbnQgPiAwKSA/IDEwMC4w ICogbGF0ZW5jeV9sYXRlIC8gdG90YWwtPmNudCA6IDAuMCk7CiAKIAlpZiAodGhyb3R0bGVfZGVs YXkgfHwgcHJvZ3Jlc3MgfHwgbGF0ZW5jeV9saW1pdCkKIAkJcHJpbnRTaW1wbGVTdGF0cygibGF0 ZW5jeSIsICZ0b3RhbC0+bGF0ZW5jeSk7CiAJZWxzZQogCXsKIAkJLyogbm8gbWVhc3VyZW1lbnQs IHNob3cgYXZlcmFnZSBsYXRlbmN5IGNvbXB1dGVkIGZyb20gcnVuIHRpbWUgKi8KLQkJcHJpbnRm KCJsYXRlbmN5IGF2ZXJhZ2UgPSAlLjNmIG1zXG4iLAotCQkJICAgMTAwMC4wICogdGltZV9pbmNs dWRlICogbmNsaWVudHMgLyB0b3RhbC0+Y250KTsKKwkJcHJpbnRmKCJsYXRlbmN5IGF2ZXJhZ2Ug PSAlLjNmIG1zJXNcbiIsCisJCQkgICAxMDAwLjAgKiB0aW1lX2luY2x1ZGUgKiBuY2xpZW50cyAv IHRvdGFsX2NudCwKKwkJCSAgIGZhaWx1cmVzID4gMCA/ICIgKGluY2x1ZGluZyBmYWlsdXJlcyki IDogIiIpOwogCX0KIAogCWlmICh0aHJvdHRsZV9kZWxheSkKQEAgLTQ3MjMsNyArNTU3Miw3IEBA IHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3Rp bWUgdG90YWxfdGltZSwKIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMg ZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOwogCiAJLyogUmVwb3J0IHBlci1zY3JpcHQv Y29tbWFuZCBzdGF0aXN0aWNzICovCi0JaWYgKHBlcl9zY3JpcHRfc3RhdHMgfHwgaXNfbGF0ZW5j aWVzKQorCWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IHJlcG9ydF9wZXJfY29tbWFuZCkKIAl7CiAJ CWludAkJCWk7CiAKQEAgLTQ3MzIsNiArNTU4MSw5IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRo cmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCWlmIChw ZXJfc2NyaXB0X3N0YXRzKQogCQkJewogCQkJCVN0YXRzRGF0YSAgKnNzdGF0cyA9ICZzcWxfc2Ny aXB0W2ldLnN0YXRzOworCQkJCWludDY0CQlzY3JpcHRfZmFpbHVyZXMgPSBnZXRGYWlsdXJlcyhz c3RhdHMpOworCQkJCWludDY0CQlzY3JpcHRfdG90YWxfY250ID0KKwkJCQkJc3N0YXRzLT5jbnQg KyBzc3RhdHMtPnNraXBwZWQgKyBzY3JpcHRfZmFpbHVyZXM7CiAKIAkJCQlwcmludGYoIlNRTCBz Y3JpcHQgJWQ6ICVzXG4iCiAJCQkJCSAgICIgLSB3ZWlnaHQ6ICVkICh0YXJnZXRzICUuMWYlJSBv ZiB0b3RhbClcbiIKQEAgLTQ3NDEsMjUgKzU1OTMsNzUgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAq dGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCQkJCQkg ICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0ud2VpZ2h0IC8gdG90YWxfd2VpZ2h0LAogCQkJCQkgICBz c3RhdHMtPmNudCwKIAkJCQkJICAgMTAwLjAgKiBzc3RhdHMtPmNudCAvIHRvdGFsLT5jbnQsCi0J CQkJCSAgIChzc3RhdHMtPmNudCAtIHNzdGF0cy0+c2tpcHBlZCkgLyB0aW1lX2luY2x1ZGUpOwor CQkJCQkgICBzc3RhdHMtPmNudCAvIHRpbWVfaW5jbHVkZSk7CisKKwkJCQlpZiAoZmFpbHVyZXMg PiAwKQorCQkJCXsKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgZmFpbHVyZXM6ICIgSU5UNjRf Rk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCQkgICBzY3JpcHRfZmFpbHVyZXMsCisJCQkJCQkg ICAxMDAuMCAqIHNjcmlwdF9mYWlsdXJlcyAvIHNjcmlwdF90b3RhbF9jbnQpOworCisJCQkJCWlm IChmYWlsdXJlc19kZXRhaWxlZCkKKwkJCQkJeworCQkJCQkJLyogU1FMIGZhaWx1cmVzICovCisJ CQkJCQlpZiAodG90YWwtPnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgfHwKKwkJCQkJCQl0b3RhbC0+ b3RoZXJfc3FsX2ZhaWx1cmVzKQorCQkJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHNlcmlhbGl6 YXRpb24gZmFpbHVyZXM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkJCQkJCSAg IHNzdGF0cy0+c2VyaWFsaXphdGlvbl9mYWlsdXJlcywKKwkJCQkJCQkJICAgKDEwMC4wICogc3N0 YXRzLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzIC8KKwkJCQkJCQkJCXNjcmlwdF90b3RhbF9jbnQp KTsKKwkJCQkJCWlmICh0b3RhbC0+ZGVhZGxvY2tfZmFpbHVyZXMgfHwKKwkJCQkJCQl0b3RhbC0+ b3RoZXJfc3FsX2ZhaWx1cmVzKQorCQkJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIGRlYWRsb2Nr IGZhaWx1cmVzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkJCQkgICBzc3Rh dHMtPmRlYWRsb2NrX2ZhaWx1cmVzLAorCQkJCQkJCQkgICAoMTAwLjAgKiBzc3RhdHMtPmRlYWRs b2NrX2ZhaWx1cmVzIC8KKwkJCQkJCQkJCXNjcmlwdF90b3RhbF9jbnQpKTsKKwkJCQkJCWlmICh0 b3RhbC0+b3RoZXJfc3FsX2ZhaWx1cmVzKQorCQkJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIG90 aGVyIFNRTCBmYWlsdXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJCQkJ ICAgc3N0YXRzLT5vdGhlcl9zcWxfZmFpbHVyZXMsCisJCQkJCQkJCSAgICgxMDAuMCAqIHNzdGF0 cy0+b3RoZXJfc3FsX2ZhaWx1cmVzIC8KKwkJCQkJCQkJCXNjcmlwdF90b3RhbF9jbnQpKTsKKwor CQkJCQkJLyogbWV0YSBjb21tYW5kIGZhaWx1cmVzICovCisJCQkJCQlpZiAodG90YWwtPm1ldGFf Y29tbWFuZF9mYWlsdXJlcyA+IDApCisJCQkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgbWV0YS1j b21tYW5kIGZhaWx1cmVzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAorCQkJCQkJCQkg ICBzc3RhdHMtPm1ldGFfY29tbWFuZF9mYWlsdXJlcywKKwkJCQkJCQkJICAgKDEwMC4wICogc3N0 YXRzLT5tZXRhX2NvbW1hbmRfZmFpbHVyZXMgLworCQkJCQkJCQkJc2NyaXB0X3RvdGFsX2NudCkp OworCQkJCQl9CisJCQkJfQorCisJCQkJLyogaXQgY2FuIGJlIG5vbi16ZXJvIG9ubHkgaWYgbWF4 X3RyaWVzIGlzIG5vdCBlcXVhbCB0byBvbmUgKi8KKwkJCQlpZiAodG90YWwtPnJldHJpZWQgPiAw KQorCQkJCXsKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgcmV0cmllZDogIiBJTlQ2NF9GT1JN QVQgIiAoJS4zZiUlKVxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+cmV0cmllZCwKKwkJCQkJCSAgIDEw MC4wICogc3N0YXRzLT5yZXRyaWVkIC8gc2NyaXB0X3RvdGFsX2NudCk7CisJCQkJCXByaW50Zigi IC0gbnVtYmVyIG9mIHJldHJpZXM6ICIgSU5UNjRfRk9STUFUICJcbiIsCisJCQkJCQkgICBzc3Rh dHMtPnJldHJpZXMpOworCQkJCX0KIAotCQkJCWlmICh0aHJvdHRsZV9kZWxheSAmJiBsYXRlbmN5 X2xpbWl0ICYmIHNzdGF0cy0+Y250ID4gMCkKKwkJCQlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0 ZW5jeV9saW1pdCAmJiBzY3JpcHRfdG90YWxfY250ID4gMCkKIAkJCQkJcHJpbnRmKCIgLSBudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIs CiAJCQkJCQkgICBzc3RhdHMtPnNraXBwZWQsCi0JCQkJCQkgICAxMDAuMCAqIHNzdGF0cy0+c2tp cHBlZCAvIHNzdGF0cy0+Y250KTsKKwkJCQkJCSAgIDEwMC4wICogc3N0YXRzLT5za2lwcGVkIC8g c2NyaXB0X3RvdGFsX2NudCk7CiAKIAkJCQlwcmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5Iiwg JnNzdGF0cy0+bGF0ZW5jeSk7CiAJCQl9CiAKLQkJCS8qIFJlcG9ydCBwZXItY29tbWFuZCBsYXRl bmNpZXMgKi8KLQkJCWlmIChpc19sYXRlbmNpZXMpCisJCQkvKgorCQkJICogUmVwb3J0IHBlci1j b21tYW5kIHN0YXRpc3RpY3M6IGxhdGVuY2llcywgcmV0cmllcyBhZnRlciBlcnJvcnMsCisJCQkg KiBmYWlsdXJlcyAoZXJyb3JzIHdpdGhvdXQgcmV0cnlpbmcpLgorCQkJICovCisJCQlpZiAocmVw b3J0X3Blcl9jb21tYW5kKQogCQkJewogCQkJCUNvbW1hbmQgICAqKmNvbW1hbmRzOwogCi0JCQkJ aWYgKHBlcl9zY3JpcHRfc3RhdHMpCi0JCQkJCXByaW50ZigiIC0gc3RhdGVtZW50IGxhdGVuY2ll cyBpbiBtaWxsaXNlY29uZHM6XG4iKTsKLQkJCQllbHNlCi0JCQkJCXByaW50Zigic3RhdGVtZW50 IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHM6XG4iKTsKKwkJCQlwcmludGYoIiVzc3RhdGVtZW50 IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHMlczpcbiIsCisJCQkJCSAgIHBlcl9zY3JpcHRfc3Rh dHMgPyAiIC0gIiA6ICIiLAorCQkJCQkgICAobWF4X3RyaWVzID09IDEgPworCQkJCQkJIiBhbmQg ZmFpbHVyZXMiIDoKKwkJCQkJCSIsIGZhaWx1cmVzIGFuZCByZXRyaWVzIikpOwogCiAJCQkJZm9y IChjb21tYW5kcyA9IHNxbF9zY3JpcHRbaV0uY29tbWFuZHM7CiAJCQkJCSAqY29tbWFuZHMgIT0g TlVMTDsKQEAgLTQ3NjcsMTAgKzU2NjksMTkgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFk cywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCQkJCXsKIAkJCQkJ U2ltcGxlU3RhdHMgKmNzdGF0cyA9ICYoKmNvbW1hbmRzKS0+c3RhdHM7CiAKLQkJCQkJcHJpbnRm KCIgICAlMTEuM2YgICVzXG4iLAotCQkJCQkJICAgKGNzdGF0cy0+Y291bnQgPiAwKSA/Ci0JCQkJ CQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAvIGNzdGF0cy0+Y291bnQgOiAwLjAsCi0JCQkJCQkg ICAoKmNvbW1hbmRzKS0+bGluZSk7CisJCQkJCWlmIChtYXhfdHJpZXMgPT0gMSkKKwkJCQkJCXBy aW50ZigiICAgJTExLjNmICAlMTAiIElOVDY0X01PRElGSUVSICJkICAlc1xuIiwKKwkJCQkJCQkg ICAoY3N0YXRzLT5jb3VudCA+IDApID8KKwkJCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAv IGNzdGF0cy0+Y291bnQgOiAwLjAsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPmZhaWx1cmVzLAor CQkJCQkJCSAgICgqY29tbWFuZHMpLT5saW5lKTsKKwkJCQkJZWxzZQorCQkJCQkJcHJpbnRmKCIg ICAlMTEuM2YgICUxMCIgSU5UNjRfTU9ESUZJRVIgImQgICUxMCIgSU5UNjRfTU9ESUZJRVIgImQg ICVzXG4iLAorCQkJCQkJCSAgIChjc3RhdHMtPmNvdW50ID4gMCkgPworCQkJCQkJCSAgIDEwMDAu MCAqIGNzdGF0cy0+c3VtIC8gY3N0YXRzLT5jb3VudCA6IDAuMCwKKwkJCQkJCQkgICAoKmNvbW1h bmRzKS0+ZmFpbHVyZXMsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPnJldHJpZXMsCisJCQkJCQkJ ICAgKCpjb21tYW5kcyktPmxpbmUpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNDg2Miw3ICs1Nzcz LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsicHJvZ3Jlc3MiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKIAkJeyJwcm90b2NvbCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnTSd9LAogCQl7InF1aWV0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdxJ30sCi0JCXsi cmVwb3J0LWxhdGVuY2llcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAorCQl7InJlcG9ydC1w ZXItY29tbWFuZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAogCQl7InJhdGUiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKIAkJeyJzY2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAncyd9LAogCQl7InNlbGVjdC1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdTJ30sCkBA IC00ODgxLDYgKzU3OTIsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJsb2ct cHJlZml4IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDd9LAogCQl7ImZvcmVpZ24ta2V5cyIs IG5vX2FyZ3VtZW50LCBOVUxMLCA4fSwKIAkJeyJyYW5kb20tc2VlZCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCA5fSwKKwkJeyJmYWlsdXJlcy1kZXRhaWxlZCIsIG5vX2FyZ3VtZW50LCBOVUxM LCAxMH0sCisJCXsibWF4LXRyaWVzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDExfSwKKwkJ eyJwcmludC1lcnJvcnMiLCBub19hcmd1bWVudCwgTlVMTCwgMTJ9LAogCQl7TlVMTCwgMCwgTlVM TCwgMH0KIAl9OwogCkBAIC00OTE3LDYgKzU4MzEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAlQR2Nvbm4JICAgKmNvbjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJY2hhcgkgICAqZW52 OworCWJvb2wJCXJldHJ5ID0gZmFsc2U7CS8qIHJldHJ5IHRyYW5zYWN0aW9ucyB3aXRoIGVycm9y cyBvciBub3QgKi8KIAogCXByb2duYW1lID0gZ2V0X3Byb2duYW1lKGFyZ3ZbMF0pOwogCkBAIC00 OTg2LDcgKzU5MDEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlwZ3BvcnQg PSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2QnOgotCQkJCWRlYnVn Kys7CisJCQkJZGVidWdfbGV2ZWwgPSBERUJVR19BTEw7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdj JzoKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CkBAIC01MDM5LDcgKzU5NTQs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3In OgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKLQkJCQlpc19sYXRlbmNpZXMg PSB0cnVlOworCQkJCXJlcG9ydF9wZXJfY29tbWFuZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQlj YXNlICdzJzoKIAkJCQlzY2FsZV9naXZlbiA9IHRydWU7CkBAIC01MjM2LDYgKzYxNTEsNDAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJfQogCQkJCWJy ZWFrOworCQkJY2FzZSAxMDoJCQkvKiBmYWlsdXJlcy1kZXRhaWxlZCAqLworCQkJCWJlbmNobWFy a2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKKwkJCQlmYWlsdXJlc19kZXRhaWxlZCA9IHRydWU7CisJ CQkJYnJlYWs7CisJCQljYXNlIDExOgkJCS8qIG1heC10cmllcyAqLworCQkJCXsKKwkJCQkJaW50 MzIJCW1heF90cmllc19hcmcgPSBhdG9pKG9wdGFyZyk7CisKKwkJCQkJaWYgKG1heF90cmllc19h cmcgPCAwKQorCQkJCQl7CisJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCQkJImludmFsaWQg bnVtYmVyIG9mIG1heGltdW0gdHJpZXM6IFwiJXNcIlxuIiwKKwkJCQkJCQkJb3B0YXJnKTsKKwkJ CQkJCWV4aXQoMSk7CisJCQkJCX0KKworCQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRy dWU7CisKKwkJCQkJLyoKKwkJCQkJICogQWx3YXlzIHJldHJ5IHRyYW5zYWN0aW9ucyB3aXRoIGVy cm9ycyBpZiB0aGlzIG9wdGlvbiBpcworCQkJCQkgKiB1c2VkLiBCdXQgaWYgaXRzIHZhbHVlIGlz IDAsIHVzZSB0aGUgb3B0aW9uCisJCQkJCSAqIC0tbGF0ZW5jeS1saW1pdCB0byBsaW1pdCB0aGUg bnVtYmVyIG9mIHRyaWVzLgorCQkJCQkgKi8KKwkJCQkJcmV0cnkgPSB0cnVlOworCisJCQkJCW1h eF90cmllcyA9ICh1aW50MzIpIG1heF90cmllc19hcmc7CisJCQkJfQorCQkJCWJyZWFrOworCQkJ Y2FzZSAxMjoJCQkvKiBwcmludC1lcnJvcnMgKi8KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3Nl dCA9IHRydWU7CisJCQkJLyogZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIG9wdGlvbiAtLWRlYnVn ICovCisJCQkJaWYgKGRlYnVnX2xldmVsIDwgREVCVUdfRVJST1JTKQorCQkJCQlkZWJ1Z19sZXZl bCA9IERFQlVHX0VSUk9SUzsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZnByaW50Zihz dGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksIHBy b2duYW1lKTsKIAkJCQlleGl0KDEpOwpAQCAtNTQwNSw2ICs2MzU0LDIwIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQlleGl0KDEpOwogCX0KIAorCWlmICghbWF4X3RyaWVzKQorCXsK KwkJaWYgKHJldHJ5ICYmICFsYXRlbmN5X2xpbWl0KQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwg ImFuIGluZmluaXRlIG51bWJlciBvZiB0cmFuc2FjdGlvbiB0cmllcyBjYW4gb25seSBiZSB1c2Vk IHdpdGggdGhlIG9wdGlvbiAtLWxhdGVuY3ktbGltaXRcbiIpOworCQkJZXhpdCgxKTsKKwkJfQor CQllbHNlIGlmICghcmV0cnkpCisJCXsKKwkJCS8qIEJ5IGRlZmF1bHQgdHJhbnNhY3Rpb25zIHdp dGggZXJyb3JzIGFyZSBub3QgcmV0cmllZCAqLworCQkJbWF4X3RyaWVzID0gMTsKKwkJfQorCX0K KwogCS8qCiAJICogc2F2ZSBtYWluIHByb2Nlc3MgaWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBi ZWNhdXNlIHByb2Nlc3MgaWQgd2lsbCBiZQogCSAqIGNoYW5nZWQgYWZ0ZXIgZm9yay4KQEAgLTU0 MzAsNyArNjM5MywxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQl7CiAJCQkJ CWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCiAJ CQkJCQkJCQkJICB2YXItPm5hbWUsICZ2YXItPnZhbHVlKSkKKwkJCQkJeworCQkJCQkJZnByaW50 ZihzdGRlcnIsCisJCQkJCQkJCSJlcnJvciB3aGVuIHNldHRpbmcgdGhlIHN0YXJ0dXAgdmFyaWFi bGUgXCIlc1wiIGZvciBjbGllbnQgJWRcbiIsCisJCQkJCQkJCXZhci0+bmFtZSwgaSk7CiAJCQkJ CQlleGl0KDEpOworCQkJCQl9CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CkBAIC01NDQ5LDcgKzY0 MTcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJaW5pdFJhbmRvbVN0YXRlKCZz dGF0ZVtpXS5yYW5kb21fc3RhdGUpOwogCX0KIAotCWlmIChkZWJ1ZykKKwlpZiAoZGVidWdfbGV2 ZWwgPj0gREVCVUdfQUxMKQogCXsKIAkJaWYgKGR1cmF0aW9uIDw9IDApCiAJCQlwcmludGYoInBn aG9zdDogJXMgcGdwb3J0OiAlcyBuY2xpZW50czogJWQgbnhhY3RzOiAlZCBkYk5hbWU6ICVzXG4i LApAQCAtNTUxNSw3ICs2NDgzLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlm b3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewogCQkJaWYgKCFwdXRWYXJpYWJsZUlu dCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJzY2FsZSIsIHNjYWxlKSkKKwkJCXsK KwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJlcnJvciB3aGVuIHNldHRpbmcgdGhlIHN0YXJ0 dXAgdmFyaWFibGUgXCJzY2FsZVwiIGZvciBjbGllbnQgJWRcbiIsCisJCQkJCQlpKTsKIAkJCQll eGl0KDEpOworCQkJfQogCQl9CiAJfQogCkBAIC01NTI3LDcgKzY1MDAsMTIgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykK IAkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAi Y2xpZW50X2lkIiwgaSkpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiZXJyb3Ig d2hlbiBzZXR0aW5nIHRoZSBzdGFydHVwIHZhcmlhYmxlIFwiY2xpZW50X2lkXCIgZm9yIGNsaWVu dCAlZFxuIiwKKwkJCQkJCWkpOwogCQkJCWV4aXQoMSk7CisJCQl9CiAJfQogCiAJLyogc2V0IGRl ZmF1bHQgc2VlZCBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KQEAgLTU1NDEsNyArNjUxOSwxMiBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBp KyspCiAJCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVw IiwgImRlZmF1bHRfc2VlZCIsCiAJCQkJCQkJCShpbnQ2NCkgc2VlZCkpCisJCQl7CisJCQkJZnBy aW50ZihzdGRlcnIsCisJCQkJCQkiZXJyb3Igd2hlbiBzZXR0aW5nIHRoZSBzdGFydHVwIHZhcmlh YmxlIFwiZGVmYXVsdF9zZWVkXCIgZm9yIGNsaWVudCAlZFxuIiwKKwkJCQkJCWkpOwogCQkJCWV4 aXQoMSk7CisJCQl9CiAJfQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVubGVzcyBvdmVyd3JpdHRl biAqLwpAQCAtNTU1MCw3ICs2NTMzLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJCWlmICghcHV0VmFyaWFibGVJbnQo JnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAicmFuZG9tX3NlZWQiLAogCQkJCQkJCQly YW5kb21fc2VlZCkpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiZXJyb3Igd2hl biBzZXR0aW5nIHRoZSBzdGFydHVwIHZhcmlhYmxlIFwicmFuZG9tX3NlZWRcIiBmb3IgY2xpZW50 ICVkXG4iLAorCQkJCQkJaSk7CiAJCQkJZXhpdCgxKTsKKwkJCX0KIAl9CiAKIAlpZiAoIWlzX25v X3ZhY3V1bSkKQEAgLTU2NjYsNiArNjY1NCwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJbWVyZ2VTaW1wbGVTdGF0cygmc3RhdHMubGFnLCAmdGhyZWFkLT5zdGF0cy5sYWcpOwog CQlzdGF0cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7CiAJCXN0YXRzLnNraXBwZWQgKz0gdGhy ZWFkLT5zdGF0cy5za2lwcGVkOworCQlzdGF0cy5yZXRyaWVzICs9IHRocmVhZC0+c3RhdHMucmV0 cmllczsKKwkJc3RhdHMucmV0cmllZCArPSB0aHJlYWQtPnN0YXRzLnJldHJpZWQ7CisJCXN0YXRz LnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgKz0gdGhyZWFkLT5zdGF0cy5zZXJpYWxpemF0aW9uX2Zh aWx1cmVzOworCQlzdGF0cy5kZWFkbG9ja19mYWlsdXJlcyArPSB0aHJlYWQtPnN0YXRzLmRlYWRs b2NrX2ZhaWx1cmVzOworCQlzdGF0cy5vdGhlcl9zcWxfZmFpbHVyZXMgKz0gdGhyZWFkLT5zdGF0 cy5vdGhlcl9zcWxfZmFpbHVyZXM7CisJCXN0YXRzLm1ldGFfY29tbWFuZF9mYWlsdXJlcyArPSB0 aHJlYWQtPnN0YXRzLm1ldGFfY29tbWFuZF9mYWlsdXJlczsKIAkJbGF0ZW5jeV9sYXRlICs9IHRo cmVhZC0+bGF0ZW5jeV9sYXRlOwogCQlJTlNUUl9USU1FX0FERChjb25uX3RvdGFsX3RpbWUsIHRo cmVhZC0+Y29ubl90aW1lKTsKIAl9CkBAIC01ODA0LDcgKzY3OTgsOCBAQCB0aHJlYWRSdW4odm9p ZCAqYXJnKQogCQkJCWlmIChtaW5fdXNlYyA+IHRoaXNfdXNlYykKIAkJCQkJbWluX3VzZWMgPSB0 aGlzX3VzZWM7CiAJCQl9Ci0JCQllbHNlIGlmIChzdC0+c3RhdGUgPT0gQ1NUQVRFX1dBSVRfUkVT VUxUKQorCQkJZWxzZSBpZiAoc3QtPnN0YXRlID09IENTVEFURV9XQUlUX1JFU1VMVCB8fAorCQkJ CQkgc3QtPnN0YXRlID09IENTVEFURV9XQUlUX1JPTExCQUNLX1JFU1VMVCkKIAkJCXsKIAkJCQkv KgogCQkJCSAqIHdhaXRpbmcgZm9yIHJlc3VsdCBmcm9tIHNlcnZlciAtIG5vdGhpbmcgdG8gZG8g dW5sZXNzIHRoZQpAQCAtNTkwOCw3ICs2OTAzLDggQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJ ewogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsKIAotCQkJaWYgKHN0LT5zdGF0ZSA9PSBD U1RBVEVfV0FJVF9SRVNVTFQpCisJCQlpZiAoc3QtPnN0YXRlID09IENTVEFURV9XQUlUX1JFU1VM VCB8fAorCQkJCXN0LT5zdGF0ZSA9PSBDU1RBVEVfV0FJVF9ST0xMQkFDS19SRVNVTFQpCiAJCQl7 CiAJCQkJLyogZG9uJ3QgY2FsbCBkb0N1c3RvbSB1bmxlc3MgZGF0YSBpcyBhdmFpbGFibGUgKi8K IAkJCQlpbnQJCQlzb2NrID0gUFFzb2NrZXQoc3QtPmNvbik7CkBAIC01OTUwLDcgKzY5NDYsOSBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCS8qIGdlbmVyYXRlIGFuZCBzaG93IHJlcG9ydCAq LwogCQkJCVN0YXRzRGF0YQljdXI7CiAJCQkJaW50NjQJCXJ1biA9IG5vdyAtIGxhc3RfcmVwb3J0 LAotCQkJCQkJCW50eDsKKwkJCQkJCQljbnQsCisJCQkJCQkJZmFpbHVyZXMsCisJCQkJCQkJcmV0 cmllZDsKIAkJCQlkb3VibGUJCXRwcywKIAkJCQkJCQl0b3RhbF9ydW4sCiAJCQkJCQkJbGF0ZW5j eSwKQEAgLTU5NzcsMjMgKzY5NzUsMzQgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJbWVy Z2VTaW1wbGVTdGF0cygmY3VyLmxhZywgJnRocmVhZFtpXS5zdGF0cy5sYWcpOwogCQkJCQljdXIu Y250ICs9IHRocmVhZFtpXS5zdGF0cy5jbnQ7CiAJCQkJCWN1ci5za2lwcGVkICs9IHRocmVhZFtp XS5zdGF0cy5za2lwcGVkOworCQkJCQljdXIucmV0cmllcyArPSB0aHJlYWRbaV0uc3RhdHMucmV0 cmllczsKKwkJCQkJY3VyLnJldHJpZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnJldHJpZWQ7CisJCQkJ CWN1ci5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzICs9CisJCQkJCQl0aHJlYWRbaV0uc3RhdHMuc2Vy aWFsaXphdGlvbl9mYWlsdXJlczsKKwkJCQkJY3VyLmRlYWRsb2NrX2ZhaWx1cmVzICs9IHRocmVh ZFtpXS5zdGF0cy5kZWFkbG9ja19mYWlsdXJlczsKKwkJCQkJY3VyLm90aGVyX3NxbF9mYWlsdXJl cyArPQorCQkJCQkJdGhyZWFkW2ldLnN0YXRzLm90aGVyX3NxbF9mYWlsdXJlczsKKwkJCQkJY3Vy Lm1ldGFfY29tbWFuZF9mYWlsdXJlcyArPQorCQkJCQkJdGhyZWFkW2ldLnN0YXRzLm1ldGFfY29t bWFuZF9mYWlsdXJlczsKIAkJCQl9CiAKIAkJCQkvKiB3ZSBjb3VudCBvbmx5IGFjdHVhbGx5IGV4 ZWN1dGVkIHRyYW5zYWN0aW9ucyAqLwotCQkJCW50eCA9IChjdXIuY250IC0gY3VyLnNraXBwZWQp IC0gKGxhc3QuY250IC0gbGFzdC5za2lwcGVkKTsKKwkJCQljbnQgPSBjdXIuY250IC0gbGFzdC5j bnQ7CiAJCQkJdG90YWxfcnVuID0gKG5vdyAtIHRocmVhZF9zdGFydCkgLyAxMDAwMDAwLjA7Ci0J CQkJdHBzID0gMTAwMDAwMC4wICogbnR4IC8gcnVuOwotCQkJCWlmIChudHggPiAwKQorCQkJCXRw cyA9IDEwMDAwMDAuMCAqIGNudCAvIHJ1bjsKKwkJCQlpZiAoY250ID4gMCkKIAkJCQl7Ci0JCQkJ CWxhdGVuY3kgPSAwLjAwMSAqIChjdXIubGF0ZW5jeS5zdW0gLSBsYXN0LmxhdGVuY3kuc3VtKSAv IG50eDsKLQkJCQkJc3FsYXQgPSAxLjAgKiAoY3VyLmxhdGVuY3kuc3VtMiAtIGxhc3QubGF0ZW5j eS5zdW0yKSAvIG50eDsKKwkJCQkJbGF0ZW5jeSA9IDAuMDAxICogKGN1ci5sYXRlbmN5LnN1bSAt IGxhc3QubGF0ZW5jeS5zdW0pIC8gY250OworCQkJCQlzcWxhdCA9IDEuMCAqIChjdXIubGF0ZW5j eS5zdW0yIC0gbGFzdC5sYXRlbmN5LnN1bTIpIC8gY250OwogCQkJCQlzdGRldiA9IDAuMDAxICog c3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRlbmN5KTsKLQkJCQkJbGFnID0g MC4wMDEgKiAoY3VyLmxhZy5zdW0gLSBsYXN0LmxhZy5zdW0pIC8gbnR4OworCQkJCQlsYWcgPSAw LjAwMSAqIChjdXIubGFnLnN1bSAtIGxhc3QubGFnLnN1bSkgLyBjbnQ7CiAJCQkJfQogCQkJCWVs c2UKIAkJCQl7CiAJCQkJCWxhdGVuY3kgPSBzcWxhdCA9IHN0ZGV2ID0gbGFnID0gMDsKIAkJCQl9 CisJCQkJZmFpbHVyZXMgPSBnZXRGYWlsdXJlcygmY3VyKSAtIGdldEZhaWx1cmVzKCZsYXN0KTsK KwkJCQlyZXRyaWVkID0gY3VyLnJldHJpZWQgLSBsYXN0LnJldHJpZWQ7CiAKIAkJCQlpZiAocHJv Z3Jlc3NfdGltZXN0YW1wKQogCQkJCXsKQEAgLTYwMTksNiArNzAyOCw5IEBAIHRocmVhZFJ1bih2 b2lkICphcmcpCiAJCQkJCQkicHJvZ3Jlc3M6ICVzLCAlLjFmIHRwcywgbGF0ICUuM2YgbXMgc3Rk ZGV2ICUuM2YiLAogCQkJCQkJdGJ1ZiwgdHBzLCBsYXRlbmN5LCBzdGRldik7CiAKKwkJCQlpZiAo ZmFpbHVyZXMgPiAwKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBm YWlsZWQiLCBmYWlsdXJlcyk7CisKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQkJewogCQkJ CQlmcHJpbnRmKHN0ZGVyciwgIiwgbGFnICUuM2YgbXMiLCBsYWcpOwpAQCAtNjAyNiw2ICs3MDM4 LDEyIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJ TlQ2NF9GT1JNQVQgIiBza2lwcGVkIiwKIAkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNraXBw ZWQpOwogCQkJCX0KKworCQkJCS8qIGl0IGNhbiBiZSBub24temVybyBvbmx5IGlmIG1heF90cmll cyBpcyBub3QgZXF1YWwgdG8gb25lICovCisJCQkJaWYgKHJldHJpZWQgPiAwKQorCQkJCQlmcHJp bnRmKHN0ZGVyciwKKwkJCQkJCQkiLCAiIElOVDY0X0ZPUk1BVCAiIHJldHJpZWQsICIgSU5UNjRf Rk9STUFUICIgcmV0cmllcyIsCisJCQkJCQkJcmV0cmllZCwgY3VyLnJldHJpZXMgLSBsYXN0LnJl dHJpZXMpOwogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAogCQkJCWxhc3QgPSBjdXI7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbCBi L3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCmluZGV4IDJmYzAy MWRkZTcuLjAzM2U2Njk5NmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2Jl bmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dp dGhfc2VydmVyLnBsCkBAIC01LDkgKzUsMjAgQEAgdXNlIFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0 TGliOwogdXNlIFRlc3Q6Ok1vcmU7CiAKK3VzZSBjb25zdGFudAoreworCVNRTF9FUlJPUiAgICAg ICAgICAgPT4gMCwKKwlNRVRBX0NPTU1BTkRfRVJST1IgID0+IDEsCisJU1lOVEFYX0VSUk9SICAg ICAgICA9PiAyLAorfTsKKwogIyBzdGFydCBhIHBnYmVuY2ggc3BlY2lmaWMgc2VydmVyCiBteSAk bm9kZSA9IGdldF9uZXdfbm9kZSgnbWFpbicpOwotJG5vZGUtPmluaXQ7CisKKyMgU2V0IHRvIHVu dHJhbnNsYXRlZCBtZXNzYWdlcywgdG8gYmUgYWJsZSB0byBjb21wYXJlIHByb2dyYW0gb3V0cHV0 IHdpdGgKKyMgZXhwZWN0ZWQgc3RyaW5ncy4KKyRub2RlLT5pbml0KGV4dHJhID0+IFsgJy0tbG9j YWxlJywgJ0MnIF0pOworCiAkbm9kZS0+c3RhcnQ7CiAKICMgaW52b2tlIHBnYmVuY2gKQEAgLTEz Niw3ICsxNDcsOCBAQCBwZ2JlbmNoKAogCQlxcntidWlsdGluOiBUUEMtQn0sCiAJCXFye2NsaWVu dHM6IDJcYn0sCiAJCXFye3Byb2Nlc3NlZDogMTAvMTB9LAotCQlxcnttb2RlOiBzaW1wbGV9CisJ CXFye21vZGU6IHNpbXBsZX0sCisJCXFye21heGltdW0gbnVtYmVyIG9mIHRyaWVzOiAxfQogCV0s CiAJW3Fye14kfV0sCiAJJ3BnYmVuY2ggdHBjYi1saWtlJyk7CkBAIC01MzAsMTEgKzU0MiwxMiBA QCBwZ2JlbmNoKAogIyB0cmlnZ2VyIG1hbnkgZXhwcmVzc2lvbiBlcnJvcnMKIG15IEBlcnJvcnMg PSAoCiAKLQkjIFsgdGVzdCBuYW1lLCBleHBlY3RlZCBzdGF0dXMsIGV4cGVjdGVkIHN0ZGVyciwg c2NyaXB0IF0KKwkjIFsgdGVzdCBuYW1lLCBleHBlY3RlZCBzdGF0dXMsIGVycm9yIHR5cGUsIGV4 cGVjdGVkIHN0ZGVyciwgc2NyaXB0IF0KIAkjIFNRTAogCVsKIAkJJ3NxbCBzeW50YXggZXJyb3In LAogCQkwLAorCQlTUUxfRVJST1IsCiAJCVsKIAkJCXFye0VSUk9SOiAgc3ludGF4IGVycm9yfSwK IAkJCXFye3ByZXBhcmVkIHN0YXRlbWVudCAuKiBkb2VzIG5vdCBleGlzdH0KQEAgLTU0NCwyOCAr NTU3LDM2IEBAIG15IEBlcnJvcnMgPSAoCiB9CiAJXSwKIAlbCi0JCSdzcWwgdG9vIG1hbnkgYXJn cycsIDEsIFtxcntzdGF0ZW1lbnQgaGFzIHRvbyBtYW55IGFyZ3VtZW50cy4qXGI5XGJ9XSwKKwkJ J3NxbCB0b28gbWFueSBhcmdzJywgMSwgU1lOVEFYX0VSUk9SLAorCQlbcXJ7c3RhdGVtZW50IGhh cyB0b28gbWFueSBhcmd1bWVudHMuKlxiOVxifV0sCiAJCXF7LS0gTUFYX0FSR1M9MTAgZm9yIHBy ZXBhcmVkCiBcc2V0IGkgMAogU0VMRUNUIExFQVNUKDppLCA6aSwgOmksIDppLCA6aSwgOmksIDpp LCA6aSwgOmksIDppLCA6aSk7Cit9CisJXSwKKwlbICAgJ3NxbCBkaXZpc2lvbiBieSB6ZXJvJywg MCwgU1FMX0VSUk9SLCBbcXJ7RVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvfV0sCisJCXF7LS0gU1FM IGRpdmlzaW9uIGJ5IHplcm8KK1NFTEVDVCAxIC8gMDsKIH0KIAldLAogCiAJIyBTSEVMTAogCVsK LQkJJ3NoZWxsIGJhZCBjb21tYW5kJywgICAgICAgICAgICAgICAgICAgIDAsCisJCSdzaGVsbCBi YWQgY29tbWFuZCcsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fye1woc2hlbGxcKSAuKiBt ZXRhLWNvbW1hbmQgZmFpbGVkfV0sIHF7XHNoZWxsIG5vLXN1Y2gtY29tbWFuZH0KIAldLAogCVsK LQkJJ3NoZWxsIHVuZGVmaW5lZCB2YXJpYWJsZScsIDAsCisJCSdzaGVsbCB1bmRlZmluZWQgdmFy aWFibGUnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcnt1bmRlZmluZWQgdmFyaWFibGUg Ijpub3N1Y2h2YXJpYWJsZSJ9XSwKIAkJcXstLSB1bmRlZmluZWQgdmFyaWFibGUgaW4gc2hlbGwK IFxzaGVsbCBlY2hvIDo6Zm9vIDpub3N1Y2h2YXJpYWJsZQogfQogCV0sCi0JWyAnc2hlbGwgbWlz c2luZyBjb21tYW5kJywgMSwgW3Fye21pc3NpbmcgY29tbWFuZCB9XSwgcXtcc2hlbGx9IF0sCisJ WyAgICdzaGVsbCBtaXNzaW5nIGNvbW1hbmQnLCAxLCBTWU5UQVhfRVJST1IsIFtxcnttaXNzaW5n IGNvbW1hbmQgfV0sCisJCXF7XHNoZWxsfSBdLAogCVsKLQkJJ3NoZWxsIHRvbyBtYW55IGFyZ3Mn LCAxLCBbcXJ7dG9vIG1hbnkgYXJndW1lbnRzIGluIGNvbW1hbmQgInNoZWxsIn1dLAorCQknc2hl bGwgdG9vIG1hbnkgYXJncycsIDEsIFNZTlRBWF9FUlJPUiwKKwkJW3Fye3RvbyBtYW55IGFyZ3Vt ZW50cyBpbiBjb21tYW5kICJzaGVsbCJ9XSwKIAkJcXstLSAyNTcgYXJndW1lbnRzIHRvIFxzaGVs bAogXHNoZWxsIGVjaG8gXAogIDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgXApAQCAt NTg5LDE2MiArNjEwLDIzMiBAQCBTRUxFQ1QgTEVBU1QoOmksIDppLCA6aSwgOmksIDppLCA6aSwg OmksIDppLCA6aSwgOmksIDppKTsKIAogCSMgU0VUCiAJWwotCQknc2V0IHN5bnRheCBlcnJvcics ICAgICAgICAgICAgICAgICAgMSwKKwkJJ3NldCBzeW50YXggZXJyb3InLCAxLCBTWU5UQVhfRVJS T1IsCiAJCVtxcntzeW50YXggZXJyb3IgaW4gY29tbWFuZCAic2V0In1dLCBxe1xzZXQgaSAxICt9 CiAJXSwKIAlbCi0JCSdzZXQgbm8gc3VjaCBmdW5jdGlvbicsICAgICAgICAgMSwKKwkJJ3NldCBu byBzdWNoIGZ1bmN0aW9uJywgMSwgU1lOVEFYX0VSUk9SLAogCQlbcXJ7dW5leHBlY3RlZCBmdW5j dGlvbiBuYW1lfV0sIHF7XHNldCBpIG5vU3VjaEZ1bmN0aW9uKCl9CiAJXSwKIAlbCi0JCSdzZXQg aW52YWxpZCB2YXJpYWJsZSBuYW1lJywgMCwKKwkJJ3NldCBpbnZhbGlkIHZhcmlhYmxlIG5hbWUn LCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntpbnZhbGlkIHZhcmlhYmxlIG5hbWV9XSwg cXtcc2V0IC4gMX0KIAldLAogCVsKLQkJJ3NldCBpbnQgb3ZlcmZsb3cnLCAgICAgICAgICAgICAg ICAgICAwLAorCQknc2V0IGludCBvdmVyZmxvdycsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKIAkJ W3Fye2RvdWJsZSB0byBpbnQgb3ZlcmZsb3cgZm9yIDEwMH1dLCBxe1xzZXQgaSBpbnQoMUUzMil9 CiAJXSwKLQlbICdzZXQgZGl2aXNpb24gYnkgemVybycsIDAsIFtxcntkaXZpc2lvbiBieSB6ZXJv fV0sIHF7XHNldCBpIDEvMH0gXSwKIAlbCi0JCSdzZXQgYmlnaW50IG91dCBvZiByYW5nZScsIDAs CisJCSdzZXQgZGl2aXNpb24gYnkgemVybycsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKKwkJW3Fy e2RpdmlzaW9uIGJ5IHplcm99XSwgcXtcc2V0IGkgMS8wfQorCV0sCisJWworCQknc2V0IGJpZ2lu dCBvdXQgb2YgcmFuZ2UnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntiaWdpbnQgb3V0 IG9mIHJhbmdlfV0sIHF7XHNldCBpIDkyMjMzNzIwMzY4NTQ3NzU4MDggLyAtMX0KIAldLAogCVsK IAkJJ3NldCB1bmRlZmluZWQgdmFyaWFibGUnLAogCQkwLAorCQlNRVRBX0NPTU1BTkRfRVJST1Is CiAJCVtxcnt1bmRlZmluZWQgdmFyaWFibGUgIm5vc3VjaHZhcmlhYmxlIn1dLAogCQlxe1xzZXQg aSA6bm9zdWNodmFyaWFibGV9CiAJXSwKLQlbICdzZXQgdW5leHBlY3RlZCBjaGFyJywgMSwgW3Fy e3VuZXhwZWN0ZWQgY2hhcmFjdGVyIC47Ln1dLCBxe1xzZXQgaSA7fSBdLAorCVsKKwkJJ3NldCB1 bmV4cGVjdGVkIGNoYXInLCAxLCBTWU5UQVhfRVJST1IsCisJCVtxcnt1bmV4cGVjdGVkIGNoYXJh Y3RlciAuOy59XSwgcXtcc2V0IGkgO30KKwldLAogCVsKIAkJJ3NldCB0b28gbWFueSBhcmdzJywK IAkJMCwKKwkJTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7dG9vIG1hbnkgZnVuY3Rpb24gYXJn dW1lbnRzfV0sCiAJCXF7XHNldCBpIGxlYXN0KDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs MTMsMTQsMTUsMTYpfQogCV0sCiAJWwotCQknc2V0IGVtcHR5IHJhbmRvbSByYW5nZScsICAgICAg ICAgIDAsCisJCSdzZXQgZW1wdHkgcmFuZG9tIHJhbmdlJywgMCwgTUVUQV9DT01NQU5EX0VSUk9S LAogCQlbcXJ7ZW1wdHkgcmFuZ2UgZ2l2ZW4gdG8gcmFuZG9tfV0sIHF7XHNldCBpIHJhbmRvbSg1 LDMpfQogCV0sCiAJWwogCQknc2V0IHJhbmRvbSByYW5nZSB0b28gbGFyZ2UnLAogCQkwLAorCQlN RVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntyYW5kb20gcmFuZ2UgaXMgdG9vIGxhcmdlfV0sCiAJ CXF7XHNldCBpIHJhbmRvbSgtOTIyMzM3MjAzNjg1NDc3NTgwOCwgOTIyMzM3MjAzNjg1NDc3NTgw Nyl9CiAJXSwKIAlbCiAJCSdzZXQgZ2F1c3NpYW4gcGFyYW0gdG9vIHNtYWxsJywKIAkJMCwKKwkJ TUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7Z2F1c3NpYW4gcGFyYW0uKiBhdCBsZWFzdCAyfV0s CiAJCXF7XHNldCBpIHJhbmRvbV9nYXVzc2lhbigwLCAxMCwgMS4wKX0KIAldLAogCVsKIAkJJ3Nl dCBleHBvbmVudGlhbCBwYXJhbSBncmVhdGVyIDAnLAogCQkwLAorCQlNRVRBX0NPTU1BTkRfRVJS T1IsCiAJCVtxcntleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIH1dLAogCQlx e1xzZXQgaSByYW5kb21fZXhwb25lbnRpYWwoMCwgMTAsIDAuMCl9CiAJXSwKIAlbCiAJCSdzZXQg emlwZmlhbiBwYXJhbSB0byAxJywKIAkJMCwKKwkJTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7 emlwZmlhbiBwYXJhbWV0ZXIgbXVzdCBiZSBpbiByYW5nZSBcKDAsIDFcKSBVIFwoMSwgXGQrXF19 XSwKIAkJcXtcc2V0IGkgcmFuZG9tX3ppcGZpYW4oMCwgMTAsIDEpfQogCV0sCiAJWwogCQknc2V0 IHppcGZpYW4gcGFyYW0gdG9vIGxhcmdlJywKIAkJMCwKKwkJTUVUQV9DT01NQU5EX0VSUk9SLAog CQlbcXJ7emlwZmlhbiBwYXJhbWV0ZXIgbXVzdCBiZSBpbiByYW5nZSBcKDAsIDFcKSBVIFwoMSwg XGQrXF19XSwKIAkJcXtcc2V0IGkgcmFuZG9tX3ppcGZpYW4oMCwgMTAsIDEwMDAwMDApfQogCV0s CiAJWwotCQknc2V0IG5vbiBudW1lcmljIHZhbHVlJywgICAgICAgICAgICAgICAgICAgICAwLAor CQknc2V0IG5vbiBudW1lcmljIHZhbHVlJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7 bWFsZm9ybWVkIHZhcmlhYmxlICJmb28iIHZhbHVlOiAiYmxhIn1dLCBxe1xzZXQgaSA6Zm9vICsg MX0KIAldLAotCVsgJ3NldCBubyBleHByZXNzaW9uJywgICAgMSwgW3Fye3N5bnRheCBlcnJvcn1d LCAgICAgIHF7XHNldCBpfSBdLAotCVsgJ3NldCBtaXNzaW5nIGFyZ3VtZW50JywgMSwgW3Fye21p c3NpbmcgYXJndW1lbnR9aV0sIHF7XHNldH0gXSwKKwlbICdzZXQgbm8gZXhwcmVzc2lvbicsIDEs IFNZTlRBWF9FUlJPUiwgW3Fye3N5bnRheCBlcnJvcn1dLCBxe1xzZXQgaX0gXSwKKwlbCisJCSdz ZXQgbWlzc2luZyBhcmd1bWVudCcsIDEsIFNZTlRBWF9FUlJPUiwKKwkJW3Fye21pc3NpbmcgYXJn dW1lbnR9aV0sIHF7XHNldH0KKwldLAogCVsKLQkJJ3NldCBub3QgYSBib29sJywgICAgICAgICAg ICAgICAgICAgICAgMCwKKwkJJ3NldCBub3QgYSBib29sJywgMCwgTUVUQV9DT01NQU5EX0VSUk9S LAogCQlbcXJ7Y2Fubm90IGNvZXJjZSBkb3VibGUgdG8gYm9vbGVhbn1dLCBxe1xzZXQgYiBOT1Qg MC4wfQogCV0sCiAJWwotCQknc2V0IG5vdCBhbiBpbnQnLCAgICAgICAgICAgICAgICAgICAwLAor CQknc2V0IG5vdCBhbiBpbnQnLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntjYW5ub3Qg Y29lcmNlIGJvb2xlYW4gdG8gaW50fV0sIHF7XHNldCBpIFRSVUUgKyAyfQogCV0sCiAJWwotCQkn c2V0IG5vdCBhIGRvdWJsZScsICAgICAgICAgICAgICAgICAgICAwLAorCQknc2V0IG5vdCBhIGRv dWJsZScsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fye2Nhbm5vdCBjb2VyY2UgYm9vbGVh biB0byBkb3VibGV9XSwgcXtcc2V0IGQgbG4oVFJVRSl9CiAJXSwKIAlbCiAJCSdzZXQgY2FzZSBl cnJvcicsCiAJCTEsCisJCVNZTlRBWF9FUlJPUiwKIAkJW3Fye3N5bnRheCBlcnJvciBpbiBjb21t YW5kICJzZXQifV0sCiAJCXF7XHNldCBpIENBU0UgVFJVRSBUSEVOIDEgRUxTRSAwIEVORH0KIAld LAogCVsKLQkJJ3NldCByYW5kb20gZXJyb3InLCAgICAgICAgICAgICAgICAgMCwKKwkJJ3NldCBy YW5kb20gZXJyb3InLCAwLCBNRVRBX0NPTU1BTkRfRVJST1IsCiAJCVtxcntjYW5ub3QgY29lcmNl IGJvb2xlYW4gdG8gaW50fV0sIHF7XHNldCBiIHJhbmRvbShGQUxTRSwgVFJVRSl9CiAJXSwKIAlb Ci0JCSdzZXQgbnVtYmVyIG9mIGFyZ3MgbWlzbWF0Y2gnLCAgICAgICAgMSwKKwkJJ3NldCBudW1i ZXIgb2YgYXJncyBtaXNtYXRjaCcsIDEsIFNZTlRBWF9FUlJPUiwKIAkJW3Fye3VuZXhwZWN0ZWQg bnVtYmVyIG9mIGFyZ3VtZW50c31dLCBxe1xzZXQgZCBsbigxLjAsIDIuMCkpfQogCV0sCiAJWwot CQknc2V0IGF0IGxlYXN0IG9uZSBhcmcnLCAgICAgICAgICAgICAgIDEsCisJCSdzZXQgYXQgbGVh c3Qgb25lIGFyZycsIDEsIFNZTlRBWF9FUlJPUiwKIAkJW3Fye2F0IGxlYXN0IG9uZSBhcmd1bWVu dCBleHBlY3RlZH1dLCBxe1xzZXQgaSBncmVhdGVzdCgpKX0KIAldLAogCiAJIyBTRVRTSEVMTAog CVsKLQkJJ3NldHNoZWxsIG5vdCBhbiBpbnQnLCAgICAgICAgICAgICAgICAwLAorCQknc2V0c2hl bGwgbm90IGFuIGludCcsIDAsIE1FVEFfQ09NTUFORF9FUlJPUiwKIAkJW3Fye2NvbW1hbmQgbXVz dCByZXR1cm4gYW4gaW50ZWdlcn1dLCBxe1xzZXRzaGVsbCBpIGVjaG8gLW4gb25lfQogCV0sCi0J WyAnc2V0c2hlbGwgbWlzc2luZyBhcmcnLCAxLCBbcXJ7bWlzc2luZyBhcmd1bWVudCB9XSwgcXtc c2V0c2hlbGwgdmFyfSBdLAogCVsKLQkJJ3NldHNoZWxsIG5vIHN1Y2ggY29tbWFuZCcsICAgMCwK KwkJJ3NldHNoZWxsIG1pc3NpbmcgYXJnJywgMSwgU1lOVEFYX0VSUk9SLAorCQlbcXJ7bWlzc2lu ZyBhcmd1bWVudCB9XSwgcXtcc2V0c2hlbGwgdmFyfQorCV0sCisJWworCQknc2V0c2hlbGwgbm8g c3VjaCBjb21tYW5kJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7Y291bGQgbm90IHJl YWQgcmVzdWx0IH1dLCBxe1xzZXRzaGVsbCB2YXIgbm8tc3VjaC1jb21tYW5kfQogCV0sCiAKIAkj IFNMRUVQCiAJWwotCQknc2xlZXAgdW5kZWZpbmVkIHZhcmlhYmxlJywgICAgICAwLAorCQknc2xl ZXAgdW5kZWZpbmVkIHZhcmlhYmxlJywgMCwgTUVUQV9DT01NQU5EX0VSUk9SLAogCQlbcXJ7c2xl ZXA6IHVuZGVmaW5lZCB2YXJpYWJsZX1dLCBxe1xzbGVlcCA6bm9zdWNodmFyaWFibGV9CiAJXSwK IAlbCi0JCSdzbGVlcCB0b28gbWFueSBhcmdzJywgICAgMSwKKwkJJ3NsZWVwIHRvbyBtYW55IGFy Z3MnLCAxLCBTWU5UQVhfRVJST1IsCiAJCVtxcnt0b28gbWFueSBhcmd1bWVudHN9XSwgcXtcc2xl ZXAgdG9vIG1hbnkgYXJnc30KIAldLAogCVsKLQkJJ3NsZWVwIG1pc3NpbmcgYXJnJywgMSwKKwkJ J3NsZWVwIG1pc3NpbmcgYXJnJywgMSwgU1lOVEFYX0VSUk9SLAogCQlbIHFye21pc3NpbmcgYXJn dW1lbnR9LCBxcntcXHNsZWVwfSBdLCBxe1xzbGVlcH0KIAldLAogCVsKLQkJJ3NsZWVwIHVua25v d24gdW5pdCcsICAgICAgICAgMSwKKwkJJ3NsZWVwIHVua25vd24gdW5pdCcsIDEsIFNZTlRBWF9F UlJPUiwKIAkJW3Fye3VucmVjb2duaXplZCB0aW1lIHVuaXR9XSwgcXtcc2xlZXAgMSB3ZWVrfQog CV0sCiAKKwkjIENPTkRJVElPTkFMIEJMT0NLUworCVsgICAnZXJyb3IgaW5zaWRlIGEgY29uZGl0 aW9uYWwgYmxvY2snLCAwLCBTUUxfRVJST1IsCisJCVtxcntFUlJPUjogIGRpdmlzaW9uIGJ5IHpl cm99XSwKKwkJcXstLSBlcnJvciBpbnNpZGUgYSBjb25kaXRpb25hbCBibG9jaworXGlmIHRydWUK K1NFTEVDVCAxIC8gMDsKK1xlbmRpZgorfQorCV0sCisKIAkjIE1JU0MKIAlbCi0JCSdtaXNjIGlu dmFsaWQgYmFja3NsYXNoIGNvbW1hbmQnLCAgICAgICAgIDEsCisJCSdtaXNjIGludmFsaWQgYmFj a3NsYXNoIGNvbW1hbmQnLCAxLCBTWU5UQVhfRVJST1IsCiAJCVtxcntpbnZhbGlkIGNvbW1hbmQg LiogIm5vc3VjaGNvbW1hbmQifV0sIHF7XG5vc3VjaGNvbW1hbmR9CiAJXSwKLQlbICdtaXNjIGVt cHR5IHNjcmlwdCcsIDEsIFtxcntlbXB0eSBjb21tYW5kIGxpc3QgZm9yIHNjcmlwdH1dLCBxe30g XSwKIAlbCi0JCSdiYWQgYm9vbGVhbicsICAgICAgICAgICAgICAgICAgICAgMCwKKwkJJ21pc2Mg ZW1wdHkgc2NyaXB0JywgMSwgU1lOVEFYX0VSUk9SLAorCQlbcXJ7ZW1wdHkgY29tbWFuZCBsaXN0 IGZvciBzY3JpcHR9XSwgcXt9CisJXSwKKwlbCisJCSdiYWQgYm9vbGVhbicsIDAsIE1FVEFfQ09N TUFORF9FUlJPUiwKIAkJW3Fye21hbGZvcm1lZCB2YXJpYWJsZS4qdHJ1ZVhYWH1dLCBxe1xzZXQg YiA6YmFkdHJ1ZSBvciB0cnVlfQogCV0sKTsKIAogCiBmb3IgbXkgJGUgKEBlcnJvcnMpCiB7Ci0J bXkgKCRuYW1lLCAkc3RhdHVzLCAkcmUsICRzY3JpcHQpID0gQCRlOworCW15ICgkbmFtZSwgJHN0 YXR1cywgJGVycm9yX3R5cGUsICRyZSwgJHNjcmlwdCkgPSBAJGU7CiAJbXkgJG4gPSAnMDAxX3Bn YmVuY2hfZXJyb3JfJyAuICRuYW1lOwogCSRuID1+IHMvIC9fL2c7CisJbXkgJHRlc3RfbmFtZSA9 ICdwZ2JlbmNoIHNjcmlwdCBlcnJvcjogJyAuICRuYW1lOworCW15ICRzdGRvdXRfcmU7CisKKwlp ZiAoJHN0YXR1cykKKwl7CisJCSMgb25seSBzeW50YXggZXJyb3JzIGdldCBub24temVybyBleGl0 IHN0YXR1cworCQkjIGludGVybmFsIGVycm9yIHdoaWNoIHNob3VsZCBuZXZlciBvY2N1cgorCQlk aWUgJHRlc3RfbmFtZSAuICI6IHVuZXhwZWN0ZWQgZXJyb3IgdHlwZTogIiAuICRlcnJvcl90eXBl IC4gIlxuIgorCQlpZiAoJGVycm9yX3R5cGUgIT0gU1lOVEFYX0VSUk9SKTsKKworCQkkc3Rkb3V0 X3JlID0gWyBxcnteJH0gXTsKKwl9CisJZWxzZQorCXsKKwkJJHN0ZG91dF9yZSA9CisJCQlbIHFy e3Byb2Nlc3NlZDogMC8xfSwgcXJ7bnVtYmVyIG9mIGZhaWx1cmVzOiAxIFwoMTAwLjAwMCVcKX0s CisJCQkgIHFye14oKD8hbnVtYmVyIG9mIHJldHJpZWQpKC58XG4pKSokfSBdOworCisJCWlmICgk ZXJyb3JfdHlwZSA9PSBTUUxfRVJST1IpCisJCXsKKwkJCXB1c2ggQCRzdGRvdXRfcmUsCisJCQkJ cXJ7bnVtYmVyIG9mIHNlcmlhbGl6YXRpb24gZmFpbHVyZXM6IDAgXCgwLjAwMCVcKX0sCisJCQkJ cXJ7bnVtYmVyIG9mIGRlYWRsb2NrIGZhaWx1cmVzOiAwIFwoMC4wMDAlXCl9LAorCQkJCXFye251 bWJlciBvZiBvdGhlciBTUUwgZmFpbHVyZXM6IDEgXCgxMDAuMDAwJVwpfTsKKwkJfQorCQllbHNp ZiAoJGVycm9yX3R5cGUgPT0gTUVUQV9DT01NQU5EX0VSUk9SKQorCQl7CisJCQlwdXNoIEAkc3Rk b3V0X3JlLAorCQkJCXFye251bWJlciBvZiBtZXRhLWNvbW1hbmQgZmFpbHVyZXM6IDEgXCgxMDAu MDAwJVwpfTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSMgaW50ZXJuYWwgZXJyb3Igd2hpY2ggc2hv dWxkIG5ldmVyIG9jY3VyCisJCQlkaWUgJHRlc3RfbmFtZSAuICI6IHVuZXhwZWN0ZWQgZXJyb3Ig dHlwZTogIiAuICRlcnJvcl90eXBlIC4gIlxuIjsKKwkJfQorCX0KKwogCXBnYmVuY2goCi0JCSct biAtdCAxIC1EZm9vPWJsYSAtRG51bGw9bnVsbCAtRHRydWU9dHJ1ZSAtRG9uZT0xIC1EemVybz0w LjAgLURiYWR0cnVlPXRydWVYWFggLU0gcHJlcGFyZWQnLAorCQknLW4gLXQgMSAtRGZvbz1ibGEg LURudWxsPW51bGwgLUR0cnVlPXRydWUgLURvbmU9MSAtRHplcm89MC4wIC1EYmFkdHJ1ZT10cnVl WFhYIC1NIHByZXBhcmVkIC0tZmFpbHVyZXMtZGV0YWlsZWQgLS1wcmludC1lcnJvcnMnLAogCQkk c3RhdHVzLAotCQlbICRzdGF0dXMgPyBxcnteJH0gOiBxcntwcm9jZXNzZWQ6IDAvMX0gXSwKKwkJ JHN0ZG91dF9yZSwKIAkJJHJlLAotCQkncGdiZW5jaCBzY3JpcHQgZXJyb3I6ICcgLiAkbmFtZSwK KwkJJHRlc3RfbmFtZSwKIAkJeyAkbiA9PiAkc2NyaXB0IH0pOwogfQogCkBAIC04NDgsNiArOTM5 LDI0NSBAQCBwZ2JlbmNoKAogY2hlY2tfcGdiZW5jaF9sb2dzKCIkYmRpci8wMDFfcGdiZW5jaF9s b2dfMyIsIDEsIDEwLCAxMCwKIAlxcnteXGQgXGR7MSwyfSBcZCsgXGQgXGQrIFxkKyR9KTsKIAor IyBhYm9ydGlvbiBvZiB0aGUgY2xpZW50IGlmIHRoZSBzY3JpcHQgY29udGFpbnMgYW4gaW5jb21w bGV0ZSB0cmFuc2FjdGlvbiBibG9jaworcGdiZW5jaCgKKwknLS1uby12YWN1dW0nLCAwLCBbIHFy e3Byb2Nlc3NlZDogMS8xMH0gXSwKKwlbIHFye2NsaWVudCAwIGFib3J0ZWQ6IGVuZCBvZiBzY3Jp cHQgcmVhY2hlZCB3aXRob3V0IGNvbXBsZXRpbmcgdGhlIGxhc3QgdHJhbnNhY3Rpb259IF0sCisJ J2luY29tcGxldGUgdHJhbnNhY3Rpb24gYmxvY2snLAorCXsgJzAwMV9wZ2JlbmNoX2luY29tcGxl dGVfdHJhbnNhY3Rpb25fYmxvY2snID0+IHF7QkVHSU47U0VMRUNUIDE7fSB9KTsKKworIyBSb2xs YmFjayBvZiB0cmFuc2FjdGlvbiBibG9jayBpbiBjYXNlIG9mIG1ldGEgY29tbWFuZCBmYWlsdXJl LgorIworIyBJZiB0aGUgcm9sbGJhY2sgaXMgbm90IHBlcmZvcm1lZCwgd2UgZWl0aGVyIGNvbnRp bnVlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uCisjIGJsb2NrIG9yIHdlIHRlcm1pbmF0ZSBpdCBz dWNjZXNzZnVsbHkuIEluIHRoZSBmaXJzdCBjYXNlIHdlIGdldCBhbiBhYm9ydGlvbiBvZgorIyB0 aGUgY2xpZW50ICh3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNjcmlwdCB3aXRoIGFuIGluY29t cGxldGUgdHJhbnNhY3Rpb24KKyMgYmxvY2spLiBJbiB0aGUgc2Vjb25kIGNhc2Ugd2UgcnVuIHRo ZSBzZWNvbmQgdHJhbnNhY3Rpb24gYW5kIGdldCBhIGZhaWx1cmUgaW4KKyMgdGhlIFNRTCBjb21t YW5kICh0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWwgYW5kIGluc2VydGlu ZyB0aGUKKyMgc2FtZSB2YWx1ZSB3aWxsIGdldCBhIHVuaXF1ZSB2aW9sYXRpb24gZXJyb3IpLgor Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0NSRUFURSBVTkxPR0dFRCBUQUJMRSB4 X3VuaXF1ZSAoeCBpbnRlZ2VyIFVOSVFVRSk7Jyk7CisKK3BnYmVuY2goCisJJy0tbm8tdmFjdXVt IC10IDIgLS1mYWlsdXJlcy1kZXRhaWxlZCcsIDAsCisJWworCQlxcntwcm9jZXNzZWQ6IDAvMn0s CisJCXFye251bWJlciBvZiBtZXRhLWNvbW1hbmQgZmFpbHVyZXM6IDIgXCgxMDAuMDAwJVwpfQor CV0sCisJW3Fye14kfV0sCisJJ3JvbGxiYWNrIG9mIHRyYW5zYWN0aW9uIGJsb2NrIGluIGNhc2Ug b2YgbWV0YSBjb21tYW5kIGZhaWx1cmUnLAorCXsgJzAwMV9wZ2JlbmNoX3JvbGxiYWNrX29mX3Ry YW5zYWN0aW9uX2Jsb2NrX2luX2Nhc2Vfb2ZfbWV0YV9jb21tYW5kX2ZhaWx1cmUnID0+IHF7CitC RUdJTjsKK0lOU0VSVCBJTlRPIHhfdW5pcXVlIFZBTFVFUyAoMSk7Citcc2V0IGkgMS8wCitFTkQ7 Cit9CisJfSk7CisKKyMgY2xlYW4gdXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RS T1AgVEFCTEUgeF91bmlxdWUnKTsKKworIyBUZXN0IHRoZSBjb25jdXJyZW50IHVwZGF0ZSBpbiB0 aGUgdGFibGUgcm93IGFuZCBkZWFkbG9ja3MuCisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwknQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIGZpcnN0X2NsaWVudF90YWJsZSAodmFsdWUgaW50 ZWdlcik7ICcKKyAgLiAnQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHh5ICh4IGludGVnZXIsIHkgaW50 ZWdlcik7ICcKKyAgLiAnSU5TRVJUIElOVE8geHkgVkFMVUVTICgxLCAyKTsnKTsKKworIyBTZXJp YWxpemF0aW9uIGVycm9yIGFuZCByZXRyeQorCitsb2NhbCAkRU5We1BHT1BUSU9OU30gPSAiLWMg ZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249cmVwZWF0YWJsZVxcIHJlYWQiOworCisjIENo ZWNrIHRoYXQgd2UgaGF2ZSBhIHNlcmlhbGl6YXRpb24gZXJyb3IgYW5kIHRoZSBzYW1lIHJhbmRv bSB2YWx1ZSBvZiB0aGUKKyMgZGVsdGEgdmFyaWFibGUgaW4gdGhlIG5leHQgdHJ5CitteSAkZXJy X3BhdHRlcm4gPQorCSIoY2xpZW50ICgwfDEpIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0geSBc XCsgLT9cXGQrXFxiKS4qIgorICAuICJjbGllbnQgXFxnMiBnb3QgYW4gZXJyb3IgaW4gY29tbWFu ZCAzIFxcKFNRTFxcKSBvZiBzY3JpcHQgMDsgIgorICAuICJFUlJPUjogIGNvdWxkIG5vdCBzZXJp YWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0ZVxcYi4qIgorICAuICJcXGcxIjsK KworcGdiZW5jaCgKKwkiLW4gLWMgMiAtdCAxIC1kIC0tbWF4LXRyaWVzIDIiLAorCTAsCisJWyBx cntwcm9jZXNzZWQ6IDIvMlxifSwgcXJ7XigoPyFudW1iZXIgb2YgZmFpbHVyZXMpKC58XG4pKSok fSwKKwkgIHFye251bWJlciBvZiByZXRyaWVkOiAxXGJ9LCBxcntudW1iZXIgb2YgcmV0cmllczog MVxifSBdLAorCVsgcXIvJGVycl9wYXR0ZXJuL3MgXSwKKwknY29uY3VycmVudCB1cGRhdGUgd2l0 aCByZXRyeWluZycsCisJeworCQknMDAxX3BnYmVuY2hfc2VyaWFsaXphdGlvbicgPT4gcXsKKy0t IFdoYXQncyBoYXBwZW5pbmc6CistLSBUaGUgZmlyc3QgY2xpZW50IHN0YXJ0cyB0aGUgdHJhbnNh Y3Rpb24gd2l0aCB0aGUgaXNvbGF0aW9uIGxldmVsIFJlcGVhdGFibGUKKy0tIFJlYWQ6CistLQor LS0gQkVHSU47CistLSBVUERBVEUgeHkgU0VUIHkgPSAuLi4gV0hFUkUgeCA9IDE7CistLQorLS0g VGhlIHNlY29uZCBjbGllbnQgc3RhcnRzIGEgc2ltaWxhciB0cmFuc2FjdGlvbiB3aXRoIHRoZSBz YW1lIGlzb2xhdGlvbiBsZXZlbDoKKy0tCistLSBCRUdJTjsKKy0tIFVQREFURSB4eSBTRVQgeSA9 IC4uLiBXSEVSRSB4ID0gMTsKKy0tIDx3YWl0aW5nIGZvciB0aGUgZmlyc3QgY2xpZW50PgorLS0K Ky0tIFRoZSBmaXJzdCBjbGllbnQgY29tbWl0cyBpdHMgdHJhbnNhY3Rpb24sIGFuZCB0aGUgc2Vj b25kIGNsaWVudCBnZXRzIGEKKy0tIHNlcmlhbGl6YXRpb24gZXJyb3IuCisKK1xzZXQgZGVsdGEg cmFuZG9tKC01MDAwLCA1MDAwKQorCistLSBUaGUgc2Vjb25kIGNsaWVudCB3aWxsIHN0b3AgaGVy ZQorU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soMCk7CisKKy0tIFN0YXJ0IHRyYW5zYWN0aW9uIHdp dGggY29uY3VycmVudCB1cGRhdGUKK0JFR0lOOworVVBEQVRFIHh5IFNFVCB5ID0geSArIDpkZWx0 YSBXSEVSRSB4ID0gMSBBTkQgcGdfYWR2aXNvcnlfbG9jaygxKSBJUyBOT1QgTlVMTDsKKworLS0g V2FpdCBmb3IgdGhlIHNlY29uZCBjbGllbnQKK0RPICQkCitERUNMQVJFCisgIGV4aXN0cyBib29s ZWFuOworICB3YWl0ZXJzIGludGVnZXI7CitCRUdJTgorICAtLSBUaGUgc2Vjb25kIGNsaWVudCBh bHdheXMgY29tZXMgaW4gc2Vjb25kLCBhbmQgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZQorICAt LSB0YWJsZSBmaXJzdF9jbGllbnRfdGFibGUgcmVmbGVjdCB0aGlzLiBIZXJlIHRoZSBmaXJzdCBj bGllbnQgaW5zZXJ0cyBhIHJvdywKKyAgLS0gc28gdGhlIHNlY29uZCBjbGllbnQgd2lsbCBzZWUg YSBub24tZW1wdHkgdGFibGUgd2hlbiByZXBlYXRpbmcgdGhlCisgIC0tIHRyYW5zYWN0aW9uIGFm dGVyIHRoZSBzZXJpYWxpemF0aW9uIGVycm9yLgorICBTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgKiBG Uk9NIGZpcnN0X2NsaWVudF90YWJsZSkgSU5UTyBTVFJJQ1QgZXhpc3RzOworICBJRiBOT1QgZXhp c3RzIFRIRU4KKwktLSBMZXQgdGhlIHNlY29uZCBjbGllbnQgYmVnaW4KKwlQRVJGT1JNIHBnX2Fk dmlzb3J5X3VubG9jaygwKTsKKwktLSBBbmQgd2FpdCB1bnRpbCB0aGUgc2Vjb25kIGNsaWVudCB0 cmllcyB0byBnZXQgdGhlIHNhbWUgbG9jaworCUxPT1AKKwkgIFNFTEVDVCBDT1VOVCgqKSBJTlRP IFNUUklDVCB3YWl0ZXJzIEZST00gcGdfbG9ja3MgV0hFUkUKKwkgIGxvY2t0eXBlID0gJ2Fkdmlz b3J5JyBBTkQgb2Jqc3ViaWQgPSAxIEFORAorCSAgKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwg b2JqaWQ6OmJpZ2ludCA9IDE6OmJpZ2ludCkgQU5EIE5PVCBncmFudGVkOworCSAgSUYgd2FpdGVy cyA9IDEgVEhFTgorCQlJTlNFUlQgSU5UTyBmaXJzdF9jbGllbnRfdGFibGUgVkFMVUVTICgxKTsK KworCQktLSBFeGl0IGxvb3AKKwkJRVhJVDsKKwkgIEVORCBJRjsKKwlFTkQgTE9PUDsKKyAgRU5E IElGOworRU5EJCQ7CisKK0NPTU1JVDsKK1NFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7 Cit9CisJfSk7CisKKyMgQ2xlYW4gdXAKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAn REVMRVRFIEZST00gZmlyc3RfY2xpZW50X3RhYmxlOycpOworCitsb2NhbCAkRU5We1BHT1BUSU9O U30gPSAiLWMgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249cmVhZFxcIGNvbW1pdHRlZCI7 CisKKyMgRGVhZGxvY2sgZXJyb3IgYW5kIHJldHJ5CisKKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEg ZGVhZGxvY2sgZXJyb3IKKyRlcnJfcGF0dGVybiA9CisJImNsaWVudCAoMHwxKSBnb3QgYW4gZXJy b3IgaW4gY29tbWFuZCAoM3w1KSBcXChTUUxcXCkgb2Ygc2NyaXB0IDA7ICIKKyAgLiAiRVJST1I6 ICBkZWFkbG9jayBkZXRlY3RlZFxcYiI7CisKK3BnYmVuY2goCisJIi1uIC1jIDIgLXQgMSAtLW1h eC10cmllcyAyIC0tcHJpbnQtZXJyb3JzIiwKKwkwLAorCVsgcXJ7cHJvY2Vzc2VkOiAyLzJcYn0s IHFye14oKD8hbnVtYmVyIG9mIGZhaWx1cmVzKSgufFxuKSkqJH0sCisJICBxcntudW1iZXIgb2Yg cmV0cmllZDogMVxifSwgcXJ7bnVtYmVyIG9mIHJldHJpZXM6IDFcYn0gXSwKKwlbIHFyeyRlcnJf cGF0dGVybn0gXSwKKwknZGVhZGxvY2sgd2l0aCByZXRyeWluZycsCisJeworCQknMDAxX3BnYmVu Y2hfZGVhZGxvY2snID0+IHF7CistLSBXaGF0J3MgaGFwcGVuaW5nOgorLS0gVGhlIGZpcnN0IGNs aWVudCBnZXRzIHRoZSBsb2NrIDIuCistLSBUaGUgc2Vjb25kIGNsaWVudCBnZXRzIHRoZSBsb2Nr IDMgYW5kIHRyaWVzIHRvIGdldCB0aGUgbG9jayAyLgorLS0gVGhlIGZpcnN0IGNsaWVudCB0cmll cyB0byBnZXQgdGhlIGxvY2sgMyBhbmQgb25lIG9mIHRoZW0gZ2V0cyBhIGRlYWRsb2NrCistLSBl cnJvci4KKy0tCistLSBBIGNsaWVudCB0aGF0IGRvZXMgbm90IGdldCBhIGRlYWRsb2NrIGVycm9y IG11c3QgaG9sZCBhIGxvY2sgYXQgdGhlCistLSB0cmFuc2FjdGlvbiBzdGFydC4gVGh1cyBpbiB0 aGUgZW5kIGl0IHJlbGVhc2VzIGFsbCBvZiBpdHMgbG9ja3MgYmVmb3JlIHRoZQorLS0gY2xpZW50 IHdpdGggdGhlIGRlYWRsb2NrIGVycm9yIHN0YXJ0cyBhIHJldHJ5ICh3ZSBkbyBub3Qgd2FudCBh bnkgZXJyb3JzCistLSBhZ2FpbikuCisKKy0tIFNpbmNlIHRoZSBjbGllbnQgd2l0aCB0aGUgZGVh ZGxvY2sgZXJyb3IgaGFzIG5vdCByZWxlYXNlZCB0aGUgYmxvY2tpbmcgbG9ja3MsCistLSBsZXQn cyBkbyB0aGlzIGhlcmUuCitTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpOworCistLSBU aGUgc2Vjb25kIGNsaWVudCBhbmQgdGhlIGNsaWVudCB3aXRoIHRoZSBkZWFkbG9jayBlcnJvciBz dG9wIGhlcmUKK1NFTEVDVCBwZ19hZHZpc29yeV9sb2NrKDApOworU0VMRUNUIHBnX2Fkdmlzb3J5 X2xvY2soMSk7CisKKy0tIFRoZSBzZWNvbmQgY2xpZW50IGFuZCB0aGUgY2xpZW50IHdpdGggdGhl IGRlYWRsb2NrIGVycm9yIGFsd2F5cyBjb21lIGFmdGVyCistLSB0aGUgZmlyc3QgYW5kIHRoZSBu dW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUgZmlyc3RfY2xpZW50X3RhYmxlIHJlZmxlY3RzCist LSB0aGlzLiBIZXJlIHRoZSBmaXJzdCBjbGllbnQgaW5zZXJ0cyBhIHJvdywgc28gaW4gdGhlIGZ1 dHVyZSB0aGUgdGFibGUgaXMKKy0tIGFsd2F5cyBub24tZW1wdHkuCitETyAkJAorREVDTEFSRQor ICBleGlzdHMgYm9vbGVhbjsKK0JFR0lOCisgIFNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00g Zmlyc3RfY2xpZW50X3RhYmxlKSBJTlRPIFNUUklDVCBleGlzdHM7CisgIElGIGV4aXN0cyBUSEVO CisJLS0gV2UgYXJlIHRoZSBzZWNvbmQgY2xpZW50IG9yIHRoZSBjbGllbnQgd2l0aCB0aGUgZGVh ZGxvY2sgZXJyb3IKKworCS0tIFRoZSBmaXJzdCBjbGllbnQgd2lsbCB0YWtlIGNhcmUgYnkgaXRz ZWxmIG9mIHRoaXMgbG9jayAoc2VlIGJlbG93KQorCVBFUkZPUk0gcGdfYWR2aXNvcnlfdW5sb2Nr KDApOworCisJUEVSRk9STSBwZ19hZHZpc29yeV9sb2NrKDMpOworCisJLS0gVGhlIHNlY29uZCBj bGllbnQgY2FuIGdldCBhIGRlYWRsb2NrIGhlcmUKKwlQRVJGT1JNIHBnX2Fkdmlzb3J5X2xvY2so Mik7CisgIEVMU0UKKwktLSBXZSBhcmUgdGhlIGZpcnN0IGNsaWVudAorCisJLS0gVGhpcyBjb2Rl IHNob3VsZCBub3QgYmUgdXNlZCBpbiBhIG5ldyB0cmFuc2FjdGlvbiBhZnRlciBhbiBlcnJvcgor CUlOU0VSVCBJTlRPIGZpcnN0X2NsaWVudF90YWJsZSBWQUxVRVMgKDEpOworCisJUEVSRk9STSBw Z19hZHZpc29yeV9sb2NrKDIpOworICBFTkQgSUY7CitFTkQkJDsKKworRE8gJCQKK0RFQ0xBUkUK KyAgbnVtX3Jvd3MgaW50ZWdlcjsKKyAgd2FpdGVycyBpbnRlZ2VyOworQkVHSU4KKyAgLS0gQ2hl Y2sgaWYgd2UgYXJlIHRoZSBmaXJzdCBjbGllbnQKKyAgU0VMRUNUIENPVU5UKCopIEZST00gZmly c3RfY2xpZW50X3RhYmxlIElOVE8gU1RSSUNUIG51bV9yb3dzOworICBJRiBudW1fcm93cyA9IDEg VEhFTgorCS0tIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIHVzZWQgaW4gYSBuZXcgdHJhbnNhY3Rp b24gYWZ0ZXIgYW4gZXJyb3IKKwlJTlNFUlQgSU5UTyBmaXJzdF9jbGllbnRfdGFibGUgVkFMVUVT ICgyKTsKKworCS0tIExldCB0aGUgc2Vjb25kIGNsaWVudCBiZWdpbgorCVBFUkZPUk0gcGdfYWR2 aXNvcnlfdW5sb2NrKDApOworCVBFUkZPUk0gcGdfYWR2aXNvcnlfdW5sb2NrKDEpOworCisJLS0g TWFrZSBzdXJlIHRoZSBzZWNvbmQgY2xpZW50IGlzIHJlYWR5IGZvciBkZWFkbG9jaworCUxPT1AK KwkgIFNFTEVDVCBDT1VOVCgqKSBJTlRPIFNUUklDVCB3YWl0ZXJzIEZST00gcGdfbG9ja3MgV0hF UkUKKwkgIGxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBBTkQKKwkgIG9ianN1YmlkID0gMSBBTkQKKwkg ICgoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAyOjpiaWdpbnQpIEFO RAorCSAgTk9UIGdyYW50ZWQ7CisKKwkgIElGIHdhaXRlcnMgPSAxIFRIRU4KKwkgICAgLS0gRXhp dCBsb29wCisJCUVYSVQ7CisJICBFTkQgSUY7CisJRU5EIExPT1A7CisKKwlQRVJGT1JNIHBnX2Fk dmlzb3J5X2xvY2soMCk7CisgICAgLS0gQW5kIHRoZSBzZWNvbmQgY2xpZW50IHRvb2sgY2FyZSBi eSBpdHNlbGYgb2YgdGhlIGxvY2sgMQorICBFTkQgSUY7CitFTkQkJDsKKworLS0gVGhlIGZpcnN0 IGNsaWVudCBjYW4gZ2V0IGEgZGVhZGxvY2sgaGVyZQorU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2so Myk7CisKK1NFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7Cit9CisJfSk7CisKKyMgQ2xl YW4gdXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgVEFCTEUgZmlyc3RfY2xp ZW50X3RhYmxlLCB4eTsnKTsKKwogIyBkb25lCiAkbm9kZS0+c3RvcDsKIGRvbmVfdGVzdGluZygp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBs IGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBsCmluZGV4IGMxYzJj MWUzZDQuLjdjY2E2ZGY1N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMl9wZ2Jl bmNoX25vX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDJfcGdiZW5jaF9ub19z ZXJ2ZXIucGwKQEAgLTE1Nyw2ICsxNTcsMTYgQEAgbXkgQG9wdGlvbnMgPSAoCiAJCQlxcntlcnJv ciB3aGlsZSBzZXR0aW5nIHJhbmRvbSBzZWVkIGZyb20gLS1yYW5kb20tc2VlZCBvcHRpb259CiAJ CV0KIAldLAorCVsKKwkJJ2JhZCBtYXhpbXVtIG51bWJlciBvZiB0cmllcycsCisJCSctLW1heC10 cmllcyAtMTAnLAorCQlbcXJ7aW52YWxpZCBudW1iZXIgb2YgbWF4aW11bSB0cmllczogIi0xMCJ9 XQorCV0sCisJWworCQknYW4gaW5maW5pdGUgbnVtYmVyIG9mIHRyaWVzJywKKwkJJy0tbWF4LXRy aWVzIDAnLAorCQlbcXJ7YW4gaW5maW5pdGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIHRyaWVzIGNh biBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgb3B0aW9uIC0tbGF0ZW5jeS1saW1pdH1dCisJXSwKIAog CSMgbG9naW5nIHN1Yi1vcHRpb25zCiAJWwpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL2NvbmRp dGlvbmFsLmMgYi9zcmMvZmVfdXRpbHMvY29uZGl0aW9uYWwuYwppbmRleCBkYjJhMGE1M2IzLi40 ZDE0MDY2MDI0IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY29uZGl0aW9uYWwuYworKysgYi9z cmMvZmVfdXRpbHMvY29uZGl0aW9uYWwuYwpAQCAtMjQsMTMgKzI0LDI1IEBAIGNvbmRpdGlvbmFs X3N0YWNrX2NyZWF0ZSh2b2lkKQogfQogCiAvKgotICogZGVzdHJveSBzdGFjaworICogRGVzdHJv eSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrLiBUaGUgc3RhY2sgaXRzZWxmIGlzIG5v dCBmcmVlZC4KICAqLwogdm9pZAotY29uZGl0aW9uYWxfc3RhY2tfZGVzdHJveShDb25kaXRpb25h bFN0YWNrIGNzdGFjaykKK2NvbmRpdGlvbmFsX3N0YWNrX3Jlc2V0KENvbmRpdGlvbmFsU3RhY2sg Y3N0YWNrKQogeworCWlmICghY3N0YWNrKQorCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIGRv IGhlcmUgKi8KKwogCXdoaWxlIChjb25kaXRpb25hbF9zdGFja19wb3AoY3N0YWNrKSkKIAkJY29u dGludWU7Cit9CisKKy8qCisgKiBkZXN0cm95IHN0YWNrCisgKi8KK3ZvaWQKK2NvbmRpdGlvbmFs X3N0YWNrX2Rlc3Ryb3koQ29uZGl0aW9uYWxTdGFjayBjc3RhY2spCit7CisJY29uZGl0aW9uYWxf c3RhY2tfcmVzZXQoY3N0YWNrKTsKIAlmcmVlKGNzdGFjayk7CiB9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmggYi9zcmMvaW5jbHVkZS9mZV91dGlscy9j b25kaXRpb25hbC5oCmluZGV4IDliOTFkZTVhM2QuLjU5YzhkOGE4ZTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2ZlX3V0aWxzL2NvbmRpdGlvbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvZmVfdXRp bHMvY29uZGl0aW9uYWwuaApAQCAtNzMsNiArNzMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDb25kaXRp b25hbFN0YWNrRGF0YSAqQ29uZGl0aW9uYWxTdGFjazsKIAogZXh0ZXJuIENvbmRpdGlvbmFsU3Rh Y2sgY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRlKHZvaWQpOwogCitleHRlcm4gdm9pZCBjb25kaXRp b25hbF9zdGFja19yZXNldChDb25kaXRpb25hbFN0YWNrIGNzdGFjayk7CisKIGV4dGVybiB2b2lk IGNvbmRpdGlvbmFsX3N0YWNrX2Rlc3Ryb3koQ29uZGl0aW9uYWxTdGFjayBjc3RhY2spOwogCiBl eHRlcm4gaW50CWNvbmRpdGlvbmFsX3N0YWNrX2RlcHRoKENvbmRpdGlvbmFsU3RhY2sgY3N0YWNr KTsKLS0gCjIuMTcuMQoK --=_7447d1297f0d17f37364b73324d85298 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v11-0004-Pgbench-errors-use-a-separate-function-to-report.patch Content-Disposition: attachment; filename=v11-0004-Pgbench-errors-use-a-separate-function-to-report.patch; size=69123 RnJvbSBhYjQwZjEzMWFhNzgxYTI4ZjA1OTM3MTVkMjMzYWYxYzE5YWU5NTFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogV2VkLCA1IFNlcCAyMDE4IDE5OjM5OjQxICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTEgNC80XSBQZ2JlbmNoIGVycm9yczogdXNlIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8g cmVwb3J0IGEKIGRlYnVnL2xvZy9lcnJvciBtZXNzYWdlCgpUaGlzIGlzIG1vc3QgaW1wb3J0YW50 IHdoZW4gaXQgaXMgdXNlZCB0byByZXBvcnQgY2xpZW50IGZhaWx1cmVzIHRoYXQgZG8gbm90CmNh dXNlIGFuIGFib3J0cyBhbmQgdGhpcyBkZXBlbmRzIG9uIHRoZSBsZXZlbCBvZiBkZWJ1Z2dpbmcu CgpSZW5hbWUgdGhlIGFscmVhZHkgdXNlZCBmdW5jdGlvbiBwZ2JlbmNoX2Vycm9yKCkgdG8gcGdi ZW5jaF9zaW1wbGVfZXJyb3IoKSBmb3IKZmxleCBsZXhlciBlcnJvcnMuCi0tLQogc3JjL2Jpbi9w Z2JlbmNoL3BnYmVuY2guYyB8IDEwMTkgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ4NSBpbnNlcnRpb25zKCspLCA1MzQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmMKaW5kZXggOGRhMTEyMDlhZC4uMTg3NDJmY2Q1NiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBA IC02NjEsMTcgKzY2MSw2IEBAIHN0YXRpYyBpbnQJbnVtX3NjcmlwdHM7CQkvKiBudW1iZXIgb2Yg c2NyaXB0cyBpbiBzcWxfc2NyaXB0W10gKi8KIHN0YXRpYyBpbnQJbnVtX2NvbW1hbmRzID0gMDsJ LyogdG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0cyAqLwogc3RhdGljIGludDY0IHRvdGFs X3dlaWdodCA9IDA7CiAKLXR5cGVkZWYgZW51bSBEZWJ1Z0xldmVsCi17Ci0JTk9fREVCVUcgPSAw LAkJCQkvKiBubyBkZWJ1Z2dpbmcgb3V0cHV0IChleGNlcHQgUEdCRU5DSF9ERUJVRykgKi8KLQlE RUJVR19FUlJPUlMsCQkJCS8qIHByaW50IG9ubHkgZXJyb3IgbWVzc2FnZXMsIHJldHJpZXMgYW5k Ci0JCQkJCQkJCSAqIGZhaWx1cmVzICovCi0JREVCVUdfQUxMCQkJCQkvKiBwcmludCBhbGwgZGVi dWdnaW5nIG91dHB1dCAodGhyb3R0bGluZywKLQkJCQkJCQkJICogZXhlY3V0ZWQvc2VudC9yZWNl aXZlZCBjb21tYW5kcyBldGMuKSAqLwotfSBEZWJ1Z0xldmVsOwotCi1zdGF0aWMgRGVidWdMZXZl bCBkZWJ1Z19sZXZlbCA9IE5PX0RFQlVHOwkvKiBkZWJ1ZyBmbGFnICovCi0KIC8qIEJ1aWx0aW4g dGVzdCBzY3JpcHRzICovCiB0eXBlZGVmIHN0cnVjdCBCdWlsdGluU2NyaXB0CiB7CkBAIC03MTgs NiArNzA3LDQxIEBAIHN0YXRpYyBjb25zdCBCdWlsdGluU2NyaXB0IGJ1aWx0aW5fc2NyaXB0W10g PQogCX0KIH07CiAKK3R5cGVkZWYgZW51bSBFcnJvckxldmVsCit7CisJLyoKKwkgKiBUbyByZXBv cnQgdGhyb3R0bGluZywgZXhlY3V0ZWQvc2VudC9yZWNlaXZlZCBjb21tYW5kcyBldGMuCisJICov CisJREVCVUcsCisKKwkvKgorCSAqIFRvIHJlcG9ydCBhIG5vcm1hbCBlcnJvciBvZiB0aGUgU1FM L21ldGEgY29tbWFuZCBhbmQgcHJvY2VzcyB0aGUKKwkgKiB0cmFuc2FjdGlvbiBhZnRlciBpdCAo aXRzIGVuZC9yZXRyeSkuCisJICovCisJTE9HLAorCisJLyoKKwkgKiBUbyByZXBvcnQ6CisJICog LSBhYm9ydGlvbiBvZiB0aGUgY2xpZW50IChzb21ldGhpbmcgc2VyaW91cyBlLmcuIGNvbm5lY3Rp b24gd2l0aCB0aGUKKwkgKiAgIGJhY2tlbmQgd2FzIGxvc3QpOworCSAqIC0gdGhlIGxvZyBtZXNz YWdlcyBvZiB0aGUgbWFpbiBwcm9ncmFtOworCSAqIC0gUEdCRU5DSF9ERUJVRyBtZXNzYWdlcy4K KwkgKi8KKwlMT0dfUEdCRU5DSCwKKworCS8qCisJICogVG8gcmVwb3J0IHRoZSBlcnJvciBtZXNz YWdlcyBvZiB0aGUgbWFpbiBwcm9ncmFtIGFuZCBpbW1lZGlhdGVseSBjYWxsCisJICogZXhpdCgx KS4KKwkgKi8KKwlGQVRBTAorfSBFcnJvckxldmVsOworCisvKgorICogQnkgZGVmYXVsdCB0aGVy ZSBhcmUgbm8gZGVidWcgbWVzc2FnZXMgb3IgZGV0YWlsZWQgcmVwb3J0cyBhYm91dAorICogcmV0 cmllZC9mYWlsZWQgdHJhbnNhY3Rpb25zLgorICovCitzdGF0aWMgRXJyb3JMZXZlbCBsb2dfbGV2 ZWwgPSBMT0dfUEdCRU5DSDsKKwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMg dm9pZCBzZXROdWxsVmFsdWUoUGdCZW5jaFZhbHVlICpwdik7CkBAIC03MjksMTcgKzc1MywyMSBA QCBzdGF0aWMgdm9pZCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkgIFN0YXRz RGF0YSAqYWdnLCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXRlbmN5LCBkb3VibGUgbGFnKTsKIHN0 YXRpYyB2b2lkIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGlu c3RyX3RpbWUgKm5vdywKIAkJCQkgYm9vbCBza2lwcGVkLCBTdGF0c0RhdGEgKmFnZyk7Ci1zdGF0 aWMgdm9pZCBwZ2JlbmNoX2Vycm9yKGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9w cmludGYoMSwgMik7CitzdGF0aWMgdm9pZCBwZ2JlbmNoX3NpbXBsZV9lcnJvcihjb25zdCBjaGFy ICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDEsIDIpOwogc3RhdGljIHZvaWQgYWRkU2Ny aXB0KFBhcnNlZFNjcmlwdCBzY3JpcHQpOwogc3RhdGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICph cmcpOwogc3RhdGljIHZvaWQgc2V0YWxhcm0oaW50IHNlY29uZHMpOwogc3RhdGljIHZvaWQgZmlu aXNoQ29uKENTdGF0ZSAqc3QpOworc3RhdGljIHZvaWQgcGdiZW5jaF9lcnJvcihFcnJvckxldmVs IGVsZXZlbCwKKwkJCQkJCSAgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50 ZigyLCAzKTsKK3N0YXRpYyB2b2lkIHBnYmVuY2hfZXJyb3JfdmEoRXJyb3JMZXZlbCBlbGV2ZWws IGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkJCQkgdmFfbGlzdCAqYXJncykgcGdfYXR0cmlidXRlX3By aW50ZigyLCAwKTsKIAogCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxleGVy ICovCiBzdGF0aWMgY29uc3QgUHNxbFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxsYmFja3MgPSB7 CiAJTlVMTCwJCQkJCQkvKiBkb24ndCBuZWVkIGdldF92YXJpYWJsZSBmdW5jdGlvbmFsaXR5ICov Ci0JcGdiZW5jaF9lcnJvcgorCXBnYmVuY2hfc2ltcGxlX2Vycm9yCiB9OwogCiAKQEAgLTg4MCw3 ICs5MDgsOCBAQCBzdHJ0b2ludDY0KGNvbnN0IGNoYXIgKnN0cikKIAogCS8qIHJlcXVpcmUgYXQg bGVhc3Qgb25lIGRpZ2l0ICovCiAJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkK LQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgaW50ZWdlcjogXCIl c1wiXG4iLCBzdHIpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiaW52YWxpZCBpbnB1 dCBzeW50YXggZm9yIGludGVnZXI6IFwiJXNcIlxuIiwKKwkJCQkJICBzdHIpOwogCiAJLyogcHJv Y2VzcyBkaWdpdHMgKi8KIAl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAq cHRyKSkKQEAgLTg4OCw3ICs5MTcsOSBAQCBzdHJ0b2ludDY0KGNvbnN0IGNoYXIgKnN0cikKIAkJ aW50NjQJCXRtcCA9IHJlc3VsdCAqIDEwICsgKCpwdHIrKyAtICcwJyk7CiAKIAkJaWYgKCh0bXAg LyAxMCkgIT0gcmVzdWx0KQkvKiBvdmVyZmxvdz8gKi8KLQkJCWZwcmludGYoc3RkZXJyLCAidmFs dWUgXCIlc1wiIGlzIG91dCBvZiByYW5nZSBmb3IgdHlwZSBiaWdpbnRcbiIsIHN0cik7CisJCQlw Z2JlbmNoX2Vycm9yKExPR19QR0JFTkNILAorCQkJCQkJICAidmFsdWUgXCIlc1wiIGlzIG91dCBv ZiByYW5nZSBmb3IgdHlwZSBiaWdpbnRcbiIsCisJCQkJCQkgIHN0cik7CiAJCXJlc3VsdCA9IHRt cDsKIAl9CiAKQEAgLTg5OSw3ICs5MzAsOCBAQCBnb3RkaWdpdHM6CiAJCXB0cisrOwogCiAJaWYg KCpwdHIgIT0gJ1wwJykKLQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGlucHV0IHN5bnRheCBm b3IgaW50ZWdlcjogXCIlc1wiXG4iLCBzdHIpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNI LCAiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIGludGVnZXI6IFwiJXNcIlxuIiwKKwkJCQkJICBz dHIpOwogCiAJcmV0dXJuICgoc2lnbiA8IDApID8gLXJlc3VsdCA6IHJlc3VsdCk7CiB9CkBAIC0x MzEyLDggKzEzNDQsOCBAQCBhY2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBl ZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZywKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyog aW50ZXJuYWwgZXJyb3Igd2hpY2ggc2hvdWxkIG5ldmVyIG9jY3VyICovCi0JCQlmcHJpbnRmKHN0 ZGVyciwgInVuZXhwZWN0ZWQgZXJyb3Igc3RhdHVzOiAlZFxuIiwgZXN0YXR1cyk7Ci0JCQlleGl0 KDEpOworCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwgInVuZXhwZWN0ZWQgZXJyb3Igc3RhdHVzOiAl ZFxuIiwgZXN0YXR1cyk7CisJCQlicmVhazsKIAl9CiB9CiAKQEAgLTEzMjUsMTAgKzEzNTcsNyBA QCBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICpzcWwpCiAKIAlyZXMg PSBQUWV4ZWMoY29uLCBzcWwpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NP TU1BTkRfT0spCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29u KSk7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAiJXMiLCBQUWVycm9y TWVzc2FnZShjb24pKTsKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTEzNDAsMTAgKzEzNjksOSBA QCB0cnlFeGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICpzcWwpCiAKIAly ZXMgPSBQUWV4ZWMoY29uLCBzcWwpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVT X0NPTU1BTkRfT0spCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29uKSk7Ci0JCWZwcmludGYoc3RkZXJyLCAiKGlnbm9yaW5nIHRoaXMgZXJyb3IgYW5kIGNvbnRp bnVpbmcgYW55d2F5KVxuIik7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILAorCQkJ CQkgICIlcyhpZ25vcmluZyB0aGlzIGVycm9yIGFuZCBjb250aW51aW5nIGFueXdheSlcbiIsCisJ CQkJCSAgUFFlcnJvck1lc3NhZ2UoY29uKSk7CiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xMzg4 LDggKzE0MTYsOCBAQCBkb0Nvbm5lY3Qodm9pZCkKIAogCQlpZiAoIWNvbm4pCiAJCXsKLQkJCWZw cmludGYoc3RkZXJyLCAiY29ubmVjdGlvbiB0byBkYXRhYmFzZSBcIiVzXCIgZmFpbGVkXG4iLAot CQkJCQlkYk5hbWUpOworCQkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgImNvbm5lY3Rpb24g dG8gZGF0YWJhc2UgXCIlc1wiIGZhaWxlZFxuIiwKKwkJCQkJCSAgZGJOYW1lKTsKIAkJCXJldHVy biBOVUxMOwogCQl9CiAKQEAgLTE0MDcsOCArMTQzNSw4IEBAIGRvQ29ubmVjdCh2b2lkKQogCS8q IGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxs eSBtYWRlICovCiAJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6XG4l cyIsCi0JCQkJZGJOYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnYmVuY2hfZXJyb3Io TE9HX1BHQkVOQ0gsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6XG4lcyIs CisJCQkJCSAgZGJOYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAJCVBRZmluaXNoKGNvbm4p OwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNTQ2LDEwICsxNTc0LDggQEAgbWFrZVZhcmlhYmxl VmFsdWUoVmFyaWFibGUgKnZhcikKIAogCQlpZiAoc3NjYW5mKHZhci0+c3ZhbHVlLCAiJWxmJWMi LCAmZHYsICZ4cykgIT0gMSkKIAkJewotCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9S UykKLQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCSJtYWxmb3JtZWQgdmFyaWFibGUgXCIlc1wi IHZhbHVlOiBcIiVzXCJcbiIsCi0JCQkJCQl2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKKwkJCXBn YmVuY2hfZXJyb3IoTE9HLCAibWFsZm9ybWVkIHZhcmlhYmxlIFwiJXNcIiB2YWx1ZTogXCIlc1wi XG4iLAorCQkJCQkJICB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKTsKIAkJCXJldHVybiBmYWxzZTsK IAkJfQogCQlzZXREb3VibGVWYWx1ZSgmdmFyLT52YWx1ZSwgZHYpOwpAQCAtMTYxOSw3ICsxNjQ1 LDcgQEAgZW5sYXJnZVZhcmlhYmxlcyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgaW50IG5lZWRlZCkK ICAqIExvb2t1cCBhIHZhcmlhYmxlIGJ5IG5hbWUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUuCiAg KiBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8gdGhlIHZhcmlhYmxlLgog ICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgKGJhZCBuYW1lKS4gQmVjYXVzZSB0aGlzIGNhbiBi ZSB1c2VkIGJ5IGNsaWVudAotICogY29tbWFuZHMsIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb25s eSBpbiBkZWJ1ZyBtb2RlLiBUaGUgY2FsbGVyIGNhbiBwcmludCBoaXMKKyAqIGNvbW1hbmRzLCBw cmludCBhbiBlcnJvciBtZXNzYWdlIGF0IHRoZSBsZXZlbCBMT0cuIFRoZSBjYWxsZXIgY2FuIHBy aW50IGhpcwogICogb3duIGVycm9yIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyBWYXJpYWJsZSAqCkBA IC0xNjM2LDkgKzE2NjIsOCBAQCBsb29rdXBDcmVhdGVWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlh YmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIAkJICovCiAJCWlmICghdmFs aWRfdmFyaWFibGVfbmFtZShuYW1lKSkKIAkJewotCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVH X0VSUk9SUykKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6 IFwiJXNcIlxuIiwKLQkJCQkJCWNvbnRleHQsIG5hbWUpOworCQkJcGdiZW5jaF9lcnJvcihMT0cs ICIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCisJCQkJCQkgIGNvbnRleHQs IG5hbWUpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTY3MSw4ICsxNjk2LDggQEAgcHV0 VmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIg Km5hbWUsCiAJdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUodmFyaWFibGVzLCBjb250ZXh0LCBu YW1lKTsKIAlpZiAoIXZhcikKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxl IHNldHRpbmcgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCWNvbnRleHQsIG5hbWUpOworCQlwZ2Jl bmNoX2Vycm9yKExPR19QR0JFTkNILCAiJXM6IGVycm9yIHdoaWxlIHNldHRpbmcgdmFyaWFibGUg XCIlc1wiXG4iLAorCQkJCQkgIGNvbnRleHQsIG5hbWUpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQog CkBAIC0xNjkwLDcgKzE3MTUsNyBAQCBwdXRWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywg Y29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKIC8qCiAgKiBBc3NpZ24gYSB2YWx1ZSB0 byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlLgogICogUmV0dXJucyBmYWxzZSBv biBmYWlsdXJlIChiYWQgbmFtZSkuIEJlY2F1c2UgdGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQK LSAqIGNvbW1hbmRzLCBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9ubHkgaW4gZGVidWcgbW9kZS4g VGhlIGNhbGxlciBjYW4gcHJpbnQgaGlzCisgKiBjb21tYW5kcywgcHJpbnQgYW4gZXJyb3IgbWVz c2FnZSBhdCB0aGUgbGV2ZWwgTE9HLiBUaGUgY2FsbGVyIGNhbiBwcmludCBoaXMKICAqIG93biBl cnJvciBtZXNzYWdlLgogICovCiBzdGF0aWMgYm9vbApAQCAtMTcwMiw5ICsxNzI3LDggQEAgcHV0 VmFyaWFibGVWYWx1ZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwg Y2hhciAqbmFtZSwKIAl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJsZSh2YXJpYWJsZXMsIGNvbnRl eHQsIG5hbWUpOwogCWlmICghdmFyKQogCXsKLQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VS Uk9SUykKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHNldHRpbmcgdmFyaWFi bGUgXCIlc1wiXG4iLAotCQkJCQljb250ZXh0LCBuYW1lKTsKKwkJcGdiZW5jaF9lcnJvcihMT0cs ICIlczogZXJyb3Igd2hpbGUgc2V0dGluZyB2YXJpYWJsZSBcIiVzXCJcbiIsCisJCQkJCSAgY29u dGV4dCwgbmFtZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE3MTksNyArMTc0Myw3IEBA IHB1dFZhcmlhYmxlVmFsdWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRl eHQsIGNoYXIgKm5hbWUsCiAvKgogICogQXNzaWduIGFuIGludGVnZXIgdmFsdWUgdG8gYSB2YXJp YWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZS4KICAqIFJldHVybnMgZmFsc2Ugb24gZmFpbHVy ZSAoYmFkIG5hbWUpLiBCZWNhdXNlIHRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50Ci0gKiBjb21t YW5kcywgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbmx5IGluIGRlYnVnIG1vZGUuIFRoZSBjYWxs ZXIgY2FuIHByaW50IGhpcworICogY29tbWFuZHMsIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgYXQg dGhlIGxldmVsIExPRy4gVGhlIGNhbGxlciBjYW4gcHJpbnQgaGlzCiAgKiBvd24gZXJyb3IgbWVz c2FnZS4KICAqLwogc3RhdGljIGJvb2wKQEAgLTE4NjEsOSArMTg4NSwxMCBAQCBjb2VyY2VUb0Jv b2woUGdCZW5jaFZhbHVlICpwdmFsLCBib29sICpidmFsKQogCX0KIAllbHNlCQkJCQkJLyogTlVM TCwgSU5UIG9yIERPVUJMRSAqLwogCXsKLQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9S UykKLQkJCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0byBib29sZWFuXG4iLAot CQkJCQl2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJLyogY2FsbCB0aGUgZnVuY3Rpb24gdmFsdWVU eXBlTmFtZSBvbmx5IGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoTE9HID49IGxvZ19sZXZlbCkKKwkJ CXBnYmVuY2hfZXJyb3IoTE9HLCAiY2Fubm90IGNvZXJjZSAlcyB0byBib29sZWFuXG4iLAorCQkJ CQkJICB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKIAkJKmJ2YWwgPSBmYWxzZTsJCQkvKiBzdXBwcmVz cyB1bmluaXRpYWxpemVkLXZhcmlhYmxlIHdhcm5pbmdzICovCiAJCXJldHVybiBmYWxzZTsKIAl9 CkBAIC0xOTA4LDggKzE5MzMsNyBAQCBjb2VyY2VUb0ludChQZ0JlbmNoVmFsdWUgKnB2YWwsIGlu dDY0ICppdmFsKQogCiAJCWlmIChkdmFsIDwgUEdfSU5UNjRfTUlOIHx8IFBHX0lOVDY0X01BWCA8 IGR2YWwpCiAJCXsKLQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQkJZnBy aW50ZihzdGRlcnIsICJkb3VibGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCk7CisJ CQlwZ2JlbmNoX2Vycm9yKExPRywgImRvdWJsZSB0byBpbnQgb3ZlcmZsb3cgZm9yICVmXG4iLCBk dmFsKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQkqaXZhbCA9IChpbnQ2NCkgZHZhbDsKQEAg LTE5MTcsOCArMTk0MSwxMCBAQCBjb2VyY2VUb0ludChQZ0JlbmNoVmFsdWUgKnB2YWwsIGludDY0 ICppdmFsKQogCX0KIAllbHNlCQkJCQkJLyogQk9PTEVBTiBvciBOVUxMICovCiAJewotCQlpZiAo ZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3Qg Y29lcmNlICVzIHRvIGludFxuIiwgdmFsdWVUeXBlTmFtZShwdmFsKSk7CisJCS8qIGNhbGwgdGhl IGZ1bmN0aW9uIHZhbHVlVHlwZU5hbWUgb25seSBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKExPRyA+ PSBsb2dfbGV2ZWwpCisJCQlwZ2JlbmNoX2Vycm9yKExPRywgImNhbm5vdCBjb2VyY2UgJXMgdG8g aW50XG4iLAorCQkJCQkJICB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKIAkJcmV0dXJuIGZhbHNlOwog CX0KIH0KQEAgLTE5MzksOSArMTk2NSwxMCBAQCBjb2VyY2VUb0RvdWJsZShQZ0JlbmNoVmFsdWUg KnB2YWwsIGRvdWJsZSAqZHZhbCkKIAl9CiAJZWxzZQkJCQkJCS8qIEJPT0xFQU4gb3IgTlVMTCAq LwogCXsKLQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCWZwcmludGYoc3Rk ZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0byBkb3VibGVcbiIsCi0JCQkJCXZhbHVlVHlwZU5hbWUo cHZhbCkpOworCQkvKiBjYWxsIHRoZSBmdW5jdGlvbiB2YWx1ZVR5cGVOYW1lIG9ubHkgaWYgbmVj ZXNzYXJ5ICovCisJCWlmIChMT0cgPj0gbG9nX2xldmVsKQorCQkJcGdiZW5jaF9lcnJvcihMT0cs ICJjYW5ub3QgY29lcmNlICVzIHRvIGRvdWJsZVxuIiwKKwkJCQkJCSAgdmFsdWVUeXBlTmFtZShw dmFsKSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiB9CkBAIC0yMTIyLDkgKzIxNDksOCBAQCBldmFs U3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCiAJaWYgKGwgIT0gTlVM TCkKIAl7Ci0JCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQlmcHJpbnRmKHN0 ZGVyciwKLQkJCQkJInRvbyBtYW55IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWF4aW11bSBpcyAlZFxu IiwgTUFYX0ZBUkdTKTsKKwkJcGdiZW5jaF9lcnJvcihMT0csICJ0b28gbWFueSBmdW5jdGlvbiBh cmd1bWVudHMsIG1heGltdW0gaXMgJWRcbiIsCisJCQkJCSAgTUFYX0ZBUkdTKTsKIAkJcmV0dXJu IGZhbHNlOwogCX0KIApAQCAtMjI0Nyw4ICsyMjczLDcgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3Rh dGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCWNhc2UgUEdCRU5DSF9NT0Q6CiAJCQkJCQkJ aWYgKHJpID09IDApCiAJCQkJCQkJewotCQkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdf RVJST1JTKQotCQkJCQkJCQkJZnByaW50ZihzdGRlcnIsICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsK KwkJCQkJCQkJcGdiZW5jaF9lcnJvcihMT0csICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKIAkJCQkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJCX0KIAkJCQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9m IC0xIGRpdmlzb3IgKi8KQEAgLTIyNTksOSArMjI4NCw4IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCQkJCQkvKiBvdmVyZmxvdyBjaGVjayAobmVl ZGVkIGZvciBJTlQ2NF9NSU4pICovCiAJCQkJCQkJCQlpZiAobGkgPT0gUEdfSU5UNjRfTUlOKQog CQkJCQkJCQkJewotCQkJCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0J CQkJCQkJCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJCQkJCSJiaWdpbnQgb3V0IG9mIHJh bmdlXG4iKTsKKwkJCQkJCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJCQkJCQkJCQkgICJi aWdpbnQgb3V0IG9mIHJhbmdlXG4iKTsKIAkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJCQkJ CQl9CiAJCQkJCQkJCQllbHNlCkBAIC0yMzY1LDE3ICsyMzg5LDIwIEBAIGV2YWxTdGFuZGFyZEZ1 bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAKIAkJCQlBc3NlcnQobmFyZ3MgPT0gMSk7 CiAKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImRlYnVnKHNjcmlwdD0lZCxjb21tYW5kPSVkKTogIiwK LQkJCQkJCXN0LT51c2VfZmlsZSwgc3QtPmNvbW1hbmQgKyAxKTsKKwkJCQlwZ2JlbmNoX2Vycm9y KExPR19QR0JFTkNILCAiZGVidWcoc2NyaXB0PSVkLGNvbW1hbmQ9JWQpOiAiLAorCQkJCQkJCSAg c3QtPnVzZV9maWxlLCBzdC0+Y29tbWFuZCArIDEpOwogCiAJCQkJaWYgKHZhcmctPnR5cGUgPT0g UEdCVF9OVUxMKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIm51bGxcbiIpOworCQkJCQlwZ2JlbmNo X2Vycm9yKExPR19QR0JFTkNILCAibnVsbFxuIik7CiAJCQkJZWxzZSBpZiAodmFyZy0+dHlwZSA9 PSBQR0JUX0JPT0xFQU4pCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiYm9vbGVhbiAlc1xuIiwgdmFy Zy0+dS5idmFsID8gInRydWUiIDogImZhbHNlIik7CisJCQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BH QkVOQ0gsICJib29sZWFuICVzXG4iLAorCQkJCQkJCQkgIHZhcmctPnUuYnZhbCA/ICJ0cnVlIiA6 ICJmYWxzZSIpOwogCQkJCWVsc2UgaWYgKHZhcmctPnR5cGUgPT0gUEdCVF9JTlQpCi0JCQkJCWZw cmludGYoc3RkZXJyLCAiaW50ICIgSU5UNjRfRk9STUFUICJcbiIsIHZhcmctPnUuaXZhbCk7CisJ CQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJpbnQgIiBJTlQ2NF9GT1JNQVQgIlxuIiwK KwkJCQkJCQkJICB2YXJnLT51Lml2YWwpOwogCQkJCWVsc2UgaWYgKHZhcmctPnR5cGUgPT0gUEdC VF9ET1VCTEUpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiZG91YmxlICUuKmdcbiIsIERCTF9ESUcs IHZhcmctPnUuZHZhbCk7CisJCQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJkb3VibGUg JS4qZ1xuIiwKKwkJCQkJCQkJICBEQkxfRElHLCB2YXJnLT51LmR2YWwpOwogCQkJCWVsc2UJCQkv KiBpbnRlcm5hbCBlcnJvciwgdW5leHBlY3RlZCB0eXBlICovCiAJCQkJCUFzc2VydCgwKTsKIApA QCAtMjUwMSwxNSArMjUyOCwxMyBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSByYW5nZSAqLwogCQkJCWlmIChpbWluID4g aW1heCkKIAkJCQl7Ci0JCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQkJ CQlmcHJpbnRmKHN0ZGVyciwgImVtcHR5IHJhbmdlIGdpdmVuIHRvIHJhbmRvbVxuIik7CisJCQkJ CXBnYmVuY2hfZXJyb3IoTE9HLCAiZW1wdHkgcmFuZ2UgZ2l2ZW4gdG8gcmFuZG9tXG4iKTsKIAkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCQllbHNlIGlmIChpbWF4IC0gaW1pbiA8IDAgfHwg KGltYXggLSBpbWluKSArIDEgPCAwKQogCQkJCXsKIAkJCQkJLyogcHJldmVudCBpbnQgb3ZlcmZs b3dzIGluIHJhbmRvbSBmdW5jdGlvbnMgKi8KLQkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVH X0VSUk9SUykKLQkJCQkJCWZwcmludGYoc3RkZXJyLCAicmFuZG9tIHJhbmdlIGlzIHRvbyBsYXJn ZVxuIik7CisJCQkJCXBnYmVuY2hfZXJyb3IoTE9HLCAicmFuZG9tIHJhbmdlIGlzIHRvbyBsYXJn ZVxuIik7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAKQEAgLTI1MzEsMTAgKzI1NTYsOSBA QCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJ CQkJCQlpZiAocGFyYW0gPCBNSU5fR0FVU1NJQU5fUEFSQU0pCiAJCQkJCQl7Ci0JCQkJCQkJaWYg KGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCQkJCQkJZnByaW50ZihzdGRlcnIsCi0J CQkJCQkJCQkJImdhdXNzaWFuIHBhcmFtZXRlciBtdXN0IGJlIGF0IGxlYXN0ICVmIChub3QgJWYp XG4iLAotCQkJCQkJCQkJCU1JTl9HQVVTU0lBTl9QQVJBTSwgcGFyYW0pOworCQkJCQkJCXBnYmVu Y2hfZXJyb3IoTE9HLAorCQkJCQkJCQkJCSAgImdhdXNzaWFuIHBhcmFtZXRlciBtdXN0IGJlIGF0 IGxlYXN0ICVmIChub3QgJWYpXG4iLAorCQkJCQkJCQkJCSAgTUlOX0dBVVNTSUFOX1BBUkFNLCBw YXJhbSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJfQogCkBAIC0yNTQ2LDEwICsyNTcw LDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJ ewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJhbSA9PSAxLjAgfHwgcGFyYW0gPiBNQVhf WklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdf RVJST1JTKQotCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJCQkiemlwZmlhbiBwYXJh bWV0ZXIgbXVzdCBiZSBpbiByYW5nZSAoMCwgMSkgVSAoMSwgJWRdIChnb3QgJWYpXG4iLAotCQkJ CQkJCQkJCU1BWF9aSVBGSUFOX1BBUkFNLCBwYXJhbSk7CisJCQkJCQkJcGdiZW5jaF9lcnJvcihM T0csCisJCQkJCQkJCQkJICAiemlwZmlhbiBwYXJhbWV0ZXIgbXVzdCBiZSBpbiByYW5nZSAoMCwg MSkgVSAoMSwgJWRdIChnb3QgJWYpXG4iLAorCQkJCQkJCQkJCSAgTUFYX1pJUEZJQU5fUEFSQU0s IHBhcmFtKTsKIAkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJCQl9CiAJCQkJCQlzZXRJbnRWYWx1 ZShyZXR2YWwsCkBAIC0yNTYxLDEwICsyNTg0LDkgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCkKIAkJ CQkJCXsKLQkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJCQkJCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJCQkiZXhwb25lbnRpYWwgcGFyYW1ldGVyIG11c3QgYmUg Z3JlYXRlciB0aGFuIHplcm8gKGdvdCAlZilcbiIsCi0JCQkJCQkJCQkJcGFyYW0pOworCQkJCQkJ CXBnYmVuY2hfZXJyb3IoTE9HLAorCQkJCQkJCQkJCSAgImV4cG9uZW50aWFsIHBhcmFtZXRlciBt dXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIChnb3QgJWYpXG4iLAorCQkJCQkJCQkJCSAgcGFyYW0p OwogCQkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQkJCX0KIApAQCAtMjY3NSw5ICsyNjk3LDggQEAg ZXZhbHVhdGVFeHByKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBQZ0JlbmNoRXhwciAqZXhw ciwgUGdCZW5jaFZhbHVlICpyZXR2YWwKIAogCQkJCWlmICgodmFyID0gbG9va3VwVmFyaWFibGUo JnN0LT52YXJpYWJsZXMsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkpID09IE5VTEwpCiAJCQkJ ewotCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJCQkJZnByaW50Zihz dGRlcnIsICJ1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQkJCQlleHByLT51LnZh cmlhYmxlLnZhcm5hbWUpOworCQkJCQlwZ2JlbmNoX2Vycm9yKExPRywgInVuZGVmaW5lZCB2YXJp YWJsZSBcIiVzXCJcbiIsCisJCQkJCQkJCSAgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKTsKIAkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIApAQCAtMjY5Niw5ICsyNzE3LDEyIEBAIGV2YWx1YXRl RXhwcihUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgUGdCZW5jaEV4cHIgKmV4cHIsIFBnQmVu Y2hWYWx1ZSAqcmV0dmFsCiAKIAkJZGVmYXVsdDoKIAkJCS8qIGludGVybmFsIGVycm9yIHdoaWNo IHNob3VsZCBuZXZlciBvY2N1ciAqLwotCQkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIGVu b2RlIHR5cGUgaW4gZXZhbHVhdGlvbjogJWRcbiIsCi0JCQkJCWV4cHItPmV0eXBlKTsKLQkJCWV4 aXQoMSk7CisJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkJICAidW5leHBlY3RlZCBlbm9k ZSB0eXBlIGluIGV2YWx1YXRpb246ICVkXG4iLAorCQkJCQkJICBleHByLT5ldHlwZSk7CisKKwkJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCXJldHVybiBmYWxzZTsKIAl9CiB9CiAKQEAg LTI3NzEsMTcgKzI3OTUsMTUgQEAgcnVuU2hlbGxDb21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVz LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl9CiAJCWVsc2UgaWYg KChhcmcgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbaV0gKyAxKSkgPT0gTlVMTCkKIAkJ ewotCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQkJYXJndlswXSwgYXJn dltpXSk7CisJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIl c1wiXG4iLAorCQkJCQkJICBhcmd2WzBdLCBhcmd2W2ldKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJ fQogCiAJCWFyZ2xlbiA9IHN0cmxlbihhcmcpOwogCQlpZiAobGVuICsgYXJnbGVuICsgKGkgPiAw ID8gMSA6IDApID49IFNIRUxMX0NPTU1BTkRfU0laRSAtIDEpCiAJCXsKLQkJCWlmIChkZWJ1Z19s ZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQkJZnByaW50ZihzdGRlcnIsICIlczogc2hlbGwgY29t bWFuZCBpcyB0b28gbG9uZ1xuIiwgYXJndlswXSk7CisJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVz OiBzaGVsbCBjb21tYW5kIGlzIHRvbyBsb25nXG4iLCBhcmd2WzBdKTsKIAkJCXJldHVybiBmYWxz ZTsKIAkJfQogCkBAIC0yNzk4LDggKzI4MjAsOSBAQCBydW5TaGVsbENvbW1hbmQoVmFyaWFibGVz ICp2YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJewog CQlpZiAoc3lzdGVtKGNvbW1hbmQpKQogCQl7Ci0JCQlpZiAoIXRpbWVyX2V4Y2VlZGVkICYmIGRl YnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3Vs ZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOworCQkJaWYgKCF0aW1lcl9l eGNlZWRlZCkKKwkJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNo ZWxsIGNvbW1hbmRcbiIsCisJCQkJCQkJICBhcmd2WzBdKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJ fQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTI4MDgsMjEgKzI4MzEsMjAgQEAgcnVuU2hlbGxDb21tYW5k KFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBh cmdjKQogCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aCBwaXBlIGFuZCByZWFkIHRoZSBzdGFu ZGFyZCBvdXRwdXQuICovCiAJaWYgKChmcCA9IHBvcGVuKGNvbW1hbmQsICJyIikpID09IE5VTEwp CiAJewotCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJZnByaW50ZihzdGRl cnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJ cGdiZW5jaF9lcnJvcihMT0csICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4i LCBhcmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoZmdldHMocmVzLCBzaXplb2Yo cmVzKSwgZnApID09IE5VTEwpCiAJewotCQlpZiAoIXRpbWVyX2V4Y2VlZGVkICYmIGRlYnVnX2xl dmVsID49IERFQlVHX0VSUk9SUykKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBy ZWFkIHJlc3VsdCBvZiBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJaWYgKCF0aW1lcl9l eGNlZWRlZCkKKwkJCXBnYmVuY2hfZXJyb3IoTE9HLCAiJXM6IGNvdWxkIG5vdCByZWFkIHJlc3Vs dCBvZiBzaGVsbCBjb21tYW5kXG4iLAorCQkJCQkJICBhcmd2WzBdKTsKIAkJKHZvaWQpIHBjbG9z ZShmcCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKHBjbG9zZShmcCkgPCAwKQogCXsKLQkJ aWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IGNvdWxkIG5vdCBjbG9zZSBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKKwkJcGdiZW5jaF9l cnJvcihMT0csICIlczogY291bGQgbm90IGNsb3NlIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0p OwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0yODMyLDEwICsyODU0LDkgQEAgcnVuU2hlbGxD b21tYW5kKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3Ys IGludCBhcmdjKQogCQllbmRwdHIrKzsKIAlpZiAoKnJlcyA9PSAnXDAnIHx8ICplbmRwdHIgIT0g J1wwJykKIAl7Ci0JCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQlmcHJpbnRm KHN0ZGVyciwKLQkJCQkJIiVzOiBzaGVsbCBjb21tYW5kIG11c3QgcmV0dXJuIGFuIGludGVnZXIg KG5vdCBcIiVzXCIpXG4iLAotCQkJCQlhcmd2WzBdLCByZXMpOworCQlwZ2JlbmNoX2Vycm9yKExP RywKKwkJCQkJICAiJXM6IHNoZWxsIGNvbW1hbmQgbXVzdCByZXR1cm4gYW4gaW50ZWdlciAobm90 IFwiJXNcIilcbiIsCisJCQkJCSAgYXJndlswXSwgcmVzKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0K IAlpZiAoIXB1dFZhcmlhYmxlSW50KHZhcmlhYmxlcywgInNldHNoZWxsIiwgdmFyaWFibGUsIHJl dHZhbCkpCkBAIC0yODYwLDkgKzI4ODEsOSBAQCBwcmVwYXJlZFN0YXRlbWVudE5hbWUoY2hhciAq YnVmZmVyLCBpbnQgZmlsZSwgaW50IHN0YXRlKQogc3RhdGljIHZvaWQKIGNvbW1hbmRGYWlsZWQo Q1N0YXRlICpzdCwgY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptZXNzYWdlKQogewotCWZw cmludGYoc3RkZXJyLAotCQkJImNsaWVudCAlZCBnb3QgYW4gZXJyb3IgaW4gY29tbWFuZCAlZCAo JXMpIG9mIHNjcmlwdCAlZDsgJXNcbiIsCi0JCQlzdC0+aWQsIHN0LT5jb21tYW5kLCBjbWQsIHN0 LT51c2VfZmlsZSwgbWVzc2FnZSk7CisJcGdiZW5jaF9lcnJvcihMT0csCisJCQkJICAiY2xpZW50 ICVkIGdvdCBhbiBlcnJvciBpbiBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwK KwkJCQkgIHN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwgc3QtPnVzZV9maWxlLCBtZXNzYWdlKTsK IH0KIAogLyoKQEAgLTI4NzQsOSArMjg5NSw5IEBAIGNsaWVudEFib3J0ZWQoQ1N0YXRlICpzdCwg Y29uc3QgY2hhciAqbWVzc2FnZSkKIAljb25zdCBDb21tYW5kICpjb21tYW5kID0gc3FsX3Njcmlw dFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKIAogCUFzc2VydChjb21tYW5k LT50eXBlID09IFNRTF9DT01NQU5EKTsKLQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJjbGllbnQgJWQg YWJvcnRlZCBpbiBjb21tYW5kICVkIChTUUwpIG9mIHNjcmlwdCAlZDsgJXNcbiIsCi0JCQlzdC0+ aWQsIHN0LT5jb21tYW5kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCXBnYmVuY2hfZXJyb3Io TE9HX1BHQkVOQ0gsCisJCQkJICAiY2xpZW50ICVkIGFib3J0ZWQgaW4gY29tbWFuZCAlZCAoU1FM KSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAorCQkJCSAgc3QtPmlkLCBzdC0+Y29tbWFuZCwgc3QtPnVz ZV9maWxlLCBtZXNzYWdlKTsKIH0KIAogLyogcmV0dXJuIGEgc2NyaXB0IG51bWJlciB3aXRoIGEg d2VpZ2h0ZWQgY2hvaWNlLiAqLwpAQCAtMjkxMSw4ICsyOTMyLDcgQEAgc2VuZENvbW1hbmQoQ1N0 YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAkJc3FsID0gcGdfc3RyZHVwKGNvbW1hbmQtPmFy Z3ZbMF0pOwogCQlzcWwgPSBhc3NpZ25WYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsIHNxbCk7CiAK LQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKLQkJCWZwcmludGYoc3RkZXJyLCAiY2xp ZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3FsKTsKKwkJcGdiZW5jaF9lcnJvcihERUJV RywgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRR dWVyeShzdC0+Y29uLCBzcWwpOwogCQlmcmVlKHNxbCk7CiAJfQpAQCAtMjkyMyw4ICsyOTQzLDcg QEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIAogCQlnZXRRdWVy eVBhcmFtcygmc3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAotCQlpZiAoZGVidWdf bGV2ZWwgPj0gREVCVUdfQUxMKQotCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGlu ZyAlc1xuIiwgc3QtPmlkLCBzcWwpOworCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiY2xpZW50ICVk IHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3FsKTsKIAkJciA9IFBRc2VuZFF1ZXJ5UGFyYW1zKHN0 LT5jb24sIHNxbCwgY29tbWFuZC0+YXJnYyAtIDEsCiAJCQkJCQkJICBOVUxMLCBwYXJhbXMsIE5V TEwsIE5VTEwsIDApOwogCX0KQEAgLTI5NDksNyArMjk2OCw3IEBAIHNlbmRDb21tYW5kKENTdGF0 ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCQkJcmVzID0gUFFwcmVwYXJlKHN0LT5jb24sIG5h bWUsCiAJCQkJCQkJCWNvbW1hbmRzW2pdLT5hcmd2WzBdLCBjb21tYW5kc1tqXS0+YXJnYyAtIDEs IE5VTEwpOwogCQkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0sp Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisJ CQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICIlcyIsIFBRZXJyb3JNZXNzYWdlKHN0LT5j b24pKTsKIAkJCQlQUWNsZWFyKHJlcyk7CiAJCQl9CiAJCQlzdC0+cHJlcGFyZWRbc3QtPnVzZV9m aWxlXSA9IHRydWU7CkBAIC0yOTU4LDggKzI5NzcsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0 LCBDb21tYW5kICpjb21tYW5kKQogCQlnZXRRdWVyeVBhcmFtcygmc3QtPnZhcmlhYmxlcywgY29t bWFuZCwgcGFyYW1zKTsKIAkJcHJlcGFyZWRTdGF0ZW1lbnROYW1lKG5hbWUsIHN0LT51c2VfZmls ZSwgc3QtPmNvbW1hbmQpOwogCi0JCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCi0JCQlm cHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIG5hbWUpOwor CQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiY2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwg bmFtZSk7CiAJCXIgPSBQUXNlbmRRdWVyeVByZXBhcmVkKHN0LT5jb24sIG5hbWUsIGNvbW1hbmQt PmFyZ2MgLSAxLAogCQkJCQkJCQlwYXJhbXMsIE5VTEwsIE5VTEwsIDApOwogCX0KQEAgLTI5Njgs OSArMjk4Niw4IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAK IAlpZiAociA9PSAwKQogCXsKLQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKLQkJCWZw cmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGNvdWxkIG5vdCBzZW5kICVzXG4iLAotCQkJCQlzdC0+ aWQsIGNvbW1hbmQtPmFyZ3ZbMF0pOworCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiY2xpZW50ICVk IGNvdWxkIG5vdCBzZW5kICVzXG4iLAorCQkJCQkgIHN0LT5pZCwgY29tbWFuZC0+YXJndlswXSk7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJZWxzZQpAQCAtMjk4NywxNCArMzAwNCwxMiBAQCBzZW5k Um9sbGJhY2soQ1N0YXRlICpzdCkKIAogCWlmIChxdWVyeW1vZGUgPT0gUVVFUllfU0lNUExFKQog CXsKLQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0FMTCkKLQkJCWZwcmludGYoc3RkZXJyLCAi Y2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgcm9sbGJhY2tfY21kKTsKKwkJcGdiZW5j aF9lcnJvcihERUJVRywgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHJvbGxiYWNr X2NtZCk7CiAJCXIgPSBQUXNlbmRRdWVyeShzdC0+Y29uLCByb2xsYmFja19jbWQpOwogCX0KIAll bHNlIGlmIChxdWVyeW1vZGUgPT0gUVVFUllfRVhURU5ERUQpCiAJewotCQlpZiAoZGVidWdfbGV2 ZWwgPj0gREVCVUdfQUxMKQotCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAl c1xuIiwgc3QtPmlkLCByb2xsYmFja19jbWQpOworCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiY2xp ZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgcm9sbGJhY2tfY21kKTsKIAkJciA9IFBRc2Vu ZFF1ZXJ5UGFyYW1zKHN0LT5jb24sIHJvbGxiYWNrX2NtZCwgMCwKIAkJCQkJCQkgIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIDApOwogCX0KQEAgLTMwMDYsMTMgKzMwMjEsMTIgQEAgc2VuZFJvbGxi YWNrKENTdGF0ZSAqc3QpCiAKIAkJCXJlcyA9IFBRcHJlcGFyZShzdC0+Y29uLCBwcmVwYXJlZF9u YW1lLCByb2xsYmFja19jbWQsIDAsIE5VTEwpOwogCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfQ09NTUFORF9PSykKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1l c3NhZ2Uoc3QtPmNvbikpOworCQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICIlcyIsIFBR ZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKIAkJCVBRY2xlYXIocmVzKTsKIAkJCXN0LT5yb2xsYmFj a19wcmVwYXJlZCA9IHRydWU7CiAJCX0KIAotCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxM KQotCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgc2VuZGluZyAlc1xuIiwgc3QtPmlkLCBw cmVwYXJlZF9uYW1lKTsKKwkJcGdiZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCBzZW5kaW5n ICVzXG4iLCBzdC0+aWQsIHByZXBhcmVkX25hbWUpOwogCQlyID0gUFFzZW5kUXVlcnlQcmVwYXJl ZChzdC0+Y29uLCBwcmVwYXJlZF9uYW1lLCAwLAogCQkJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCAw KTsKIAl9CkBAIC0zMDIxLDkgKzMwMzUsOCBAQCBzZW5kUm9sbGJhY2soQ1N0YXRlICpzdCkKIAog CWlmIChyID09IDApCiAJewotCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQotCQkJZnBy aW50ZihzdGRlcnIsICJjbGllbnQgJWQgY291bGQgbm90IHNlbmQgJXNcbiIsCi0JCQkJCXN0LT5p ZCwgcm9sbGJhY2tfY21kKTsKKwkJcGdiZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCBjb3Vs ZCBub3Qgc2VuZCAlc1xuIiwKKwkJCQkJICBzdC0+aWQsIHJvbGxiYWNrX2NtZCk7CiAJCXJldHVy biBmYWxzZTsKIAl9CiAJZWxzZQpAQCAtMzA0NCw5ICszMDU3LDggQEAgZXZhbHVhdGVTbGVlcChW YXJpYWJsZXMgKnZhcmlhYmxlcywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQog CXsKIAkJaWYgKCh2YXIgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkgPT0g TlVMTCkKIAkJewotCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0VSUk9SUykKLQkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQkJYXJn dlswXSwgYXJndlsxXSk7CisJCQlwZ2JlbmNoX2Vycm9yKExPRywgIiVzOiB1bmRlZmluZWQgdmFy aWFibGUgXCIlc1wiXG4iLAorCQkJCQkJICBhcmd2WzBdLCBhcmd2WzFdKTsKIAkJCXJldHVybiBm YWxzZTsKIAkJfQogCQl1c2VjID0gYXRvaSh2YXIpOwpAQCAtMzIyMCw3ICszMjMyLDggQEAgZ2V0 VHJhbnNhY3Rpb25TdGF0dXMoUEdjb25uICpjb24sIGJvb2wgKmluX3R4X2Jsb2NrKQogCQkJLyog UFFUUkFOU19VTktOT1dOIGlzIGV4cGVjdGVkIGdpdmVuIGEgYnJva2VuIGNvbm5lY3Rpb24gKi8K IAkJCWlmIChQUXN0YXR1cyhjb24pID09IENPTk5FQ1RJT05fQkFEKQogCQkJewkJLyogdGhlcmUn cyBzb21ldGhpbmcgd3JvbmcgKi8KLQkJCQlmcHJpbnRmKHN0ZGVyciwgInBlcmhhcHMgdGhlIGJh Y2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nXG4iKTsKKwkJCQlwZ2JlbmNoX2Vycm9yKExPR19Q R0JFTkNILAorCQkJCQkJCSAgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNz aW5nXG4iKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCWNhc2UgUFFUUkFOU19BQ1RJVkU6 CkBAIC0zMjI5LDcgKzMyNDIsOCBAQCBnZXRUcmFuc2FjdGlvblN0YXR1cyhQR2Nvbm4gKmNvbiwg Ym9vbCAqaW5fdHhfYmxvY2spCiAJCQkgKiBXZSBjYW5ub3QgZmluZCBvdXQgd2hldGhlciB3ZSBh cmUgaW4gYSB0cmFuc2FjdGlvbiBibG9jayBvciBub3QuCiAJCQkgKiBJbnRlcm5hbCBlcnJvciB3 aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIuCiAJCQkgKi8KLQkJCWZwcmludGYoc3RkZXJyLCAidW5l eHBlY3RlZCB0cmFuc2FjdGlvbiBzdGF0dXMgJWRcbiIsIHR4X3N0YXR1cyk7CisJCQlwZ2JlbmNo X2Vycm9yKExPR19QR0JFTkNILCAidW5leHBlY3RlZCB0cmFuc2FjdGlvbiBzdGF0dXMgJWRcbiIs CisJCQkJCQkgIHR4X3N0YXR1cyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0zMjk1LDkg KzMzMDksOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAKIAkJCQlzdC0+dXNlX2ZpbGUgPSBjaG9vc2VTY3JpcHQodGhyZWFkKTsKIAotCQkJ CWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiY2xp ZW50ICVkIGV4ZWN1dGluZyBzY3JpcHQgXCIlc1wiXG4iLAotCQkJCQkJCXN0LT5pZCwgc3FsX3Nj cmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOworCQkJCXBnYmVuY2hfZXJyb3IoREVCVUcsICJjbGll bnQgJWQgZXhlY3V0aW5nIHNjcmlwdCBcIiVzXCJcbiIsCisJCQkJCQkJICBzdC0+aWQsIHNxbF9z Y3JpcHRbc3QtPnVzZV9maWxlXS5kZXNjKTsKIAogCQkJCWlmICh0aHJvdHRsZV9kZWxheSA+IDAp CiAJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9TVEFSVF9USFJPVFRMRTsKQEAgLTMzNzQsOSArMzM4 Nyw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQl9CiAKIAkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfVEhST1RUTEU7Ci0JCQkJaWYgKGRl YnVnX2xldmVsID49IERFQlVHX0FMTCkKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQg dGhyb3R0bGluZyAiIElOVDY0X0ZPUk1BVCAiIHVzXG4iLAotCQkJCQkJCXN0LT5pZCwgd2FpdCk7 CisJCQkJcGdiZW5jaF9lcnJvcihERUJVRywKKwkJCQkJCQkgICJjbGllbnQgJWQgdGhyb3R0bGlu ZyAiIElOVDY0X0ZPUk1BVCAiIHVzXG4iLAorCQkJCQkJCSAgc3QtPmlkLCB3YWl0KTsKIAkJCQli cmVhazsKIAogCQkJCS8qCkBAIC0zNDA4LDggKzM0MjEsOSBAQCBkb0N1c3RvbShUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCXN0YXJ0ID0gbm93OwogCQkJ CQlpZiAoKHN0LT5jb24gPSBkb0Nvbm5lY3QoKSkgPT0gTlVMTCkKIAkJCQkJewotCQkJCQkJZnBy aW50ZihzdGRlcnIsICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSBlc3RhYmxpc2hpbmcgY29ubmVj dGlvblxuIiwKLQkJCQkJCQkJc3QtPmlkKTsKKwkJCQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVO Q0gsCisJCQkJCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSBlc3RhYmxpc2hpbmcgY29u bmVjdGlvblxuIiwKKwkJCQkJCQkJCSAgc3QtPmlkKTsKIAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9BQk9SVEVEOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KQEAgLTM0OTYsMTIgKzM1MTAsMTcgQEAg ZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJ CQkJCQlpOwogCQkJCQljaGFyCSAgKiphcmd2ID0gY29tbWFuZC0+YXJndjsKIAotCQkJCQlpZiAo ZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQorCQkJCQkvKgorCQkJCQkgKiBUaGUgdmFyaWFibGUg bmFtZSBjYW4gYmUgcXVpdGUgbGFyZ2Ugc28gZG8gbm90IHVzZSBhCisJCQkJCSAqIHN0YXRpYyBi dWZmZXIuCisJCQkJCSAqLworCQkJCQlpZiAoREVCVUcgPj0gbG9nX2xldmVsKQogCQkJCQl7Ci0J CQkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBleGVjdXRpbmcgXFwlcyIsIHN0LT5pZCwg YXJndlswXSk7CisJCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiY2xpZW50ICVkIGV4ZWN1dGlu ZyBcXCVzIiwKKwkJCQkJCQkJCSAgc3QtPmlkLCBhcmd2WzBdKTsKIAkJCQkJCWZvciAoaSA9IDE7 IGkgPCBhcmdjOyBpKyspCi0JCQkJCQkJZnByaW50ZihzdGRlcnIsICIgJXMiLCBhcmd2W2ldKTsK LQkJCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVH LCAiICVzIiwgYXJndltpXSk7CisJCQkJCQlwZ2JlbmNoX2Vycm9yKERFQlVHLCAiXG4iKTsKIAkJ CQkJfQogCiAJCQkJCWlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfU0xFRVApCkBAIC0zNTE3LDkg KzM1MzYsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAKIAkJCQkJCWlmICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywg YXJndiwgJnVzZWMpKQogCQkJCQkJewotCQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19F UlJPUlMpCi0JCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzbGVlcCIsCi0JCQkJCQkJCQkJCSAg ImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIik7CisJCQkJCQkJY29tbWFuZEZhaWxl ZChzdCwgInNsZWVwIiwKKwkJCQkJCQkJCQkgICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZh aWxlZCIpOwogCQkJCQkJCXN0LT5lc3RhdHVzID0gRVNUQVRVU19NRVRBX0NPTU1BTkRfRVJST1I7 CiAJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VSUk9SOwogCQkJCQkJCWJyZWFrOwpAQCAtMzU1 Miw5ICszNTcwLDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRz RGF0YSAqYWdnKQogCiAJCQkJCQlpZiAoIWV2YWx1YXRlRXhwcih0aHJlYWQsIHN0LCBleHByLCAm cmVzdWx0KSkKIAkJCQkJCXsKLQkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JT KQotCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCBhcmd2WzBdLAotCQkJCQkJCQkJCQkgICJldmFs dWF0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKKwkJCQkJCQljb21tYW5kRmFpbGVkKHN0 LCBhcmd2WzBdLAorCQkJCQkJCQkJCSAgImV2YWx1YXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxl ZCIpOwogCQkJCQkJCXN0LT5lc3RhdHVzID0gRVNUQVRVU19NRVRBX0NPTU1BTkRfRVJST1I7CiAJ CQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VSUk9SOwogCQkJCQkJCWJyZWFrOwpAQCAtMzU2NSw5 ICszNTgyLDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0 YSAqYWdnKQogCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3QtPnZhcmlhYmxlcywgYXJn dlswXSwKIAkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3VsdCkpCiAJCQkJCQkJewotCQkJCQkJ CQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJCQkJCQkJY29tbWFuZEZhaWxl ZChzdCwgInNldCIsCi0JCQkJCQkJCQkJCQkgICJhc3NpZ25tZW50IG9mIG1ldGEtY29tbWFuZCBm YWlsZWQiKTsKKwkJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNldCIsCisJCQkJCQkJCQkJCSAg ImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIpOwogCQkJCQkJCQlzdC0+ZXN0YXR1 cyA9IEVTVEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SOwogCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RB VEVfRVJST1I7CiAJCQkJCQkJCWJyZWFrOwpAQCAtMzYzMCw5ICszNjQ2LDggQEAgZG9DdXN0b20o VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJfQogCQkJ CQkJZWxzZSBpZiAoIXJldCkJLyogb24gZXJyb3IgKi8KIAkJCQkJCXsKLQkJCQkJCQlpZiAoZGVi dWdfbGV2ZWwgPj0gREVCVUdfRVJST1JTKQotCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2V0 c2hlbGwiLAotCQkJCQkJCQkJCQkgICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIp OworCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJzZXRzaGVsbCIsCisJCQkJCQkJCQkJICAiZXhl Y3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKIAkJCQkJCQlzdC0+ZXN0YXR1cyA9IEVT VEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SOwogCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FUlJP UjsKIAkJCQkJCQlicmVhazsKQEAgLTM2NTQsOSArMzY2OSw4IEBAIGRvQ3VzdG9tKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJCX0KIAkJCQkJCWVsc2Ug aWYgKCFyZXQpCS8qIG9uIGVycm9yICovCiAJCQkJCQl7Ci0JCQkJCQkJaWYgKGRlYnVnX2xldmVs ID49IERFQlVHX0VSUk9SUykKLQkJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNoZWxsIiwKLQkJ CQkJCQkJCQkJICAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKKwkJCQkJCQlj b21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLAorCQkJCQkJCQkJCSAgImV4ZWN1dGlvbiBvZiBtZXRh LWNvbW1hbmQgZmFpbGVkIik7CiAJCQkJCQkJc3QtPmVzdGF0dXMgPSBFU1RBVFVTX01FVEFfQ09N TUFORF9FUlJPUjsKIAkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRVJST1I7CiAJCQkJCQkJYnJl YWs7CkBAIC0zNzc1LDggKzM3ODksNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9XQUlUX1JFU1VM VDoKIAkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5j b21tYW5kXTsKLQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQotCQkJCQlmcHJpbnRm KHN0ZGVyciwgImNsaWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CisJCQkJcGdiZW5jaF9l cnJvcihERUJVRywgImNsaWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CiAJCQkJaWYgKCFQ UWNvbnN1bWVJbnB1dChzdC0+Y29uKSkKIAkJCQl7CQkJCS8qIHRoZXJlJ3Mgc29tZXRoaW5nIHdy b25nICovCiAJCQkJCWNsaWVudEFib3J0ZWQoc3QsCkBAIC0zODA2LDggKzM4MTksNyBAQCBkb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCWNh c2UgUEdSRVNfRkFUQUxfRVJST1I6CiAJCQkJCQlzdC0+ZXN0YXR1cyA9IGdldFNRTEVycm9yU3Rh dHVzKAogCQkJCQkJCVBRcmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdfU1FMU1RBVEUpKTsK LQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCi0JCQkJCQkJY29tbWFuZEZh aWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKKwkJCQkJCWNvbW1hbmRG YWlsZWQoc3QsICJTUUwiLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CiAJCQkJCQlQUWNsZWFy KHJlcyk7CiAJCQkJCQlkaXNjYXJkX3Jlc3BvbnNlKHN0KTsKIAkJCQkJCXN0LT5zdGF0ZSA9IENT VEFURV9FUlJPUjsKQEAgLTM4MjQsMTMgKzM4MzYsMTIgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIFdhaXQgZm9yIHRoZSByb2xs YmFjayBjb21tYW5kIHRvIGNvbXBsZXRlCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9XQUlUX1JP TExCQUNLX1JFU1VMVDoKLQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfQUxMKQotCQkJCQlm cHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CisJCQkJcGdi ZW5jaF9lcnJvcihERUJVRywgImNsaWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CiAJCQkJ aWYgKCFQUWNvbnN1bWVJbnB1dChzdC0+Y29uKSkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LAotCQkJCQkJCSJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIHRyYW5z YWN0aW9uIGFmdGVyIGFuIGVycm9yOyBwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hpbGUgcHJv Y2Vzc2luZ1xuIiwKLQkJCQkJCQlzdC0+aWQpOworCQkJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JF TkNILAorCQkJCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSByb2xsaW5nIGJhY2sgdGhl IHRyYW5zYWN0aW9uIGFmdGVyIGFuIGVycm9yOyBwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hp bGUgcHJvY2Vzc2luZ1xuIiwKKwkJCQkJCQkJICBzdC0+aWQpOwogCQkJCQlzdC0+c3RhdGUgPSBD U1RBVEVfQUJPUlRFRDsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMzg1NCw5ICszODY1LDkgQEAg ZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJ CQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1 bHQ6Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJImNsaWVudCAlZCBhYm9ydGVkIHdo aWxlIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgYW4gZXJyb3I7ICVzXG4iLAot CQkJCQkJCQlzdC0+aWQsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKKwkJCQkJCXBnYmVuY2hf ZXJyb3IoTE9HX1BHQkVOQ0gsCisJCQkJCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSBy b2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uIGFmdGVyIGFuIGVycm9yOyAlc1xuIiwKKwkJCQkJ CQkJCSAgc3QtPmlkLCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CiAJCQkJCQlQUWNsZWFyKHJl cyk7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJCWJyZWFrOwpAQCAt MzkzMCw5ICszOTQxLDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0 YXRzRGF0YSAqYWdnKQogCQkJCQkJICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmdW5jdGlvbiBn ZXRUcmFuc2FjdGlvblN0YXR1cwogCQkJCQkJICogaGFzIGFscmVhZHkgcHJpbnRlZCBhIG1vcmUg ZGV0YWlsZWQgZXJyb3IgbWVzc2FnZS4KIAkJCQkJCSAqLwotCQkJCQkJZnByaW50ZihzdGRlcnIs Ci0JCQkJCQkJCSJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSByZWNlaXZpbmcgdGhlIHRyYW5zYWN0 aW9uIHN0YXR1c1xuIiwKLQkJCQkJCQkJc3QtPmlkKTsKKwkJCQkJCXBnYmVuY2hfZXJyb3IoTE9H X1BHQkVOQ0gsCisJCQkJCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSByZWNlaXZpbmcg dGhlIHRyYW5zYWN0aW9uIHN0YXR1c1xuIiwKKwkJCQkJCQkJCSAgc3QtPmlkKTsKIAkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KQEAgLTM5NDIs OSArMzk1Myw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0Rh dGEgKmFnZykKIAkJCQkJCS8qIFRyeSB0byByb2xsYmFjayBhIChmYWlsZWQpIHRyYW5zYWN0aW9u IGJsb2NrLiAqLwogCQkJCQkJaWYgKCFzZW5kUm9sbGJhY2soc3QpKQogCQkJCQkJewotCQkJCQkJ CWZwcmludGYoc3RkZXJyLAotCQkJCQkJCQkJImNsaWVudCAlZCBhYm9ydGVkOiBmYWlsZWQgdG8g c2VuZCBzcWwgY29tbWFuZCBmb3Igcm9sbGluZyBiYWNrIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb25c biIsCi0JCQkJCQkJCQlzdC0+aWQpOworCQkJCQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gs CisJCQkJCQkJCQkJICAiY2xpZW50ICVkIGFib3J0ZWQ6IGZhaWxlZCB0byBzZW5kIHNxbCBjb21t YW5kIGZvciByb2xsaW5nIGJhY2sgdGhlIGZhaWxlZCB0cmFuc2FjdGlvblxuIiwKKwkJCQkJCQkJ CQkgIHN0LT5pZCk7CiAJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CiAJCQkJCQl9 CiAJCQkJCQllbHNlCkBAIC0zOTc1LDE4ICszOTg2LDI0IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkvKgogCQkJCSAqIEluZm9ybSB0 aGF0IHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgdGhlIGVycm9yLgogCQkJ CSAqLwotCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMpCisJCQkJaWYgKExPRyA+ PSBsb2dfbGV2ZWwpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkiY2xpZW50 ICVkIHJlcGVhdHMgdGhlIHRyYW5zYWN0aW9uIGFmdGVyIHRoZSBlcnJvciAodHJ5ICVkIiwKLQkJ CQkJCQlzdC0+aWQsIHN0LT5yZXRyaWVzICsgMSk7CisJCQkJCWNoYXIJCWJ1ZmZbNTEyXTsKKwkJ CQkJaW50CQkJYnVmZl9zaXplID0gMDsKKwogCQkJCQlpZiAobWF4X3RyaWVzKQotCQkJCQkJZnBy aW50ZihzdGRlcnIsICIvJWQiLCBtYXhfdHJpZXMpOworCQkJCQkJYnVmZl9zaXplICs9IHNucHJp bnRmKGJ1ZmYgKyBidWZmX3NpemUsCisJCQkJCQkJCQkJCSBzaXplb2YoYnVmZikgLSBidWZmX3Np emUsCisJCQkJCQkJCQkJCSAiLyVkIiwgbWF4X3RyaWVzKTsKIAkJCQkJaWYgKGxhdGVuY3lfbGlt aXQpCi0JCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJIiwgJS4zZiUlIG9mIHRoZSBtYXhp bXVtIHRpbWUgb2YgdHJpZXMgd2FzIHVzZWQiLAotCQkJCQkJCQlnZXRMYXRlbmN5VXNlZChzdCwg Jm5vdykpOwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQkJCQkJYnVmZl9zaXplICs9 IHNucHJpbnRmKGJ1ZmYgKyBidWZmX3NpemUsCisJCQkJCQkJCQkJCSBzaXplb2YoYnVmZikgLSBi dWZmX3NpemUsCisJCQkJCQkJCQkJCSAiLCAlLjNmJSUgb2YgdGhlIG1heGltdW0gdGltZSBvZiB0 cmllcyB3YXMgdXNlZCIsCisJCQkJCQkJCQkJCSBnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOwor CQkJCQlwZ2JlbmNoX2Vycm9yKExPRywKKwkJCQkJCQkJICAiY2xpZW50ICVkIHJlcGVhdHMgdGhl IHRyYW5zYWN0aW9uIGFmdGVyIHRoZSBlcnJvciAodHJ5ICVkJXMpXG4iLAorCQkJCQkJCQkgIHN0 LT5pZCwgc3QtPnJldHJpZXMgKyAxLAorCQkJCQkJCQkgIGJ1ZmZfc2l6ZSA/IGJ1ZmYgOiAiIik7 CiAJCQkJfQogCiAJCQkJLyoKQEAgLTQwMTYsMTggKzQwMzMsMjQgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIElmIHRoaXMgaXMg YSBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmUsIGluZm9ybSB0aGF0CiAJCQkJICog dGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsIG5vdCBiZSByZXRyaWVkLgogCQkJCSAqLwotCQkJ CWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19FUlJPUlMgJiYgY2FuUmV0cnlFcnJvcihzdC0+ZXN0 YXR1cykpCisJCQkJaWYgKExPRyA+PSBsb2dfbGV2ZWwgJiYgY2FuUmV0cnlFcnJvcihzdC0+ZXN0 YXR1cykpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkiY2xpZW50ICVkIGVu ZHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAodHJ5ICVkIiwKLQkJCQkJCQlzdC0+aWQsIHN0LT5y ZXRyaWVzICsgMSk7CisJCQkJCWNoYXIJCWJ1ZmZbNTEyXTsKKwkJCQkJaW50CQkJYnVmZl9zaXpl ID0gMDsKKwogCQkJCQlpZiAobWF4X3RyaWVzKQotCQkJCQkJZnByaW50ZihzdGRlcnIsICIvJWQi LCBtYXhfdHJpZXMpOworCQkJCQkJYnVmZl9zaXplICs9IHNucHJpbnRmKGJ1ZmYgKyBidWZmX3Np emUsCisJCQkJCQkJCQkJCSBzaXplb2YoYnVmZikgLSBidWZmX3NpemUsCisJCQkJCQkJCQkJCSAi LyVkIiwgbWF4X3RyaWVzKTsKIAkJCQkJaWYgKGxhdGVuY3lfbGltaXQpCi0JCQkJCQlmcHJpbnRm KHN0ZGVyciwKLQkJCQkJCQkJIiwgJS4zZiUlIG9mIHRoZSBtYXhpbXVtIHRpbWUgb2YgdHJpZXMg d2FzIHVzZWQiLAotCQkJCQkJCQlnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOwotCQkJCQlmcHJp bnRmKHN0ZGVyciwgIilcbiIpOworCQkJCQkJYnVmZl9zaXplICs9IHNucHJpbnRmKGJ1ZmYgKyBi dWZmX3NpemUsCisJCQkJCQkJCQkJCSBzaXplb2YoYnVmZikgLSBidWZmX3NpemUsCisJCQkJCQkJ CQkJCSAiLCAlLjNmJSUgb2YgdGhlIG1heGltdW0gdGltZSBvZiB0cmllcyB3YXMgdXNlZCIsCisJ CQkJCQkJCQkJCSBnZXRMYXRlbmN5VXNlZChzdCwgJm5vdykpOworCQkJCQlwZ2JlbmNoX2Vycm9y KExPRywKKwkJCQkJCQkJICAiY2xpZW50ICVkIGVuZHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAo dHJ5ICVkJXMpXG4iLAorCQkJCQkJCQkgIHN0LT5pZCwgc3QtPnJldHJpZXMgKyAxLAorCQkJCQkJ CQkgIGJ1ZmZfc2l6ZSA/IGJ1ZmYgOiAiIik7CiAJCQkJfQogCiAJCQkJLyoKQEAgLTQwNTIsMTAg KzQwNzUsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAKIAkJCQkJLyogY29uZGl0aW9uYWwgc3RhY2sgbXVzdCBiZSBlbXB0eSAqLwogCQkJ CQlpZiAoIWNvbmRpdGlvbmFsX3N0YWNrX2VtcHR5KHN0LT5jc3RhY2spKQotCQkJCQl7Ci0JCQkJ CQlmcHJpbnRmKHN0ZGVyciwgImVuZCBvZiBzY3JpcHQgcmVhY2hlZCB3aXRoaW4gYSBjb25kaXRp b25hbCwgbWlzc2luZyBcXGVuZGlmXG4iKTsKLQkJCQkJCWV4aXQoMSk7Ci0JCQkJCX0KKwkJCQkJ CXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCQkJCQkgICJlbmQgb2Ygc2NyaXB0IHJlYWNoZWQg d2l0aGluIGEgY29uZGl0aW9uYWwsIG1pc3NpbmcgXFxlbmRpZlxuIik7CiAKIAkJCQkJLyoKIAkJ CQkJICogV2UgbXVzdCBjb21wbGV0ZSBhbGwgdGhlIHRyYW5zYWN0aW9uIGJsb2NrcyB0aGF0IHdl cmUKQEAgLTQwNjgsMTcgKzQwODksMTcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBm dW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YXR1cwogCQkJCQkJICogaGFzIGFscmVhZHkgcHJpbnRl ZCBhIG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZS4KIAkJCQkJCSAqLwotCQkJCQkJZnByaW50 ZihzdGRlcnIsCi0JCQkJCQkJCSJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSByZWNlaXZpbmcgdGhl IHRyYW5zYWN0aW9uIHN0YXR1c1xuIiwKLQkJCQkJCQkJc3QtPmlkKTsKKwkJCQkJCXBnYmVuY2hf ZXJyb3IoTE9HX1BHQkVOQ0gsCisJCQkJCQkJCQkgICJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSBy ZWNlaXZpbmcgdGhlIHRyYW5zYWN0aW9uIHN0YXR1c1xuIiwKKwkJCQkJCQkJCSAgc3QtPmlkKTsK IAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0K IAkJCQkJaWYgKGluX3R4X2Jsb2NrKQogCQkJCQl7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJ CQkJCQkJImNsaWVudCAlZCBhYm9ydGVkOiBlbmQgb2Ygc2NyaXB0IHJlYWNoZWQgd2l0aG91dCBj b21wbGV0aW5nIHRoZSBsYXN0IHRyYW5zYWN0aW9uXG4iLAotCQkJCQkJCQlzdC0+aWQpOworCQkJ CQkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwKKwkJCQkJCQkJCSAgImNsaWVudCAlZCBhYm9y dGVkOiBlbmQgb2Ygc2NyaXB0IHJlYWNoZWQgd2l0aG91dCBjb21wbGV0aW5nIHRoZSBsYXN0IHRy YW5zYWN0aW9uXG4iLAorCQkJCQkJCQkJICBzdC0+aWQpOwogCQkJCQkJc3QtPnN0YXRlID0gQ1NU QVRFX0FCT1JURUQ7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAtNDI1NSw5ICs0Mjc2LDkgQEAg ZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1 bHQ6CiAJCQkJCS8qIGludGVybmFsIGVycm9yIHdoaWNoIHNob3VsZCBuZXZlciBvY2N1ciAqLwot CQkJCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgZXJyb3Igc3RhdHVzOiAlZFxuIiwKLQkJ CQkJCQlzdC0+ZXN0YXR1cyk7Ci0JCQkJCWV4aXQoMSk7CisJCQkJCXBnYmVuY2hfZXJyb3IoRkFU QUwsICJ1bmV4cGVjdGVkIGVycm9yIHN0YXR1czogJWRcbiIsCisJCQkJCQkJCSAgc3QtPmVzdGF0 dXMpOworCQkJCQlicmVhazsKIAkJCX0KIAkJfQogCQllbHNlCkBAIC00MzM1LDcgKzQzNTYsNyBA QCBkaXNjb25uZWN0X2FsbChDU3RhdGUgKnN0YXRlLCBpbnQgbGVuZ3RoKQogc3RhdGljIHZvaWQK IGluaXREcm9wVGFibGVzKFBHY29ubiAqY29uKQogewotCWZwcmludGYoc3RkZXJyLCAiZHJvcHBp bmcgb2xkIHRhYmxlcy4uLlxuIik7CisJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgImRyb3Bw aW5nIG9sZCB0YWJsZXMuLi5cbiIpOwogCiAJLyoKIAkgKiBXZSBkcm9wIGFsbCB0aGUgdGFibGVz IGluIG9uZSBjb21tYW5kLCBzbyB0aGF0IHdoZXRoZXIgdGhlcmUgYXJlCkBAIC00NDEwLDcgKzQ0 MzEsNyBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogCX07CiAJaW50CQkJaTsKIAot CWZwcmludGYoc3RkZXJyLCAiY3JlYXRpbmcgdGFibGVzLi4uXG4iKTsKKwlwZ2JlbmNoX2Vycm9y KExPR19QR0JFTkNILCAiY3JlYXRpbmcgdGFibGVzLi4uXG4iKTsKIAogCWZvciAoaSA9IDA7IGkg PCBsZW5ndGhvZihERExzKTsgaSsrKQogCXsKQEAgLTQ0NjMsNyArNDQ4NCw3IEBAIGluaXRHZW5l cmF0ZURhdGEoUEdjb25uICpjb24pCiAJCQkJcmVtYWluaW5nX3NlYzsKIAlpbnQJCQlsb2dfaW50 ZXJ2YWwgPSAxOwogCi0JZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEuLi5cbiIpOwor CXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJnZW5lcmF0aW5nIGRhdGEuLi5cbiIpOwogCiAJ LyoKIAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRo ZSBiYWNrZW5kJ3MKQEAgLTQ1MDgsMTAgKzQ1MjksNyBAQCBpbml0R2VuZXJhdGVEYXRhKFBHY29u biAqY29uKQogCSAqLwogCXJlcyA9IFBRZXhlYyhjb24sICJjb3B5IHBnYmVuY2hfYWNjb3VudHMg ZnJvbSBzdGRpbiIpOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4p Ci0JewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7Ci0JCWV4 aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAiJXMiLCBQUWVycm9yTWVzc2FnZShj b24pKTsKIAlQUWNsZWFyKHJlcyk7CiAKIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0KTsK QEAgLTQ1MjUsMTAgKzQ1NDMsNyBAQCBpbml0R2VuZXJhdGVEYXRhKFBHY29ubiAqY29uKQogCQkJ CSBJTlQ2NF9GT1JNQVQgIlx0IiBJTlQ2NF9GT1JNQVQgIlx0JWRcdFxuIiwKIAkJCQkgaiwgayAv IG5hY2NvdW50cyArIDEsIDApOwogCQlpZiAoUFFwdXRsaW5lKGNvbiwgc3FsKSkKLQkJewotCQkJ ZnByaW50ZihzdGRlcnIsICJQUXB1dGxpbmUgZmFpbGVkXG4iKTsKLQkJCWV4aXQoMSk7Ci0JCX0K KwkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsICJQUXB1dGxpbmUgZmFpbGVkXG4iKTsKIAogCQkvKgog CQkgKiBJZiB3ZSB3YW50IHRvIHN0aWNrIHdpdGggdGhlIG9yaWdpbmFsIGxvZ2dpbmcsIHByaW50 IGEgbWVzc2FnZSBlYWNoCkBAIC00NTQyLDEwICs0NTU3LDEyIEBAIGluaXRHZW5lcmF0ZURhdGEo UEdjb25uICpjb24pCiAJCQllbGFwc2VkX3NlYyA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRShkaWZm KTsKIAkJCXJlbWFpbmluZ19zZWMgPSAoKGRvdWJsZSkgc2NhbGUgKiBuYWNjb3VudHMgLSBqKSAq IGVsYXBzZWRfc2VjIC8gajsKIAotCQkJZnByaW50ZihzdGRlcnIsIElOVDY0X0ZPUk1BVCAiIG9m ICIgSU5UNjRfRk9STUFUICIgdHVwbGVzICglZCUlKSBkb25lIChlbGFwc2VkICUuMmYgcywgcmVt YWluaW5nICUuMmYgcylcbiIsCi0JCQkJCWosIChpbnQ2NCkgbmFjY291bnRzICogc2NhbGUsCi0J CQkJCShpbnQpICgoKGludDY0KSBqICogMTAwKSAvIChuYWNjb3VudHMgKiAoaW50NjQpIHNjYWxl KSksCi0JCQkJCWVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjKTsKKwkJCXBnYmVuY2hfZXJyb3Io TE9HX1BHQkVOQ0gsCisJCQkJCQkgIElOVDY0X0ZPUk1BVCAiIG9mICIgSU5UNjRfRk9STUFUICIg dHVwbGVzICglZCUlKSBkb25lIChlbGFwc2VkICUuMmYgcywgcmVtYWluaW5nICUuMmYgcylcbiIs CisJCQkJCQkgIGosIChpbnQ2NCkgbmFjY291bnRzICogc2NhbGUsCisJCQkJCQkgIChpbnQpICgo KGludDY0KSBqICogMTAwKSAvCisJCQkJCQkJCSAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkp LAorCQkJCQkJICBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CiAJCX0KIAkJLyogbGV0J3Mg bm90IGNhbGwgdGhlIHRpbWluZyBmb3IgZWFjaCByb3csIGJ1dCBvbmx5IGVhY2ggMTAwIHJvd3Mg Ki8KIAkJZWxzZSBpZiAodXNlX3F1aWV0ICYmIChqICUgMTAwID09IDApKQpAQCAtNDU1OSw5ICs0 NTc2LDEyIEBAIGluaXRHZW5lcmF0ZURhdGEoUEdjb25uICpjb24pCiAJCQkvKiBoYXZlIHdlIHJl YWNoZWQgdGhlIG5leHQgaW50ZXJ2YWwgKG9yIGVuZCk/ICovCiAJCQlpZiAoKGogPT0gc2NhbGUg KiBuYWNjb3VudHMpIHx8IChlbGFwc2VkX3NlYyA+PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9T RUNPTkRTKSkKIAkJCXsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJ TlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5p bmcgJS4yZiBzKVxuIiwKLQkJCQkJCWosIChpbnQ2NCkgbmFjY291bnRzICogc2NhbGUsCi0JCQkJ CQkoaW50KSAoKChpbnQ2NCkgaiAqIDEwMCkgLyAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkp LCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CisJCQkJcGdiZW5jaF9lcnJvcihMT0dfUEdC RU5DSCwKKwkJCQkJCQkgIElOVDY0X0ZPUk1BVCAiIG9mICIgSU5UNjRfRk9STUFUICIgdHVwbGVz ICglZCUlKSBkb25lIChlbGFwc2VkICUuMmYgcywgcmVtYWluaW5nICUuMmYgcylcbiIsCisJCQkJ CQkJICBqLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlLAorCQkJCQkJCSAgKGludCkgKCgoaW50 NjQpIGogKiAxMDApIC8KKwkJCQkJCQkJCSAobmFjY291bnRzICogKGludDY0KSBzY2FsZSkpLAor CQkJCQkJCSAgZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOwogCiAJCQkJLyogc2tpcCB0byB0 aGUgbmV4dCBpbnRlcnZhbCAqLwogCQkJCWxvZ19pbnRlcnZhbCA9IChpbnQpIGNlaWwoZWxhcHNl ZF9zZWMgLyBMT0dfU1RFUF9TRUNPTkRTKTsKQEAgLTQ1NzAsMTUgKzQ1OTAsOSBAQCBpbml0R2Vu ZXJhdGVEYXRhKFBHY29ubiAqY29uKQogCiAJfQogCWlmIChQUXB1dGxpbmUoY29uLCAiXFwuXG4i KSkKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAidmVyeSBsYXN0IFBRcHV0bGluZSBmYWlsZWRcbiIp OwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5jaF9lcnJvcihGQVRBTCwgInZlcnkgbGFzdCBQUXB1 dGxpbmUgZmFpbGVkXG4iKTsKIAlpZiAoUFFlbmRjb3B5KGNvbikpCi0JewotCQlmcHJpbnRmKHN0 ZGVyciwgIlBRZW5kY29weSBmYWlsZWRcbiIpOwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5jaF9l cnJvcihGQVRBTCwgIlBRZW5kY29weSBmYWlsZWRcbiIpOwogCiAJZXhlY3V0ZVN0YXRlbWVudChj b24sICJjb21taXQiKTsKIH0KQEAgLTQ1ODksNyArNDYwMyw3IEBAIGluaXRHZW5lcmF0ZURhdGEo UEdjb25uICpjb24pCiBzdGF0aWMgdm9pZAogaW5pdFZhY3V1bShQR2Nvbm4gKmNvbikKIHsKLQlm cHJpbnRmKHN0ZGVyciwgInZhY3V1bWluZy4uLlxuIik7CisJcGdiZW5jaF9lcnJvcihMT0dfUEdC RU5DSCwgInZhY3V1bWluZy4uLlxuIik7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0g YW5hbHl6ZSBwZ2JlbmNoX2JyYW5jaGVzIik7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1 dW0gYW5hbHl6ZSBwZ2JlbmNoX3RlbGxlcnMiKTsKIAlleGVjdXRlU3RhdGVtZW50KGNvbiwgInZh Y3V1bSBhbmFseXplIHBnYmVuY2hfYWNjb3VudHMiKTsKQEAgLTQ2MDksNyArNDYyMyw3IEBAIGlu aXRDcmVhdGVQS2V5cyhQR2Nvbm4gKmNvbikKIAl9OwogCWludAkJCWk7CiAKLQlmcHJpbnRmKHN0 ZGVyciwgImNyZWF0aW5nIHByaW1hcnkga2V5cy4uLlxuIik7CisJcGdiZW5jaF9lcnJvcihMT0df UEdCRU5DSCwgImNyZWF0aW5nIHByaW1hcnkga2V5cy4uLlxuIik7CiAJZm9yIChpID0gMDsgaSA8 IGxlbmd0aG9mKERETElOREVYZXMpOyBpKyspCiAJewogCQljaGFyCQlidWZmZXJbMjU2XTsKQEAg LTQ2NDYsNyArNDY2MCw3IEBAIGluaXRDcmVhdGVGS2V5cyhQR2Nvbm4gKmNvbikKIAl9OwogCWlu dAkJCWk7CiAKLQlmcHJpbnRmKHN0ZGVyciwgImNyZWF0aW5nIGZvcmVpZ24ga2V5cy4uLlxuIik7 CisJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgImNyZWF0aW5nIGZvcmVpZ24ga2V5cy4uLlxu Iik7CiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKERETEtFWXMpOyBpKyspCiAJewogCQlleGVj dXRlU3RhdGVtZW50KGNvbiwgRERMS0VZc1tpXSk7CkBAIC00NjY2LDIwICs0NjgwLDE1IEBAIGNo ZWNrSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiAJY29uc3QgY2hhciAq c3RlcDsKIAogCWlmIChpbml0aWFsaXplX3N0ZXBzWzBdID09ICdcMCcpCi0JewotCQlmcHJpbnRm KHN0ZGVyciwgIm5vIGluaXRpYWxpemF0aW9uIHN0ZXBzIHNwZWNpZmllZFxuIik7Ci0JCWV4aXQo MSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAibm8gaW5pdGlhbGl6YXRpb24gc3RlcHMg c3BlY2lmaWVkXG4iKTsKIAogCWZvciAoc3RlcCA9IGluaXRpYWxpemVfc3RlcHM7ICpzdGVwICE9 ICdcMCc7IHN0ZXArKykKIAl7CiAJCWlmIChzdHJjaHIoImR0Z3ZwZiAiLCAqc3RlcCkgPT0gTlVM TCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgaW5pdGlhbGl6YXRpb24g c3RlcCBcIiVjXCJcbiIsCi0JCQkJCSpzdGVwKTsKLQkJCWZwcmludGYoc3RkZXJyLCAiYWxsb3dl ZCBzdGVwcyBhcmU6IFwiZFwiLCBcInRcIiwgXCJnXCIsIFwidlwiLCBcInBcIiwgXCJmXCJcbiIp OwotCQkJZXhpdCgxKTsKLQkJfQorCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCSAgInVu cmVjb2duaXplZCBpbml0aWFsaXphdGlvbiBzdGVwIFwiJWNcIlxuIgorCQkJCQkJICAiYWxsb3dl ZCBzdGVwcyBhcmU6IFwiZFwiLCBcInRcIiwgXCJnXCIsIFwidlwiLCBcInBcIiwgXCJmXCJcbiIs CisJCQkJCQkgICpzdGVwKTsKIAl9CiB9CiAKQEAgLTQ3MjAsMTQgKzQ3MjksMTUgQEAgcnVuSW5p dFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiAJCQljYXNlICcgJzoKIAkJCQli cmVhazsJCQkvKiBpZ25vcmUgKi8KIAkJCWRlZmF1bHQ6Ci0JCQkJZnByaW50ZihzdGRlcnIsICJ1 bnJlY29nbml6ZWQgaW5pdGlhbGl6YXRpb24gc3RlcCBcIiVjXCJcbiIsCi0JCQkJCQkqc3RlcCk7 CisJCQkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwKKwkJCQkJCQkgICJ1bnJlY29nbml6ZWQg aW5pdGlhbGl6YXRpb24gc3RlcCBcIiVjXCJcbiIsCisJCQkJCQkJICAqc3RlcCk7CiAJCQkJUFFm aW5pc2goY29uKTsKIAkJCQlleGl0KDEpOwogCQl9CiAJfQogCi0JZnByaW50ZihzdGRlcnIsICJk b25lLlxuIik7CisJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgImRvbmUuXG4iKTsKIAlQUWZp bmlzaChjb24pOwogfQogCkBAIC00NzY1LDggKzQ3NzUsOSBAQCBwYXJzZVF1ZXJ5KENvbW1hbmQg KmNtZCkKIAogCQlpZiAoY21kLT5hcmdjID49IE1BWF9BUkdTKQogCQl7Ci0JCQlmcHJpbnRmKHN0 ZGVyciwgInN0YXRlbWVudCBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIChtYXhpbXVtIGlzICVkKTog JXNcbiIsCi0JCQkJCU1BWF9BUkdTIC0gMSwgY21kLT5hcmd2WzBdKTsKKwkJCXBnYmVuY2hfZXJy b3IoTE9HX1BHQkVOQ0gsCisJCQkJCQkgICJzdGF0ZW1lbnQgaGFzIHRvbyBtYW55IGFyZ3VtZW50 cyAobWF4aW11bSBpcyAlZCk6ICVzXG4iLAorCQkJCQkJICBNQVhfQVJHUyAtIDEsIGNtZC0+YXJn dlswXSk7CiAJCQlwZ19mcmVlKG5hbWUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBAIC00Nzg3 LDEzICs0Nzk4LDEzIEBAIHBhcnNlUXVlcnkoQ29tbWFuZCAqY21kKQogICogU2ltcGxlIGVycm9y LXByaW50aW5nIGZ1bmN0aW9uLCBtaWdodCBiZSBuZWVkZWQgYnkgbGV4ZXIKICAqLwogc3RhdGlj IHZvaWQKLXBnYmVuY2hfZXJyb3IoY29uc3QgY2hhciAqZm10LC4uLikKK3BnYmVuY2hfc2ltcGxl X2Vycm9yKGNvbnN0IGNoYXIgKmZtdCwuLi4pCiB7CiAJdmFfbGlzdAkJYXA7CiAKIAlmZmx1c2go c3Rkb3V0KTsKIAl2YV9zdGFydChhcCwgZm10KTsKLQl2ZnByaW50ZihzdGRlcnIsIF8oZm10KSwg YXApOworCXBnYmVuY2hfZXJyb3JfdmEoTE9HX1BHQkVOQ0gsIGZtdCwgJmFwKTsKIAl2YV9lbmQo YXApOwogfQogCkBAIC00ODE0LDI0ICs0ODI1LDI0IEBAIHN5bnRheF9lcnJvcihjb25zdCBjaGFy ICpzb3VyY2UsIGludCBsaW5lbm8sCiAJCQkgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAq Y29tbWFuZCwKIAkJCSBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKm1vcmUsIGludCBjb2x1 bW4pCiB7Ci0JZnByaW50ZihzdGRlcnIsICIlczolZDogJXMiLCBzb3VyY2UsIGxpbmVubywgbXNn KTsKKwlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiJXM6JWQ6ICVzIiwgc291cmNlLCBsaW5l bm8sIG1zZyk7CiAJaWYgKG1vcmUgIT0gTlVMTCkKLQkJZnByaW50ZihzdGRlcnIsICIgKCVzKSIs IG1vcmUpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiICglcykiLCBtb3JlKTsKIAlp ZiAoY29sdW1uID49IDAgJiYgbGluZSA9PSBOVUxMKQotCQlmcHJpbnRmKHN0ZGVyciwgIiBhdCBj b2x1bW4gJWQiLCBjb2x1bW4gKyAxKTsKKwkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgIiBh dCBjb2x1bW4gJWQiLCBjb2x1bW4gKyAxKTsKIAlpZiAoY29tbWFuZCAhPSBOVUxMKQotCQlmcHJp bnRmKHN0ZGVyciwgIiBpbiBjb21tYW5kIFwiJXNcIiIsIGNvbW1hbmQpOwotCWZwcmludGYoc3Rk ZXJyLCAiXG4iKTsKKwkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgIiBpbiBjb21tYW5kIFwi JXNcIiIsIGNvbW1hbmQpOworCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJcbiIpOwogCWlm IChsaW5lICE9IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBsaW5lKTsKKwkJ cGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgIiVzXG4iLCBsaW5lKTsKIAkJaWYgKGNvbHVtbiA+ PSAwKQogCQl7CiAJCQlpbnQJCQlpOwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgY29sdW1uOyBpKysp Ci0JCQkJZnByaW50ZihzdGRlcnIsICIgIik7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIl4gZXJyb3Ig Zm91bmQgaGVyZVxuIik7CisJCQkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgIiAiKTsKKwkJ CXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJeIGVycm9yIGZvdW5kIGhlcmVcbiIpOwogCQl9 CiAJfQogCWV4aXQoMSk7CkBAIC01MDgzLDEwICs1MDk0LDggQEAgcHJvY2Vzc19iYWNrc2xhc2hf Y29tbWFuZChQc3FsU2NhblN0YXRlIHNzdGF0ZSwgY29uc3QgY2hhciAqc291cmNlKQogc3RhdGlj IHZvaWQKIENvbmRpdGlvbkVycm9yKGNvbnN0IGNoYXIgKmRlc2MsIGludCBjbWRuLCBjb25zdCBj aGFyICptc2cpCiB7Ci0JZnByaW50ZihzdGRlcnIsCi0JCQkiY29uZGl0aW9uIGVycm9yIGluIHNj cmlwdCBcIiVzXCIgY29tbWFuZCAlZDogJXNcbiIsCi0JCQlkZXNjLCBjbWRuLCBtc2cpOwotCWV4 aXQoMSk7CisJcGdiZW5jaF9lcnJvcihGQVRBTCwgImNvbmRpdGlvbiBlcnJvciBpbiBzY3JpcHQg XCIlc1wiIGNvbW1hbmQgJWQ6ICVzXG4iLAorCQkJCSAgZGVzYywgY21kbiwgbXNnKTsKIH0KIAog LyoKQEAgLTUyODQsMjAgKzUyOTMsMTQgQEAgcHJvY2Vzc19maWxlKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBpbnQgd2VpZ2h0KQogCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJZmQg PSBzdGRpbjsKIAllbHNlIGlmICgoZmQgPSBmb3BlbihmaWxlbmFtZSwgInIiKSkgPT0gTlVMTCkK LQl7Ci0JCWZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzXG4i LAotCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotCQlleGl0KDEpOwotCX0KKwkJcGdi ZW5jaF9lcnJvcihGQVRBTCwgImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJ CQkJICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAogCWJ1ZiA9IHJlYWRfZmlsZV9jb250 ZW50cyhmZCk7CiAKIAlpZiAoZmVycm9yKGZkKSkKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAiY291 bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVzXG4iLAotCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihl cnJubykpOwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5jaF9lcnJvcihGQVRBTCwgImNvdWxkIG5v dCByZWFkIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJy bm8pKTsKIAogCWlmIChmZCAhPSBzdGRpbikKIAkJZmNsb3NlKGZkKTsKQEAgLTUzMjAsMTAgKzUz MjMsMTAgQEAgbGlzdEF2YWlsYWJsZVNjcmlwdHModm9pZCkKIHsKIAlpbnQJCQlpOwogCi0JZnBy aW50ZihzdGRlcnIsICJBdmFpbGFibGUgYnVpbHRpbiBzY3JpcHRzOlxuIik7CisJcGdiZW5jaF9l cnJvcihMT0dfUEdCRU5DSCwgIkF2YWlsYWJsZSBidWlsdGluIHNjcmlwdHM6XG4iKTsKIAlmb3Ig KGkgPSAwOyBpIDwgbGVuZ3Rob2YoYnVpbHRpbl9zY3JpcHQpOyBpKyspCi0JCWZwcmludGYoc3Rk ZXJyLCAiXHQlc1xuIiwgYnVpbHRpbl9zY3JpcHRbaV0ubmFtZSk7Ci0JZnByaW50ZihzdGRlcnIs ICJcbiIpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiXHQlc1xuIiwgYnVpbHRpbl9z Y3JpcHRbaV0ubmFtZSk7CisJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwgIlxuIik7CiB9CiAK IC8qIHJldHVybiBidWlsdGluIHNjcmlwdCAibmFtZSIgaWYgdW5hbWJpZ3VvdXMsIGZhaWxzIGlm IG5vdCBmb3VuZCAqLwpAQCAtNTM1MCwxMCArNTM1MywxMiBAQCBmaW5kQnVpbHRpbihjb25zdCBj aGFyICpuYW1lKQogCiAJLyogZXJyb3IgY2FzZXMgKi8KIAlpZiAoZm91bmQgPT0gMCkKLQkJZnBy aW50ZihzdGRlcnIsICJubyBidWlsdGluIHNjcmlwdCBmb3VuZCBmb3IgbmFtZSBcIiVzXCJcbiIs IG5hbWUpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAibm8gYnVpbHRpbiBzY3JpcHQg Zm91bmQgZm9yIG5hbWUgXCIlc1wiXG4iLAorCQkJCQkgIG5hbWUpOwogCWVsc2UJCQkJCQkvKiBm b3VuZCA+IDEgKi8KLQkJZnByaW50ZihzdGRlcnIsCi0JCQkJImFtYmlndW91cyBidWlsdGluIG5h bWU6ICVkIGJ1aWx0aW4gc2NyaXB0cyBmb3VuZCBmb3IgcHJlZml4IFwiJXNcIlxuIiwgZm91bmQs IG5hbWUpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILAorCQkJCQkgICJhbWJpZ3VvdXMg YnVpbHRpbiBuYW1lOiAlZCBidWlsdGluIHNjcmlwdHMgZm91bmQgZm9yIHByZWZpeCBcIiVzXCJc biIsCisJCQkJCSAgZm91bmQsIG5hbWUpOwogCiAJbGlzdEF2YWlsYWJsZVNjcmlwdHMoKTsKIAll eGl0KDEpOwpAQCAtNTM4NSwxNyArNTM5MCwxMSBAQCBwYXJzZVNjcmlwdFdlaWdodChjb25zdCBj aGFyICpvcHRpb24sIGNoYXIgKipzY3JpcHQpCiAJCWVycm5vID0gMDsKIAkJd3RtcCA9IHN0cnRv bChzZXAgKyAxLCAmYmFkcCwgMTApOwogCQlpZiAoZXJybm8gIT0gMCB8fCBiYWRwID09IHNlcCAr IDEgfHwgKmJhZHAgIT0gJ1wwJykKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHdl aWdodCBzcGVjaWZpY2F0aW9uOiAlc1xuIiwgc2VwKTsKLQkJCWV4aXQoMSk7Ci0JCX0KKwkJCXBn YmVuY2hfZXJyb3IoRkFUQUwsICJpbnZhbGlkIHdlaWdodCBzcGVjaWZpY2F0aW9uOiAlc1xuIiwg c2VwKTsKIAkJaWYgKHd0bXAgPiBJTlRfTUFYIHx8IHd0bXAgPCAwKQotCQl7Ci0JCQlmcHJpbnRm KHN0ZGVyciwKLQkJCQkJIndlaWdodCBzcGVjaWZpY2F0aW9uIG91dCBvZiByYW5nZSAoMCAuLiAl dSk6ICIgSU5UNjRfRk9STUFUICJcbiIsCi0JCQkJCUlOVF9NQVgsIChpbnQ2NCkgd3RtcCk7Ci0J CQlleGl0KDEpOwotCQl9CisJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkJICAid2VpZ2h0 IHNwZWNpZmljYXRpb24gb3V0IG9mIHJhbmdlICgwIC4uICV1KTogIiBJTlQ2NF9GT1JNQVQgIlxu IiwKKwkJCQkJCSAgSU5UX01BWCwgKGludDY0KSB3dG1wKTsKIAkJd2VpZ2h0ID0gd3RtcDsKIAl9 CiAJZWxzZQpAQCAtNTQxMiwxNiArNTQxMSwxMiBAQCBzdGF0aWMgdm9pZAogYWRkU2NyaXB0KFBh cnNlZFNjcmlwdCBzY3JpcHQpCiB7CiAJaWYgKHNjcmlwdC5jb21tYW5kcyA9PSBOVUxMIHx8IHNj cmlwdC5jb21tYW5kc1swXSA9PSBOVUxMKQotCXsKLQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSBj b21tYW5kIGxpc3QgZm9yIHNjcmlwdCBcIiVzXCJcbiIsIHNjcmlwdC5kZXNjKTsKLQkJZXhpdCgx KTsKLQl9CisJCXBnYmVuY2hfZXJyb3IoRkFUQUwsICJlbXB0eSBjb21tYW5kIGxpc3QgZm9yIHNj cmlwdCBcIiVzXCJcbiIsCisJCQkJCSAgc2NyaXB0LmRlc2MpOwogCiAJaWYgKG51bV9zY3JpcHRz ID49IE1BWF9TQ1JJUFRTKQotCXsKLQkJZnByaW50ZihzdGRlcnIsICJhdCBtb3N0ICVkIFNRTCBz Y3JpcHRzIGFyZSBhbGxvd2VkXG4iLCBNQVhfU0NSSVBUUyk7Ci0JCWV4aXQoMSk7Ci0JfQorCQlw Z2JlbmNoX2Vycm9yKEZBVEFMLCAiYXQgbW9zdCAlZCBTUUwgc2NyaXB0cyBhcmUgYWxsb3dlZFxu IiwKKwkJCQkJICBNQVhfU0NSSVBUUyk7CiAKIAlDaGVja0NvbmRpdGlvbmFsKHNjcmlwdCk7CiAK QEAgLTU3MTAsOSArNTcwNSw4IEBAIHNldF9yYW5kb21fc2VlZChjb25zdCBjaGFyICpzZWVkKQog CQlpZiAoIXBnX3N0cm9uZ19yYW5kb20oJmlzZWVkLCBzaXplb2YoaXNlZWQpKSkKICNlbmRpZgog CQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJImNhbm5vdCBzZWVkIHJhbmRvbSBmcm9tIGEg c3Ryb25nIHNvdXJjZSwgbm9uZSBhdmFpbGFibGU6ICIKLQkJCQkJInVzZSBcInRpbWVcIiBvciBh biB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlLlxuIik7CisJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JF TkNILAorCQkJCQkJICAiY2Fubm90IHNlZWQgcmFuZG9tIGZyb20gYSBzdHJvbmcgc291cmNlLCBu b25lIGF2YWlsYWJsZTogdXNlIFwidGltZVwiIG9yIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUu XG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KQEAgLTU3MjMsMTUgKzU3MTcsMTUgQEAg c2V0X3JhbmRvbV9zZWVkKGNvbnN0IGNoYXIgKnNlZWQpCiAKIAkJaWYgKHNzY2FuZihzZWVkLCAi JXUlYyIsICZpc2VlZCwgJmdhcmJhZ2UpICE9IDEpCiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLAot CQkJCQkidW5yZWNvZ25pemVkIHJhbmRvbSBzZWVkIG9wdGlvbiBcIiVzXCI6IGV4cGVjdGluZyBh biB1bnNpZ25lZCBpbnRlZ2VyLCBcInRpbWVcIiBvciBcInJhbmRcIlxuIiwKLQkJCQkJc2VlZCk7 CisJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILAorCQkJCQkJICAidW5yZWNvZ25pemVkIHJh bmRvbSBzZWVkIG9wdGlvbiBcIiVzXCI6IGV4cGVjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBc InRpbWVcIiBvciBcInJhbmRcIlxuIiwKKwkJCQkJCSAgc2VlZCk7CiAJCQlyZXR1cm4gZmFsc2U7 CiAJCX0KIAl9CiAKIAlpZiAoc2VlZCAhPSBOVUxMKQotCQlmcHJpbnRmKHN0ZGVyciwgInNldHRp bmcgcmFuZG9tIHNlZWQgdG8gJXVcbiIsIGlzZWVkKTsKKwkJcGdiZW5jaF9lcnJvcihMT0dfUEdC RU5DSCwgInNldHRpbmcgcmFuZG9tIHNlZWQgdG8gJXVcbiIsIGlzZWVkKTsKIAlzcmFuZG9tKGlz ZWVkKTsKIAkvKiBubyBwcmVjaXNpb24gbG9zczogMzIgYml0IHVuc2lnbmVkIGludCBjYXN0IHRv IDY0IGJpdCBpbnQgKi8KIAlyYW5kb21fc2VlZCA9IGlzZWVkOwpAQCAtNTg2NiwxMCArNTg2MCw4 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIGVh cmx5LCBiZWNhdXNlIGl0IG1heSBiZSB1c2VkIHdoaWxlIHBhcnNpbmcgc2NyaXB0cy4gKi8KIAlp ZiAoIXNldF9yYW5kb21fc2VlZChnZXRlbnYoIlBHQkVOQ0hfUkFORE9NX1NFRUQiKSkpCi0Jewot CQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIHdoaWxlIHNldHRpbmcgcmFuZG9tIHNlZWQgZnJvbSBQ R0JFTkNIX1JBTkRPTV9TRUVEIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKLQkJZXhpdCgxKTsK LQl9CisJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCSAgImVycm9yIHdoaWxlIHNldHRpbmcg cmFuZG9tIHNlZWQgZnJvbSBQR0JFTkNIX1JBTkRPTV9TRUVEIGVudmlyb25tZW50IHZhcmlhYmxl XG4iKTsKIAogCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpSTpoOm52cDpk cWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGlu ZGV4KSkgIT0gLTEpCiAJewpAQCAtNTkwMSw1MSArNTg5MywzOSBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCQlwZ3BvcnQgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsK IAkJCWNhc2UgJ2QnOgotCQkJCWRlYnVnX2xldmVsID0gREVCVUdfQUxMOworCQkJCWxvZ19sZXZl bCA9IERFQlVHOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnYyc6CiAJCQkJYmVuY2htYXJraW5nX29w dGlvbl9zZXQgPSB0cnVlOwogCQkJCW5jbGllbnRzID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChu Y2xpZW50cyA8PSAwIHx8IG5jbGllbnRzID4gTUFYQ0xJRU5UUykKLQkJCQl7Ci0JCQkJCWZwcmlu dGYoc3RkZXJyLCAiaW52YWxpZCBudW1iZXIgb2YgY2xpZW50czogXCIlc1wiXG4iLAotCQkJCQkJ CW9wdGFyZyk7Ci0JCQkJCWV4aXQoMSk7Ci0JCQkJfQorCQkJCQlwZ2JlbmNoX2Vycm9yKEZBVEFM LCAiaW52YWxpZCBudW1iZXIgb2YgY2xpZW50czogXCIlc1wiXG4iLAorCQkJCQkJCQkgIG9wdGFy Zyk7CiAjaWZkZWYgSEFWRV9HRVRSTElNSVQKICNpZmRlZiBSTElNSVRfTk9GSUxFCQkJLyogbW9z dCBwbGF0Zm9ybXMgdXNlIFJMSU1JVF9OT0ZJTEUgKi8KIAkJCQlpZiAoZ2V0cmxpbWl0KFJMSU1J VF9OT0ZJTEUsICZybGltKSA9PSAtMSkKICNlbHNlCQkJCQkJCS8qIGJ1dCBCU0QgZG9lc24ndCAu Li4gKi8KIAkJCQlpZiAoZ2V0cmxpbWl0KFJMSU1JVF9PRklMRSwgJnJsaW0pID09IC0xKQogI2Vu ZGlmCQkJCQkJCS8qIFJMSU1JVF9OT0ZJTEUgKi8KLQkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LCAiZ2V0cmxpbWl0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQkJCWV4aXQo MSk7Ci0JCQkJfQorCQkJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAiZ2V0cmxpbWl0IGZhaWxlZDog JXNcbiIsCisJCQkJCQkJCSAgc3RyZXJyb3IoZXJybm8pKTsKIAkJCQlpZiAocmxpbS5ybGltX2N1 ciA8IG5jbGllbnRzICsgMykKLQkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAibmVlZCBhdCBs ZWFzdCAlZCBvcGVuIGZpbGVzLCBidXQgc3lzdGVtIGxpbWl0IGlzICVsZFxuIiwKLQkJCQkJCQlu Y2xpZW50cyArIDMsIChsb25nKSBybGltLnJsaW1fY3VyKTsKLQkJCQkJZnByaW50ZihzdGRlcnIs ICJSZWR1Y2UgbnVtYmVyIG9mIGNsaWVudHMsIG9yIHVzZSBsaW1pdC91bGltaXQgdG8gaW5jcmVh c2UgdGhlIHN5c3RlbSBsaW1pdC5cbiIpOwotCQkJCQlleGl0KDEpOwotCQkJCX0KKwkJCQkJcGdi ZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkJICAibmVlZCBhdCBsZWFzdCAlZCBvcGVuIGZpbGVz LCBidXQgc3lzdGVtIGxpbWl0IGlzICVsZFxuIgorCQkJCQkJCQkgICJSZWR1Y2UgbnVtYmVyIG9m IGNsaWVudHMsIG9yIHVzZSBsaW1pdC91bGltaXQgdG8gaW5jcmVhc2UgdGhlIHN5c3RlbSBsaW1p dC5cbiIsCisJCQkJCQkJCSAgbmNsaWVudHMgKyAzLCAobG9uZykgcmxpbS5ybGltX2N1cik7CiAj ZW5kaWYJCQkJCQkJLyogSEFWRV9HRVRSTElNSVQgKi8KIAkJCQlicmVhazsKIAkJCWNhc2UgJ2on OgkJCS8qIGpvYnMgKi8KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJCQkJ bnRocmVhZHMgPSBhdG9pKG9wdGFyZyk7CiAJCQkJaWYgKG50aHJlYWRzIDw9IDApCi0JCQkJewot CQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHM6IFwiJXNcIlxu IiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQlleGl0KDEpOwotCQkJCX0KKwkJCQkJcGdiZW5jaF9l cnJvcihGQVRBTCwgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHM6IFwiJXNcIlxuIiwKKwkJCQkJ CQkJICBvcHRhcmcpOwogI2lmbmRlZiBFTkFCTEVfVEhSRUFEX1NBRkVUWQogCQkJCWlmIChudGhy ZWFkcyAhPSAxKQotCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJ0aHJlYWRzIGFyZSBub3Qg c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm07IHVzZSAtajFcbiIpOwotCQkJCQlleGl0KDEpOwot CQkJCX0KKwkJCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkJICAidGhyZWFkcyBhcmUg bm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtOyB1c2UgLWoxXG4iKTsKICNlbmRpZgkJCQkJ CQkvKiAhRU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8KIAkJCQlicmVhazsKIAkJCWNhc2UgJ0MnOgpA QCAtNTk2MCwyOSArNTk0MCwyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlz Y2FsZV9naXZlbiA9IHRydWU7CiAJCQkJc2NhbGUgPSBhdG9pKG9wdGFyZyk7CiAJCQkJaWYgKHNj YWxlIDw9IDApCi0JCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc2NhbGluZyBm YWN0b3I6IFwiJXNcIlxuIiwgb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKLQkJCQl9CisJCQkJCXBn YmVuY2hfZXJyb3IoRkFUQUwsICJpbnZhbGlkIHNjYWxpbmcgZmFjdG9yOiBcIiVzXCJcbiIsCisJ CQkJCQkJCSAgb3B0YXJnKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3QnOgogCQkJCWJlbmNobWFy a2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQlueGFjdHMgPSBhdG9pKG9wdGFyZyk7CiAJCQkJ aWYgKG54YWN0cyA8PSAwKQotCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG51 bWJlciBvZiB0cmFuc2FjdGlvbnM6IFwiJXNcIlxuIiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQll eGl0KDEpOwotCQkJCX0KKwkJCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkJICAiaW52 YWxpZCBudW1iZXIgb2YgdHJhbnNhY3Rpb25zOiBcIiVzXCJcbiIsCisJCQkJCQkJCSAgb3B0YXJn KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ1QnOgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0 ID0gdHJ1ZTsKIAkJCQlkdXJhdGlvbiA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAoZHVyYXRpb24g PD0gMCkKLQkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBkdXJhdGlvbjogXCIl c1wiXG4iLCBvcHRhcmcpOwotCQkJCQlleGl0KDEpOwotCQkJCX0KKwkJCQkJcGdiZW5jaF9lcnJv cihGQVRBTCwgImludmFsaWQgZHVyYXRpb246IFwiJXNcIlxuIiwgb3B0YXJnKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgJ1UnOgogCQkJCWxvZ2luID0gcGdfc3RyZHVwKG9wdGFyZyk7CkBAIC02MDI4 LDExICs2MDAxLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWJlbmNobWFy a2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAogCQkJCQlpZiAoKHAgPSBzdHJjaHIob3B0YXJnLCAn PScpKSA9PSBOVUxMIHx8IHAgPT0gb3B0YXJnIHx8ICoocCArIDEpID09ICdcMCcpCi0JCQkJCXsK LQkJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCB2YXJpYWJsZSBkZWZpbml0aW9uOiBcIiVz XCJcbiIsCi0JCQkJCQkJCW9wdGFyZyk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9CisJCQkJCQlw Z2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkJCQkJICAiaW52YWxpZCB2YXJpYWJsZSBkZWZpbml0 aW9uOiBcIiVzXCJcbiIsCisJCQkJCQkJCQkgIG9wdGFyZyk7CiAKIAkJCQkJKnArKyA9ICdcMCc7 CiAJCQkJCWlmICghcHV0VmFyaWFibGUoJnN0YXRlWzBdLnZhcmlhYmxlcywgIm9wdGlvbiIsIG9w dGFyZywgcCkpCkBAIC02MDQzLDEwICs2MDE0LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCQkJaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCA9IHRydWU7CiAJCQkJZmlsbGZhY3Rv ciA9IGF0b2kob3B0YXJnKTsKIAkJCQlpZiAoZmlsbGZhY3RvciA8IDEwIHx8IGZpbGxmYWN0b3Ig PiAxMDApCi0JCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgZmlsbGZhY3Rvcjog XCIlc1wiXG4iLCBvcHRhcmcpOwotCQkJCQlleGl0KDEpOwotCQkJCX0KKwkJCQkJcGdiZW5jaF9l cnJvcihGQVRBTCwgImludmFsaWQgZmlsbGZhY3RvcjogXCIlc1wiXG4iLAorCQkJCQkJCQkgIG9w dGFyZyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdNJzoKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9u X3NldCA9IHRydWU7CkBAIC02MDU0LDIxICs2MDIzLDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCQlpZiAoc3RyY21wKG9wdGFyZywgUVVFUllNT0RFW3F1ZXJ5bW9kZV0pID09 IDApCiAJCQkJCQlicmVhazsKIAkJCQlpZiAocXVlcnltb2RlID49IE5VTV9RVUVSWU1PREUpCi0J CQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgcXVlcnkgbW9kZSAoLU0pOiBcIiVz XCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKLQkJCQl9CisJCQkJCXBnYmVu Y2hfZXJyb3IoRkFUQUwsICJpbnZhbGlkIHF1ZXJ5IG1vZGUgKC1NKTogXCIlc1wiXG4iLAorCQkJ CQkJCQkgIG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdQJzoKIAkJCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7CiAJCQkJcHJvZ3Jlc3MgPSBhdG9pKG9wdGFyZyk7CiAJCQkJ aWYgKHByb2dyZXNzIDw9IDApCi0JCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQg dGhyZWFkIHByb2dyZXNzIGRlbGF5OiBcIiVzXCJcbiIsCi0JCQkJCQkJb3B0YXJnKTsKLQkJCQkJ ZXhpdCgxKTsKLQkJCQl9CisJCQkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCQkJCSAgImlu dmFsaWQgdGhyZWFkIHByb2dyZXNzIGRlbGF5OiBcIiVzXCJcbiIsCisJCQkJCQkJCSAgb3B0YXJn KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ1InOgogCQkJCXsKQEAgLTYwNzgsMTAgKzYwNDIsOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOwogCiAJCQkJCWlmICh0aHJvdHRsZV92YWx1ZSA8PSAwLjApCi0JCQkJCXsKLQkJ CQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCByYXRlIGxpbWl0OiBcIiVzXCJcbiIsIG9wdGFy Zyk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9CisJCQkJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAi aW52YWxpZCByYXRlIGxpbWl0OiBcIiVzXCJcbiIsCisJCQkJCQkJCQkgIG9wdGFyZyk7CiAJCQkJ CS8qIEludmVydCByYXRlIGxpbWl0IGludG8gYSB0aW1lIG9mZnNldCAqLwogCQkJCQl0aHJvdHRs ZV9kZWxheSA9IChpbnQ2NCkgKDEwMDAwMDAuMCAvIHRocm90dGxlX3ZhbHVlKTsKIAkJCQl9CkBA IC02MDkxLDExICs2MDUzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWRv dWJsZQkJbGltaXRfbXMgPSBhdG9mKG9wdGFyZyk7CiAKIAkJCQkJaWYgKGxpbWl0X21zIDw9IDAu MCkKLQkJCQkJewotCQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGxhdGVuY3kgbGltaXQ6 IFwiJXNcIlxuIiwKLQkJCQkJCQkJb3B0YXJnKTsKLQkJCQkJCWV4aXQoMSk7Ci0JCQkJCX0KKwkJ CQkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsICJpbnZhbGlkIGxhdGVuY3kgbGltaXQ6IFwiJXNcIlxu IiwKKwkJCQkJCQkJCSAgb3B0YXJnKTsKIAkJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0 cnVlOwogCQkJCQlsYXRlbmN5X2xpbWl0ID0gKGludDY0KSAobGltaXRfbXMgKiAxMDAwKTsKIAkJ CQl9CkBAIC02MTE2LDIwICs2MDc1LDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQlzYW1wbGVfcmF0ZSA9IGF0 b2Yob3B0YXJnKTsKIAkJCQlpZiAoc2FtcGxlX3JhdGUgPD0gMC4wIHx8IHNhbXBsZV9yYXRlID4g MS4wKQotCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHNhbXBsaW5nIHJhdGU6 IFwiJXNcIlxuIiwgb3B0YXJnKTsKLQkJCQkJZXhpdCgxKTsKLQkJCQl9CisJCQkJCXBnYmVuY2hf ZXJyb3IoRkFUQUwsICJpbnZhbGlkIHNhbXBsaW5nIHJhdGU6IFwiJXNcIlxuIiwKKwkJCQkJCQkJ ICBvcHRhcmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSA1OgkJCQkvKiBhZ2dyZWdhdGUtaW50ZXJ2 YWwgKi8KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJCQkJYWdnX2ludGVy dmFsID0gYXRvaShvcHRhcmcpOwogCQkJCWlmIChhZ2dfaW50ZXJ2YWwgPD0gMCkKLQkJCQl7Ci0J CQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBudW1iZXIgb2Ygc2Vjb25kcyBmb3IgYWdncmVn YXRpb246IFwiJXNcIlxuIiwKLQkJCQkJCQlvcHRhcmcpOwotCQkJCQlleGl0KDEpOwotCQkJCX0K KwkJCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkJICAiaW52YWxpZCBudW1iZXIgb2Yg c2Vjb25kcyBmb3IgYWdncmVnYXRpb246IFwiJXNcIlxuIiwKKwkJCQkJCQkJICBvcHRhcmcpOwog CQkJCWJyZWFrOwogCQkJY2FzZSA2OgkJCQkvKiBwcm9ncmVzcy10aW1lc3RhbXAgKi8KIAkJCQlw cm9ncmVzc190aW1lc3RhbXAgPSB0cnVlOwpAQCAtNjE0NiwxMCArNjEwMSw4IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJY2FzZSA5OgkJCQkvKiByYW5kb20tc2VlZCAqLwogCQkJ CWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQlpZiAoIXNldF9yYW5kb21fc2Vl ZChvcHRhcmcpKQotCQkJCXsKLQkJCQkJZnByaW50ZihzdGRlcnIsICJlcnJvciB3aGlsZSBzZXR0 aW5nIHJhbmRvbSBzZWVkIGZyb20gLS1yYW5kb20tc2VlZCBvcHRpb25cbiIpOwotCQkJCQlleGl0 KDEpOwotCQkJCX0KKwkJCQkJcGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkJICAiZXJyb3Ig d2hpbGUgc2V0dGluZyByYW5kb20gc2VlZCBmcm9tIC0tcmFuZG9tLXNlZWQgb3B0aW9uXG4iKTsK IAkJCQlicmVhazsKIAkJCWNhc2UgMTA6CQkJLyogZmFpbHVyZXMtZGV0YWlsZWQgKi8KIAkJCQli ZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CkBAIC02MTYwLDEyICs2MTEzLDkgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWludDMyCQltYXhfdHJpZXNfYXJnID0gYXRv aShvcHRhcmcpOwogCiAJCQkJCWlmIChtYXhfdHJpZXNfYXJnIDwgMCkKLQkJCQkJewotCQkJCQkJ ZnByaW50ZihzdGRlcnIsCi0JCQkJCQkJCSJpbnZhbGlkIG51bWJlciBvZiBtYXhpbXVtIHRyaWVz OiBcIiVzXCJcbiIsCi0JCQkJCQkJCW9wdGFyZyk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9CisJ CQkJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkJCQkJICAiaW52YWxpZCBudW1iZXIgb2Yg bWF4aW11bSB0cmllczogXCIlc1wiXG4iLAorCQkJCQkJCQkJICBvcHRhcmcpOwogCiAJCQkJCWJl bmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIApAQCAtNjE4MiwxMiArNjEzMiwxMyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWNhc2UgMTI6CQkJLyogcHJpbnQtZXJyb3Jz ICovCiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOwogCQkJCS8qIGRvIG5vdCBj b25mbGljdCB3aXRoIHRoZSBvcHRpb24gLS1kZWJ1ZyAqLwotCQkJCWlmIChkZWJ1Z19sZXZlbCA8 IERFQlVHX0VSUk9SUykKLQkJCQkJZGVidWdfbGV2ZWwgPSBERUJVR19FUlJPUlM7CisJCQkJaWYg KGxvZ19sZXZlbCA+IExPRykKKwkJCQkJbG9nX2xldmVsID0gTE9HOwogCQkJCWJyZWFrOwogCQkJ ZGVmYXVsdDoKLQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1v cmUgaW5mb3JtYXRpb24uXG4iKSwgcHJvZ25hbWUpOwotCQkJCWV4aXQoMSk7CisJCQkJcGdiZW5j aF9lcnJvcihGQVRBTCwKKwkJCQkJCQkgIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLlxuIiksCisJCQkJCQkJICBwcm9nbmFtZSk7CiAJCQkJYnJlYWs7CiAJCX0KIAl9 CkBAIC02MjI0LDEwICs2MTc1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXRv dGFsX3dlaWdodCArPSBzcWxfc2NyaXB0W2ldLndlaWdodDsKIAogCWlmICh0b3RhbF93ZWlnaHQg PT0gMCAmJiAhaXNfaW5pdF9tb2RlKQotCXsKLQkJZnByaW50ZihzdGRlcnIsICJ0b3RhbCBzY3Jp cHQgd2VpZ2h0IG11c3Qgbm90IGJlIHplcm9cbiIpOwotCQlleGl0KDEpOwotCX0KKwkJcGdiZW5j aF9lcnJvcihGQVRBTCwgInRvdGFsIHNjcmlwdCB3ZWlnaHQgbXVzdCBub3QgYmUgemVyb1xuIik7 CiAKIAkvKiBzaG93IHBlciBzY3JpcHQgc3RhdHMgaWYgc2V2ZXJhbCBzY3JpcHRzIGFyZSB1c2Vk ICovCiAJaWYgKG51bV9zY3JpcHRzID4gMSkKQEAgLTYyNTksMTAgKzYyMDcsOCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoaXNfaW5pdF9tb2RlKQogCXsKIAkJaWYgKGJlbmNo bWFya2luZ19vcHRpb25fc2V0KQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInNvbWUgb2YgdGhl IHNwZWNpZmllZCBvcHRpb25zIGNhbm5vdCBiZSB1c2VkIGluIGluaXRpYWxpemF0aW9uICgtaSkg bW9kZVxuIik7Ci0JCQlleGl0KDEpOwotCQl9CisJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJ CQkJICAic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgaW4gaW5p dGlhbGl6YXRpb24gKC1pKSBtb2RlXG4iKTsKIAogCQlpZiAoaW5pdGlhbGl6ZV9zdGVwcyA9PSBO VUxMKQogCQkJaW5pdGlhbGl6ZV9zdGVwcyA9IHBnX3N0cmR1cChERUZBVUxUX0lOSVRfU1RFUFMp OwpAQCAtNjI5NCwxNyArNjI0MCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAll bHNlCiAJewogCQlpZiAoaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCkKLQkJewotCQkJZnByaW50 ZihzdGRlcnIsICJzb21lIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBjYW5ub3QgYmUgdXNlZCBp biBiZW5jaG1hcmtpbmcgbW9kZVxuIik7Ci0JCQlleGl0KDEpOwotCQl9CisJCQlwZ2JlbmNoX2Vy cm9yKEZBVEFMLAorCQkJCQkJICAic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgY2Fubm90 IGJlIHVzZWQgaW4gYmVuY2htYXJraW5nIG1vZGVcbiIpOwogCX0KIAogCWlmIChueGFjdHMgPiAw ICYmIGR1cmF0aW9uID4gMCkKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAic3BlY2lmeSBlaXRoZXIg YSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zICgtdCkgb3IgYSBkdXJhdGlvbiAoLVQpLCBub3QgYm90 aFxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkgICJz cGVjaWZ5IGVpdGhlciBhIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKC10KSBvciBhIGR1cmF0aW9u ICgtVCksIG5vdCBib3RoXG4iKTsKIAogCS8qIFVzZSBERUZBVUxUX05YQUNUUyBpZiBuZWl0aGVy IG54YWN0cyBub3IgZHVyYXRpb24gaXMgc3BlY2lmaWVkLiAqLwogCWlmIChueGFjdHMgPD0gMCAm JiBkdXJhdGlvbiA8PSAwKQpAQCAtNjMxMiw1NCArNjI1NCw0MiBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAogCS8qIC0tc2FtcGxpbmctcmF0ZSBtYXkgYmUgdXNlZCBvbmx5IHdpdGgg LWwgKi8KIAlpZiAoc2FtcGxlX3JhdGUgPiAwLjAgJiYgIXVzZV9sb2cpCi0JewotCQlmcHJpbnRm KHN0ZGVyciwgImxvZyBzYW1wbGluZyAoLS1zYW1wbGluZy1yYXRlKSBpcyBhbGxvd2VkIG9ubHkg d2hlbiBsb2dnaW5nIHRyYW5zYWN0aW9ucyAoLWwpXG4iKTsKLQkJZXhpdCgxKTsKLQl9CisJCXBn YmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCSAgImxvZyBzYW1wbGluZyAoLS1zYW1wbGluZy1yYXRl KSBpcyBhbGxvd2VkIG9ubHkgd2hlbiBsb2dnaW5nIHRyYW5zYWN0aW9ucyAoLWwpXG4iKTsKIAog CS8qIC0tc2FtcGxpbmctcmF0ZSBtYXkgbm90IGJlIHVzZWQgd2l0aCAtLWFnZ3JlZ2F0ZS1pbnRl cnZhbCAqLwogCWlmIChzYW1wbGVfcmF0ZSA+IDAuMCAmJiBhZ2dfaW50ZXJ2YWwgPiAwKQotCXsK LQkJZnByaW50ZihzdGRlcnIsICJsb2cgc2FtcGxpbmcgKC0tc2FtcGxpbmctcmF0ZSkgYW5kIGFn Z3JlZ2F0aW9uICgtLWFnZ3JlZ2F0ZS1pbnRlcnZhbCkgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNh bWUgdGltZVxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJ CQkgICJsb2cgc2FtcGxpbmcgKC0tc2FtcGxpbmctcmF0ZSkgYW5kIGFnZ3JlZ2F0aW9uICgtLWFn Z3JlZ2F0ZS1pbnRlcnZhbCkgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZVxuIik7CiAK IAlpZiAoYWdnX2ludGVydmFsID4gMCAmJiAhdXNlX2xvZykKLQl7Ci0JCWZwcmludGYoc3RkZXJy LCAibG9nIGFnZ3JlZ2F0aW9uIGlzIGFsbG93ZWQgb25seSB3aGVuIGFjdHVhbGx5IGxvZ2dpbmcg dHJhbnNhY3Rpb25zXG4iKTsKLQkJZXhpdCgxKTsKLQl9CisJCXBnYmVuY2hfZXJyb3IoRkFUQUws CisJCQkJCSAgImxvZyBhZ2dyZWdhdGlvbiBpcyBhbGxvd2VkIG9ubHkgd2hlbiBhY3R1YWxseSBs b2dnaW5nIHRyYW5zYWN0aW9uc1xuIik7CiAKIAlpZiAoIXVzZV9sb2cgJiYgbG9nZmlsZV9wcmVm aXgpCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgImxvZyBmaWxlIHByZWZpeCAoLS1sb2ctcHJlZml4 KSBpcyBhbGxvd2VkIG9ubHkgd2hlbiBsb2dnaW5nIHRyYW5zYWN0aW9ucyAoLWwpXG4iKTsKLQkJ ZXhpdCgxKTsKLQl9CisJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCSAgImxvZyBmaWxlIHBy ZWZpeCAoLS1sb2ctcHJlZml4KSBpcyBhbGxvd2VkIG9ubHkgd2hlbiBsb2dnaW5nIHRyYW5zYWN0 aW9ucyAoLWwpXG4iKTsKIAogCWlmIChkdXJhdGlvbiA+IDAgJiYgYWdnX2ludGVydmFsID4gZHVy YXRpb24pCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIm51bWJlciBvZiBzZWNvbmRzIGZvciBhZ2dy ZWdhdGlvbiAoJWQpIG11c3Qgbm90IGJlIGhpZ2hlciB0aGFuIHRlc3QgZHVyYXRpb24gKCVkKVxu IiwgYWdnX2ludGVydmFsLCBkdXJhdGlvbik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2JlbmNoX2Vy cm9yKEZBVEFMLAorCQkJCQkgICJudW1iZXIgb2Ygc2Vjb25kcyBmb3IgYWdncmVnYXRpb24gKCVk KSBtdXN0IG5vdCBiZSBoaWdoZXIgdGhhbiB0ZXN0IGR1cmF0aW9uICglZClcbiIsCisJCQkJCSAg YWdnX2ludGVydmFsLCBkdXJhdGlvbik7CiAKIAlpZiAoZHVyYXRpb24gPiAwICYmIGFnZ19pbnRl cnZhbCA+IDAgJiYgZHVyYXRpb24gJSBhZ2dfaW50ZXJ2YWwgIT0gMCkKLQl7Ci0JCWZwcmludGYo c3RkZXJyLCAiZHVyYXRpb24gKCVkKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYWdncmVnYXRpb24g aW50ZXJ2YWwgKCVkKVxuIiwgZHVyYXRpb24sIGFnZ19pbnRlcnZhbCk7Ci0JCWV4aXQoMSk7Ci0J fQorCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLAorCQkJCQkgICJkdXJhdGlvbiAoJWQpIG11c3QgYmUg YSBtdWx0aXBsZSBvZiBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAoJWQpXG4iLAorCQkJCQkgIGR1cmF0 aW9uLCBhZ2dfaW50ZXJ2YWwpOwogCiAJaWYgKHByb2dyZXNzX3RpbWVzdGFtcCAmJiBwcm9ncmVz cyA9PSAwKQotCXsKLQkJZnByaW50ZihzdGRlcnIsICItLXByb2dyZXNzLXRpbWVzdGFtcCBpcyBh bGxvd2VkIG9ubHkgdW5kZXIgLS1wcm9ncmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2Jl bmNoX2Vycm9yKEZBVEFMLAorCQkJCQkgICItLXByb2dyZXNzLXRpbWVzdGFtcCBpcyBhbGxvd2Vk IG9ubHkgdW5kZXIgLS1wcm9ncmVzc1xuIik7CiAKIAlpZiAoIW1heF90cmllcykKIAl7CiAJCWlm IChyZXRyeSAmJiAhbGF0ZW5jeV9saW1pdCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJhbiBp bmZpbml0ZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gdHJpZXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRo IHRoZSBvcHRpb24gLS1sYXRlbmN5LWxpbWl0XG4iKTsKLQkJCWV4aXQoMSk7CisJCQlwZ2JlbmNo X2Vycm9yKEZBVEFMLAorCQkJCQkJICAiYW4gaW5maW5pdGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9u IHRyaWVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgb3B0aW9uIC0tbGF0ZW5jeS1saW1pdFxu Iik7CiAJCX0KIAkJZWxzZSBpZiAoIXJldHJ5KQogCQl7CkBAIC02MzkzLDE4ICs2MzIzLDE3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXsKIAkJCQkJaWYgKCFwdXRWYXJpYWJs ZVZhbHVlKCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwKIAkJCQkJCQkJCQkgIHZhci0+ bmFtZSwgJnZhci0+dmFsdWUpKQotCQkJCQl7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJ CQkJImVycm9yIHdoZW4gc2V0dGluZyB0aGUgc3RhcnR1cCB2YXJpYWJsZSBcIiVzXCIgZm9yIGNs aWVudCAlZFxuIiwKLQkJCQkJCQkJdmFyLT5uYW1lLCBpKTsKLQkJCQkJCWV4aXQoMSk7Ci0JCQkJ CX0KKwkJCQkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCQkJCQkgICJlcnJvciB3aGVuIHNl dHRpbmcgdGhlIHN0YXJ0dXAgdmFyaWFibGUgXCIlc1wiIGZvciBjbGllbnQgJWRcbiIsCisJCQkJ CQkJCQkgIHZhci0+bmFtZSwgaSk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWlmICgh cHV0VmFyaWFibGUoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLAogCQkJCQkJCQkJIHZh ci0+bmFtZSwgdmFyLT5zdmFsdWUpKQotCQkJCQkJZXhpdCgxKTsKKwkJCQkJCXBnYmVuY2hfZXJy b3IoRkFUQUwsCisJCQkJCQkJCQkgICJlcnJvciB3aGVuIHNldHRpbmcgdGhlIHN0YXJ0dXAgdmFy aWFibGUgXCIlc1wiIGZvciBjbGllbnQgJWRcbiIsCisJCQkJCQkJCQkgIHZhci0+bmFtZSwgaSk7 CiAJCQkJfQogCQkJfQogCQl9CkBAIC02NDE3LDcgKzYzNDYsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJaW5pdFJhbmRvbVN0YXRlKCZzdGF0ZVtpXS5yYW5kb21fc3RhdGUpOwog CX0KIAotCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJaWYgKERFQlVHID49IGxvZ19s ZXZlbCkKIAl7CiAJCWlmIChkdXJhdGlvbiA8PSAwKQogCQkJcHJpbnRmKCJwZ2hvc3Q6ICVzIHBn cG9ydDogJXMgbmNsaWVudHM6ICVkIG54YWN0czogJWQgZGJOYW1lOiAlc1xuIiwKQEAgLTY0MzMs MTEgKzYzNjIsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZXhpdCgxKTsKIAog CWlmIChQUXN0YXR1cyhjb24pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJZnByaW50ZihzdGRl cnIsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWRcbiIsIGRiTmFtZSk7Ci0J CWZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKTsKLQkJZXhpdCgxKTsK LQl9CisJCXBnYmVuY2hfZXJyb3IoRkFUQUwsICJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIFwiJXNc IiBmYWlsZWRcbiVzIiwKKwkJCQkJICBkYk5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwogCiAJ aWYgKGludGVybmFsX3NjcmlwdF91c2VkKQogCXsKQEAgLTY0NTAsMjggKzYzNzYsMjYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsKIAkJCWNoYXIJICAgKnNxbFN0YXRlID0gUFFy ZXN1bHRFcnJvckZpZWxkKHJlcywgUEdfRElBR19TUUxTVEFURSk7CiAKLQkJCWZwcmludGYoc3Rk ZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb24pKTsKIAkJCWlmIChzcWxTdGF0ZSAmJiBzdHJj bXAoc3FsU3RhdGUsIEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSA9PSAwKQotCQkJewotCQkJCWZw cmludGYoc3RkZXJyLCAiUGVyaGFwcyB5b3UgbmVlZCB0byBkbyBpbml0aWFsaXphdGlvbiAoXCJw Z2JlbmNoIC1pXCIpIGluIGRhdGFiYXNlIFwiJXNcIlxuIiwgUFFkYihjb24pKTsKLQkJCX0KLQor CQkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsCisJCQkJCQkJICAiJXNQZXJoYXBzIHlvdSBu ZWVkIHRvIGRvIGluaXRpYWxpemF0aW9uIChcInBnYmVuY2ggLWlcIikgaW4gZGF0YWJhc2UgXCIl c1wiXG4iLAorCQkJCQkJCSAgUFFlcnJvck1lc3NhZ2UoY29uKSwgUFFkYihjb24pKTsKKwkJCWVs c2UKKwkJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiJXMiLCBQUWVycm9yTWVzc2FnZShj b24pKTsKIAkJCWV4aXQoMSk7CiAJCX0KIAkJc2NhbGUgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAw LCAwKSk7CiAJCWlmIChzY2FsZSA8IDApCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxp ZCBjb3VudCgqKSBmcm9tIHBnYmVuY2hfYnJhbmNoZXM6IFwiJXNcIlxuIiwKLQkJCQkJUFFnZXR2 YWx1ZShyZXMsIDAsIDApKTsKLQkJCWV4aXQoMSk7Ci0JCX0KKwkJCXBnYmVuY2hfZXJyb3IoRkFU QUwsCisJCQkJCQkgICJpbnZhbGlkIGNvdW50KCopIGZyb20gcGdiZW5jaF9icmFuY2hlczogXCIl c1wiXG4iLAorCQkJCQkJICBQUWdldHZhbHVlKHJlcywgMCwgMCkpOwogCQlQUWNsZWFyKHJlcyk7 CiAKIAkJLyogd2FybiBpZiB3ZSBvdmVycmlkZSB1c2VyLWdpdmVuIC1zIHN3aXRjaCAqLwogCQlp ZiAoc2NhbGVfZ2l2ZW4pCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJInNjYWxlIG9wdGlvbiBp Z25vcmVkLCB1c2luZyBjb3VudCBmcm9tIHBnYmVuY2hfYnJhbmNoZXMgdGFibGUgKCVkKVxuIiwK LQkJCQkJc2NhbGUpOworCQkJcGdiZW5jaF9lcnJvcihMT0dfUEdCRU5DSCwKKwkJCQkJCSAgInNj YWxlIG9wdGlvbiBpZ25vcmVkLCB1c2luZyBjb3VudCBmcm9tIHBnYmVuY2hfYnJhbmNoZXMgdGFi bGUgKCVkKVxuIiwKKwkJCQkJCSAgc2NhbGUpOwogCX0KIAogCS8qCkBAIC02NDgzLDEyICs2NDA3 LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWZvciAoaSA9IDA7IGkgPCBuY2xp ZW50czsgaSsrKQogCQl7CiAJCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXS52YXJpYWJs ZXMsICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUpKQotCQkJewotCQkJCWZwcmludGYoc3RkZXJy LAotCQkJCQkJImVycm9yIHdoZW4gc2V0dGluZyB0aGUgc3RhcnR1cCB2YXJpYWJsZSBcInNjYWxl XCIgZm9yIGNsaWVudCAlZFxuIiwKLQkJCQkJCWkpOwotCQkJCWV4aXQoMSk7Ci0JCQl9CisJCQkJ cGdiZW5jaF9lcnJvcihGQVRBTCwKKwkJCQkJCQkgICJlcnJvciB3aGVuIHNldHRpbmcgdGhlIHN0 YXJ0dXAgdmFyaWFibGUgXCJzY2FsZVwiIGZvciBjbGllbnQgJWRcbiIsCisJCQkJCQkJICBpKTsK IAkJfQogCX0KIApAQCAtNjUwMCwxMiArNjQyMSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCXsKIAkJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCiAJCQlpZiAoIXB1dFZh cmlhYmxlSW50KCZzdGF0ZVtpXS52YXJpYWJsZXMsICJzdGFydHVwIiwgImNsaWVudF9pZCIsIGkp KQotCQkJewotCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCQkJImVycm9yIHdoZW4gc2V0dGluZyB0 aGUgc3RhcnR1cCB2YXJpYWJsZSBcImNsaWVudF9pZFwiIGZvciBjbGllbnQgJWRcbiIsCi0JCQkJ CQlpKTsKLQkJCQlleGl0KDEpOwotCQkJfQorCQkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJ CQkJICAiZXJyb3Igd2hlbiBzZXR0aW5nIHRoZSBzdGFydHVwIHZhcmlhYmxlIFwiY2xpZW50X2lk XCIgZm9yIGNsaWVudCAlZFxuIiwKKwkJCQkJCQkgIGkpOwogCX0KIAogCS8qIHNldCBkZWZhdWx0 IHNlZWQgZm9yIGhhc2ggZnVuY3Rpb25zICovCkBAIC02NTE5LDEyICs2NDM3LDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQog CQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJk ZWZhdWx0X3NlZWQiLAogCQkJCQkJCQkoaW50NjQpIHNlZWQpKQotCQkJewotCQkJCWZwcmludGYo c3RkZXJyLAotCQkJCQkJImVycm9yIHdoZW4gc2V0dGluZyB0aGUgc3RhcnR1cCB2YXJpYWJsZSBc ImRlZmF1bHRfc2VlZFwiIGZvciBjbGllbnQgJWRcbiIsCi0JCQkJCQlpKTsKLQkJCQlleGl0KDEp OwotCQkJfQorCQkJCXBnYmVuY2hfZXJyb3IoRkFUQUwsCisJCQkJCQkJICAiZXJyb3Igd2hlbiBz ZXR0aW5nIHRoZSBzdGFydHVwIHZhcmlhYmxlIFwiZGVmYXVsdF9zZWVkXCIgZm9yIGNsaWVudCAl ZFxuIiwKKwkJCQkJCQkgIGkpOwogCX0KIAogCS8qIHNldCByYW5kb20gc2VlZCB1bmxlc3Mgb3Zl cndyaXR0ZW4gKi8KQEAgLTY1MzMsMjcgKzY0NDgsMjQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQogCQkJaWYgKCFwdXRWYXJp YWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsCiAJ CQkJCQkJCXJhbmRvbV9zZWVkKSkKLQkJCXsKLQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCSJl cnJvciB3aGVuIHNldHRpbmcgdGhlIHN0YXJ0dXAgdmFyaWFibGUgXCJyYW5kb21fc2VlZFwiIGZv ciBjbGllbnQgJWRcbiIsCi0JCQkJCQlpKTsKLQkJCQlleGl0KDEpOwotCQkJfQorCQkJCXBnYmVu Y2hfZXJyb3IoRkFUQUwsCisJCQkJCQkJICAiZXJyb3Igd2hlbiBzZXR0aW5nIHRoZSBzdGFydHVw IHZhcmlhYmxlIFwicmFuZG9tX3NlZWRcIiBmb3IgY2xpZW50ICVkXG4iLAorCQkJCQkJCSAgaSk7 CiAJfQogCiAJaWYgKCFpc19ub192YWN1dW0pCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgInN0YXJ0 aW5nIHZhY3V1bS4uLiIpOworCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAic3RhcnRpbmcg dmFjdXVtLi4uIik7CiAJCXRyeUV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIHBnYmVuY2hf YnJhbmNoZXMiKTsKIAkJdHJ5RXhlY3V0ZVN0YXRlbWVudChjb24sICJ2YWN1dW0gcGdiZW5jaF90 ZWxsZXJzIik7CiAJCXRyeUV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidHJ1bmNhdGUgcGdiZW5jaF9o aXN0b3J5Iik7Ci0JCWZwcmludGYoc3RkZXJyLCAiZW5kLlxuIik7CisJCXBnYmVuY2hfZXJyb3Io TE9HX1BHQkVOQ0gsICJlbmQuXG4iKTsKIAogCQlpZiAoZG9fdmFjdXVtX2FjY291bnRzKQogCQl7 Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInN0YXJ0aW5nIHZhY3V1bSBwZ2JlbmNoX2FjY291bnRzLi4u Iik7CisJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAic3RhcnRpbmcgdmFjdXVtIHBnYmVu Y2hfYWNjb3VudHMuLi4iKTsKIAkJCXRyeUV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAidmFjdXVtIGFu YWx5emUgcGdiZW5jaF9hY2NvdW50cyIpOwotCQkJZnByaW50ZihzdGRlcnIsICJlbmQuXG4iKTsK KwkJCXBnYmVuY2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJlbmQuXG4iKTsKIAkJfQogCX0KIAlQUWZp bmlzaChjb24pOwpAQCAtNjYxMiwxMCArNjUyNCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQkJaW50CQkJZXJyID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZC0+dGhyZWFkLCBOVUxM LCB0aHJlYWRSdW4sIHRocmVhZCk7CiAKIAkJCWlmIChlcnIgIT0gMCB8fCB0aHJlYWQtPnRocmVh ZCA9PSBJTlZBTElEX1RIUkVBRCkKLQkJCXsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5v dCBjcmVhdGUgdGhyZWFkOiAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0JCQkJZXhpdCgxKTsKLQkJ CX0KKwkJCQlwZ2JlbmNoX2Vycm9yKEZBVEFMLCAiY291bGQgbm90IGNyZWF0ZSB0aHJlYWQ6ICVz XG4iLAorCQkJCQkJCSAgc3RyZXJyb3IoZXJyKSk7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC02NzI5 LDggKzY2MzksOCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCiAJCWlmICh0aHJlYWQtPmxvZ2Zp bGUgPT0gTlVMTCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiBsb2dm aWxlIFwiJXNcIjogJXNcbiIsCi0JCQkJCWxvZ3BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCQlw Z2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiY291bGQgbm90IG9wZW4gbG9nZmlsZSBcIiVzXCI6 ICVzXG4iLAorCQkJCQkJICBsb2dwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCQkJZ290byBkb25l OwogCQl9CiAJfQpAQCAtNjgwOSw4ICs2NzE5LDggQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAog CQkJCWlmIChzb2NrIDwgMCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBz b2NrZXQ6ICVzIiwKLQkJCQkJCQlQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisJCQkJCXBnYmVu Y2hfZXJyb3IoTE9HX1BHQkVOQ0gsICJpbnZhbGlkIHNvY2tldDogJXMiLAorCQkJCQkJCQkgIFBR ZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKIAkJCQkJZ290byBkb25lOwogCQkJCX0KIApAQCAtNjg4 Niw3ICs2Nzk2LDggQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJY29udGludWU7CiAJCQkJ fQogCQkJCS8qIG11c3QgYmUgc29tZXRoaW5nIHdyb25nICovCi0JCQkJZnByaW50ZihzdGRlcnIs ICJzZWxlY3QoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQkJCXBnYmVuY2hf ZXJyb3IoTE9HX1BHQkVOQ0gsICJzZWxlY3QoKSBmYWlsZWQ6ICVzXG4iLAorCQkJCQkJCSAgc3Ry ZXJyb3IoZXJybm8pKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KQEAgLTY5MTEsOCArNjgy Miw4IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAKIAkJCQlpZiAoc29jayA8IDApCiAJCQkJewot CQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc29ja2V0OiAlcyIsCi0JCQkJCQkJUFFlcnJv ck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJCQlwZ2JlbmNoX2Vycm9yKExPR19QR0JFTkNILCAiaW52 YWxpZCBzb2NrZXQ6ICVzIiwKKwkJCQkJCQkJICBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CiAJ CQkJCWdvdG8gZG9uZTsKIAkJCQl9CiAKQEAgLTY5NTcsNiArNjg2OCwxMCBAQCB0aHJlYWRSdW4o dm9pZCAqYXJnKQogCQkJCQkJCXN0ZGV2OwogCQkJCWNoYXIJCXRidWZbMzE1XTsKIAorCQkJCS8q IGJ1ZmZlciBmb3IgYW4gb3B0aW9uYWwgcGFydCBvZiB0aGUgcHJvZ3Jlc3MgbWVzc2FnZSAqLwor CQkJCWNoYXIJCXBidWZbNTEyXTsKKwkJCQlpbnQJCQlwYnVmX3NpemUgPSAwOworCiAJCQkJLyoK IAkJCQkgKiBBZGQgdXAgdGhlIHN0YXRpc3RpY3Mgb2YgYWxsIHRocmVhZHMuCiAJCQkJICoKQEAg LTcwMjQsMjcgKzY5MzksMzUgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJc25wcmludGYo dGJ1Ziwgc2l6ZW9mKHRidWYpLCAiJS4xZiBzIiwgdG90YWxfcnVuKTsKIAkJCQl9CiAKLQkJCQlm cHJpbnRmKHN0ZGVyciwKLQkJCQkJCSJwcm9ncmVzczogJXMsICUuMWYgdHBzLCBsYXQgJS4zZiBt cyBzdGRkZXYgJS4zZiIsCi0JCQkJCQl0YnVmLCB0cHMsIGxhdGVuY3ksIHN0ZGV2KTsKLQogCQkJ CWlmIChmYWlsdXJlcyA+IDApCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZPUk1B VCAiIGZhaWxlZCIsIGZhaWx1cmVzKTsKKwkJCQkJcGJ1Zl9zaXplICs9IHNucHJpbnRmKHBidWYg KyBwYnVmX3NpemUsCisJCQkJCQkJCQkJICBzaXplb2YocGJ1ZikgLSBwYnVmX3NpemUsCisJCQkJ CQkJCQkJICAiLCAiIElOVDY0X0ZPUk1BVCAiIGZhaWxlZCIsCisJCQkJCQkJCQkJICBmYWlsdXJl cyk7CiAKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQkJewotCQkJCQlmcHJpbnRmKHN0ZGVy ciwgIiwgbGFnICUuM2YgbXMiLCBsYWcpOworCQkJCQlwYnVmX3NpemUgKz0gc25wcmludGYocGJ1 ZiArIHBidWZfc2l6ZSwKKwkJCQkJCQkJCQkgIHNpemVvZihwYnVmKSAtIHBidWZfc2l6ZSwKKwkJ CQkJCQkJCQkgICIsIGxhZyAlLjNmIG1zIiwgbGFnKTsKIAkJCQkJaWYgKGxhdGVuY3lfbGltaXQp Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkIiwKLQkJ CQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNraXBwZWQpOworCQkJCQkJcGJ1Zl9zaXplICs9IHNu cHJpbnRmKHBidWYgKyBwYnVmX3NpemUsCisJCQkJCQkJCQkJCSAgc2l6ZW9mKHBidWYpIC0gcGJ1 Zl9zaXplLAorCQkJCQkJCQkJCQkgICIsICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCIsCisJCQkJ CQkJCQkJCSAgY3VyLnNraXBwZWQgLSBsYXN0LnNraXBwZWQpOwogCQkJCX0KIAogCQkJCS8qIGl0 IGNhbiBiZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBpcyBub3QgZXF1YWwgdG8gb25lICov CiAJCQkJaWYgKHJldHJpZWQgPiAwKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkiLCAi IElOVDY0X0ZPUk1BVCAiIHJldHJpZWQsICIgSU5UNjRfRk9STUFUICIgcmV0cmllcyIsCi0JCQkJ CQkJcmV0cmllZCwgY3VyLnJldHJpZXMgLSBsYXN0LnJldHJpZXMpOwotCQkJCWZwcmludGYoc3Rk ZXJyLCAiXG4iKTsKKwkJCQkJcGJ1Zl9zaXplICs9IHNucHJpbnRmKAorCQkJCQkJcGJ1ZiArIHBi dWZfc2l6ZSwKKwkJCQkJCXNpemVvZihwYnVmKSAtIHBidWZfc2l6ZSwKKwkJCQkJCSIsICIgSU5U NjRfRk9STUFUICIgcmV0cmllZCwgIiBJTlQ2NF9GT1JNQVQgIiByZXRyaWVzIiwKKwkJCQkJCXJl dHJpZWQsIGN1ci5yZXRyaWVzIC0gbGFzdC5yZXRyaWVzKTsKKworCQkJCXBnYmVuY2hfZXJyb3Io TE9HX1BHQkVOQ0gsCisJCQkJCQkJICAicHJvZ3Jlc3M6ICVzLCAlLjFmIHRwcywgbGF0ICUuM2Yg bXMgc3RkZGV2ICUuM2Ylc1xuIiwKKwkJCQkJCQkgIHRidWYsIHRwcywgbGF0ZW5jeSwgc3RkZXYs IHBidWZfc2l6ZSA/IHBidWYgOiAiIik7CiAKIAkJCQlsYXN0ID0gY3VyOwogCQkJCWxhc3RfcmVw b3J0ID0gbm93OwpAQCAtNzEyOCwxMCArNzA1MSw3IEBAIHNldGFsYXJtKGludCBzZWNvbmRzKQog CQkhQ3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZ0aW1lciwgcXVldWUsCiAJCQkJCQkJICAgd2luMzJf dGltZXJfY2FsbGJhY2ssIE5VTEwsIHNlY29uZHMgKiAxMDAwLCAwLAogCQkJCQkJCSAgIFdUX0VY RUNVVEVJTlRJTUVSVEhSRUFEIHwgV1RfRVhFQ1VURU9OTFlPTkNFKSkKLQl7Ci0JCWZwcmludGYo c3RkZXJyLCAiZmFpbGVkIHRvIHNldCB0aW1lclxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCQlwZ2Jl bmNoX2Vycm9yKEZBVEFMLCAiZmFpbGVkIHRvIHNldCB0aW1lclxuIik7CiB9CiAKIC8qIHBhcnRp YWwgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBmb3IgV2luZG93cyAqLwpAQCAtNzIwMSwzICs3MTIx LDM0IEBAIHB0aHJlYWRfam9pbihwdGhyZWFkX3QgdGgsIHZvaWQgKip0aHJlYWRfcmV0dXJuKQog fQogCiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKworc3RhdGljIHZvaWQKK3BnYmVuY2hfZXJy b3IoRXJyb3JMZXZlbCBlbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJ YXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlwZ2JlbmNoX2Vycm9yX3ZhKGVsZXZlbCwgZm10 LCAmYXApOworCXZhX2VuZChhcCk7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2JlbmNoX2Vycm9yX3Zh KEVycm9yTGV2ZWwgZWxldmVsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgKmFyZ3MpCit7CisJ LyogRGV0ZXJtaW5lIHdoZXRoZXIgbWVzc2FnZSBpcyBlbmFibGVkIGZvciBsb2cgb3V0cHV0ICov CisJaWYgKGVsZXZlbCA8IGxvZ19sZXZlbCkKKwkJcmV0dXJuOworCisJaWYgKCFmbXQgfHwgIWZt dFswXSkKKwl7CisJCS8qIGludGVybmFsIGVycm9yIHdoaWNoIHNob3VsZCBuZXZlciBvY2N1ciAq LworCQkvKiBkbyBub3QgY2FsbCBwZ2JlbmNoX2Vycm9yIHJlY3Vyc2l2ZWx5ICovCisJCWZwcmlu dGYoc3RkZXJyLCAidW5leHBlY3RlZCBlbXB0eSBlcnJvciBtZXNzYWdlXG4iKTsKKwkJZXhpdCgx KTsKKwl9CisKKwl2ZnByaW50ZihzdGRlcnIsIF8oZm10KSwgKmFyZ3MpOworCisJaWYgKGVsZXZl bCA+PSBGQVRBTCkKKwkJZXhpdCgxKTsKK30KLS0gCjIuMTcuMQoK --=_7447d1297f0d17f37364b73324d85298--