Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f0pul-0006dJ-2J for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Mar 2018 14:49:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f0puj-000114-IH for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Mar 2018 14:49:29 +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 1f0puT-0007hn-Gn for pgsql-hackers@lists.postgresql.org; Tue, 27 Mar 2018 14:49:13 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f0puK-0006ii-9q for pgsql-hackers@postgresql.org; Tue, 27 Mar 2018 14:49:12 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 7444D21C242B; Tue, 27 Mar 2018 17:49:02 +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 1813321C2427; Tue, 27 Mar 2018 17:49:02 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522162142; bh=+5Fw13DIEcIxqV5J+vacIZqOOAj+qCBsjLZ+uWYEicY=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=W/Y7Kd01odXiKWV3Ym0s9xPzKy6BsxF6LTj1UTWFdL6M9cA4NU7CbBRtS4albKaE0 ZIyUhpsSAZMs3TpX1/+3HgPas33Cp+ciPNKIbFcIGUol3382hf4b9rzED5C25NXZHF EwiI1ZFmmNvgauqoeIV+mxMsv6kxNN7A5jt+V2R4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_f75b0167759004add2b258d905546620" Date: Tue, 27 Mar 2018 17:49:02 +0300 From: Marina Polyakova To: Fabien COELHO Cc: Teodor Sigaev , pgsql-hackers@postgresql.org Subject: Re: [HACKERS] WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional In-Reply-To: References: <72a0d590d6ba06f242d75c2e641820ec@postgrespro.ru> <72ca61a8-b515-1bac-b082-b77952c78b64@sigaev.ru> Message-ID: <9c5bf620e050e0803d2a8828a9e9bdb4@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_f75b0167759004add2b258d905546620 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 26-03-2018 18:53, Fabien COELHO wrote: > Hello Marina, Hello! >> Many thanks to both of you! I'm working on a patch in this direction.. >> >>> I think that the best approach for now is simply to reset (command >>> zero, random generator) and start over the whole script, without >>> attempting to be more intelligent. The limitations should be clearly >>> documented (one transaction per script), though. That would be a >>> significant enhancement already. >> >> I'm not sure that we can always do this, because we can get new errors >> until we finish the failed transaction block, and we need destroy the >> conditional stack.. > > Sure. I'm suggesting so as to simplify that on failures the retry > would always restarts from the beginning of the script by resetting > everything, indeed including the conditional stack, the random > generator state, the variable values, and so on. > > This mean enforcing somehow one script is one transaction. > > If the user does not do that, it would be their decision and the > result becomes unpredictable on errors (eg some sub-transactions could > be executed more than once). > > Then if more is needed, that could be for another patch. Here is the fifth version of the patch for pgbench (based on the commit 4b9094eb6e14dfdbed61278ea8e51cc846e43579) where I tried to implement these ideas, thanks to your comments and those of Teodor Sigaev. Since we may need to execute commands to complete a failed transaction block, the script is now always executed completely. If there is a serialization/deadlock failure which can be retried, the script is executed again with the same random state and array of variables as before its first run. Meta commands errors as well as all SQL errors do not cause the aborting of the client. The first failure in the current script execution determines whether the script run will be retried or not, so only such failures (they have a retry) or errors (they are not retried) are reported. I tried to make fixes in accordance with your previous reviews ([1], [2], [3]): > I'm unclear about the added example added in the documentation. There > are 71% errors, but 100% of transactions are reported as processed. If > there were errors, then it is not a success, so the transaction were > not > processed? To me it looks inconsistent. Also, while testing, it seems > that > failed transactions are counted in tps, which I think is not > appropriate: > > > About the feature: > > sh> PGOPTIONS='-c default_transaction_isolation=serializable' \ > ./pgbench -P 1 -T 3 -r -M prepared -j 2 -c 4 > starting vacuum...end. > progress: 1.0 s, 10845.8 tps, lat 0.091 ms stddev 0.491, 10474 failed > # NOT 10845.8 TPS... > progress: 2.0 s, 10534.6 tps, lat 0.094 ms stddev 0.658, 10203 failed > progress: 3.0 s, 10643.4 tps, lat 0.096 ms stddev 0.568, 10290 failed > ... > number of transactions actually processed: 32028 # NO! > number of errors: 30969 (96.694 %) > latency average = 2.833 ms > latency stddev = 1.508 ms > tps = 10666.720870 (including connections establishing) # NO > tps = 10683.034369 (excluding connections establishing) # NO > ... > > For me this is all wrong. I think that the tps report is about > transactions > that succeeded, not mere attempts. I cannot say that a transaction > which aborted > was "actually processed"... as it was not. Fixed > The order of reported elements is not logical: > > maximum number of transaction tries: 100 > scaling factor: 10 > query mode: prepared > number of clients: 4 > number of threads: 2 > duration: 3 s > number of transactions actually processed: 967 > number of errors: 152 (15.719 %) > latency average = 9.630 ms > latency stddev = 13.366 ms > number of transactions retried: 623 (64.426 %) > number of retries: 32272 > > I would suggest to group everything about error handling in one block, > eg something like: > > scaling factor: 10 > query mode: prepared > number of clients: 4 > number of threads: 2 > duration: 3 s > number of transactions actually processed: 967 > number of errors: 152 (15.719 %) > number of transactions retried: 623 (64.426 %) > number of retries: 32272 > maximum number of transaction tries: 100 > latency average = 9.630 ms > latency stddev = 13.366 ms Fixed > Also, percent character should be stuck to its number: 15.719% to have > the style more homogeneous (although there seems to be pre-existing > inhomogeneities). > > I would replace "transaction tries/retried" by "tries/retried", > everything > is about transactions in the report anyway. > > Without reading the documentation, the overall report semantics is > unclear, > especially given the absurd tps results I got with the my first > attempt, > as failing transactions are counted as "processed". Fixed > About the code: > > I'm at lost with the 7 states added to the automaton, where I would > have hoped > that only 2 (eg RETRY & FAIL, or even less) would be enough. Fixed > I'm wondering whether the whole feature could be simplified by > considering that one script is one "transaction" (it is from the > report point of view at least), and that any retry is for the full > script only, from its beginning. That would remove the trying to guess > at transactions begin or end, avoid scanning manually for subcommands, > and so on. > - Would it make sense? > - Would it be ok for your use case? Fixed > The proposed version of the code looks unmaintainable to me. There are > 3 levels of nested "switch/case" with state changes at the deepest > level. > I cannot even see it on my screen which is not wide enough. Fixed > There should be a typedef for "random_state", eg something like: > > typedef struct { unsigned short data[3]; } RandomState; > > Please keep "const" declarations, eg "commandFailed". > > I think that choosing script should depend on the thread random state, > not > the client random state, so that a run would generate the same pattern > per > thread, independently of which client finishes first. > > I'm sceptical of the "--debug-fails" options. ISTM that --debug is > already there > and should just be reused. Fixed > I agree that function naming style is a already a mess, but I think > that > new functions you add should use a common style, eg "is_compound" vs > "canRetry". Fixed > Translating error strings to their enum should be put in a function. Removed > I'm not sure this whole thing should be done anyway. The processing of compound commands is removed. > The "node" is started but never stopped. Fixed > For file contents, maybe the << 'EOF' here-document syntax would help > instead > of using concatenated backslashed strings everywhere. I'm sorry, but I could not get it to work with regular expressions :( > I'd start by stating (i.e. documenting) that the features assumes that > one > script is just *one* transaction. > > Note that pgbench somehow already assumes that one script is one > transaction when it reports performance anyway. > > If you want 2 transactions, then you have to put them in two scripts, > which looks fine with me. Different transactions are expected to be > independent, otherwise they should be merged into one transaction. Fixed > Under these restrictions, ISTM that a retry is something like: > > case ABORTED: > if (we want to retry) { > // do necessary stats > // reset the initial state (random, vars, current command) > state = START_TX; // loop > } > else { > // count as failed... > state = FINISHED; // or done. > } > break; ... > I'm fine with having END_COMMAND skipping to START_TX if it can be done > easily and cleanly, esp without code duplication. I did not want to add the additional if-expressions possibly to most of the code in CSTATE_START_TX/CSTATE_END_TX/CSTATE_END_COMMAND, so CSTATE_FAILURE is used instead of CSTATE_END_COMMAND in case of failure, and CSTATE_RETRY is called before CSTATE_END_TX if there was a failure during the current script execution. > ISTM that ABORTED & FINISHED are currently exactly the same. That would > put a particular use to aborted. Also, there are many points where the > code may go to "aborted" state, so reusing it could help avoid > duplicating > stuff on each abort decision. To end and rollback the failed transaction block the script is always executed completely, and after the failure the following script command is executed.. [1] https://www.postgresql.org/message-id/alpine.DEB.2.20.1801031720270.20034%40lancre [2] https://www.postgresql.org/message-id/alpine.DEB.2.20.1801121309300.10810%40lancre [3] https://www.postgresql.org/message-id/alpine.DEB.2.20.1801121607310.13422%40lancre -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_f75b0167759004add2b258d905546620 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0001-Pgbench-errors-and-serialization-deadlock-retries.patch Content-Disposition: attachment; filename=v5-0001-Pgbench-errors-and-serialization-deadlock-retries.patch; size=125619 RnJvbSBjMzFkMTc2NjFlMzhkYjNhZTY0OTA2ZGZiN2Y2ZWQyYzQ4NWNkYjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCAyNyBNYXIgMjAxOCAxNzo0Njo0MyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjVdIFBnYmVuY2ggZXJyb3JzIGFuZCBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIHJldHJp ZXMKCkNsaWVudCdzIHJ1biBpcyBhYm9ydGVkIG9ubHkgaW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJy b3IsIGZvciBleGFtcGxlLCB0aGUKY29ubmVjdGlvbiB3aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0 LiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBTUUwgb3IgbWV0YQpjb21tYW5kIGZhaWxz LCB0aGUgY2xpZW50J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBjdXJyZW50CnNjcmlwdCBleGVjdXRpb24gKGl0IGlzIGFzc3VtZWQgdGhhdCBvbmUgdHJhbnNh Y3Rpb24gc2NyaXB0IGNvbnRhaW5zIG9ubHkgb25lCnRyYW5zYWN0aW9uKS4KClRyYW5zYWN0aW9u cyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgY2FuIGJlIHJvbGxlZCBi YWNrIGFuZApyZXRyaWVkIGFnYWluIGFuZCBhZ2FpbiB1bnRpbCB0aGV5IGVuZCBzdWNjZXNzZnVs bHkgb3IgdGhlaXIgbnVtYmVyIG9mIHRyaWVzCnJlYWNoZXMgbWF4aW11bS4gWW91IGNhbiBzZXQg dGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGJ5IHVzaW5nIHRoZQphcHByb3ByaWF0ZSBiZW5j aG1hcmtpbmcgb3B0aW9uICgtLW1heC10cmllcykuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCgpJ ZiB0aGVyZSdyZSByZXRyaWVzIGFuZC9vciBlcnJvcnMgdGhlaXIgc3RhdGlzdGljcyBhcmUgcHJp bnRlZCBpbiB0aGUgcHJvZ3Jlc3MsCmluIHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9uIGxv Z3MgYW5kIGluIHRoZSBlbmQgd2l0aCBvdGhlciByZXN1bHRzIChhbGwgYW5kCmZvciBlYWNoIHNj cmlwdCkuIEEgdHJhbnNhY3Rpb24gZXJyb3IgaXMgcmVwb3J0ZWQgaGVyZSBvbmx5IGlmIHRoZSBs YXN0IHRyeSBvZgp0aGlzIHRyYW5zYWN0aW9uIGZhaWxzLiBBbHNvIHJldHJpZXMgYW5kL29yIGVy cm9ycyBhcmUgcHJpbnRlZCBwZXItY29tbWFuZCB3aXRoCmF2ZXJhZ2UgbGF0ZW5jaWVzIGlmIHlv dSB1c2UgdGhlIGFwcHJvcHJpYXRlIGJlbmNobWFya2luZyBvcHRpb24KKC0tcmVwb3J0LXBlci1j b21tYW5kLCAtcikgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcyBhbmQvb3IgZXJyb3Jz IGlzIG5vdAp6ZXJvLgoKSWYgYSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sgZG9lcyBub3QgdGVy bWluYXRlIGluIHRoZSBjdXJyZW50IHNjcmlwdCwgdGhlCmNvbW1hbmRzIG9mIHRoZSBmb2xsb3dp bmcgc2NyaXB0cyBhcmUgcHJvY2Vzc2VkIGFzIHVzdWFsIHNvIHlvdSBjYW4gZ2V0IGEgbG90IG9m CmVycm9ycyBvZiB0eXBlICJpbiBmYWlsZWQgU1FMIHRyYW5zYWN0aW9uIiAod2hlbiB0aGUgY3Vy cmVudCBTUUwgdHJhbnNhY3Rpb24gaXMKYWJvcnRlZCBhbmQgY29tbWFuZHMgaWdub3JlZCB1bnRp bCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2spLiBJbiBzdWNoIGNhc2VzIHlvdQpjYW4gdXNlIHNl cGFyYXRlIHN0YXRpc3RpY3Mgb2YgdGhlc2UgZXJyb3JzIGluIGFsbCByZXBvcnRzLgoKSWYgeW91 IHdhbnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlcyBvciBlcnJvcnMgYnkgdHlwZSwg dXNlIHRoZSBwZ2JlbmNoCmRlYnVnZ2luZyBvdXRwdXQgY3JlYXRlZCB3aXRoIHRoZSBvcHRpb24g LS1kZWJ1ZyBhbmQgd2l0aCB0aGUgZGVidWdnaW5nIGxldmVsCiJmYWlscyIgb3IgImFsbCIuIFRo ZSBmaXJzdCB2YXJpYW50IGlzIHJlY29tbWVuZGVkIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSB3 aXRoCmluIHRoZSBzZWNvbmQgY2FzZSB0aGUgZGVidWdnaW5nIG91dHB1dCBjYW4gYmUgdmVyeSBs YXJnZS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbCAgICAgICAgICAgICAgICAg ICAgICB8ICAzMDQgKysrKystCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDExNDggKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsICAgICAgIHwgICAyNSArLQogc3JjL2Jpbi9w Z2JlbmNoL3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBsICAgICAgICAgfCAgICAyICstCiAuLi4v dC8wMDNfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHMucGwgICAgICB8ICA4MTUgKysr KysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMjAyMiBpbnNlcnRpb25zKCspLCAyNzIgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3Nlcmlh bGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ2JlbmNoLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbAppbmRleCA0 MWQ5MDMwLi5lMTA1NDcwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbApAQCAtNTUsMTYgKzU1LDE5IEBA IG51bWJlciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEKIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1 YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBvZiB0cmllczogMQog dHBzID0gODUuMTg0ODcxIChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogdHBz ID0gODUuMjk2MzQ2IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQogPC9zY3Jl ZW4+CiAKLSAgVGhlIGZpcnN0IHNpeCBsaW5lcyByZXBvcnQgc29tZSBvZiB0aGUgbW9zdCBpbXBv cnRhbnQgcGFyYW1ldGVyCi0gIHNldHRpbmdzLiAgVGhlIG5leHQgbGluZSByZXBvcnRzIHRoZSBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGNvbXBsZXRlZAotICBhbmQgaW50ZW5kZWQgKHRoZSBsYXR0 ZXIgYmVpbmcganVzdCB0aGUgcHJvZHVjdCBvZiBudW1iZXIgb2YgY2xpZW50cworICBUaGUgZmly c3Qgc2l4IGxpbmVzIGFuZCB0aGUgZWlnaHRoIGxpbmUgcmVwb3J0IHNvbWUgb2YgdGhlIG1vc3Qg aW1wb3J0YW50CisgIHBhcmFtZXRlciBzZXR0aW5ncy4gIFRoZSBzZXZlbnRoIGxpbmUgcmVwb3J0 cyB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucworICBjb21wbGV0ZWQgYW5kIGludGVuZGVkICh0 aGUgbGF0dGVyIGJlaW5nIGp1c3QgdGhlIHByb2R1Y3Qgb2YgbnVtYmVyIG9mIGNsaWVudHMKICAg YW5kIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudCk7IHRoZXNlIHdpbGwgYmUgZXF1 YWwgdW5sZXNzIHRoZSBydW4KLSAgZmFpbGVkIGJlZm9yZSBjb21wbGV0aW9uLiAgKEluIDxvcHRp b24+LVQ8L29wdGlvbj4gbW9kZSwgb25seSB0aGUgYWN0dWFsCi0gIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgaXMgcHJpbnRlZC4pCisgIGZhaWxlZCBiZWZvcmUgY29tcGxldGlvbiBvciBzb21lIFNR TC9tZXRhIGNvbW1hbmQocykgZmFpbGVkLiAgKEluCisgIDxvcHRpb24+LVQ8L29wdGlvbj4gbW9k ZSwgb25seSB0aGUgYWN0dWFsIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4pCisg IChzZWUgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMt YW5kLXJldHJpZXMtdGl0bGUiLz4KKyAgZm9yIG1vcmUgaW5mb3JtYXRpb24pCiAgIFRoZSBsYXN0 IHR3byBsaW5lcyByZXBvcnQgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIHNlY29uZCwK ICAgZmlndXJlZCB3aXRoIGFuZCB3aXRob3V0IGNvdW50aW5nIHRoZSB0aW1lIHRvIHN0YXJ0IGRh dGFiYXNlIHNlc3Npb25zLgogIDwvcGFyYT4KQEAgLTM4MCwxMSArMzgzLDI4IEBAIHBnYmVuY2gg PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5kCiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgIDx2YXJsaXN0ZW50 cnk+Ci0gICAgICA8dGVybT48b3B0aW9uPi1kPC9vcHRpb24+PC90ZXJtPgotICAgICAgPHRlcm0+ PG9wdGlvbj4tLWRlYnVnPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tZDwv b3B0aW9uPiA8cmVwbGFjZWFibGU+ZGVidWdfbGV2ZWw8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1kZWJ1Zz08L29wdGlvbj48cmVwbGFjZWFibGU+ZGVidWdfbGV2 ZWw8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4K LSAgICAgICAgUHJpbnQgZGVidWdnaW5nIG91dHB1dC4KKyAgICAgICAgUHJpbnQgZGVidWdnaW5n IG91dHB1dC4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgbGV2ZWxzOgorICAg ICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAg IDxwYXJhPjxsaXRlcmFsPm5vPC9saXRlcmFsPjogbm8gZGVidWdnaW5nIG91dHB1dCAoZXhjZXB0 IGJ1aWx0LWluCisgICAgICAgICAgICBmdW5jdGlvbiA8ZnVuY3Rpb24+ZGVidWc8L2Z1bmN0aW9u Piwgc2VlIDx4cmVmCisgICAgICAgICAgICBsaW5rZW5kPSJwZ2JlbmNoLWZ1bmN0aW9ucyIvPiku PC9wYXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgICA8cGFyYT48bGl0ZXJhbD5mYWlsczwvbGl0ZXJhbD46IHByaW50IG9ubHkgZXJy b3IgbWVzc2FnZXMgYW5kCisgICAgICAgICAgICBmYWlsdXJlcyAoc2VlIDx4cmVmIGxpbmtlbmQ9 ImVycm9ycy1hbmQtcmV0cmllcyIKKyAgICAgICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0 cmllcy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuPC9wYXJhPgorICAgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT48bGl0 ZXJhbD5hbGw8L2xpdGVyYWw+OiBwcmludCBhbGwgZGVidWdnaW5nIG91dHB1dAorICAgICAgICAg ICAgKHRocm90dGxpbmcsIGV4ZWN1dGVkL3NlbnQvcmVjZWl2ZWQgY29tbWFuZHMgZXRjLikuPC9w YXJhPgorICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0Pgor ICAgICAgICBUaGUgZGVmYXVsdCBpcyBubyBkZWJ1Z2dpbmcgb3V0cHV0LgogICAgICAgIDwvcGFy YT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtNTEzLDIyICs1 MzMsMzcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNl YWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgICAgU2hvdyBwcm9ncmVzcyBy ZXBvcnQgZXZlcnkgPHJlcGxhY2VhYmxlPnNlYzwvcmVwbGFjZWFibGU+IHNlY29uZHMuICBUaGUg cmVwb3J0CiAgICAgICAgIGluY2x1ZGVzIHRoZSB0aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIHJ1biwgdGhlIHRwcyBzaW5jZSB0aGUKICAgICAgICAgbGFzdCByZXBvcnQsIGFuZCB0aGUg dHJhbnNhY3Rpb24gbGF0ZW5jeSBhdmVyYWdlIGFuZCBzdGFuZGFyZAotICAgICAgICBkZXZpYXRp b24gc2luY2UgdGhlIGxhc3QgcmVwb3J0LiAgVW5kZXIgdGhyb3R0bGluZyAoPG9wdGlvbj4tUjwv b3B0aW9uPiksCi0gICAgICAgIHRoZSBsYXRlbmN5IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0 byB0aGUgdHJhbnNhY3Rpb24gc2NoZWR1bGVkCi0gICAgICAgIHN0YXJ0IHRpbWUsIG5vdCB0aGUg YWN0dWFsIHRyYW5zYWN0aW9uIGJlZ2lubmluZyB0aW1lLCB0aHVzIGl0IGFsc28KLSAgICAgICAg aW5jbHVkZXMgdGhlIGF2ZXJhZ2Ugc2NoZWR1bGUgbGFnIHRpbWUuCisgICAgICAgIGRldmlhdGlv biBzaW5jZSB0aGUgbGFzdCByZXBvcnQuICBJZiBhbnkgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGgg YQorICAgICAgICBmYWlsZWQgU1FMIG9yIG1ldGEgY29tbWFuZCBzaW5jZSB0aGUgbGFzdCByZXBv cnQsIHRoZXkgYXJlIGFsc28gcmVwb3J0ZWQKKyAgICAgICAgYXMgZmFpbGVkLiAgSWYgYW55IHRy YW5zYWN0aW9ucyBlbmRlZCB3aXRoIGFuIGVycm9yICJpbiBmYWlsZWQgU1FMCisgICAgICAgIHRy YW5zYWN0aW9uIGJsb2NrIiwgdGhleSBhcmUgcmVwb3J0ZWQgc2VwYXJhdGx5IGFzIDxsaXRlcmFs PmluIGZhaWxlZAorICAgICAgICB0eDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJv cnMtYW5kLXJldHJpZXMiCisgICAgICAgIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRs ZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBVbmRlcgorICAgICAgICB0aHJvdHRsaW5nICg8 b3B0aW9uPi1SPC9vcHRpb24+KSwgdGhlIGxhdGVuY3kgaXMgY29tcHV0ZWQgd2l0aCByZXNwZWN0 CisgICAgICAgIHRvIHRoZSB0cmFuc2FjdGlvbiBzY2hlZHVsZWQgc3RhcnQgdGltZSwgbm90IHRo ZSBhY3R1YWwgdHJhbnNhY3Rpb24KKyAgICAgICAgYmVnaW5uaW5nIHRpbWUsIHRodXMgaXQgYWxz byBpbmNsdWRlcyB0aGUgYXZlcmFnZSBzY2hlZHVsZSBsYWcgdGltZS4gIElmCisgICAgICAgIGFu eSB0cmFuc2FjdGlvbnMgaGF2ZSBiZWVuIHJvbGxlZCBiYWNrIGFuZCByZXRyaWVkIGFmdGVyIGEK KyAgICAgICAgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWlsdXJlIHNpbmNlIHRoZSBsYXN0IHJl cG9ydCwgdGhlIHJlcG9ydAorICAgICAgICBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIHN1Y2ggdHJh bnNhY3Rpb25zIGFuZCB0aGUgc3VtIG9mIGFsbCByZXRyaWVzLiBVc2UKKyAgICAgICAgdGhlIDxv cHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4gdG8gZW5hYmxlIHRyYW5zYWN0aW9ucyByZXRyaWVz IGFmdGVyCisgICAgICAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZXMuCiAgICAgICAg PC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAg PHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+Ci0g ICAgICA8dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2llczwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBvcnQtcGVyLWNvbW1hbmQ8L29wdGlvbj48L3Rlcm0+CiAg ICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZlcmFn ZSBwZXItc3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCi0gICAgICAg IHBlcnNwZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVhY2ggY29tbWFuZCBhZnRlciB0aGUgYmVu Y2htYXJrCi0gICAgICAgIGZpbmlzaGVzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICAgICAg ICBSZXBvcnQgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0ZXIg dGhlIGJlbmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJhZ2UgcGVyLXN0YXRlbWVu dCBsYXRlbmN5IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQorICAgICAgICBwZXJzcGVjdGl2ZSBv ZiB0aGUgY2xpZW50KSwgdGhlIG51bWJlciBvZiBhbGwgZXJyb3JzLCB0aGUgbnVtYmVyIG9mCisg ICAgICAgIGVycm9ycyAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBibG9jayIsIGFuZCB0aGUg bnVtYmVyIG9mIHJldHJpZXMKKyAgICAgICAgYWZ0ZXIgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9j ayBmYWlsdXJlcy4gIFRoZSByZXBvcnQgZGlzcGxheXMgdGhlCisgICAgICAgIGNvbHVtbnMgd2l0 aCBzdGF0aXN0aWNzIG9uIGVycm9ycyBhbmQgcmV0cmllcyBvbmx5IGlmIHRoZSBjdXJyZW50Cisg ICAgICAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gcnVuIGhhcyBhbiBlcnJv ciBvZiB0aGUgY29ycmVzcG9uZGluZworICAgICAgICB0eXBlIG9yIHJldHJ5LCByZXNwZWN0aXZl bHkuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3Rp dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY2Nyw2ICs3MDIsMzUgQEAgcGdiZW5jaCA8 b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4g PHJlcGxhY2VhYmxlPmQKICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1tYXgtdHJpZXM9PHJlcGxhY2VhYmxlPm51bWJlcl9v Zl90cmllczwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGZv ciB0cmFuc2FjdGlvbnMgd2l0aAorICAgICAgICBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1 cmVzLiBUaGUgZGVmYXVsdCBpcyAxLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8bm90ZT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICBJbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRp b24+IGl0IGlzIHVzdWFsbHkgYXNzdW1lZCB0aGF0IG9uZQorICAgICAgICAgdHJhbnNhY3Rpb24g c2NyaXB0IGNvbnRhaW5zIG9ubHkgb25lIHRyYW5zYWN0aW9uIChzZWUgPHhyZWYKKyAgICAgICAg IGxpbmtlbmQ9InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cyIKKyAgICAgICAgIGVuZHRlcm09InRy YW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuIEJl CisgICAgICAgICBjYXJlZnVsIHdoZW4gcmVwZWF0aW5nIHNjcmlwdHMgdGhhdCBjb250YWluIG11 bHRpcGxlIHRyYW5zYWN0aW9uczogdGhlCisgICAgICAgICBzY3JpcHQgaXMgYWx3YXlzIHJldHJp ZWQgY29tcGxldGVseSwgc28gdGhlIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb25zIGNhbgorICAgICAg ICAgYmUgcGVyZm9ybWVkIHNldmVyYWwgdGltZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8 L25vdGU+CisgICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQmUgY2FyZWZ1 bCB3aGVuIHJlcGVhdGluZyB0cmFuc2FjdGlvbnMgd2l0aCBzaGVsbCBjb21tYW5kcy4gVW5saWtl IHRoZQorICAgICAgICAgcmVzdWx0cyBvZiBTUUwgY29tbWFuZHMsIHRoZSByZXN1bHRzIG9mIHNo ZWxsIGNvbW1hbmRzIGFyZSBub3Qgcm9sbGVkCisgICAgICAgICBiYWNrLCBleGNlcHQgZm9yIHRo ZSB2YXJpYWJsZSB2YWx1ZSBvZiB0aGUgPGNvbW1hbmQ+XHNldHNoZWxsPC9jb21tYW5kPgorICAg ICAgICAgY29tbWFuZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbm90ZT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CiAg ICAgICA8dGVybT48b3B0aW9uPi0tcHJvZ3Jlc3MtdGltZXN0YW1wPC9vcHRpb24+PC90ZXJtPgog ICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgpAQCAtODA3LDggKzg3MSw4IEBAIHBnYmVu Y2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5kCiAgPHJlZnNlY3QxPgogICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgog Ci0gPHJlZnNlY3QyPgotICA8dGl0bGU+V2hhdCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC9x dW90ZT4gQWN0dWFsbHkgUGVyZm9ybWVkIGluIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNh dGlvbj4/PC90aXRsZT4KKyA8cmVmc2VjdDIgaWQ9InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cyI+ CisgIDx0aXRsZSBpZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzLXRpdGxlIj5XaGF0IGlzIHRo ZSA8cXVvdGU+VHJhbnNhY3Rpb248L3F1b3RlPiBBY3R1YWxseSBQZXJmb3JtZWQgaW4gPGFwcGxp Y2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPj88L3RpdGxlPgogCiAgIDxwYXJhPgogICAgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBleGVjdXRlcyB0ZXN0IHNjcmlwdHMgY2hv c2VuIHJhbmRvbWx5CkBAIC0xNTgzLDcgKzE2NDcsNyBAQCBFTkQ7CiAgICBUaGUgZm9ybWF0IG9m IHRoZSBsb2cgaXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rpb25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50 aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFn PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKzxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxh Y2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rpb25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50 aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFn PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+cmV0cmll czwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAgICB3aGVyZQpAQCAt MTYwNCw2ICsxNjY4LDE1IEBAIEVORDsKICAgIFdoZW4gYm90aCA8b3B0aW9uPi0tcmF0ZTwvb3B0 aW9uPiBhbmQgPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4gYXJlIHVzZWQsCiAgICB0 aGUgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiBmb3IgYSBza2lwcGVkIHRyYW5zYWN0 aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMKICAgIDxsaXRlcmFsPnNraXBwZWQ8L2xpdGVyYWw+Lgor ICAgPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxhY2VhYmxlPiBpcyB0aGUgc3VtIG9mIGFsbCB0 aGUgcmV0cmllcyBhZnRlciB0aGUKKyAgIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVy ZXMgZHVyaW5nIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24uIEl0IGlzCisgICBvbmx5IHBy ZXNlbnQgd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9ucyBp cyBtb3JlIHRoYW4gMQorICAgKDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4pLiBJZiB0aGUg dHJhbnNhY3Rpb24gZW5kZWQgd2l0aCBhbiBlcnJvciAiaW4KKyAgIGZhaWxlZCBTUUwgdHJhbnNh Y3Rpb24iLCBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiB3aWxsIGJlIHJlcG9y dGVkCisgICBhcyA8bGl0ZXJhbD5pbl9mYWlsZWRfdHg8L2xpdGVyYWw+LiBJZiB0aGUgdHJhbnNh Y3Rpb24gZW5kZWQgd2l0aCBvdGhlcgorICAgZXJyb3IsIGl0cyA8cmVwbGFjZWFibGU+dGltZTwv cmVwbGFjZWFibGU+IHdpbGwgYmUgcmVwb3J0ZWQgYXMKKyAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0 ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJpZXMiCisgICBlbmR0ZXJt PSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xNjMzLDYgKzE3MDYsMjMgQEAgRU5EOwogICA8L3BhcmE+ CiAKICAgPHBhcmE+CisgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgYSBzbmlwcGV0IG9m IGEgbG9nIGZpbGUgd2l0aCBlcnJvcnMgYW5kIHJldHJpZXMsCisgICB3aXRoIHRoZSBtYXhpbXVt IG51bWJlciBvZiB0cmllcyBzZXQgdG8gMTA6Cis8c2NyZWVuPgorMyAwIDQ3NDIzIDAgMTQ5OTQx NDQ5OCAzNDUwMSA0CiszIDEgODMzMyAwIDE0OTk0MTQ0OTggNDI4NDggMQorMyAyIDgzNTggMCAx NDk5NDE0NDk4IDUxMjE5IDEKKzQgMCA3MjM0NSAwIDE0OTk0MTQ0OTggNTk0MzMgNworMSAzIDQx NzE4IDAgMTQ5OTQxNDQ5OCA2Nzg3OSA1CisxIDQgODQxNiAwIDE0OTk0MTQ0OTggNzYzMTEgMQor MyAzIDMzMjM1IDAgMTQ5OTQxNDQ5OCA4NDQ2OSA0CiswIDAgZmFpbGVkIDAgMTQ5OTQxNDQ5OCA4 NDkwNSAxMAorMiAwIGZhaWxlZCAwIDE0OTk0MTQ0OTggODYyNDggMTAKKzMgNCA4MzA3IDAgMTQ5 OTQxNDQ5OCA5Mjc4OCAxCis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgogICAgV2hl biBydW5uaW5nIGEgbG9uZyB0ZXN0IG9uIGhhcmR3YXJlIHRoYXQgY2FuIGhhbmRsZSBhIGxvdCBv ZiB0cmFuc2FjdGlvbnMsCiAgICB0aGUgbG9nIGZpbGVzIGNhbiBiZWNvbWUgdmVyeSBsYXJnZS4g IFRoZSA8b3B0aW9uPi0tc2FtcGxpbmctcmF0ZTwvb3B0aW9uPiBvcHRpb24KICAgIGNhbiBiZSB1 c2VkIHRvIGxvZyBvbmx5IGEgcmFuZG9tIHNhbXBsZSBvZiB0cmFuc2FjdGlvbnMuCkBAIC0xNjQ3 LDcgKzE3MzcsNyBAQCBFTkQ7CiAgICBmb3JtYXQgaXMgdXNlZCBmb3IgdGhlIGxvZyBmaWxlczoK IAogPHN5bm9wc2lzPgotPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPm51bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ c3VtX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lfMjwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT5tYXhfbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnN1 bV9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhZ18yPC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPm1pbl9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xhZzwv cmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm51bV90cmFuc2FjdGlvbnM8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+c3VtX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xh dGVuY3lfMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFi bGU+IDxyZXBsYWNlYWJsZT5tYXhfbGF0ZW5jeTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5m YWlsZWRfdHg8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+aW5fZmFpbGVkX3R4PC9yZXBsYWNl YWJsZT4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWluX2xhZzwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tYXhfbGFnPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8 cmVwbGFjZWFibGU+c2tpcHBlZDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+ IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lzPgogCiAg ICB3aGVyZQpAQCAtMTY2MSw3ICsxNzUxLDEzIEBAIEVORDsKICAgIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB3aXRoaW4gdGhlIGludGVydmFsLAogICAgPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC9y ZXBsYWNlYWJsZT4gaXMgdGhlIG1pbmltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAog ICAgYW5kCi0gICA8cmVwbGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUg bWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUgaW50ZXJ2YWwuCisgICA8cmVwbGFjZWFibGU+bWF4 X2xhdGVuY3k8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUg aW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gaXMgdGhl IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCBlbmRlZAorICAgd2l0aCBhIGZhaWxlZCBTUUwg b3IgbWV0YSBjb21tYW5kIHdpdGhpbiB0aGUgaW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+aW5f ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhh dAorICAgZW5kZWQgd2l0aCBhbiBlcnJvciAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBibG9j ayIgKHNlZQorICAgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJl cnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4KKyAgIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAg IFRoZSBuZXh0IGZpZWxkcywKICAgIDxyZXBsYWNlYWJsZT5zdW1fbGFnPC9yZXBsYWNlYWJsZT4s IDxyZXBsYWNlYWJsZT5zdW1fbGFnXzI8L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPm1pbl9s YWc8L3JlcGxhY2VhYmxlPiwKICAgIGFuZCA8cmVwbGFjZWFibGU+bWF4X2xhZzwvcmVwbGFjZWFi bGU+LCBhcmUgb25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tcmF0ZTwvb3B0aW9uPgpAQCAt MTY2OSwyMSArMTc2NSwyNyBAQCBFTkQ7CiAgICBUaGV5IHByb3ZpZGUgc3RhdGlzdGljcyBhYm91 dCB0aGUgdGltZSBlYWNoIHRyYW5zYWN0aW9uIGhhZCB0byB3YWl0IGZvciB0aGUKICAgIHByZXZp b3VzIG9uZSB0byBmaW5pc2gsIGkuZS4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBlYWNoIHRyYW5z YWN0aW9uJ3MKICAgIHNjaGVkdWxlZCBzdGFydCB0aW1lIGFuZCB0aGUgdGltZSBpdCBhY3R1YWxs eSBzdGFydGVkLgotICAgVGhlIHZlcnkgbGFzdCBmaWVsZCwgPHJlcGxhY2VhYmxlPnNraXBwZWQ8 L3JlcGxhY2VhYmxlPiwKKyAgIFRoZSBuZXh0IGZpZWxkLCA8cmVwbGFjZWFibGU+c2tpcHBlZDwv cmVwbGFjZWFibGU+LAogICAgaXMgb25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tbGF0ZW5j eS1saW1pdDwvb3B0aW9uPiBvcHRpb24gaXMgdXNlZCwgdG9vLgogICAgSXQgY291bnRzIHRoZSBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgYmVjYXVzZSB0aGV5IHdvdWxkIGhhdmUKICAg IHN0YXJ0ZWQgdG9vIGxhdGUuCisgICBUaGUgPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxh Y2VhYmxlPiBhbmQKKyAgIDxyZXBsYWNlYWJsZT5yZXRyaWVzPC9yZXBsYWNlYWJsZT4gZmllbGRz IGFyZSBvbmx5IHByZXNlbnQgaWYgdGhlIG1heGltdW0KKyAgIG51bWJlciBvZiB0cmllcyBmb3Ig dHJhbnNhY3Rpb25zIGlzIG1vcmUgdGhhbiAxCisgICAoPG9wdGlvbj4tLW1heC10cmllczwvb3B0 aW9uPikuIFRoZXkgcmVwb3J0IHRoZSBudW1iZXIgb2YgcmV0cmllZAorICAgdHJhbnNhY3Rpb25z IGFuZCB0aGUgc3VtIG9mIGFsbCB0aGUgcmV0cmllcyBhZnRlciBzZXJpYWxpemF0aW9uIG9yIGRl YWRsb2NrCisgICBmYWlsdXJlcyB3aXRoaW4gdGhlIGludGVydmFsLgogICAgRWFjaCB0cmFuc2Fj dGlvbiBpcyBjb3VudGVkIGluIHRoZSBpbnRlcnZhbCB3aGVuIGl0IHdhcyBjb21taXR0ZWQuCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KICAgIEhlcmUgaXMgc29tZSBleGFtcGxlIG91dHB1dDoKIDxz Y3JlZW4+Ci0xMzQ1ODI4NTAxIDU2MDEgMTU0Mjc0NCA0ODM1NTI0MTYgNjEgMjU3MwotMTM0NTgy ODUwMyA3ODg0IDE5Nzk4MTIgNTY1ODA2NzM2IDYwIDE0NzkKLTEzNDU4Mjg1MDUgNzIwOCAxOTc5 NDIyIDU2NzI3NzU1MiA1OSAxMzkxCi0xMzQ1ODI4NTA3IDc2ODUgMTk4MDI2OCA1Njk3ODQ3MTQg NjAgMTM5OAotMTM0NTgyODUwOSA3MDczIDE5Nzk3NzkgNTczNDg5OTQxIDIzNiAxNDExCisxMzQ1 ODI4NTAxIDU2MDEgMTU0Mjc0NCA0ODM1NTI0MTYgNjEgMjU3MyAwIDAKKzEzNDU4Mjg1MDMgNzg4 NCAxOTc5ODEyIDU2NTgwNjczNiA2MCAxNDc5IDAgMAorMTM0NTgyODUwNSA3MjA4IDE5Nzk0MjIg NTY3Mjc3NTUyIDU5IDEzOTEgMCAwCisxMzQ1ODI4NTA3IDc2ODUgMTk4MDI2OCA1Njk3ODQ3MTQg NjAgMTM5OCAwIDAKKzEzNDU4Mjg1MDkgNzA3MyAxOTc5Nzc5IDU3MzQ4OTk0MSAyMzYgMTQxMSAw IDAKIDwvc2NyZWVuPjwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTE2OTUsMTUgKzE3OTcsNTQgQEAg RU5EOwogIDwvcmVmc2VjdDI+CiAKICA8cmVmc2VjdDI+Ci0gIDx0aXRsZT5QZXItU3RhdGVtZW50 IExhdGVuY2llczwvdGl0bGU+CisgIDx0aXRsZT5QZXItU3RhdGVtZW50IFJlcG9ydDwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICBXaXRoIHRoZSA8b3B0aW9uPi1yPC9vcHRpb24+IG9wdGlvbiwgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPgorICAgY29sbGVjdHMgdGhlIGZvbGxvd2lu ZyBzdGF0aXN0aWNzIGZvciBlYWNoIHN0YXRlbWVudDoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgIDxsaXRlcmFsPmxhdGVuY3k8L2xp dGVyYWw+ICZtZGFzaDsgZWxhcHNlZCB0cmFuc2FjdGlvbiB0aW1lIGZvciBlYWNoCisgICAgICAg ICBzdGF0ZW1lbnQuIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gcmVwb3J0cyBh biBhdmVyYWdlIHZhbHVlCisgICAgICAgICBvZiBhbGwgc3VjY2Vzc2Z1bCBydW5zIG9mIHRoZSBz dGF0ZW1lbnQuCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyBpbiB0aGlz IHN0YXRlbWVudC4gU2VlCisgICAgICAgICA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJp ZXMiIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPgorICAgICAgICAgZm9yIG1v cmUgaW5mb3JtYXRpb24uCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyAi aW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiIgaW4gdGhpcyBzdGF0ZW1lbnQuIFNlZQorICAgICAg ICAgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5k LXJldHJpZXMtdGl0bGUiLz4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICAgVGhlIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBv ciBhIGRlYWRsb2NrIGZhaWx1cmUgaW4KKyAgICAgICAgIHRoaXMgc3RhdGVtZW50LiBTZWUgPHhy ZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIgorICAgICAgICAgZW5kdGVybT0iZXJyb3Jz LWFuZC1yZXRyaWVzLXRpdGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgIDwvcGFy YT4KKyAgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBXaXRoIHRoZSA8b3B0aW9uPi1yPC9vcHRpb24+IG9wdGlvbiwgPGFwcGxpY2F0 aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBjb2xsZWN0cwotICAgdGhlIGVsYXBzZWQgdHJhbnNh Y3Rpb24gdGltZSBvZiBlYWNoIHN0YXRlbWVudCBleGVjdXRlZCBieSBldmVyeQotICAgY2xpZW50 LiAgSXQgdGhlbiByZXBvcnRzIGFuIGF2ZXJhZ2Ugb2YgdGhvc2UgdmFsdWVzLCByZWZlcnJlZCB0 bwotICAgYXMgdGhlIGxhdGVuY3kgZm9yIGVhY2ggc3RhdGVtZW50LCBhZnRlciB0aGUgYmVuY2ht YXJrIGhhcyBmaW5pc2hlZC4KKyAgIFRoZSByZXBvcnQgZGlzcGxheXMgdGhlIGNvbHVtbnMgd2l0 aCBzdGF0aXN0aWNzIG9uIGVycm9ycyBhbmQgcmV0cmllcyBvbmx5IGlmCisgICB0aGUgY3VycmVu dCA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+IHJ1biBoYXMgYW4gZXJyb3Igb3Ig cmV0cnksCisgICByZXNwZWN0aXZlbHkuCiAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICBBbGwg dmFsdWVzIGFyZSBjb21wdXRlZCBmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkg Y2xpZW50IGFuZCBhcmUKKyAgIHJlcG9ydGVkIGFmdGVyIHRoZSBiZW5jaG1hcmsgaGFzIGZpbmlz aGVkLgorICAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgRm9yIHRoZSBkZWZhdWx0IHNjcmlwdCwg dGhlIG91dHB1dCB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGlzOgogPHNjcmVlbj4KQEAgLTE3MTUs NiArMTg1Niw3IEBAIG51bWJlciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEK IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVyIG9mIHRyYW5z YWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwCittYXhpbXVtIG51bWJlciBv ZiB0cmllczogMQogbGF0ZW5jeSBhdmVyYWdlID0gMTUuODQ0IG1zCiBsYXRlbmN5IHN0ZGRldiA9 IDIuNzE1IG1zCiB0cHMgPSA2MTguNzY0NTU1IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKQpAQCAtMTczMiwxMCArMTg3NCw0OSBAQCBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1p bGxpc2Vjb25kczoKICAgICAgICAgMC4zNzEgIElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAo dGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQsIDpk ZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOwogICAgICAgICAxLjIxMiAgRU5EOwogPC9zY3JlZW4+ CisKKyAgIEFub3RoZXIgZXhhbXBsZSBvZiBvdXRwdXQgZm9yIHRoZSBkZWZhdWx0IHNjcmlwdCB1 c2luZyBzZXJpYWxpemFibGUgZGVmYXVsdAorICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVs ICg8Y29tbWFuZD5QR09QVElPTlM9Jy1jCisgICBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlv bj1zZXJpYWxpemFibGUnIHBnYmVuY2ggLi4uPC9jb21tYW5kPik6Cis8c2NyZWVuPgorc3RhcnRp bmcgdmFjdXVtLi4uZW5kLgordHJhbnNhY3Rpb24gdHlwZTogJmx0O2J1aWx0aW46IFRQQy1CIChz b3J0IG9mKSZndDsKK3NjYWxpbmcgZmFjdG9yOiAxCitxdWVyeSBtb2RlOiBzaW1wbGUKK251bWJl ciBvZiBjbGllbnRzOiAxMAorbnVtYmVyIG9mIHRocmVhZHM6IDEKK251bWJlciBvZiB0cmFuc2Fj dGlvbnMgcGVyIGNsaWVudDogMTAwMAorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBw cm9jZXNzZWQ6IDM5ODgvMTAwMDAKK251bWJlciBvZiBlcnJvcnM6IDYwMTIgKDYwLjEyMCUpCitu dW1iZXIgb2YgcmV0cmllZDogODExMyAoODEuMTMwJSkKK251bWJlciBvZiByZXRyaWVzOiA2NTU4 NjkKK21heGltdW0gbnVtYmVyIG9mIHRyaWVzOiAxMDAKK2xhdGVuY3kgYXZlcmFnZSA9IDM0NS45 NzkgbXMKK2xhdGVuY3kgc3RkZGV2ID0gNjM3Ljk2NCBtcwordHBzID0gOC4yMDM4ODQgKGluY2x1 ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpCit0cHMgPSA4LjIwMzk2OSAoZXhjbHVkaW5n IGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKK3N0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlz ZWNvbmRzLCBlcnJvcnMgYW5kIHJldHJpZXM6CisgIDAuMDAzICAgICAwICAgICAgIDAgIFxzZXQg YWlkIHJhbmRvbSgxLCAxMDAwMDAgKiA6c2NhbGUpCisgIDAuMDAwICAgICAwICAgICAgIDAgIFxz ZXQgYmlkIHJhbmRvbSgxLCAxICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAgICAgICAwICBcc2V0 IHRpZCByYW5kb20oMSwgMTAgKiA6c2NhbGUpCisgIDAuMDAwICAgICAwICAgICAgIDAgIFxzZXQg ZGVsdGEgcmFuZG9tKC01MDAwLCA1MDAwKQorICAwLjMxMiAgICAgMCAgICAgICAwICBCRUdJTjsK KyAgMC44NjYgICAgIDAgICAgICAgMCAgVVBEQVRFIHBnYmVuY2hfYWNjb3VudHMKKyAgICAgICAg ICAgICAgICAgICAgICAgU0VUIGFiYWxhbmNlID0gYWJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYWlk ID0gOmFpZDsKKyAgMC42OTggICAgIDAgICAgICAgMCAgU0VMRUNUIGFiYWxhbmNlIEZST00gcGdi ZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlkOworICAwLjk2NSAgNTk4MyAgNjQ4ODI5ICBV UERBVEUgcGdiZW5jaF90ZWxsZXJzCisgICAgICAgICAgICAgICAgICAgICAgIFNFVCB0YmFsYW5j ZSA9IHRiYWxhbmNlICsgOmRlbHRhIFdIRVJFIHRpZCA9IDp0aWQ7CisgIDAuODg2ICAgIDI5ICAg IDcwMjkgIFVQREFURSBwZ2JlbmNoX2JyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgICAgIFNF VCBiYmFsYW5jZSA9IGJiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7CisgIDAuOTYw ICAgICAwICAgICAgIDAgIElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBtdGltZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENVUlJFTlRf VElNRVNUQU1QKTsKKyAgMS4wMDkgICAgIDAgICAgICAxMSAgRU5EOworPC9zY3JlZW4+CiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIElmIG11bHRpcGxlIHNjcmlwdCBmaWxlcyBhcmUgc3BlY2lm aWVkLCB0aGUgYXZlcmFnZXMgYXJlIHJlcG9ydGVkCisgICBJZiBtdWx0aXBsZSBzY3JpcHQgZmls ZXMgYXJlIHNwZWNpZmllZCwgYWxsIHN0YXRpc3RpY3MgYXJlIHJlcG9ydGVkCiAgICBzZXBhcmF0 ZWx5IGZvciBlYWNoIHNjcmlwdCBmaWxlLgogICA8L3BhcmE+CiAKQEAgLTE3NDksNiArMTkzMCw2 MyBAQCBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczoKICAgPC9wYXJhPgogIDwv cmVmc2VjdDI+CiAKKyA8cmVmc2VjdDIgaWQ9ImVycm9ycy1hbmQtcmV0cmllcyI+CisgIDx0aXRs ZSBpZD0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIj5FcnJvcnMgYW5kIFNlcmlhbGl6YXRpb24v RGVhZGxvY2sgUmV0cmllczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBDbGllbnQncyBydW4gaXMg YWJvcnRlZCBvbmx5IGluIGNhc2Ugb2YgYSBzZXJpb3VzIGVycm9yLCBmb3IgZXhhbXBsZSwgdGhl CisgICBjb25uZWN0aW9uIHdpdGggdGhlIGJhY2tlbmQgd2FzIGxvc3QuIE90aGVyd2lzZSBpZiB0 aGUgZXhlY3V0aW9uIG9mIFNRTCBvcgorICAgbWV0YSBjb21tYW5kIGZhaWxzLCB0aGUgY2xpZW50 J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSB1bnRpbCB0aGUgZW5kIG9mIHRoZQorICAgY3VycmVu dCBzY3JpcHQgZXhlY3V0aW9uIChpdCBpcyBhc3N1bWVkIHRoYXQgb25lIHRyYW5zYWN0aW9uIHNj cmlwdCBjb250YWlucworICAgb25seSBvbmUgdHJhbnNhY3Rpb247IHNlZSA8eHJlZiBsaW5rZW5k PSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMiCisgICBlbmR0ZXJtPSJ0cmFuc2FjdGlvbnMtYW5k LXNjcmlwdHMtdGl0bGUiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorICAgVHJhbnNhY3Rpb25z IHdpdGggc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBhcmUgcm9sbGVkIGJhY2sg YW5kCisgICByZXBlYXRlZCB1bnRpbCB0aGV5IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBvciByZWFj aCB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAgIHRyaWVzIHNwZWNpZmllZCBieSB0aGUgPG9wdGlv bj4tLW1heC10cmllczwvb3B0aW9uPiBvcHRpb24uIElmIHRoZSBsYXN0CisgICB0cmFuc2FjdGlv biBydW4gZmFpbHMsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXBvcnRlZCBhcyBmYWlsZWQu CisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxwYXJhPgorICAgIElmIGEgZmFpbGVkIHRyYW5z YWN0aW9uIGJsb2NrIGRvZXMgbm90IHRlcm1pbmF0ZSBpbiB0aGUgY3VycmVudCBzY3JpcHQsIHRo ZQorICAgIGNvbW1hbmRzIG9mIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBhcmUgcHJvY2Vzc2VkIGFz IHVzdWFsIHNvIHlvdSBjYW4gZ2V0IGEKKyAgICBsb3Qgb2YgZXJyb3JzIG9mIHR5cGUgImluIGZh aWxlZCBTUUwgdHJhbnNhY3Rpb24iICh3aGVuIHRoZSBjdXJyZW50IFNRTAorICAgIHRyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgYW5kIGNvbW1hbmRzIGlnbm9yZWQgdW50aWwgZW5kIG9mIHRyYW5zYWN0 aW9uIGJsb2NrKS4KKyAgICBJbiBzdWNoIGNhc2VzIHlvdSBjYW4gdXNlIHNlcGFyYXRlIHN0YXRp c3RpY3Mgb2YgdGhlc2UgZXJyb3JzIGluIGFsbAorICAgIHJlcG9ydHMuCisgICA8L3BhcmE+Cisg IDwvbm90ZT4KKworICA8cGFyYT4KKyAgIFRoZSBsYXRlbmN5IG9mIGEgc3VjY2Vzc2Z1bCB0cmFu c2FjdGlvbiBpbmNsdWRlcyB0aGUgZW50aXJlIHRpbWUgb2YKKyAgIHRyYW5zYWN0aW9uIGV4ZWN1 dGlvbiB3aXRoIHJvbGxiYWNrcyBhbmQgcmV0cmllcy4gVGhlIGxhdGVuY3kgZm9yIGZhaWxlZAor ICAgdHJhbnNhY3Rpb25zIGFuZCBjb21tYW5kcyBpcyBub3QgY29tcHV0ZWQgc2VwYXJhdGVseS4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIG1haW4gcmVwb3J0IGNvbnRhaW5zIHRoZSBu dW1iZXIgb2YgZmFpbGVkIHRyYW5zYWN0aW9ucyBpZiBpdCBpcyBub24temVyby4KKyAgIElmIHRo ZSB0b3RhbCBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGggYW4gZXJyb3IgImluIGZh aWxlZCBTUUwKKyAgIHRyYW5zYWN0aW9uIGJsb2NrIiBpcyBub24temVybywgdGhlIG1haW4gcmVw b3J0IGFsc28gY29udGFpbnMgaXQuIElmIHRoZQorICAgdG90YWwgbnVtYmVyIG9mIHJldHJpZWQg dHJhbnNhY3Rpb25zIGlzIG5vbi16ZXJvLCB0aGUgbWFpbiByZXBvcnQgYWxzbworICAgY29udGFp bnMgdGhlIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXRyaWVzOiB0aGUgdG90YWwgbnVtYmVyIG9m IHJldHJpZWQKKyAgIHRyYW5zYWN0aW9ucyBhbmQgdG90YWwgbnVtYmVyIG9mIHJldHJpZXMgKHVz ZSBvcHRpb24KKyAgIDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4gdG8gbWFrZSBpdCBwb3Nz aWJsZSkuIFRoZSBwZXItc3RhdGVtZW50IHJlcG9ydAorICAgaW5oZXJpdHMgYWxsIGNvbHVtbnMg ZnJvbSB0aGUgbWFpbiByZXBvcnQuIE5vdGUgdGhhdCBpZiBhIGZhaWx1cmUvZXJyb3IKKyAgIG9j Y3VycywgdGhlIGZvbGxvd2luZyBmYWlsdXJlcy9lcnJvcnMgaW4gdGhlIGN1cnJlbnQgc2NyaXB0 IGV4ZWN1dGlvbiBhcmUgbm90CisgICBzaG93biBpbiB0aGUgcmVwb3J0cy4gVGhlIHJldHJ5IGlz IG9ubHkgcmVwb3J0ZWQgZm9yIHRoZSBmaXJzdCBjb21tYW5kIHdoZXJlCisgICB0aGUgZmFpbHVy ZSBvY2N1cmVkIGR1cmluZyB0aGUgY3VycmVudCBzY3JpcHQgZXhlY3V0aW9uLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBJZiB5b3Ugd2FudCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZhaWx1 cmVzIG9yIGVycm9ycyBieSB0eXBlLCB1c2UgdGhlCisgICA8YXBwbGljYXRpb24+cGdiZW5jaDwv YXBwbGljYXRpb24+IGRlYnVnZ2luZyBvdXRwdXQgY3JlYXRlZCB3aXRoIHRoZSBvcHRpb24KKyAg IDxvcHRpb24+LS1kZWJ1Zzwvb3B0aW9uPiBhbmQgd2l0aCB0aGUgZGVidWdnaW5nIGxldmVsCisg ICA8bGl0ZXJhbD5mYWlsczwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+YWxsPC9saXRlcmFsPi4gVGhl IGZpcnN0IHZhcmlhbnQgaXMKKyAgIHJlY29tbWVuZGVkIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVz ZSB3aXRoIGluIHRoZSBzZWNvbmQgY2FzZSB0aGUgZGVidWdnaW5nCisgICBvdXRwdXQgY2FuIGJl IHZlcnkgbGFyZ2UuCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QyPgorCiAgPHJlZnNlY3QyPgogICA8 dGl0bGU+R29vZCBQcmFjdGljZXM8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCA4NTI5ZTdkLi5j NGUyNDM2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTU5LDYgKzU5LDkgQEAKIAogI2luY2x1ZGUgInBnYmVu Y2guaCIKIAorI2RlZmluZSBFUlJDT0RFX0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gICIyNVAw MiIKKyNkZWZpbmUgRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFICAiNDAwMDEiCisj ZGVmaW5lIEVSUkNPREVfVF9SX0RFQURMT0NLX0RFVEVDVEVEICAiNDBQMDEiCiAjZGVmaW5lIEVS UkNPREVfVU5ERUZJTkVEX1RBQkxFICAiNDJQMDEiCiAKIC8qCkBAIC0xODYsOCArMTg5LDEzIEBA IGJvb2wJCXByb2dyZXNzX3RpbWVzdGFtcCA9IGZhbHNlOyAvKiBwcm9ncmVzcyByZXBvcnQgd2l0 aCBVbml4IHRpbWUgKi8KIGludAkJCW5jbGllbnRzID0gMTsJCS8qIG51bWJlciBvZiBjbGllbnRz ICovCiBpbnQJCQludGhyZWFkcyA9IDE7CQkvKiBudW1iZXIgb2YgdGhyZWFkcyAqLwogYm9vbAkJ aXNfY29ubmVjdDsJCQkvKiBlc3RhYmxpc2ggY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlv biAqLwotYm9vbAkJaXNfbGF0ZW5jaWVzOwkJLyogcmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2ll cyAqLworYm9vbAkJcmVwb3J0X3Blcl9jb21tYW5kID0gZmFsc2U7CS8qIHJlcG9ydCBwZXItY29t bWFuZCBsYXRlbmNpZXMsIHJldHJpZXMKKwkJCQkJCQkJCQkgKiBhZnRlciB0aGUgZmFpbHVyZXMg YW5kIGVycm9ycworCQkJCQkJCQkJCSAqIChmYWlsdXJlcyB3aXRob3V0IHJldHJ5aW5nKSAqLwog aW50CQkJbWFpbl9waWQ7CQkJLyogbWFpbiBwcm9jZXNzIGlkIHVzZWQgaW4gbG9nIGZpbGVuYW1l ICovCitpbnQJCQltYXhfdHJpZXMgPSAxOwkJLyogbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgdG8g cnVuIHRoZQorCQkJCQkJCQkgKiB0cmFuc2FjdGlvbiB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVh ZGxvY2sKKwkJCQkJCQkJICogZmFpbHVyZXMgKi8KIAogY2hhcgkgICAqcGdob3N0ID0gIiI7CiBj aGFyCSAgICpwZ3BvcnQgPSAiIjsKQEAgLTI0MiwxNCArMjUwLDY2IEBAIHR5cGVkZWYgc3RydWN0 IFNpbXBsZVN0YXRzCiB0eXBlZGVmIHN0cnVjdCBTdGF0c0RhdGEKIHsKIAl0aW1lX3QJCXN0YXJ0 X3RpbWU7CQkvKiBpbnRlcnZhbCBzdGFydCB0aW1lLCBmb3IgYWdncmVnYXRlcyAqLwotCWludDY0 CQljbnQ7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucywgaW5jbHVkaW5nIHNraXBwZWQgKi8K KwlpbnQ2NAkJY250OwkJCS8qIG51bWJlciBvZiBzdWNlc3NmdWxsIHRyYW5zYWN0aW9ucywgaW5j bHVkaW5nCisJCQkJCQkJCSAqIHNraXBwZWQgKi8KIAlpbnQ2NAkJc2tpcHBlZDsJCS8qIG51bWJl ciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBlZCB1bmRlciAtLXJhdGUKIAkJCQkJCQkJICogYW5kIC0t bGF0ZW5jeS1saW1pdCAqLworCWludDY0CQlyZXRyaWVzOworCWludDY0CQlyZXRyaWVkOwkJLyog bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IHdlcmUgcmV0cmllZAorCQkJCQkJCQkgKiBhZnRl ciBhIHNlcmlhbGl6YXRpb24gb3IgYSBkZWFkbG9jaworCQkJCQkJCQkgKiBmYWlsdXJlICovCisJ aW50NjQJCWVycm9yczsJCQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBub3Qg cmV0cmllZAorCQkJCQkJCQkgKiBhZnRlciBhIHNlcmlhbGl6YXRpb24gb3IgYSBkZWFkbG9jawor CQkJCQkJCQkgKiBmYWlsdXJlIG9yIGhhZCBhbm90aGVyIGVycm9yIChpbmNsdWRpbmcgbWV0YQor CQkJCQkJCQkgKiBjb21tYW5kcyBlcnJvcnMpICovCisJaW50NjQJCWVycm9yc19pbl9mYWlsZWRf dHg7CS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdGhhdCBmYWlsZWQgaW4KKwkJCQkJCQkJCQkg KiBhIGVycm9yCisJCQkJCQkJCQkJICogRVJSQ09ERV9JTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9O ICovCiAJU2ltcGxlU3RhdHMgbGF0ZW5jeTsKIAlTaW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0 YTsKIAogLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBjbGllbnQgdmFyaWFibGVzLgorICovCit0 eXBlZGVmIHN0cnVjdCBWYXJpYWJsZXMKK3sKKwlWYXJpYWJsZSAgICphcnJheTsJCQkvKiBhcnJh eSBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLworCWludAkJCW52YXJpYWJsZXM7CQkvKiBudW1i ZXIgb2YgdmFyaWFibGVzICovCisJYm9vbAkJdmFyc19zb3J0ZWQ7CS8qIGFyZSB2YXJpYWJsZXMg c29ydGVkIGJ5IG5hbWU/ICovCit9IFZhcmlhYmxlczsKKworLyoKKyAqIERhdGEgc3RydWN0dXJl IGZvciB0aHJlYWQvY2xpZW50IHJhbmRvbSBzZWVkLgorICovCit0eXBlZGVmIHN0cnVjdCBSYW5k b21TdGF0ZQoreworCXVuc2lnbmVkIHNob3J0IGRhdGFbM107Cit9IFJhbmRvbVN0YXRlOworCisv KgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIHJlcGVhdGluZyBhIHRyYW5zYWN0aW9uIGZyb20gdGhl IGJlZ2lubm5pbmcgd2l0aCB0aGUgc2FtZQorICogcGFyYW1ldGVycy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgUmV0cnlTdGF0ZQoreworCVJhbmRvbVN0YXRlIHJhbmRvbV9zdGF0ZTsJLyogcmFuZG9t IHNlZWQgKi8KKwlWYXJpYWJsZXMgICB2YXJpYWJsZXM7CQkvKiBjbGllbnQgdmFyaWFibGVzICov Cit9IFJldHJ5U3RhdGU7CisKKy8qCisgKiBGb3IgdGhlIGZhaWx1cmVzIGR1cmluZyBzY3JpcHQg ZXhlY3V0aW9uLgorICovCit0eXBlZGVmIGVudW0gRmFpbHVyZVN0YXR1cworeworCU5PX0ZBSUxV UkUgPSAwLAorCVNFUklBTElaQVRJT05fRkFJTFVSRSwKKwlERUFETE9DS19GQUlMVVJFLAorCUlO X0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04sCisJQU5PVEhFUl9GQUlMVVJFCit9IEZhaWx1cmVTdGF0 dXM7CisKKy8qCiAgKiBDb25uZWN0aW9uIHN0YXRlIG1hY2hpbmUgc3RhdGVzLgogICovCiB0eXBl ZGVmIGVudW0KQEAgLTMwNCw2ICszNjQsMTkgQEAgdHlwZWRlZiBlbnVtCiAJQ1NUQVRFX0VORF9D T01NQU5ELAogCiAJLyoKKwkgKiBTdGF0ZXMgZm9yIHRyYW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6 YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMuCisJICoKKwkgKiBGaXJzdCwgcmVwb3J0IHRoZSBm YWlsdXJlIGluIENTVEFURV9GQUlMVVJFLiBUaGVuIHByb2Nlc3Mgb3RoZXIgY29tbWFuZHMKKwkg KiBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGlmIGFueSBhbmQgZ28gdG8gQ1NUQVRFX1JFVFJZ LiBJZiB3ZSBjYW4KKwkgKiByZS1leGVjdXRlIHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSB2ZXJ5 IGJlZ2lubmluZywgc2V0IHRoZSBzYW1lCisJICogcGFyYW1ldGVycyBmb3IgdGhlIHRyYW5zYWN0 aW9uIGV4ZWN1dGlvbiBhcyBpbiB0aGUgcHJldmlvdXMgdHJpZXMgYW5kCisJICogcHJvY2VzcyB0 aGUgZmlyc3QgdHJhbnNhY3Rpb24gY29tbWFuZCBpbiBDU1RBVEVfU1RBUlRfQ09NTUFORC4gT3Ro ZXJ3aXNlLAorCSAqIGdvIHRvIENTVEFURV9FTkRfVFggdG8gY29tcGxldGUgdGhpcyB0cmFuc2Fj dGlvbi4KKwkgKi8KKwlDU1RBVEVfRkFJTFVSRSwKKwlDU1RBVEVfUkVUUlksCisKKwkvKgogCSAq IENTVEFURV9FTkRfVFggcGVyZm9ybXMgZW5kLW9mLXRyYW5zYWN0aW9uIHByb2Nlc3NpbmcuICBD YWxjdWxhdGVzCiAJICogbGF0ZW5jeSwgYW5kIGxvZ3MgdGhlIHRyYW5zYWN0aW9uLiAgSW4gLS1j b25uZWN0IG1vZGUsIGNsb3NlcyB0aGUKIAkgKiBjdXJyZW50IGNvbm5lY3Rpb24uICBDaG9vc2Vz IHRoZSBuZXh0IHNjcmlwdCB0byBleGVjdXRlIGFuZCBzdGFydHMgb3ZlcgpAQCAtMzI5LDE0ICs0 MDIsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlpZDsJCQkJLyogY2xpZW50IE5vLiAqLwog CUNvbm5lY3Rpb25TdGF0ZUVudW0gc3RhdGU7CS8qIHN0YXRlIG1hY2hpbmUncyBjdXJyZW50IHN0 YXRlLiAqLwogCUNvbmRpdGlvbmFsU3RhY2sgY3N0YWNrOwkvKiBlbmNsb3NpbmcgY29uZGl0aW9u YWxzIHN0YXRlICovCisJUmFuZG9tU3RhdGUgcmFuZG9tX3N0YXRlOwkvKiBzZXBhcmF0ZSByYW5k b21uZXNzIGZvciBlYWNoIGNsaWVudCAqLwogCiAJaW50CQkJdXNlX2ZpbGU7CQkvKiBpbmRleCBp biBzcWxfc2NyaXB0IGZvciB0aGlzIGNsaWVudCAqLwogCWludAkJCWNvbW1hbmQ7CQkvKiBjb21t YW5kIG51bWJlciBpbiBzY3JpcHQgKi8KIAogCS8qIGNsaWVudCB2YXJpYWJsZXMgKi8KLQlWYXJp YWJsZSAgICp2YXJpYWJsZXM7CQkvKiBhcnJheSBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwot CWludAkJCW52YXJpYWJsZXM7CQkvKiBudW1iZXIgb2YgdmFyaWFibGVzICovCi0JYm9vbAkJdmFy c19zb3J0ZWQ7CS8qIGFyZSB2YXJpYWJsZXMgc29ydGVkIGJ5IG5hbWU/ICovCisJVmFyaWFibGVz ICAgdmFyaWFibGVzOwogCiAJLyogdmFyaW91cyB0aW1lcyBhYm91dCBjdXJyZW50IHRyYW5zYWN0 aW9uICovCiAJaW50NjQJCXR4bl9zY2hlZHVsZWQ7CS8qIHNjaGVkdWxlZCBzdGFydCB0aW1lIG9m IHRyYW5zYWN0aW9uICh1c2VjKSAqLwpAQCAtMzQ2LDYgKzQxOCwxNiBAQCB0eXBlZGVmIHN0cnVj dAogCiAJYm9vbAkJcHJlcGFyZWRbTUFYX1NDUklQVFNdOwkvKiB3aGV0aGVyIGNsaWVudCBwcmVw YXJlZCB0aGUgc2NyaXB0ICovCiAKKwkvKgorCSAqIEZvciBwcm9jZXNzaW5nIGVycm9ycyBhbmQg cmVwZWF0aW5nIHRyYW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IKKwkgKiBkZWFkbG9j ayBmYWlsdXJlczoKKwkgKi8KKwlGYWlsdXJlU3RhdHVzIGZpcnN0X2ZhaWx1cmU7CS8qIHRoZSBz dGF0dXMgb2YgdGhlIGZpcnN0IGZhaWx1cmUgaW4gdGhlCisJCQkJCQkJCQkgKiBjdXJyZW50IHRy YW5zYWN0aW9uIGV4ZWN1dGlvbjsgTk9fRkFJTFVSRQorCQkJCQkJCQkJICogaWYgdGhlcmUgd2Vy ZSBubyBmYWlsdXJlcyBvciBlcnJvcnMgKi8KKwlSZXRyeVN0YXRlICByZXRyeV9zdGF0ZTsKKwlp bnQJCQlyZXRyaWVzOwkJLyogaXMgbGVzcyB0aGFuIG1heF90cmllcyAqLworCiAJLyogcGVyIGNs aWVudCBjb2xsZWN0ZWQgc3RhdHMgKi8KIAlpbnQ2NAkJY250OwkJCS8qIGNsaWVudCB0cmFuc2Fj dGlvbiBjb3VudCwgZm9yIC10ICovCiAJaW50CQkJZWNudDsJCQkvKiBlcnJvciBjb3VudCAqLwpA QCAtMzg5LDcgKzQ3MSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJcHRocmVhZF90CXRocmVhZDsJCQkv KiB0aHJlYWQgaGFuZGxlICovCiAJQ1N0YXRlCSAgICpzdGF0ZTsJCQkvKiBhcnJheSBvZiBDU3Rh dGUgKi8KIAlpbnQJCQluc3RhdGU7CQkJLyogbGVuZ3RoIG9mIHN0YXRlW10gKi8KLQl1bnNpZ25l ZCBzaG9ydCByYW5kb21fc3RhdGVbM107IC8qIHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2gg dGhyZWFkICovCisJUmFuZG9tU3RhdGUgcmFuZG9tX3N0YXRlOyAJLyogc2VwYXJhdGUgcmFuZG9t bmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8KIAlpbnQ2NAkJdGhyb3R0bGVfdHJpZ2dlcjsJLyogcHJl dmlvdXMvbmV4dCB0aHJvdHRsaW5nICh1cykgKi8KIAlGSUxFCSAgICpsb2dmaWxlOwkJLyogd2hl cmUgdG8gbG9nLCBvciBOVUxMICovCiAJWmlwZkNhY2hlCXppcGZfY2FjaGU7CQkvKiBmb3IgdGhy ZWFkLXNhZmUgIHppcGZpYW4gcmFuZG9tIG51bWJlcgpAQCAtNDQ1LDYgKzUyNywxMCBAQCB0eXBl ZGVmIHN0cnVjdAogCWNoYXIJICAgKmFyZ3ZbTUFYX0FSR1NdOyAvKiBjb21tYW5kIHdvcmQgbGlz dCAqLwogCVBnQmVuY2hFeHByICpleHByOwkJCS8qIHBhcnNlZCBleHByZXNzaW9uLCBpZiBuZWVk ZWQgKi8KIAlTaW1wbGVTdGF0cyBzdGF0czsJCQkvKiB0aW1lIHNwZW50IGluIHRoaXMgY29tbWFu ZCAqLworCWludDY0CQlyZXRyaWVzOworCWludDY0CQllcnJvcnM7CQkJLyogbnVtYmVyIG9mIGZh aWx1cmVzIHRoYXQgd2VyZSBub3QgcmV0cmllZCAqLworCWludDY0CQllcnJvcnNfaW5fZmFpbGVk X3R4OwkvKiBudW1iZXIgb2YgZXJyb3JzCisJCQkJCQkJCQkJICogRVJSQ09ERV9JTl9GQUlMRURf U1FMX1RSQU5TQUNUSU9OICovCiB9IENvbW1hbmQ7CiAKIHR5cGVkZWYgc3RydWN0IFBhcnNlZFNj cmlwdApAQCAtNDYwLDcgKzU0NiwxNyBAQCBzdGF0aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVt YmVyIG9mIHNjcmlwdHMgaW4gc3FsX3NjcmlwdFtdICovCiBzdGF0aWMgaW50CW51bV9jb21tYW5k cyA9IDA7CS8qIHRvdGFsIG51bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8KIHN0YXRpYyBpbnQ2 NCB0b3RhbF93ZWlnaHQgPSAwOwogCi1zdGF0aWMgaW50CWRlYnVnID0gMDsJCQkvKiBkZWJ1ZyBm bGFnICovCit0eXBlZGVmIGVudW0gRGVidWdsZXZlbAoreworCU5PX0RFQlVHID0gMCwJCQkJLyog bm8gZGVidWdnaW5nIG91dHB1dCAoZXhjZXB0IFBHQkVOQ0hfREVCVUcpICovCisJREVCVUdfRkFJ TFMsCQkJCS8qIHByaW50IG9ubHkgZXJyb3IgbWVzc2FnZXMgYW5kIGZhaWx1cmVzICovCisJREVC VUdfQUxMLAkJCQkJLyogcHJpbnQgYWxsIGRlYnVnZ2luZyBvdXRwdXQgKHRocm90dGxpbmcsCisJ CQkJCQkJCSAqIGV4ZWN1dGVkL3NlbnQvcmVjZWl2ZWQgY29tbWFuZHMgZXRjLikgKi8KKwlOVU1f REVCVUdMRVZFTAorfSBEZWJ1Z2xldmVsOworCitzdGF0aWMgRGVidWdsZXZlbCBkZWJ1Z19sZXZl bCA9IE5PX0RFQlVHOwkvKiBkZWJ1ZyBmbGFnICovCitzdGF0aWMgY29uc3QgY2hhciAqREVCVUdM RVZFbFtdID0geyJubyIsICJmYWlscyIsICJhbGwifTsKIAogLyogQnVpbHRpbiB0ZXN0IHNjcmlw dHMgKi8KIHR5cGVkZWYgc3RydWN0IEJ1aWx0aW5TY3JpcHQKQEAgLTUwOCw2ICs2MDQsMTUgQEAg c3RhdGljIGNvbnN0IEJ1aWx0aW5TY3JpcHQgYnVpbHRpbl9zY3JpcHRbXSA9CiAJfQogfTsKIAor dHlwZWRlZiBlbnVtIEZhaWxTdGF0dXMKK3sKKwlUWF9GQUlMVVJFLAkJCQkJLyogdGhlIHRyYW5z YWN0aW9uIHdpbGwgYmUgcmUtZXhlY3V0ZWQgZnJvbSB0aGUKKwkJCQkJCQkJICogdmVyeSBiZWdp bm5pbmcgKi8KKwlJTl9GQUlMRURfVFgsCQkJCS8qIGNvbnRpbnVlIHRoZSBmYWlsZWQgdHJhbnNh Y3Rpb24gKi8KKwlUWF9FUlJPUiwJCQkJCS8qIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIG1hcmtl ZCBhcyBmYWlsZWQgKi8KKwlDTElFTlRfQUJPUlRFRAkJCQkvKiB0aGUgY2xpZW5kIGlzIGFib3J0 ZWQgKi8KK30gRmFpbFN0YXR1czsKKwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0 aWMgdm9pZCBzZXROdWxsVmFsdWUoUGdCZW5jaFZhbHVlICpwdik7CkBAIC01NzIsNyArNjc3LDcg QEAgdXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29s IGZvciBzdWJtaXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiIKIAkJICAgIiAgLW4s IC0tbm8tdmFjdXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0ZXN0c1xuIgog CQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0gICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVw b3J0IGV2ZXJ5IE5VTSBzZWNvbmRzXG4iCi0JCSAgICIgIC1yLCAtLXJlcG9ydC1sYXRlbmNpZXMg ICByZXBvcnQgYXZlcmFnZSBsYXRlbmN5IHBlciBjb21tYW5kXG4iCisJCSAgICIgIC1yLCAtLXJl cG9ydC1wZXItY29tbWFuZCByZXBvcnQgbGF0ZW5jaWVzLCBlcnJvcnMgYW5kIHJldHJpZXMgcGVy IGNvbW1hbmRcbiIKIAkJICAgIiAgLVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRl IGluIHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kXG4iCiAJCSAgICIgIC1zLCAtLXNjYWxlPU5VTSAg ICAgICAgICByZXBvcnQgdGhpcyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iCiAJCSAgICIgIC10 LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVhY2ggY2xpZW50 IHJ1bnMgKGRlZmF1bHQ6IDEwKVxuIgpAQCAtNTgxLDExICs2ODYsMTIgQEAgdXNhZ2Uodm9pZCkK IAkJICAgIiAgLS1hZ2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBkYXRhIG92ZXIgTlVN IHNlY29uZHNcbiIKIAkJICAgIiAgLS1sb2ctcHJlZml4PVBSRUZJWCAgICAgIHByZWZpeCBmb3Ig dHJhbnNhY3Rpb24gdGltZSBsb2cgZmlsZVxuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGRlZmF1bHQ6IFwicGdiZW5jaF9sb2dcIilcbiIKKwkJICAgIiAgLS1tYXgtdHJpZXM9 TlVNICAgICAgICAgIG1heCBudW1iZXIgb2YgdHJpZXMgdG8gcnVuIHRyYW5zYWN0aW9uIChkZWZh dWx0OiAxKVxuIgogCQkgICAiICAtLXByb2dyZXNzLXRpbWVzdGFtcCAgICAgdXNlIFVuaXggZXBv Y2ggdGltZXN0YW1wcyBmb3IgcHJvZ3Jlc3NcbiIKIAkJICAgIiAgLS1yYW5kb20tc2VlZD1TRUVE ICAgICAgIHNldCByYW5kb20gc2VlZCAoXCJ0aW1lXCIsIFwicmFuZFwiLCBpbnRlZ2VyKVxuIgog CQkgICAiICAtLXNhbXBsaW5nLXJhdGU9TlVNICAgICAgZnJhY3Rpb24gb2YgdHJhbnNhY3Rpb25z IHRvIGxvZyAoZS5nLiwgMC4wMSBmb3IgMSUlKVxuIgogCQkgICAiXG5Db21tb24gb3B0aW9uczpc biIKLQkJICAgIiAgLWQsIC0tZGVidWcgICAgICAgICAgICAgIHByaW50IGRlYnVnZ2luZyBvdXRw dXRcbiIKKwkJICAgIiAgLWQsIC0tZGVidWc9bm98ZmFpbHN8YWxsIHByaW50IGRlYnVnZ2luZyBv dXRwdXQgKGRlZmF1bHQ6IG5vKVxuIgogCQkgICAiICAtaCwgLS1ob3N0PUhPU1ROQU1FICAgICAg ZGF0YWJhc2Ugc2VydmVyIGhvc3Qgb3Igc29ja2V0IGRpcmVjdG9yeVxuIgogCQkgICAiICAtcCwg LS1wb3J0PVBPUlQgICAgICAgICAgZGF0YWJhc2Ugc2VydmVyIHBvcnQgbnVtYmVyXG4iCiAJCSAg ICIgIC1VLCAtLXVzZXJuYW1lPVVTRVJOQU1FICBjb25uZWN0IGFzIHNwZWNpZmllZCBkYXRhYmFz ZSB1c2VyXG4iCkBAIC02OTMsNyArNzk5LDcgQEAgZ290ZGlnaXRzOgogCiAvKiByYW5kb20gbnVt YmVyIGdlbmVyYXRvcjogdW5pZm9ybSBkaXN0cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGluY2x1 c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4s IGludDY0IG1heCkKK2dldHJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWlu LCBpbnQ2NCBtYXgpCiB7CiAJLyoKIAkgKiBPZGQgY29kaW5nIGlzIHNvIHRoYXQgbWluIGFuZCBt YXggaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGNoYW5jZSBvZgpAQCAtNzA0LDcgKzgxMCw3 IEBAIGdldHJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogCSAqIHBy b3RlY3RlZCBieSBhIG11dGV4LCBhbmQgdGhlcmVmb3JlIGEgYm90dGxlbmVjayBvbiBtYWNoaW5l cyB3aXRoIG1hbnkKIAkgKiBDUFVzLgogCSAqLwotCXJldHVybiBtaW4gKyAoaW50NjQpICgobWF4 IC0gbWluICsgMSkgKiBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSk7CisJcmV0dXJu IG1pbiArIChpbnQ2NCkgKChtYXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgocmFuZG9tX3N0YXRl LT5kYXRhKSk7CiB9CiAKIC8qCkBAIC03MTMsNyArODE5LDggQEAgZ2V0cmFuZChUU3RhdGUgKnRo cmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgpCiAgKiB2YWx1ZSBpcyBleHAoLXBhcmFtZXRlciku CiAgKi8KIHN0YXRpYyBpbnQ2NAotZ2V0RXhwb25lbnRpYWxSYW5kKFRTdGF0ZSAqdGhyZWFkLCBp bnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKK2dldEV4cG9uZW50aWFsUmFu ZChSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlLCBpbnQ2NCBtaW4sIGludDY0IG1heCwKKwkJCQkg ICBkb3VibGUgcGFyYW1ldGVyKQogewogCWRvdWJsZQkJY3V0LAogCQkJCXVuaWZvcm0sCkBAIC03 MjMsNyArODMwLDcgQEAgZ2V0RXhwb25lbnRpYWxSYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBt aW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIAlBc3NlcnQocGFyYW1ldGVyID4gMC4w KTsKIAljdXQgPSBleHAoLXBhcmFtZXRlcik7CiAJLyogZXJhbmQgaW4gWzAsIDEpLCB1bmlmb3Jt IGluICgwLCAxXSAqLwotCXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9t X3N0YXRlKTsKKwl1bmlmb3JtID0gMS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUtPmRhdGEp OwogCiAJLyoKIAkgKiBpbm5lciBleHByZXNzaW9uIGluIChjdXQsIDFdIChpZiBwYXJhbWV0ZXIg PiAwKSwgcmFuZCBpbiBbMCwgMSkKQEAgLTczNiw3ICs4NDMsOCBAQCBnZXRFeHBvbmVudGlhbFJh bmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVy KQogCiAvKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogZ2F1c3NpYW4gZGlzdHJpYnV0aW9uIGZy b20gbWluIHRvIG1heCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBpbnQ2NAotZ2V0R2F1c3NpYW5SYW5k KFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikK K2dldEdhdXNzaWFuUmFuZChSYW5kb21TdGF0ZSAqcmFuZG9tX3N0YXRlLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCwKKwkJCQlkb3VibGUgcGFyYW1ldGVyKQogewogCWRvdWJsZQkJc3RkZXY7CiAJZG91 YmxlCQlyYW5kOwpAQCAtNzY0LDggKzg3Miw4IEBAIGdldEdhdXNzaWFuUmFuZChUU3RhdGUgKnRo cmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAJCSAqIGFyZSBl eHBlY3RlZCBpbiAoMCwgMV0gKHNlZQogCQkgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L0JveF9tdWxsZXIpCiAJCSAqLwotCQlkb3VibGUJCXJhbmQxID0gMS4wIC0gcGdfZXJhbmQ0OCh0 aHJlYWQtPnJhbmRvbV9zdGF0ZSk7Ci0JCWRvdWJsZQkJcmFuZDIgPSAxLjAgLSBwZ19lcmFuZDQ4 KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKKwkJZG91YmxlCQlyYW5kMSA9IDEuMCAtIHBnX2VyYW5k NDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKKwkJZG91YmxlCQlyYW5kMiA9IDEuMCAtIHBnX2VyYW5k NDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAogCQkvKiBCb3gtTXVsbGVyIGJhc2ljIGZvcm0gdHJh bnNmb3JtICovCiAJCWRvdWJsZQkJdmFyX3NxcnQgPSBzcXJ0KC0yLjAgKiBsb2cocmFuZDEpKTsK QEAgLTc5Miw3ICs5MDAsNyBAQCBnZXRHYXVzc2lhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0 IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogICogd2lsbCBhcHByb3hpbWF0ZSBh IFBvaXNzb24gZGlzdHJpYnV0aW9uIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiB2YWx1ZS4KICAqLwog c3RhdGljIGludDY0Ci1nZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgY2VudGVy KQorZ2V0UG9pc3NvblJhbmQoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgY2VudGVy KQogewogCS8qCiAJICogVXNlIGludmVyc2UgdHJhbnNmb3JtIHNhbXBsaW5nIHRvIGdlbmVyYXRl IGEgdmFsdWUgPiAwLCBzdWNoIHRoYXQgdGhlCkBAIC04MDEsNyArOTA5LDcgQEAgZ2V0UG9pc3Nv blJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IGNlbnRlcikKIAlkb3VibGUJCXVuaWZvcm07CiAK IAkvKiBlcmFuZCBpbiBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICovCi0JdW5pZm9ybSA9IDEu MCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCXVuaWZvcm0gPSAxLjAgLSBw Z19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+ZGF0YSk7CiAKIAlyZXR1cm4gKGludDY0KSAoLWxvZyh1 bmlmb3JtKSAqICgoZG91YmxlKSBjZW50ZXIpICsgMC41KTsKIH0KQEAgLTg3OSw3ICs5ODcsNyBA QCB6aXBmRmluZE9yQ3JlYXRlQ2FjaGVDZWxsKFppcGZDYWNoZSAqIGNhY2hlLCBpbnQ2NCBuLCBk b3VibGUgcykKICAqIEx1YyBEZXZyb3llLCBwLiA1NTAtNTUxLCBTcHJpbmdlciAxOTg2LgogICov CiBzdGF0aWMgaW50NjQKLWNvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFRTdGF0ZSAqdGhyZWFkLCBp bnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFJhbmRvbVN0YXRlICpy YW5kb21fc3RhdGUsIGludDY0IG4sIGRvdWJsZSBzKQogewogCWRvdWJsZQkJYiA9IHBvdygyLjAs IHMgLSAxLjApOwogCWRvdWJsZQkJeCwKQEAgLTg5MCw4ICs5OTgsOCBAQCBjb21wdXRlSXRlcmF0 aXZlWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCiAJd2hpbGUgKHRy dWUpCiAJewogCQkvKiByYW5kb20gdmFyaWF0ZXMgKi8KLQkJdSA9IHBnX2VyYW5kNDgodGhyZWFk LT5yYW5kb21fc3RhdGUpOwotCQl2ID0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7 CisJCXUgPSBwZ19lcmFuZDQ4KHJhbmRvbV9zdGF0ZS0+ZGF0YSk7CisJCXYgPSBwZ19lcmFuZDQ4 KHJhbmRvbV9zdGF0ZS0+ZGF0YSk7CiAKIAkJeCA9IGZsb29yKHBvdyh1LCAtMS4wIC8gKHMgLSAx LjApKSk7CiAKQEAgLTkwOSwxMCArMTAxNywxMSBAQCBjb21wdXRlSXRlcmF0aXZlWmlwZmlhbihU U3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCiAgKiBKaW0gR3JheSBldCBhbCwgU0lH TU9EIDE5OTQKICAqLwogc3RhdGljIGludDY0Ci1jb21wdXRlSGFybW9uaWNaaXBmaWFuKFRTdGF0 ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKK2NvbXB1dGVIYXJtb25pY1ppcGZpYW4oVFN0 YXRlICp0aHJlYWQsIFJhbmRvbVN0YXRlICpyYW5kb21fc3RhdGUsIGludDY0IG4sCisJCQkJCSAg IGRvdWJsZSBzKQogewogCVppcGZDZWxsICAgKmNlbGwgPSB6aXBmRmluZE9yQ3JlYXRlQ2FjaGVD ZWxsKCZ0aHJlYWQtPnppcGZfY2FjaGUsIG4sIHMpOwotCWRvdWJsZQkJdW5pZm9ybSA9IHBnX2Vy YW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCWRvdWJsZQkJdW5pZm9ybSA9IHBnX2VyYW5k NDgocmFuZG9tX3N0YXRlLT5kYXRhKTsKIAlkb3VibGUJCXV6ID0gdW5pZm9ybSAqIGNlbGwtPmhh cm1vbmljbjsKIAogCWlmICh1eiA8IDEuMCkKQEAgLTkyNCw3ICsxMDMzLDggQEAgY29tcHV0ZUhh cm1vbmljWmlwZmlhbihUU3RhdGUgKnRocmVhZCwgaW50NjQgbiwgZG91YmxlIHMpCiAKIC8qIHJh bmRvbSBudW1iZXIgZ2VuZXJhdG9yOiB6aXBmaWFuIGRpc3RyaWJ1dGlvbiBmcm9tIG1pbiB0byBt YXggaW5jbHVzaXZlICovCiBzdGF0aWMgaW50NjQKLWdldFppcGZpYW5SYW5kKFRTdGF0ZSAqdGhy ZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHMpCitnZXRaaXBmaWFuUmFuZChUU3Rh dGUgKnRocmVhZCwgUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSwgaW50NjQgbWluLAorCQkJICAg aW50NjQgbWF4LCBkb3VibGUgcykKIHsKIAlpbnQ2NAkJbiA9IG1heCAtIG1pbiArIDE7CiAKQEAg LTkzMyw4ICsxMDQzLDggQEAgZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1p biwgaW50NjQgbWF4LCBkb3VibGUgcykKIAogCiAJcmV0dXJuIG1pbiAtIDEgKyAoKHMgPiAxKQot CQkJCQkgID8gY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4odGhyZWFkLCBuLCBzKQotCQkJCQkgIDog Y29tcHV0ZUhhcm1vbmljWmlwZmlhbih0aHJlYWQsIG4sIHMpKTsKKwkJCQkJPyBjb21wdXRlSXRl cmF0aXZlWmlwZmlhbihyYW5kb21fc3RhdGUsIG4sIHMpCisJCQkJCTogY29tcHV0ZUhhcm1vbmlj WmlwZmlhbih0aHJlYWQsIHJhbmRvbV9zdGF0ZSwgbiwgcykpOwogfQogCiAvKgpAQCAtMTAzNCw2 ICsxMTQ0LDEwIEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCB0aW1lX3Qgc3RhcnRfdGltZSkK IAlzZC0+c3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7CiAJc2QtPmNudCA9IDA7CiAJc2QtPnNraXBw ZWQgPSAwOworCXNkLT5yZXRyaWVzID0gMDsKKwlzZC0+cmV0cmllZCA9IDA7CisJc2QtPmVycm9y cyA9IDA7CisJc2QtPmVycm9yc19pbl9mYWlsZWRfdHggPSAwOwogCWluaXRTaW1wbGVTdGF0cygm c2QtPmxhdGVuY3kpOwogCWluaXRTaW1wbGVTdGF0cygmc2QtPmxhZyk7CiB9CkBAIC0xMDQyLDgg KzExNTYsMjQgQEAgaW5pdFN0YXRzKFN0YXRzRGF0YSAqc2QsIHRpbWVfdCBzdGFydF90aW1lKQog ICogQWNjdW11bGF0ZSBvbmUgYWRkaXRpb25hbCBpdGVtIGludG8gdGhlIGdpdmVuIHN0YXRzIG9i amVjdC4KICAqLwogc3RhdGljIHZvaWQKLWFjY3VtU3RhdHMoU3RhdHNEYXRhICpzdGF0cywgYm9v bCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnKQorYWNjdW1TdGF0cyhTdGF0c0RhdGEg KnN0YXRzLCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcsCisJCSAgIEZhaWx1 cmVTdGF0dXMgZmlyc3RfZXJyb3IsIGludDY0IHJldHJpZXMpCiB7CisJc3RhdHMtPnJldHJpZXMg Kz0gcmV0cmllczsKKwlpZiAocmV0cmllcyA+IDApCisJCXN0YXRzLT5yZXRyaWVkKys7CisKKwkv KiBmYWlsZWQgdHJhbnNhY3Rpb25zIGFyZSBwcm9jZXNzZWQgc2VwYXJhdGx5ICovCisJaWYgKGZp cnN0X2Vycm9yICE9IE5PX0ZBSUxVUkUpCisJeworCQlzdGF0cy0+ZXJyb3JzKys7CisKKwkJaWYg KGZpcnN0X2Vycm9yID09IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pCisJCQlzdGF0cy0+ZXJy b3JzX2luX2ZhaWxlZF90eCsrOworCisJCXJldHVybjsKKwl9CisKIAlzdGF0cy0+Y250Kys7CiAK IAlpZiAoc2tpcHBlZCkKQEAgLTEwNjEsNiArMTE5MSwxNCBAQCBhY2N1bVN0YXRzKFN0YXRzRGF0 YSAqc3RhdHMsIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykKIAl9CiB9CiAK K3N0YXRpYyB2b2lkCitpbml0UmFuZG9tU3RhdGUoUmFuZG9tU3RhdGUgKnJhbmRvbV9zdGF0ZSkK K3sKKwlyYW5kb21fc3RhdGUtPmRhdGFbMF0gPSByYW5kb20oKTsKKwlyYW5kb21fc3RhdGUtPmRh dGFbMV0gPSByYW5kb20oKTsKKwlyYW5kb21fc3RhdGUtPmRhdGFbMl0gPSByYW5kb20oKTsKK30K KwogLyogY2FsbCBQUWV4ZWMoKSBhbmQgZXhpdCgpIG9uIGZhaWx1cmUgKi8KIHN0YXRpYyB2b2lk CiBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICpzcWwpCkBAIC0xMTg0 LDM5ICsxMzIyLDM5IEBAIGNvbXBhcmVWYXJpYWJsZU5hbWVzKGNvbnN0IHZvaWQgKnYxLCBjb25z dCB2b2lkICp2MikKIAogLyogTG9jYXRlIGEgdmFyaWFibGUgYnkgbmFtZTsgcmV0dXJucyBOVUxM IGlmIHVua25vd24gKi8KIHN0YXRpYyBWYXJpYWJsZSAqCi1sb29rdXBWYXJpYWJsZShDU3RhdGUg KnN0LCBjaGFyICpuYW1lKQorbG9va3VwVmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNo YXIgKm5hbWUpCiB7CiAJVmFyaWFibGUJa2V5OwogCiAJLyogT24gc29tZSB2ZXJzaW9ucyBvZiBT b2xhcmlzLCBic2VhcmNoIG9mIHplcm8gaXRlbXMgZHVtcHMgY29yZSAqLwotCWlmIChzdC0+bnZh cmlhYmxlcyA8PSAwKQorCWlmICh2YXJpYWJsZXMtPm52YXJpYWJsZXMgPD0gMCkKIAkJcmV0dXJu IE5VTEw7CiAKIAkvKiBTb3J0IGlmIHdlIGhhdmUgdG8gKi8KLQlpZiAoIXN0LT52YXJzX3NvcnRl ZCkKKwlpZiAoIXZhcmlhYmxlcy0+dmFyc19zb3J0ZWQpCiAJewotCQlxc29ydCgodm9pZCAqKSBz dC0+dmFyaWFibGVzLCBzdC0+bnZhcmlhYmxlcywgc2l6ZW9mKFZhcmlhYmxlKSwKLQkJCSAgY29t cGFyZVZhcmlhYmxlTmFtZXMpOwotCQlzdC0+dmFyc19zb3J0ZWQgPSB0cnVlOworCQlxc29ydCgo dm9pZCAqKSB2YXJpYWJsZXMtPmFycmF5LCB2YXJpYWJsZXMtPm52YXJpYWJsZXMsCisJCQkgIHNp emVvZihWYXJpYWJsZSksIGNvbXBhcmVWYXJpYWJsZU5hbWVzKTsKKwkJdmFyaWFibGVzLT52YXJz X3NvcnRlZCA9IHRydWU7CiAJfQogCiAJLyogTm93IHdlIGNhbiBzZWFyY2ggKi8KIAlrZXkubmFt ZSA9IG5hbWU7CiAJcmV0dXJuIChWYXJpYWJsZSAqKSBic2VhcmNoKCh2b2lkICopICZrZXksCi0J CQkJCQkJCSh2b2lkICopIHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJCXN0LT5udmFyaWFibGVzLAor CQkJCQkJCQkodm9pZCAqKSB2YXJpYWJsZXMtPmFycmF5LAorCQkJCQkJCQl2YXJpYWJsZXMtPm52 YXJpYWJsZXMsCiAJCQkJCQkJCXNpemVvZihWYXJpYWJsZSksCiAJCQkJCQkJCWNvbXBhcmVWYXJp YWJsZU5hbWVzKTsKIH0KIAogLyogR2V0IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLCBpbiBzdHJp bmcgZm9ybTsgcmV0dXJucyBOVUxMIGlmIHVua25vd24gKi8KIHN0YXRpYyBjaGFyICoKLWdldFZh cmlhYmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitnZXRWYXJpYWJsZShWYXJpYWJsZXMgKnZh cmlhYmxlcywgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZSAgICp2YXI7CiAJY2hhcgkJc3RyaW5n Zm9ybVs2NF07CiAKLQl2YXIgPSBsb29rdXBWYXJpYWJsZShzdCwgbmFtZSk7CisJdmFyID0gbG9v a3VwVmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAlpZiAodmFyID09IE5VTEwpCiAJCXJldHVy biBOVUxMOwkJCS8qIG5vdCBmb3VuZCAqLwogCkBAIC0xMjkwLDkgKzE0MjgsMTIgQEAgbWFrZVZh cmlhYmxlVmFsdWUoVmFyaWFibGUgKnZhcikKIAogCQlpZiAoc3NjYW5mKHZhci0+c3ZhbHVlLCAi JWxmJWMiLCAmZHYsICZ4cykgIT0gMSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCSJt YWxmb3JtZWQgdmFyaWFibGUgXCIlc1wiIHZhbHVlOiBcIiVzXCJcbiIsCi0JCQkJCXZhci0+bmFt ZSwgdmFyLT5zdmFsdWUpOworCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJ eworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIm1hbGZvcm1lZCB2YXJpYWJsZSBcIiVzXCIg dmFsdWU6IFwiJXNcIlxuIiwKKwkJCQkJCXZhci0+bmFtZSwgdmFyLT5zdmFsdWUpOworCQkJfQog CQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXNldERvdWJsZVZhbHVlKCZ2YXItPnZhbHVlLCBkdik7 CkBAIC0xMzQwLDExICsxNDgxLDEyIEBAIHZhbGlkX3ZhcmlhYmxlX25hbWUoY29uc3QgY2hhciAq bmFtZSkKICAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlIChiYWQgbmFtZSkuCiAgKi8KIHN0YXRp YyBWYXJpYWJsZSAqCi1sb29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFy ICpjb250ZXh0LCBjaGFyICpuYW1lKQorbG9va3VwQ3JlYXRlVmFyaWFibGUoVmFyaWFibGVzICp2 YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkJCSBib29sIGFi b3J0ZWQpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCi0JdmFyID0gbG9va3VwVmFyaWFibGUoc3Qs IG5hbWUpOworCXZhciA9IGxvb2t1cFZhcmlhYmxlKHZhcmlhYmxlcywgbmFtZSk7CiAJaWYgKHZh ciA9PSBOVUxMKQogCXsKIAkJVmFyaWFibGUgICAqbmV3dmFyczsKQEAgLTEzNTUsMjkgKzE0OTcs MzIgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4 dCwgY2hhciAqbmFtZSkKIAkJICovCiAJCWlmICghdmFsaWRfdmFyaWFibGVfbmFtZShuYW1lKSkK IAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcIiVz XCJcbiIsCi0JCQkJCWNvbnRleHQsIG5hbWUpOworCQkJaWYgKGFib3J0ZWQgfHwgZGVidWdfbGV2 ZWwgPj0gREVCVUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogaW52YWxp ZCB2YXJpYWJsZSBuYW1lOiBcIiVzXCJcbiIsCisJCQkJCQljb250ZXh0LCBuYW1lKTsKKwkJCX0K IAkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJLyogQ3JlYXRlIHZhcmlhYmxlIGF0IHRoZSBlbmQg b2YgdGhlIGFycmF5ICovCi0JCWlmIChzdC0+dmFyaWFibGVzKQotCQkJbmV3dmFycyA9IChWYXJp YWJsZSAqKSBwZ19yZWFsbG9jKHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJCQkJCSAgKHN0LT5udmFy aWFibGVzICsgMSkgKiBzaXplb2YoVmFyaWFibGUpKTsKKwkJaWYgKHZhcmlhYmxlcy0+YXJyYXkp CisJCQluZXd2YXJzID0gKFZhcmlhYmxlICopIHBnX3JlYWxsb2ModmFyaWFibGVzLT5hcnJheSwK KwkJCQkJCQkJKHZhcmlhYmxlcy0+bnZhcmlhYmxlcyArIDEpICogc2l6ZW9mKFZhcmlhYmxlKSk7 CiAJCWVsc2UKIAkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikgcGdfbWFsbG9jKHNpemVvZihWYXJp YWJsZSkpOwogCi0JCXN0LT52YXJpYWJsZXMgPSBuZXd2YXJzOworCQl2YXJpYWJsZXMtPmFycmF5 ID0gbmV3dmFyczsKIAotCQl2YXIgPSAmbmV3dmFyc1tzdC0+bnZhcmlhYmxlc107CisJCXZhciA9 ICZuZXd2YXJzW3ZhcmlhYmxlcy0+bnZhcmlhYmxlc107CiAKIAkJdmFyLT5uYW1lID0gcGdfc3Ry ZHVwKG5hbWUpOwogCQl2YXItPnN2YWx1ZSA9IE5VTEw7CiAJCS8qIGNhbGxlciBpcyBleHBlY3Rl ZCB0byBpbml0aWFsaXplIHJlbWFpbmluZyBmaWVsZHMgKi8KIAotCQlzdC0+bnZhcmlhYmxlcysr OworCQl2YXJpYWJsZXMtPm52YXJpYWJsZXMrKzsKIAkJLyogd2UgZG9uJ3QgcmUtc29ydCB0aGUg YXJyYXkgdGlsbCB3ZSBoYXZlIHRvICovCi0JCXN0LT52YXJzX3NvcnRlZCA9IGZhbHNlOworCQl2 YXJpYWJsZXMtPnZhcnNfc29ydGVkID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHZhcjsKQEAgLTEz ODYsMTIgKzE1MzEsMTMgQEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3Qg Y2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIC8qIEFzc2lnbiBhIHN0cmluZyB2YWx1ZSB0byBh IHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICovCiAvKiBSZXR1cm5zIGZhbHNlIG9u IGZhaWx1cmUgKGJhZCBuYW1lKSAqLwogc3RhdGljIGJvb2wKLXB1dFZhcmlhYmxlKENTdGF0ZSAq c3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQor cHV0VmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNo YXIgKm5hbWUsCisJCQljb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlWYXJpYWJsZSAgICp2YXI7CiAJ Y2hhcgkgICAqdmFsOwogCi0JdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQs IG5hbWUpOworCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwg bmFtZSwgdHJ1ZSk7CiAJaWYgKCF2YXIpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTQwOSwxMiAr MTU1NSwxMiBAQCBwdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBj aGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKIC8qIEFzc2lnbiBhIHZhbHVlIHRvIGEgdmFy aWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUgKi8KIC8qIFJldHVybnMgZmFsc2Ugb24gZmFp bHVyZSAoYmFkIG5hbWUpICovCiBzdGF0aWMgYm9vbAotcHV0VmFyaWFibGVWYWx1ZShDU3RhdGUg KnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAotCQkJCSAgY29uc3QgUGdCZW5j aFZhbHVlICp2YWx1ZSkKK3B1dFZhcmlhYmxlVmFsdWUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNv bnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkJICBjb25zdCBQZ0JlbmNoVmFsdWUg KnZhbHVlLCBib29sIGFib3J0ZWQpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCi0JdmFyID0gbG9v a3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOworCXZhciA9IGxvb2t1cENyZWF0 ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSwgYWJvcnRlZCk7CiAJaWYgKCF2YXIp CiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTQyOSwxMiArMTU3NSwxMyBAQCBwdXRWYXJpYWJsZVZh bHVlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCiAvKiBBc3Np Z24gYW4gaW50ZWdlciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJl ICovCiAvKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLwogc3RhdGljIGJv b2wKLXB1dFZhcmlhYmxlSW50KENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIg Km5hbWUsIGludDY0IHZhbHVlKQorcHV0VmFyaWFibGVJbnQoVmFyaWFibGVzICp2YXJpYWJsZXMs IGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkgICBpbnQ2NCB2YWx1ZSwgYm9v bCBhYm9ydGVkKQogewogCVBnQmVuY2hWYWx1ZSB2YWw7CiAKIAlzZXRJbnRWYWx1ZSgmdmFsLCB2 YWx1ZSk7Ci0JcmV0dXJuIHB1dFZhcmlhYmxlVmFsdWUoc3QsIGNvbnRleHQsIG5hbWUsICZ2YWwp OworCXJldHVybiBwdXRWYXJpYWJsZVZhbHVlKHZhcmlhYmxlcywgY29udGV4dCwgbmFtZSwgJnZh bCwgYWJvcnRlZCk7CiB9CiAKIC8qCkBAIC0xNDg5LDcgKzE2MzYsNyBAQCByZXBsYWNlVmFyaWFi bGUoY2hhciAqKnNxbCwgY2hhciAqcGFyYW0sIGludCBsZW4sIGNoYXIgKnZhbHVlKQogfQogCiBz dGF0aWMgY2hhciAqCi1hc3NpZ25WYXJpYWJsZXMoQ1N0YXRlICpzdCwgY2hhciAqc3FsKQorYXNz aWduVmFyaWFibGVzKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICpzcWwpCiB7CiAJY2hhcgkg ICAqcCwKIAkJCSAgICpuYW1lLApAQCAtMTUxMCw3ICsxNjU3LDcgQEAgYXNzaWduVmFyaWFibGVz KENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJdmFsID0gZ2V0 VmFyaWFibGUoc3QsIG5hbWUpOworCQl2YWwgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIG5hbWUp OwogCQlmcmVlKG5hbWUpOwogCQlpZiAodmFsID09IE5VTEwpCiAJCXsKQEAgLTE1MjUsMTIgKzE2 NzIsMTMgQEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkKIH0KIAogc3Rh dGljIHZvaWQKLWdldFF1ZXJ5UGFyYW1zKENTdGF0ZSAqc3QsIGNvbnN0IENvbW1hbmQgKmNvbW1h bmQsIGNvbnN0IGNoYXIgKipwYXJhbXMpCitnZXRRdWVyeVBhcmFtcyhWYXJpYWJsZXMgKnZhcmlh YmxlcywgY29uc3QgQ29tbWFuZCAqY29tbWFuZCwKKwkJCSAgIGNvbnN0IGNoYXIgKipwYXJhbXMp CiB7CiAJaW50CQkJaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb21tYW5kLT5hcmdjIC0gMTsgaSsr KQotCQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZShzdCwgY29tbWFuZC0+YXJndltpICsgMV0pOwor CQlwYXJhbXNbaV0gPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGNvbW1hbmQtPmFyZ3ZbaSArIDFd KTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAtMTU2NSw3ICsxNzEzLDExIEBAIGNvZXJjZVRvQm9v bChQZ0JlbmNoVmFsdWUgKnB2YWwsIGJvb2wgKmJ2YWwpCiAJfQogCWVsc2UgLyogTlVMTCwgSU5U IG9yIERPVUJMRSAqLwogCXsKLQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVzIHRv IGJvb2xlYW5cbiIsIHZhbHVlVHlwZU5hbWUocHZhbCkpOworCQlpZiAoZGVidWdfbGV2ZWwgPj0g REVCVUdfRkFJTFMpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0 byBib29sZWFuXG4iLAorCQkJCQl2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJfQogCQkqYnZhbCA9 IGZhbHNlOwkJCS8qIHN1cHByZXNzIHVuaW5pdGlhbGl6ZWQtdmFyaWFibGUgd2FybmluZ3MgKi8K IAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE2MTAsNyArMTc2Miw4IEBAIGNvZXJjZVRvSW50KFBn QmVuY2hWYWx1ZSAqcHZhbCwgaW50NjQgKml2YWwpCiAKIAkJaWYgKGR2YWwgPCBQR19JTlQ2NF9N SU4gfHwgUEdfSU5UNjRfTUFYIDwgZHZhbCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICJkb3Vi bGUgdG8gaW50IG92ZXJmbG93IGZvciAlZlxuIiwgZHZhbCk7CisJCQlpZiAoZGVidWdfbGV2ZWwg Pj0gREVCVUdfRkFJTFMpCisJCQkJZnByaW50ZihzdGRlcnIsICJkb3VibGUgdG8gaW50IG92ZXJm bG93IGZvciAlZlxuIiwgZHZhbCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJKml2YWwgPSAo aW50NjQpIGR2YWw7CkBAIC0xNjE4LDcgKzE3NzEsOCBAQCBjb2VyY2VUb0ludChQZ0JlbmNoVmFs dWUgKnB2YWwsIGludDY0ICppdmFsKQogCX0KIAllbHNlIC8qIEJPT0xFQU4gb3IgTlVMTCAqLwog CXsKLQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVzIHRvIGludFxuIiwgdmFsdWVU eXBlTmFtZShwdmFsKSk7CisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJCWZw cmludGYoc3RkZXJyLCAiY2Fubm90IGNvZXJjZSAlcyB0byBpbnRcbiIsIHZhbHVlVHlwZU5hbWUo cHZhbCkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQpAQCAtMTYzOSw3ICsxNzkzLDkgQEAgY29l cmNlVG9Eb3VibGUoUGdCZW5jaFZhbHVlICpwdmFsLCBkb3VibGUgKmR2YWwpCiAJfQogCWVsc2Ug LyogQk9PTEVBTiBvciBOVUxMICovCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBjb2Vy Y2UgJXMgdG8gZG91YmxlXG4iLCB2YWx1ZVR5cGVOYW1lKHB2YWwpKTsKKwkJaWYgKGRlYnVnX2xl dmVsID49IERFQlVHX0ZBSUxTKQorCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgY29lcmNlICVz IHRvIGRvdWJsZVxuIiwKKwkJCQkJdmFsdWVUeXBlTmFtZShwdmFsKSk7CiAJCXJldHVybiBmYWxz ZTsKIAl9CiB9CkBAIC0xODE3LDggKzE5NzMsMTEgQEAgZXZhbFN0YW5kYXJkRnVuYyhUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwKIAogCWlmIChsICE9IE5VTEwpCiAJewotCQlmcHJpbnRmKHN0 ZGVyciwKLQkJCQkidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYXhpbXVtIGlzICVkXG4i LCBNQVhfRkFSR1MpOworCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCXsKKwkJ CWZwcmludGYoc3RkZXJyLAorCQkJCQkidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYXhp bXVtIGlzICVkXG4iLCBNQVhfRkFSR1MpOworCQl9CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAg LTE5NDEsNyArMjEwMCw4IEBAIGV2YWxTdGFuZGFyZEZ1bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsCiAJCQkJCQljYXNlIFBHQkVOQ0hfTU9EOgogCQkJCQkJCWlmIChyaSA9PSAwKQogCQkJ CQkJCXsKLQkJCQkJCQkJZnByaW50ZihzdGRlcnIsICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKKwkJ CQkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJCQkJCQkJZnByaW50Zihz dGRlcnIsICJkaXZpc2lvbiBieSB6ZXJvXG4iKTsKIAkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJ CQkJCX0KIAkJCQkJCQkvKiBzcGVjaWFsIGhhbmRsaW5nIG9mIC0xIGRpdmlzb3IgKi8KQEAgLTE5 NTIsNyArMjExMiwxMSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUg KnN0LAogCQkJCQkJCQkJLyogb3ZlcmZsb3cgY2hlY2sgKG5lZWRlZCBmb3IgSU5UNjRfTUlOKSAq LwogCQkJCQkJCQkJaWYgKGxpID09IFBHX0lOVDY0X01JTikKIAkJCQkJCQkJCXsKLQkJCQkJCQkJ CQlmcHJpbnRmKHN0ZGVyciwgImJpZ2ludCBvdXQgb2YgcmFuZ2VcbiIpOworCQkJCQkJCQkJCWlm IChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJCQkJCQkJCQl7CisJCQkJCQkJCQkJCWZw cmludGYoc3RkZXJyLAorCQkJCQkJCQkJCQkJCSJiaWdpbnQgb3V0IG9mIHJhbmdlXG4iKTsKKwkJ CQkJCQkJCQl9CiAJCQkJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJCQkJfQogCQkJCQkJCQkJ ZWxzZQpAQCAtMjE4NywyMCArMjM1MSwyMiBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSByYW5nZSAqLwogCQkJCWlmIChp bWluID4gaW1heCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiZW1wdHkgcmFuZ2UgZ2l2 ZW4gdG8gcmFuZG9tXG4iKTsKKwkJCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQor CQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIpOwog CQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGltYXggLSBpbWluIDwgMCB8 fCAoaW1heCAtIGltaW4pICsgMSA8IDApCiAJCQkJewogCQkJCQkvKiBwcmV2ZW50IGludCBvdmVy Zmxvd3MgaW4gcmFuZG9tIGZ1bmN0aW9ucyAqLwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJhbmRv bSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdf RkFJTFMpCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJhbmRvbSByYW5nZSBpcyB0b28gbGFyZ2Vc biIpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCiAJCQkJaWYgKGZ1bmMgPT0gUEdCRU5D SF9SQU5ET00pCiAJCQkJewogCQkJCQlBc3NlcnQobmFyZ3MgPT0gMik7Ci0JCQkJCXNldEludFZh bHVlKHJldHZhbCwgZ2V0cmFuZCh0aHJlYWQsIGltaW4sIGltYXgpKTsKKwkJCQkJc2V0SW50VmFs dWUocmV0dmFsLCBnZXRyYW5kKCZzdC0+cmFuZG9tX3N0YXRlLCBpbWluLCBpbWF4KSk7CiAJCQkJ fQogCQkJCWVsc2UJCQkvKiBnYXVzc2lhbiAmIGV4cG9uZW50aWFsICovCiAJCQkJewpAQCAtMjIx NSwzOSArMjM4MSw1MSBAQCBldmFsU3RhbmRhcmRGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUg KnN0LAogCQkJCQl7CiAJCQkJCQlpZiAocGFyYW0gPCBNSU5fR0FVU1NJQU5fUEFSQU0pCiAJCQkJ CQl7Ci0JCQkJCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkJCQkiZ2F1c3NpYW4gcGFyYW1ldGVy IG11c3QgYmUgYXQgbGVhc3QgJWYgIgotCQkJCQkJCQkJIihub3QgJWYpXG4iLCBNSU5fR0FVU1NJ QU5fUEFSQU0sIHBhcmFtKTsKKwkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMp CisJCQkJCQkJeworCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCQkJCQkiZ2F1c3NpYW4g cGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYgKG5vdCAlZilcbiIsCisJCQkJCQkJCQkJTUlO X0dBVVNTSUFOX1BBUkFNLCBwYXJhbSk7CisJCQkJCQkJfQogCQkJCQkJCXJldHVybiBmYWxzZTsK IAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJCQkJZ2V0R2F1c3Np YW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJCQkJCQkJCWdldEdhdXNzaWFu UmFuZCgmc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJCQkJCQkJCQkJCQlpbWF4LCBwYXJhbSkp OwogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGZ1bmMgPT0gUEdCRU5DSF9SQU5ET01fWklQRklBTikK IAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJhbSA9PSAxLjAgfHwgcGFyYW0g PiBNQVhfWklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJ CQkJCQkJCSJ6aXBmaWFuIHBhcmFtZXRlciBtdXN0IGJlIGluIHJhbmdlICgwLCAxKSBVICgxLCAl ZF0iCi0JCQkJCQkJCQkiIChnb3QgJWYpXG4iLCBNQVhfWklQRklBTl9QQVJBTSwgcGFyYW0pOwor CQkJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJCQkJCQl7CisJCQkJCQkJ CWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJCSJ6aXBmaWFuIHBhcmFtZXRlciBtdXN0IGJlIGlu IHJhbmdlICgwLCAxKSBVICgxLCAlZF0gKGdvdCAlZilcbiIsCisJCQkJCQkJCQkJTUFYX1pJUEZJ QU5fUEFSQU0sIHBhcmFtKTsKKwkJCQkJCQl9CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJ fQogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJCQkJZ2V0WmlwZmlhblJhbmQodGhy ZWFkLCBpbWluLCBpbWF4LCBwYXJhbSkpOworCQkJCQkJCQkJZ2V0WmlwZmlhblJhbmQodGhyZWFk LCAmc3QtPnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIGltaW4sIGltYXgsIHBhcmFtKSk7 CiAJCQkJCX0KIAkJCQkJZWxzZQkJLyogZXhwb25lbnRpYWwgKi8KIAkJCQkJewogCQkJCQkJaWYg KHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCQkJ CSJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIKLQkJCQkJ CQkJCSIgKGdvdCAlZilcbiIsIHBhcmFtKTsKKwkJCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfRkFJTFMpCisJCQkJCQkJeworCQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCQkJCQki ZXhwb25lbnRpYWwgcGFyYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gKGdvdCAlZilc biIsCisJCQkJCQkJCQkJcGFyYW0pOworCQkJCQkJCX0KIAkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJ CQkJCQl9CiAKIAkJCQkJCXNldEludFZhbHVlKHJldHZhbCwKLQkJCQkJCQkJCWdldEV4cG9uZW50 aWFsUmFuZCh0aHJlYWQsIGltaW4sIGltYXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRFeHBvbmVu dGlhbFJhbmQoJnN0LT5yYW5kb21fc3RhdGUsIGltaW4sCisJCQkJCQkJCQkJCQkJICAgaW1heCwg cGFyYW0pKTsKIAkJCQkJfQogCQkJCX0KIApAQCAtMjM0NiwxMCArMjUyNCwxMyBAQCBldmFsdWF0 ZUV4cHIoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFBnQmVuY2hFeHByICpleHByLCBQZ0Jl bmNoVmFsdWUgKnJldHZhbAogCQkJewogCQkJCVZhcmlhYmxlICAgKnZhcjsKIAotCQkJCWlmICgo dmFyID0gbG9va3VwVmFyaWFibGUoc3QsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkpID09IE5V TEwpCisJCQkJaWYgKCh2YXIgPSBsb29rdXBWYXJpYWJsZSgmc3QtPnZhcmlhYmxlcywgZXhwci0+ dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LCAidW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJCQlleHByLT51LnZhcmlhYmxl LnZhcm5hbWUpOworCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJCQkJCXsK KwkJCQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJ CQkJCQkJZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKTsKKwkJCQkJfQogCQkJCQlyZXR1cm4gZmFs c2U7CiAJCQkJfQogCkBAIC0yNDEwLDcgKzI1OTEsNyBAQCBnZXRNZXRhQ29tbWFuZChjb25zdCBj aGFyICpjbWQpCiAgKiBSZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQsIG9yIGZhbHNlIG9uIGVycm9y LgogICovCiBzdGF0aWMgYm9vbAotcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZh cmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCitydW5TaGVsbENvbW1hbmQoVmFyaWFibGVz ICp2YXJpYWJsZXMsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiB7CiAJ Y2hhcgkJY29tbWFuZFtTSEVMTF9DT01NQU5EX1NJWkVdOwogCWludAkJCWksCkBAIC0yNDQxLDE3 ICsyNjIyLDIxIEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2YXJpYWJsZSwg Y2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQl7CiAJCQlhcmcgPSBhcmd2W2ldICsgMTsJLyogYSBz dHJpbmcgbGl0ZXJhbCBzdGFydGluZyB3aXRoIGNvbG9ucyAqLwogCQl9Ci0JCWVsc2UgaWYgKChh cmcgPSBnZXRWYXJpYWJsZShzdCwgYXJndltpXSArIDEpKSA9PSBOVUxMKQorCQllbHNlIGlmICgo YXJnID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBhcmd2W2ldICsgMSkpID09IE5VTEwpCiAJCXsK LQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJcbiIsCi0J CQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOworCQkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxT KQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVz XCJcbiIsCisJCQkJCQlhcmd2WzBdLCBhcmd2W2ldKTsKKwkJCX0KIAkJCXJldHVybiBmYWxzZTsK IAkJfQogCiAJCWFyZ2xlbiA9IHN0cmxlbihhcmcpOwogCQlpZiAobGVuICsgYXJnbGVuICsgKGkg PiAwID8gMSA6IDApID49IFNIRUxMX0NPTU1BTkRfU0laRSAtIDEpCiAJCXsKLQkJCWZwcmludGYo c3RkZXJyLCAiJXM6IHNoZWxsIGNvbW1hbmQgaXMgdG9vIGxvbmdcbiIsIGFyZ3ZbMF0pOworCQkJ aWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IHNoZWxsIGNvbW1hbmQgaXMgdG9vIGxvbmdcbiIsIGFyZ3ZbMF0pOwogCQkJcmV0dXJuIGZhbHNl OwogCQl9CiAKQEAgLTI0NjgsNyArMjY1Myw3IEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0 LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCXsKIAkJaWYgKHN5c3Rl bShjb21tYW5kKSkKIAkJewotCQkJaWYgKCF0aW1lcl9leGNlZWRlZCkKKwkJCWlmICghdGltZXJf ZXhjZWVkZWQgJiYgZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCiAJCQkJZnByaW50ZihzdGRl cnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsKIAkJ CXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMjQ3OCwxOSArMjY2MywyMSBAQCBydW5TaGVsbENvbW1h bmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKIAkv KiBFeGVjdXRlIHRoZSBjb21tYW5kIHdpdGggcGlwZSBhbmQgcmVhZCB0aGUgc3RhbmRhcmQgb3V0 cHV0LiAqLwogCWlmICgoZnAgPSBwb3Blbihjb21tYW5kLCAiciIpKSA9PSBOVUxMKQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBh cmd2WzBdKTsKKwkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQorCQkJZnByaW50Zihz dGRlcnIsICIlczogY291bGQgbm90IGxhdW5jaCBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsK IAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoZmdldHMocmVzLCBzaXplb2YocmVzKSwgZnApID09 IE5VTEwpCiAJewotCQlpZiAoIXRpbWVyX2V4Y2VlZGVkKQorCQlpZiAoIXRpbWVyX2V4Y2VlZGVk ICYmIGRlYnVnX2xldmVsID49IERFQlVHX0ZBSUxTKQogCQkJZnByaW50ZihzdGRlcnIsICIlczog Y291bGQgbm90IHJlYWQgcmVzdWx0IG9mIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOwogCQko dm9pZCkgcGNsb3NlKGZwKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAocGNsb3NlKGZwKSA8 IDApCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgY2xvc2Ugc2hlbGwgY29t bWFuZFxuIiwgYXJndlswXSk7CisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJ CWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBjbG9zZSBzaGVsbCBjb21tYW5kXG4iLCBh cmd2WzBdKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMjUwMCwxMSArMjY4NywxNCBAQCBy dW5TaGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBp bnQgYXJnYykKIAkJZW5kcHRyKys7CiAJaWYgKCpyZXMgPT0gJ1wwJyB8fCAqZW5kcHRyICE9ICdc MCcpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaGVsbCBjb21tYW5kIG11c3QgcmV0dXJu IGFuIGludGVnZXIgKG5vdCBcIiVzXCIpXG4iLAotCQkJCWFyZ3ZbMF0sIHJlcyk7CisJCWlmIChk ZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICIlczog c2hlbGwgY29tbWFuZCBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIChub3QgXCIlc1wiKVxuIiwKKwkJ CQkJYXJndlswXSwgcmVzKTsKKwkJfQogCQlyZXR1cm4gZmFsc2U7CiAJfQotCWlmICghcHV0VmFy aWFibGVJbnQoc3QsICJzZXRzaGVsbCIsIHZhcmlhYmxlLCByZXR2YWwpKQorCWlmICghcHV0VmFy aWFibGVJbnQodmFyaWFibGVzLCAic2V0c2hlbGwiLCB2YXJpYWJsZSwgcmV0dmFsLCBmYWxzZSkp CiAJCXJldHVybiBmYWxzZTsKIAogI2lmZGVmIERFQlVHCkBAIC0yNTIxLDExICsyNzExLDQ2IEBA IHByZXBhcmVkU3RhdGVtZW50TmFtZShjaGFyICpidWZmZXIsIGludCBmaWxlLCBpbnQgc3RhdGUp CiB9CiAKIHN0YXRpYyB2b2lkCi1jb21tYW5kRmFpbGVkKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIg KmNtZCwgY29uc3QgY2hhciAqbWVzc2FnZSkKK2NvbW1hbmRGYWlsZWQoQ1N0YXRlICpzdCwgY29u c3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptZXNzYWdlLCBGYWlsU3RhdHVzCisJCQkgIGZhaWxf c3RhdHVzKQogewotCWZwcmludGYoc3RkZXJyLAotCQkJImNsaWVudCAlZCBhYm9ydGVkIGluIGNv bW1hbmQgJWQgKCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAotCQkJc3QtPmlkLCBzdC0+Y29tbWFu ZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCXN3aXRjaCAoZmFpbF9zdGF0dXMpCisJ eworCQljYXNlIFRYX0ZBSUxVUkU6CisJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMp CisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiY2xpZW50ICVkIGdvdCBhIGZhaWx1 cmUgKHRyeSAlZC8lZCkgaW4gY29tbWFuZCAlZCAoJXMpIG9mIHNjcmlwdCAlZDsgJXNcbiIsCisJ CQkJCQlzdC0+aWQsIHN0LT5yZXRyaWVzICsgMSwgbWF4X3RyaWVzLCBzdC0+Y29tbWFuZCwgY21k LAorCQkJCQkJc3QtPnVzZV9maWxlLCBtZXNzYWdlKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNl IElOX0ZBSUxFRF9UWDoKKwkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19GQUlMUykKKwkJCXsK KwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJjbGllbnQgJWQgY29udGludWVzIGEgZmFpbGVk IHRyYW5zYWN0aW9uIGluIGNvbW1hbmQgJWQgKCVzKSBvZiBzY3JpcHQgJWQ7ICVzXG4iLAorCQkJ CQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3NhZ2UpOworCQkJ fQorCQkJYnJlYWs7CisJCWNhc2UgVFhfRVJST1I6CisJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVC VUdfRkFJTFMpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiY2xpZW50ICVkIGdv dCBhbiBlcnJvciBpbiBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0ICVkOyAlc1xuIiwKKwkJCQkJ CXN0LT5pZCwgc3QtPmNvbW1hbmQsIGNtZCwgc3QtPnVzZV9maWxlLCBtZXNzYWdlKTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIENMSUVOVF9BQk9SVEVEOgorCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCSJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkICglcykgb2Ygc2NyaXB0ICVkOyAl c1xuIiwKKwkJCQkJc3QtPmlkLCBzdC0+Y29tbWFuZCwgY21kLCBzdC0+dXNlX2ZpbGUsIG1lc3Nh Z2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBpbnRlcm5hbCBlcnJvciB3aGljaCBz aG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJCWZwcmludGYoc3RkZXJyLCAidW5leHBlY3RlZCBmYWls IHN0YXR1cyAlZCIsIGZhaWxfc3RhdHVzKTsKKwkJCWV4aXQoMSk7CisJfQogfQogCiAvKiByZXR1 cm4gYSBzY3JpcHQgbnVtYmVyIHdpdGggYSB3ZWlnaHRlZCBjaG9pY2UuICovCkBAIC0yNTM4LDcg KzI3NjMsNyBAQCBjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpCiAJaWYgKG51bV9zY3JpcHRz ID09IDEpCiAJCXJldHVybiAwOwogCi0JdyA9IGdldHJhbmQodGhyZWFkLCAwLCB0b3RhbF93ZWln aHQgLSAxKTsKKwl3ID0gZ2V0cmFuZCgmdGhyZWFkLT5yYW5kb21fc3RhdGUsIDAsIHRvdGFsX3dl aWdodCAtIDEpOwogCWRvCiAJewogCQl3IC09IHNxbF9zY3JpcHRbaSsrXS53ZWlnaHQ7CkBAIC0y NTU4LDkgKzI3ODMsOSBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5k KQogCQljaGFyCSAgICpzcWw7CiAKIAkJc3FsID0gcGdfc3RyZHVwKGNvbW1hbmQtPmFyZ3ZbMF0p OwotCQlzcWwgPSBhc3NpZ25WYXJpYWJsZXMoc3QsIHNxbCk7CisJCXNxbCA9IGFzc2lnblZhcmlh Ymxlcygmc3QtPnZhcmlhYmxlcywgc3FsKTsKIAotCQlpZiAoZGVidWcpCisJCWlmIChkZWJ1Z19s ZXZlbCA+PSBERUJVR19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5kaW5n ICVzXG4iLCBzdC0+aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVyeShzdC0+Y29uLCBzcWwpOwog CQlmcmVlKHNxbCk7CkBAIC0yNTcwLDkgKzI3OTUsOSBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0 LCBDb21tYW5kICpjb21tYW5kKQogCQljb25zdCBjaGFyICpzcWwgPSBjb21tYW5kLT5hcmd2WzBd OwogCQljb25zdCBjaGFyICpwYXJhbXNbTUFYX0FSR1NdOwogCi0JCWdldFF1ZXJ5UGFyYW1zKHN0 LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBhcmFtcygmc3QtPnZhcmlhYmxlcywgY29t bWFuZCwgcGFyYW1zKTsKIAotCQlpZiAoZGVidWcpCisJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJV R19BTEwpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+ aWQsIHNxbCk7CiAJCXIgPSBQUXNlbmRRdWVyeVBhcmFtcyhzdC0+Y29uLCBzcWwsIGNvbW1hbmQt PmFyZ2MgLSAxLAogCQkJCQkJCSAgTlVMTCwgcGFyYW1zLCBOVUxMLCBOVUxMLCAwKTsKQEAgLTI2 MDQsMTAgKzI4MjksMTAgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFu ZCkKIAkJCXN0LT5wcmVwYXJlZFtzdC0+dXNlX2ZpbGVdID0gdHJ1ZTsKIAkJfQogCi0JCWdldFF1 ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBhcmFtcygmc3QtPnZh cmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAkJcHJlcGFyZWRTdGF0ZW1lbnROYW1lKG5hbWUs IHN0LT51c2VfZmlsZSwgc3QtPmNvbW1hbmQpOwogCi0JCWlmIChkZWJ1ZykKKwkJaWYgKGRlYnVn X2xldmVsID49IERFQlVHX0FMTCkKIAkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHNlbmRp bmcgJXNcbiIsIHN0LT5pZCwgbmFtZSk7CiAJCXIgPSBQUXNlbmRRdWVyeVByZXBhcmVkKHN0LT5j b24sIG5hbWUsIGNvbW1hbmQtPmFyZ2MgLSAxLAogCQkJCQkJCQlwYXJhbXMsIE5VTEwsIE5VTEws IDApOwpAQCAtMjYxNywxMCArMjg0Miw5IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENvbW1h bmQgKmNvbW1hbmQpCiAKIAlpZiAociA9PSAwKQogCXsKLQkJaWYgKGRlYnVnKQorCQlpZiAoZGVi dWdfbGV2ZWwgPj0gREVCVUdfQUxMKQogCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgY291 bGQgbm90IHNlbmQgJXNcbiIsCiAJCQkJCXN0LT5pZCwgY29tbWFuZC0+YXJndlswXSk7Ci0JCXN0 LT5lY250Kys7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJZWxzZQpAQCAtMjYzMiwxNyArMjg1Niwy MCBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQogICogb2YgZGVs YXksIGluIG1pY3Jvc2Vjb25kcy4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBl cnJvci4KICAqLwogc3RhdGljIGJvb2wKLWV2YWx1YXRlU2xlZXAoQ1N0YXRlICpzdCwgaW50IGFy Z2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQorZXZhbHVhdGVTbGVlcChWYXJpYWJsZXMgKnZh cmlhYmxlcywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQogewogCWNoYXIJICAg KnZhcjsKIAlpbnQJCQl1c2VjOwogCiAJaWYgKCphcmd2WzFdID09ICc6JykKIAl7Ci0JCWlmICgo dmFyID0gZ2V0VmFyaWFibGUoc3QsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKKwkJaWYgKCh2YXIg PSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKIAkJewotCQkJ ZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJ YXJndlswXSwgYXJndlsxXSk7CisJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfRkFJTFMpCisJ CQl7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxu IiwKKwkJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQkJfQogCQkJcmV0dXJuIGZhbHNlOwogCQl9 CiAJCXVzZWMgPSBhdG9pKHZhcik7CkBAIC0yNjY1LDYgKzI4OTIsMTYyIEBAIGV2YWx1YXRlU2xl ZXAoQ1N0YXRlICpzdCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQogfQogCiAv KgorICogR2V0IHRoZSBudW1iZXIgb2YgYWxsIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMgaW5jbHVk aW5nIHNraXBwZWQgb25lcyBhbmQKKyAqIGVycm9ycy4KKyAqLworc3RhdGljIGludDY0CitnZXRU b3RhbENudChjb25zdCBDU3RhdGUgKnN0KQoreworCXJldHVybiBzdC0+Y250ICsgc3QtPmVjbnQ7 Cit9CisKKy8qCisgKiBDb3B5IGFuIGFycmF5IG9mIHJhbmRvbSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK2NvcHlSYW5kb21TdGF0ZShSYW5kb21TdGF0ZSAqZGVzdGluYXRpb24sIGNvbnN0IFJh bmRvbVN0YXRlICpzb3VyY2UpCit7CisJbWVtY3B5KGRlc3RpbmF0aW9uLT5kYXRhLCBzb3VyY2Ut PmRhdGEsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAzKTsKK30KKworLyoKKyAqIE1ha2UgYSBk ZWVwIGNvcHkgb2YgdmFyaWFibGVzIGFycmF5LgorICovCitzdGF0aWMgdm9pZAorY29weVZhcmlh YmxlcyhWYXJpYWJsZXMgKmRlc3RpbmF0aW9uX3ZhcnMsIGNvbnN0IFZhcmlhYmxlcyAqc291cmNl X3ZhcnMpCit7CisJVmFyaWFibGUgICAqZGVzdGluYXRpb247CisJVmFyaWFibGUgICAqY3VycmVu dF9kZXN0aW5hdGlvbjsKKwljb25zdCBWYXJpYWJsZSAqc291cmNlOworCWNvbnN0IFZhcmlhYmxl ICpjdXJyZW50X3NvdXJjZTsKKwlpbnQJCQludmFyaWFibGVzOworCisJaWYgKCFkZXN0aW5hdGlv bl92YXJzIHx8ICFzb3VyY2VfdmFycykKKwkJcmV0dXJuOworCisJZGVzdGluYXRpb24gPSBkZXN0 aW5hdGlvbl92YXJzLT5hcnJheTsKKwlzb3VyY2UgPSBzb3VyY2VfdmFycy0+YXJyYXk7CisJbnZh cmlhYmxlcyA9IHNvdXJjZV92YXJzLT5udmFyaWFibGVzOworCisJZm9yIChjdXJyZW50X2Rlc3Rp bmF0aW9uID0gZGVzdGluYXRpb247CisJCSBjdXJyZW50X2Rlc3RpbmF0aW9uIC0gZGVzdGluYXRp b24gPCBkZXN0aW5hdGlvbl92YXJzLT5udmFyaWFibGVzOworCQkgKytjdXJyZW50X2Rlc3RpbmF0 aW9uKQorCXsKKwkJcGdfZnJlZShjdXJyZW50X2Rlc3RpbmF0aW9uLT5uYW1lKTsKKwkJcGdfZnJl ZShjdXJyZW50X2Rlc3RpbmF0aW9uLT5zdmFsdWUpOworCX0KKworCWRlc3RpbmF0aW9uX3ZhcnMt PmFycmF5ID0gcGdfcmVhbGxvYyhkZXN0aW5hdGlvbl92YXJzLT5hcnJheSwKKwkJCQkJCQkJCQkg c2l6ZW9mKFZhcmlhYmxlKSAqIG52YXJpYWJsZXMpOworCWRlc3RpbmF0aW9uID0gZGVzdGluYXRp b25fdmFycy0+YXJyYXk7CisKKwlmb3IgKGN1cnJlbnRfc291cmNlID0gc291cmNlLCBjdXJyZW50 X2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisJCSBjdXJyZW50X3NvdXJjZSAtIHNvdXJjZSA8 IG52YXJpYWJsZXM7CisJCSArK2N1cnJlbnRfc291cmNlLCArK2N1cnJlbnRfZGVzdGluYXRpb24p CisJeworCQljdXJyZW50X2Rlc3RpbmF0aW9uLT5uYW1lID0gcGdfc3RyZHVwKGN1cnJlbnRfc291 cmNlLT5uYW1lKTsKKwkJaWYgKGN1cnJlbnRfc291cmNlLT5zdmFsdWUpCisJCQljdXJyZW50X2Rl c3RpbmF0aW9uLT5zdmFsdWUgPSBwZ19zdHJkdXAoY3VycmVudF9zb3VyY2UtPnN2YWx1ZSk7CisJ CWVsc2UKKwkJCWN1cnJlbnRfZGVzdGluYXRpb24tPnN2YWx1ZSA9IE5VTEw7CisJCWN1cnJlbnRf ZGVzdGluYXRpb24tPnZhbHVlID0gY3VycmVudF9zb3VyY2UtPnZhbHVlOworCX0KKworCWRlc3Rp bmF0aW9uX3ZhcnMtPm52YXJpYWJsZXMgPSBudmFyaWFibGVzOworCWRlc3RpbmF0aW9uX3ZhcnMt PnZhcnNfc29ydGVkID0gc291cmNlX3ZhcnMtPnZhcnNfc29ydGVkOworfQorCisvKgorICogUmV0 dXJucyB0cnVlIGlmIHRoZSBmYWlsdXJlIGNhbiBiZSByZXRyaWVkLgorICovCitzdGF0aWMgYm9v bAorY2FuUmV0cnkoQ1N0YXRlICpzdCwgRmFpbHVyZVN0YXR1cyBmYWlsdXJlX3N0YXR1cykKK3sK KwlBc3NlcnQoZmFpbHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSk7CisKKwkvKgorCSAqIEFsbCBz dWJzZXF1ZW50IGZhaWx1cmVzIHdpbGwgYmUgInJldHJpZWQiIGlmIHRoZSBmaXJzdCBmYWlsdXJl IG9mIHRoaXMKKwkgKiB0cmFuc2FjdGlvbiBjYW4gYmUgcmV0cmllZC4KKwkgKi8KKwlpZiAoc3Qt PmZpcnN0X2ZhaWx1cmUgIT0gTk9fRkFJTFVSRSkKKwkJZmFpbHVyZV9zdGF0dXMgPSBzdC0+Zmly c3RfZmFpbHVyZTsKKworCS8qIFdlIGNhbiBvbmx5IHJldHJ5IHNlcmlhbGl6YXRpb24gb3IgZGVh ZGxvY2sgZmFpbHVyZXMuICovCisJaWYgKCEoZmFpbHVyZV9zdGF0dXMgPT0gU0VSSUFMSVpBVElP Tl9GQUlMVVJFIHx8CisJCSAgZmFpbHVyZV9zdGF0dXMgPT0gREVBRExPQ0tfRkFJTFVSRSkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgY2Fubm90IHJldHJ5IHRoZSBmYWlsdXJlIGlm IHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YKKwkgKiB0cmllcy4KKwkgKi8K KwlpZiAoc3QtPnJldHJpZXMgKyAxID49IG1heF90cmllcykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogT0sgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdHJhbnNhY3Rp b24gc3RhdHVzOiBmaW5kIG91dCBpZiB0aGVyZSdzIGEgZmFpbHVyZSB0aGF0IGNhbiBiZQorICog cmV0cmllZCwgb3IgdGhlcmUncyBhbiBlcnJvciB0aGF0IGNhbm5vdCBiZSByZXRpcmVkOyBvciB3 ZSBjb250aW51ZSBhbgorICogYWxyZWFkeSBmYWlsZWQgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRp YyBGYWlsU3RhdHVzCitnZXRGYWlsU3RhdHVzKENTdGF0ZSAqc3QsIEZhaWx1cmVTdGF0dXMgZmFp bHVyZV9zdGF0dXMpCit7CisJQXNzZXJ0KGZhaWx1cmVfc3RhdHVzICE9IE5PX0ZBSUxVUkUpOwor CisJaWYgKHN0LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCisJCXJldHVybiBjYW5SZXRy eShzdCwgZmFpbHVyZV9zdGF0dXMpID8gVFhfRkFJTFVSRSA6IFRYX0VSUk9SOworCWVsc2UKKwkJ cmV0dXJuIElOX0ZBSUxFRF9UWDsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIGNvbmRpdGlvbmFs IHN0YWNrIGRlcGVuZGluZyBvbiB0aGUgY29uZGl0aW9uIHZhbHVlOyBpcyB1c2VkIGZvcgorICog dGhlIG1ldGEgY29tbWFuZHMgXGlmIGFuZCBcZWxpZi4KKyAqLworc3RhdGljIHZvaWQKK2V4ZWN1 dGVDb25kaXRpb24oQ1N0YXRlICpzdCwgYm9vbCBjb25kaXRpb24pCit7CisJQ29tbWFuZCAgICAq Y29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+Y29tbWFuZF07 CisKKwkvKiBleGVjdXRlIG9yIG5vdCBkZXBlbmRpbmcgb24gZXZhbHVhdGVkIGNvbmRpdGlvbiAq LworCWlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfSUYpCisJeworCQljb25kaXRpb25hbF9zdGFj a19wdXNoKHN0LT5jc3RhY2ssCisJCQkJCQkJICAgY29uZGl0aW9uID8gSUZTVEFURV9UUlVFIDog SUZTVEFURV9GQUxTRSk7CisJfQorCWVsc2UgaWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9FTElG KQorCXsKKwkJLyogd2Ugc2hvdWxkIGdldCBoZXJlIG9ubHkgaWYgdGhlICJlbGlmIiBuZWVkZWQg ZXZhbHVhdGlvbiAqLworCQlBc3NlcnQoY29uZGl0aW9uYWxfc3RhY2tfcGVlayhzdC0+Y3N0YWNr KSA9PSBJRlNUQVRFX0ZBTFNFKTsKKwkJY29uZGl0aW9uYWxfc3RhY2tfcG9rZShzdC0+Y3N0YWNr LAorCQkJCQkJCSAgIGNvbmRpdGlvbiA/IElGU1RBVEVfVFJVRSA6IElGU1RBVEVfRkFMU0UpOwor CX0KK30KKworLyoKKyAqIEdldCB0aGUgZmFpbHVyZSBzdGF0dXMgZnJvbSB0aGUgZXJyb3IgY29k ZS4KKyAqLworc3RhdGljIEZhaWx1cmVTdGF0dXMKK2dldEZhaWx1cmVTdGF0dXMoY2hhciAqc3Fs U3RhdGUpCit7CisJaWYgKHNxbFN0YXRlKQorCXsKKwkJaWYgKHN0cmNtcChzcWxTdGF0ZSwgRVJS Q09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSA9PSAwKQorCQkJcmV0dXJuIFNFUklBTEla QVRJT05fRkFJTFVSRTsKKwkJZWxzZSBpZiAoc3RyY21wKHNxbFN0YXRlLCBFUlJDT0RFX1RfUl9E RUFETE9DS19ERVRFQ1RFRCkgPT0gMCkKKwkJCXJldHVybiBERUFETE9DS19GQUlMVVJFOworCQll bHNlIGlmIChzdHJjbXAoc3FsU3RhdGUsIEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElP TikgPT0gMCkKKwkJCXJldHVybiBJTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OOworCX0KKworCXJl dHVybiBBTk9USEVSX0ZBSUxVUkU7Cit9CisKKy8qCiAgKiBBZHZhbmNlIHRoZSBzdGF0ZSBtYWNo aW5lIG9mIGEgY29ubmVjdGlvbiwgaWYgcG9zc2libGUuCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0y Njc1LDYgKzMwNTgsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3Rh dHNEYXRhICphZ2cpCiAJaW5zdHJfdGltZQlub3c7CiAJYm9vbAkJZW5kX3R4X3Byb2Nlc3NlZCA9 IGZhbHNlOwogCWludDY0CQl3YWl0OworCUZhaWx1cmVTdGF0dXMgZmFpbHVyZV9zdGF0dXMgPSBO T19GQUlMVVJFOwogCiAJLyoKIAkgKiBnZXR0aW1lb2ZkYXkoKSBpc24ndCBmcmVlLCBzbyB3ZSBn ZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGxhemlseSB0aGUKQEAgLTI3MDUsNyArMzA4OSw3IEBA IGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAog CQkJCXN0LT51c2VfZmlsZSA9IGNob29zZVNjcmlwdCh0aHJlYWQpOwogCi0JCQkJaWYgKGRlYnVn KQorCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCiAJCQkJCWZwcmludGYoc3RkZXJy LCAiY2xpZW50ICVkIGV4ZWN1dGluZyBzY3JpcHQgXCIlc1wiXG4iLCBzdC0+aWQsCiAJCQkJCQkJ c3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOwogCkBAIC0yNzE1LDYgKzMwOTksMTEgQEAg ZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RBUlRfVFg7CiAJCQkJLyogY2hlY2sgY29uc2lzdGVuY3kg Ki8KIAkJCQlBc3NlcnQoY29uZGl0aW9uYWxfc3RhY2tfZW1wdHkoc3QtPmNzdGFjaykpOworCisJ CQkJLyogcmVzZXQgdHJhbnNhY3Rpb24gdmFyaWFibGVzIHRvIGRlZmF1bHQgdmFsdWVzICovCisJ CQkJc3QtPmZpcnN0X2ZhaWx1cmUgPSBOT19GQUlMVVJFOworCQkJCXN0LT5yZXRyaWVzID0gMDsK KwogCQkJCWJyZWFrOwogCiAJCQkJLyoKQEAgLTI3MzIsNyArMzEyMSw3IEBAIGRvQ3VzdG9tKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBhd2F5Lgog CQkJCSAqLwogCQkJCUFzc2VydCh0aHJvdHRsZV9kZWxheSA+IDApOwotCQkJCXdhaXQgPSBnZXRQ b2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQl3YWl0ID0gZ2V0UG9pc3Nv blJhbmQoJnRocmVhZC0+cmFuZG9tX3N0YXRlLCB0aHJvdHRsZV9kZWxheSk7CiAKIAkJCQl0aHJl YWQtPnRocm90dGxlX3RyaWdnZXIgKz0gd2FpdDsKIAkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRo cmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsKQEAgLTI3NjIsMTYgKzMxNTEsMTcgQEAgZG9DdXN0b20o VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChub3cpOwogCQkJCQlub3dfdXMgPSBJTlNUUl9USU1FX0dFVF9NSUNS T1NFQyhub3cpOwogCQkJCQl3aGlsZSAodGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyIDwgbm93X3Vz IC0gbGF0ZW5jeV9saW1pdCAmJgotCQkJCQkJICAgKG54YWN0cyA8PSAwIHx8IHN0LT5jbnQgPCBu eGFjdHMpKQorCQkJCQkJICAgKG54YWN0cyA8PSAwIHx8IGdldFRvdGFsQ250KHN0KSA8IG54YWN0 cykpCiAJCQkJCXsKIAkJCQkJCXByb2Nlc3NYYWN0U3RhdHModGhyZWFkLCBzdCwgJm5vdywgdHJ1 ZSwgYWdnKTsKIAkJCQkJCS8qIG5leHQgcmVuZGV6LXZvdXMgKi8KLQkJCQkJCXdhaXQgPSBnZXRQ b2lzc29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQkJCXdhaXQgPSBnZXRQb2lz c29uUmFuZCgmdGhyZWFkLT5yYW5kb21fc3RhdGUsCisJCQkJCQkJCQkJCSAgdGhyb3R0bGVfZGVs YXkpOwogCQkJCQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9IHdhaXQ7CiAJCQkJCQlzdC0+ dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsKIAkJCQkJfQogCQkJCQkv KiBzdG9wIGNsaWVudCBpZiAtdCBleGNlZWRlZCAqLwotCQkJCQlpZiAobnhhY3RzID4gMCAmJiBz dC0+Y250ID49IG54YWN0cykKKwkJCQkJaWYgKG54YWN0cyA+IDAgJiYgZ2V0VG90YWxDbnQoc3Qp ID49IG54YWN0cykKIAkJCQkJewogCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZJTklTSEVEOwog CQkJCQkJYnJlYWs7CkBAIC0yNzc5LDcgKzMxNjksNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJfQogCiAJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX1RIUk9UVExFOwotCQkJCWlmIChkZWJ1ZykKKwkJCQlpZiAoZGVidWdfbGV2ZWwgPj0g REVCVUdfQUxMKQogCQkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCB0aHJvdHRsaW5nICIg SU5UNjRfRk9STUFUICIgdXNcbiIsCiAJCQkJCQkJc3QtPmlkLCB3YWl0KTsKIAkJCQlicmVhazsK QEAgLTI4MjYsNiArMzIxNiwxNCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJfQogCiAJCQkJLyoKKwkJCQkgKiBJdCBpcyB0aGUgZmly c3QgdHJ5IHRvIHJ1biB0aGlzIHRyYW5zYWN0aW9uLiBSZW1lbWJlciBpdHMKKwkJCQkgKiBwYXJh bWV0ZXJzIGp1c3QgaW4gY2FzZSB3ZSBzaG91bGQgcmVwZWF0IGl0IGluIGZ1dHVyZS4KKwkJCQkg Ki8KKwkJCQljb3B5UmFuZG9tU3RhdGUoJnN0LT5yZXRyeV9zdGF0ZS5yYW5kb21fc3RhdGUsCisJ CQkJCQkJCSZzdC0+cmFuZG9tX3N0YXRlKTsKKwkJCQljb3B5VmFyaWFibGVzKCZzdC0+cmV0cnlf c3RhdGUudmFyaWFibGVzLCAmc3QtPnZhcmlhYmxlcyk7CisKKwkJCQkvKgogCQkJCSAqIFJlY29y ZCB0cmFuc2FjdGlvbiBzdGFydCB0aW1lIHVuZGVyIGxvZ2dpbmcsIHByb2dyZXNzIG9yCiAJCQkJ ICogdGhyb3R0bGluZy4KIAkJCQkgKi8KQEAgLTI4NjEsNyArMzI1OSwxNSBAQCBkb0N1c3RvbShU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICovCiAJCQkJ aWYgKGNvbW1hbmQgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRf VFg7CisJCQkJCWlmIChzdC0+Zmlyc3RfZmFpbHVyZSA9PSBOT19GQUlMVVJFKQorCQkJCQl7CisJ CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX1RYOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJ eworCQkJCQkJLyogY2hlY2sgaWYgd2UgY2FuIHJldHJ5IHRoZSBmYWlsdXJlICovCisJCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfUkVUUlk7CisJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBA IC0yODY5LDcgKzMyNzUsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg U3RhdHNEYXRhICphZ2cpCiAJCQkJICogUmVjb3JkIHN0YXRlbWVudCBzdGFydCB0aW1lIGlmIHBl ci1jb21tYW5kIGxhdGVuY2llcyBhcmUKIAkJCQkgKiByZXF1ZXN0ZWQKIAkJCQkgKi8KLQkJCQlp ZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCiAJCQkJewogCQkJ CQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpCiAJCQkJCQlJTlNUUl9USU1FX1NFVF9DVVJS RU5UKG5vdyk7CkBAIC0yODgwLDcgKzMyODYsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJewogCQkJCQlpZiAoIXNlbmRDb21tYW5k KHN0LCBjb21tYW5kKSkKIAkJCQkJewotCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsICJT UUwgY29tbWFuZCBzZW5kIGZhaWxlZCIpOworCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIs ICJTUUwgY29tbWFuZCBzZW5kIGZhaWxlZCIsCisJCQkJCQkJCQkgIENMSUVOVF9BQk9SVEVEKTsK IAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwogCQkJCQl9CiAJCQkJCWVsc2UKQEAg LTI4OTIsNyArMzI5OSw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBT dGF0c0RhdGEgKmFnZykKIAkJCQkJCQkJaTsKIAkJCQkJY2hhcgkgICoqYXJndiA9IGNvbW1hbmQt PmFyZ3Y7CiAKLQkJCQkJaWYgKGRlYnVnKQorCQkJCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdf QUxMKQogCQkJCQl7CiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBleGVjdXRpbmcg XFwlcyIsIHN0LT5pZCwgYXJndlswXSk7CiAJCQkJCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsr KQpAQCAtMjkwMCw2ICszMzA3LDkgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwogCQkJCQl9 CiAKKwkJCQkJLyogY2hhbmdlIGl0IGlmIHRoZSBtZXRhIGNvbW1hbmQgZmFpbHMgKi8KKwkJCQkJ ZmFpbHVyZV9zdGF0dXMgPSBOT19GQUlMVVJFOworCiAJCQkJCWlmIChjb21tYW5kLT5tZXRhID09 IE1FVEFfU0xFRVApCiAJCQkJCXsKIAkJCQkJCS8qCkBAIC0yOTExLDEwICszMzIxLDEyIEBAIGRv Q3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJ CSAqLwogCQkJCQkJaW50CQkJdXNlYzsKIAotCQkJCQkJaWYgKCFldmFsdWF0ZVNsZWVwKHN0LCBh cmdjLCBhcmd2LCAmdXNlYykpCisJCQkJCQlpZiAoIWV2YWx1YXRlU2xlZXAoJnN0LT52YXJpYWJs ZXMsIGFyZ2MsIGFyZ3YsICZ1c2VjKSkKIAkJCQkJCXsKLQkJCQkJCQljb21tYW5kRmFpbGVkKHN0 LCAic2xlZXAiLCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKLQkJCQkJCQlz dC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IEFOT1RI RVJfRkFJTFVSRTsKKwkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2xlZXAiLCAiZXhlY3V0aW9u IG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhzdCwg ZmFpbHVyZV9zdGF0dXMpKTsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKIAkJ CQkJCQlicmVhazsKIAkJCQkJCX0KIApAQCAtMjk0MiwzNSArMzM1NCwzNSBAQCBkb0N1c3RvbShU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAKIAkJCQkJCWlmICgh ZXZhbHVhdGVFeHByKHRocmVhZCwgc3QsIGV4cHIsICZyZXN1bHQpKQogCQkJCQkJewotCQkJCQkJ CWNvbW1hbmRGYWlsZWQoc3QsIGFyZ3ZbMF0sICJldmFsdWF0aW9uIG9mIG1ldGEtY29tbWFuZCBm YWlsZWQiKTsKLQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlmYWls dXJlX3N0YXR1cyA9IEFOT1RIRVJfRkFJTFVSRTsKKwkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCBh cmd2WzBdLCAiZXZhbHVhdGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIiwKKwkJCQkJCQkJCQkg IGdldEZhaWxTdGF0dXMoc3QsIGZhaWx1cmVfc3RhdHVzKSk7CisKKwkJCQkJCQkvKgorCQkJCQkJ CSAqIERvIG5vdCBydWluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWwgY29tbWFuZHMsCisJCQkJ CQkJICogaWYgYW55LgorCQkJCQkJCSAqLworCQkJCQkJCWV4ZWN1dGVDb25kaXRpb24oc3QsIGZh bHNlKTsKKworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOwogCQkJCQkJCWJyZWFr OwogCQkJCQkJfQogCiAJCQkJCQlpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVCkKIAkJCQkJ CXsKLQkJCQkJCQlpZiAoIXB1dFZhcmlhYmxlVmFsdWUoc3QsIGFyZ3ZbMF0sIGFyZ3ZbMV0sICZy ZXN1bHQpKQorCQkJCQkJCWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3QtPnZhcmlhYmxlcywgYXJn dlswXSwKKwkJCQkJCQkJCQkJCSAgYXJndlsxXSwgJnJlc3VsdCwgZmFsc2UpKQogCQkJCQkJCXsK LQkJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNldCIsICJhc3NpZ25tZW50IG9mIG1ldGEtY29t bWFuZCBmYWlsZWQiKTsKLQkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJ CQkJCWZhaWx1cmVfc3RhdHVzID0gQU5PVEhFUl9GQUlMVVJFOworCQkJCQkJCQljb21tYW5kRmFp bGVkKHN0LCAic2V0IiwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kIGZhaWxlZCIsCisJCQkJ CQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhzdCwgZmFpbHVyZV9zdGF0dXMpKTsKKwkJCQkJCQkJc3Qt PnN0YXRlID0gQ1NUQVRFX0ZBSUxVUkU7CiAJCQkJCQkJCWJyZWFrOwogCQkJCQkJCX0KIAkJCQkJ CX0KIAkJCQkJCWVsc2UgLyogaWYgYW5kIGVsaWYgZXZhbHVhdGVkIGNhc2VzICovCiAJCQkJCQl7 Ci0JCQkJCQkJYm9vbCBjb25kID0gdmFsdWVUcnV0aCgmcmVzdWx0KTsKLQotCQkJCQkJCS8qIGV4 ZWN1dGUgb3Igbm90IGRlcGVuZGluZyBvbiBldmFsdWF0ZWQgY29uZGl0aW9uICovCi0JCQkJCQkJ aWYgKGNvbW1hbmQtPm1ldGEgPT0gTUVUQV9JRikKLQkJCQkJCQl7Ci0JCQkJCQkJCWNvbmRpdGlv bmFsX3N0YWNrX3B1c2goc3QtPmNzdGFjaywgY29uZCA/IElGU1RBVEVfVFJVRSA6IElGU1RBVEVf RkFMU0UpOwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIC8qIGVsaWYgKi8KLQkJCQkJCQl7Ci0JCQkJ CQkJCS8qIHdlIHNob3VsZCBnZXQgaGVyZSBvbmx5IGlmIHRoZSAiZWxpZiIgbmVlZGVkIGV2YWx1 YXRpb24gKi8KLQkJCQkJCQkJQXNzZXJ0KGNvbmRpdGlvbmFsX3N0YWNrX3BlZWsoc3QtPmNzdGFj aykgPT0gSUZTVEFURV9GQUxTRSk7Ci0JCQkJCQkJCWNvbmRpdGlvbmFsX3N0YWNrX3Bva2Uoc3Qt PmNzdGFjaywgY29uZCA/IElGU1RBVEVfVFJVRSA6IElGU1RBVEVfRkFMU0UpOwotCQkJCQkJCX0K KwkJCQkJCQlleGVjdXRlQ29uZGl0aW9uKHN0LCB2YWx1ZVRydXRoKCZyZXN1bHQpKTsKIAkJCQkJ CX0KIAkJCQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1FVEFfRUxTRSkKQEAg LTI5OTksNyArMzQxMSw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBT dGF0c0RhdGEgKmFnZykKIAkJCQkJfQogCQkJCQllbHNlIGlmIChjb21tYW5kLT5tZXRhID09IE1F VEFfU0VUU0hFTEwpCiAJCQkJCXsKLQkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZChz dCwgYXJndlsxXSwgYXJndiArIDIsIGFyZ2MgLSAyKTsKKwkJCQkJCWJvb2wJCXJldCA9IHJ1blNo ZWxsQ29tbWFuZCgmc3QtPnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJCQkJICBhcmd2WzFdLCBhcmd2 ICsgMiwKKwkJCQkJCQkJCQkJCQkJICBhcmdjIC0gMik7CiAKIAkJCQkJCWlmICh0aW1lcl9leGNl ZWRlZCkgLyogdGltZW91dCAqLwogCQkJCQkJewpAQCAtMzAwOCw4ICszNDIyLDEwIEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJCX0K IAkJCQkJCWVsc2UgaWYgKCFyZXQpCS8qIG9uIGVycm9yICovCiAJCQkJCQl7Ci0JCQkJCQkJY29t bWFuZEZhaWxlZChzdCwgInNldHNoZWxsIiwgImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFp bGVkIik7Ci0JCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJZmFpbHVy ZV9zdGF0dXMgPSBBTk9USEVSX0ZBSUxVUkU7CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInNl dHNoZWxsIiwgImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgZmFpbGVkIiwKKwkJCQkJCQkJCQkg IGdldEZhaWxTdGF0dXMoc3QsIGZhaWx1cmVfc3RhdHVzKSk7CisJCQkJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX0ZBSUxVUkU7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJCQllbHNlCkBAIC0z MDE5LDcgKzM0MzUsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3Rh dHNEYXRhICphZ2cpCiAJCQkJCX0KIAkJCQkJZWxzZSBpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRB X1NIRUxMKQogCQkJCQl7Ci0JCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENvbW1hbmQoc3QsIE5V TEwsIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CisJCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENvbW1h bmQoJnN0LT52YXJpYWJsZXMsIE5VTEwsCisJCQkJCQkJCQkJCQkJCSAgYXJndiArIDEsIGFyZ2Mg LSAxKTsKIAogCQkJCQkJaWYgKHRpbWVyX2V4Y2VlZGVkKSAvKiB0aW1lb3V0ICovCiAJCQkJCQl7 CkBAIC0zMDI4LDggKzM0NDUsMTAgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJfQogCQkJCQkJZWxzZSBpZiAoIXJldCkJLyogb24g ZXJyb3IgKi8KIAkJCQkJCXsKLQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLCAiZXhl Y3V0aW9uIG9mIG1ldGEtY29tbWFuZCBmYWlsZWQiKTsKLQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RB VEVfQUJPUlRFRDsKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IEFOT1RIRVJfRkFJTFVSRTsKKwkJ CQkJCQljb21tYW5kRmFpbGVkKHN0LCAic2hlbGwiLCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFu ZCBmYWlsZWQiLAorCQkJCQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhzdCwgZmFpbHVyZV9zdGF0dXMp KTsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKIAkJCQkJCQlicmVhazsKIAkJ CQkJCX0KIAkJCQkJCWVsc2UKQEAgLTMxMzQsMzcgKzM1NTMsNTQgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIFdhaXQgZm9yIHRo ZSBjdXJyZW50IFNRTCBjb21tYW5kIHRvIGNvbXBsZXRlCiAJCQkJICovCiAJCQljYXNlIENTVEFU RV9XQUlUX1JFU1VMVDoKLQkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNv bW1hbmRzW3N0LT5jb21tYW5kXTsKLQkJCQlpZiAoZGVidWcpCi0JCQkJCWZwcmludGYoc3RkZXJy LCAiY2xpZW50ICVkIHJlY2VpdmluZ1xuIiwgc3QtPmlkKTsKLQkJCQlpZiAoIVBRY29uc3VtZUlu cHV0KHN0LT5jb24pKQotCQkJCXsJCQkJLyogdGhlcmUncyBzb21ldGhpbmcgd3JvbmcgKi8KLQkJ CQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsICJwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hp bGUgcHJvY2Vzc2luZyIpOwotCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKLQkJCQkJ YnJlYWs7Ci0JCQkJfQotCQkJCWlmIChQUWlzQnVzeShzdC0+Y29uKSkKLQkJCQkJcmV0dXJuOwkJ LyogZG9uJ3QgaGF2ZSB0aGUgd2hvbGUgcmVzdWx0IHlldCAqLwotCi0JCQkJLyoKLQkJCQkgKiBS ZWFkIGFuZCBkaXNjYXJkIHRoZSBxdWVyeSByZXN1bHQ7Ci0JCQkJICovCi0JCQkJcmVzID0gUFFn ZXRSZXN1bHQoc3QtPmNvbik7Ci0JCQkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXMpKQogCQkJ CXsKLQkJCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgotCQkJCQljYXNlIFBHUkVTX1RVUExFU19P SzoKLQkJCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToKLQkJCQkJCS8qIE9LICovCi0JCQkJCQlQ UWNsZWFyKHJlcyk7Ci0JCQkJCQlkaXNjYXJkX3Jlc3BvbnNlKHN0KTsKLQkJCQkJCXN0LT5zdGF0 ZSA9IENTVEFURV9FTkRfQ09NTUFORDsKLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJ CQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKLQkJ CQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJY2hhcgkgICAqc3FsU3RhdGU7CisKKwkJCQkJY29tbWFu ZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+Y29tbWFuZF07CisJCQkJ CWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImNs aWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CisJCQkJCWlmICghUFFjb25zdW1lSW5wdXQo c3QtPmNvbikpCisJCQkJCXsJCQkJLyogdGhlcmUncyBzb21ldGhpbmcgd3JvbmcgKi8KKwkJCQkJ CWNvbW1hbmRGYWlsZWQoc3QsICJTUUwiLCAicGVyaGFwcyB0aGUgYmFja2VuZCBkaWVkIHdoaWxl IHByb2Nlc3NpbmciLAorCQkJCQkJCQkJICBDTElFTlRfQUJPUlRFRCk7CiAJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChQUWlz QnVzeShzdC0+Y29uKSkKKwkJCQkJCXJldHVybjsJCS8qIGRvbid0IGhhdmUgdGhlIHdob2xlIHJl c3VsdCB5ZXQgKi8KKworCQkJCQkvKgorCQkJCQkgKiBSZWFkIGFuZCBkaXNjYXJkIHRoZSBxdWVy eSByZXN1bHQ7CisJCQkJCSAqLworCQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+Y29uKTsKKwkJ CQkJc3FsU3RhdGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NRTFNUQVRFKTsK KwkJCQkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXMpKQorCQkJCQl7CisJCQkJCQljYXNlIFBH UkVTX0NPTU1BTkRfT0s6CisJCQkJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCQkJCWNhc2Ug UEdSRVNfRU1QVFlfUVVFUlk6CisJCQkJCQkJLyogT0sgKi8KKwkJCQkJCQlQUWNsZWFyKHJlcyk7 CisJCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CisJCQkJCQkJZmFpbHVyZV9zdGF0dXMgPSBO T19GQUlMVVJFOworCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfQ09NTUFORDsKKwkJCQkJ CQlicmVhazsKKwkJCQkJCWNhc2UgUEdSRVNfTk9ORkFUQUxfRVJST1I6CisJCQkJCQljYXNlIFBH UkVTX0ZBVEFMX0VSUk9SOgorCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gZ2V0RmFpbHVyZVN0YXR1 cyhzcWxTdGF0ZSk7CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCIsIFBRZXJyb3JNZXNz YWdlKHN0LT5jb24pLAorCQkJCQkJCQkJCSAgZ2V0RmFpbFN0YXR1cyhzdCwgZmFpbHVyZV9zdGF0 dXMpKTsKKwkJCQkJCQlQUWNsZWFyKHJlcyk7CisJCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7 CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0ZBSUxVUkU7CisJCQkJCQkJYnJlYWs7CisJCQkJ CQlkZWZhdWx0OgorCQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsICJTUUwiLCBQUWVycm9yTWVzc2Fn ZShzdC0+Y29uKSwKKwkJCQkJCQkJCQkgIENMSUVOVF9BQk9SVEVEKTsKKwkJCQkJCQlQUWNsZWFy KHJlcyk7CisJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJYnJlYWs7 CisJCQkJCX0KIAkJCQl9CiAJCQkJYnJlYWs7CiAKQEAgLTMxOTMsNyArMzYyOSw3IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkgKiBp biB0aHJlYWQtbG9jYWwgZGF0YSBzdHJ1Y3R1cmUsIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcwog CQkJCSAqIGFyZSByZXF1ZXN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJ CQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJCXsKIAkJCQkJaWYgKElOU1RSX1RJTUVfSVNf WkVSTyhub3cpKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOwpAQCAtMzIxMiw2 ICszNjQ4LDkwIEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0Rh dGEgKmFnZykKIAkJCQlicmVhazsKIAogCQkJCS8qCisJCQkJICogUmVwb3J0IHRoZSBmYWlsdXJl L2Vycm9yIGFuZCBnbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZC4KKwkJCQkgKi8KKwkJCWNhc2Ug Q1NUQVRFX0ZBSUxVUkU6CisJCQkJY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5j b21tYW5kc1tzdC0+Y29tbWFuZF07CisKKwkJCQlBc3NlcnQoZmFpbHVyZV9zdGF0dXMgIT0gTk9f RkFJTFVSRSk7CisKKwkJCQkvKgorCQkJCSAqIEFsbCBzdWJzZXF1ZW50IGZhaWx1cmVzIHdpbGwg YmUgInJldHJpZWQiLyJmYWlsZWQiIGlmIHRoZQorCQkJCSAqIGZpcnN0IGZhaWx1cmUgb2YgdGhp cyB0cmFuc2FjdGlvbiBjYW4gYmUvY2Fubm90IGJlIHJldHJpZWQuCisJCQkJICogVGhlcmVmb3Jl IG1lbnRpb24gb25seSB0aGUgZmlyc3QgZmFpbHVyZS9lcnJvciBpbiB0aGUKKwkJCQkgKiByZXBv cnRzLgorCQkJCSAqLworCQkJCWlmIChzdC0+Zmlyc3RfZmFpbHVyZSA9PSBOT19GQUlMVVJFKQor CQkJCXsKKwkJCQkJc3QtPmZpcnN0X2ZhaWx1cmUgPSBmYWlsdXJlX3N0YXR1czsKKworCQkJCQlp ZiAocmVwb3J0X3Blcl9jb21tYW5kKQorCQkJCQl7CisJCQkJCQlpZiAoY2FuUmV0cnkoc3QsIGZh aWx1cmVfc3RhdHVzKSkKKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIFRoZSBmYWlsZWQg dHJhbnNhY3Rpb24gd2lsbCBiZSByZXRyaWVkLiBTbworCQkJCQkJCSAqIGFjY3VtdWxhdGUgdGhl IHJldHJ5IGZvciB0aGUgY29tbWFuZC4KKwkJCQkJCQkgKi8KKwkJCQkJCQljb21tYW5kLT5yZXRy aWVzKys7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJCQkJCQkg KiBXZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHJ5IHRoaXMgZmFpbGVkCisJCQkJCQkJICogdHJh bnNhY3Rpb24uIFNvIGFjY3VtdWxhdGUgdGhlIGVycm9yIGZvciB0aGUKKwkJCQkJCQkgKiBjb21t YW5kLgorCQkJCQkJCSAqLworCQkJCQkJCWNvbW1hbmQtPmVycm9ycysrOworCQkJCQkJCWlmIChm YWlsdXJlX3N0YXR1cyA9PSBJTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OKQorCQkJCQkJCQljb21t YW5kLT5lcnJvcnNfaW5fZmFpbGVkX3R4Kys7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJ CQkvKiBHbyBhaGVhZCB3aXRoIG5leHQgY29tbWFuZCwgdG8gYmUgZXhlY3V0ZWQgb3Igc2tpcHBl ZCAqLworCQkJCXN0LT5jb21tYW5kKys7CisJCQkJc3QtPnN0YXRlID0gY29uZGl0aW9uYWxfYWN0 aXZlKHN0LT5jc3RhY2spID8KKwkJCQkJQ1NUQVRFX1NUQVJUX0NPTU1BTkQgOiBDU1RBVEVfU0tJ UF9DT01NQU5EOworCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogUmV0cnkgdGhlIGZhaWxlZCB0 cmFuc2FjdGlvbiBpZiBwb3NzaWJsZS4KKwkJCSAqLworCQkJY2FzZSBDU1RBVEVfUkVUUlk6CisJ CQkJaWYgKGNhblJldHJ5KHN0LCBzdC0+Zmlyc3RfZmFpbHVyZSkpCisJCQkJeworCQkJCQlzdC0+ cmV0cmllcysrOworCisJCQkJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19BTEwpCisJCQkJCXsK KwkJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFu c2FjdGlvbiAodHJ5ICVkLyVkKVxuIiwKKwkJCQkJCQkJc3QtPmlkLAorCQkJCQkJCQlzdC0+cmV0 cmllcyArIDEsCisJCQkJCQkJCW1heF90cmllcyk7CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkg KiBSZXNldCB0aGUgZXhlY3V0aW9uIHBhcmFtZXRlcnMgYXMgdGhleSB3ZXJlIGF0IHRoZQorCQkJ CQkgKiBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zYWN0aW9uLgorCQkJCQkgKi8KKwkJCQkJY29weVJh bmRvbVN0YXRlKCZzdC0+cmFuZG9tX3N0YXRlLAorCQkJCQkJCQkJJnN0LT5yZXRyeV9zdGF0ZS5y YW5kb21fc3RhdGUpOworCQkJCQljb3B5VmFyaWFibGVzKCZzdC0+dmFyaWFibGVzLCAmc3QtPnJl dHJ5X3N0YXRlLnZhcmlhYmxlcyk7CisKKwkJCQkJLyogUHJvY2VzcyB0aGUgZmlyc3QgdHJhbnNh Y3Rpb24gY29tbWFuZCAqLworCQkJCQlzdC0+Y29tbWFuZCA9IDA7CisJCQkJCXN0LT5maXJzdF9m YWlsdXJlID0gTk9fRkFJTFVSRTsKKwkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1B TkQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIEVuZCB0aGUgZmFpbGVkIHRyYW5z YWN0aW9uICovCisJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfVFg7CisJCQkJfQorCQkJCWJy ZWFrOworCisJCQkJLyoKIAkJCQkgKiBFbmQgb2YgdHJhbnNhY3Rpb24uCiAJCQkJICovCiAJCQlj YXNlIENTVEFURV9FTkRfVFg6CkBAIC0zMjMyLDcgKzM3NTIsOCBAQCBkb0N1c3RvbShUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCUlOU1RSX1RJTUVfU0VU X1pFUk8obm93KTsKIAkJCQl9CiAKLQkJCQlpZiAoKHN0LT5jbnQgPj0gbnhhY3RzICYmIGR1cmF0 aW9uIDw9IDApIHx8IHRpbWVyX2V4Y2VlZGVkKQorCQkJCWlmICgoZ2V0VG90YWxDbnQoc3QpID49 IG54YWN0cyAmJiBkdXJhdGlvbiA8PSAwKSB8fAorCQkJCQl0aW1lcl9leGNlZWRlZCkKIAkJCQl7 CiAJCQkJCS8qIGV4aXQgc3VjY2VzcyAqLwogCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRklOSVNI RUQ7CkBAIC0zMjkyLDcgKzM4MTMsNyBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwKIAkgKiB0byB0aGUgcmFuZG9tIHNhbXBsZS4KIAkgKi8KIAlpZiAoc2FtcGxlX3JhdGUgIT0g MC4wICYmCi0JCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpID4gc2FtcGxlX3JhdGUp CisJCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUuZGF0YSkgPiBzYW1wbGVfcmF0ZSkK IAkJcmV0dXJuOwogCiAJLyogc2hvdWxkIHdlIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0cyBvciBub3Q/ ICovCkBAIC0zMzA4LDEzICszODI5LDE1IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUg KnN0LAogCQl3aGlsZSAoYWdnLT5zdGFydF90aW1lICsgYWdnX2ludGVydmFsIDw9IG5vdykKIAkJ ewogCQkJLyogcHJpbnQgYWdncmVnYXRlZCByZXBvcnQgdG8gbG9nZmlsZSAqLwotCQkJZnByaW50 Zihsb2dmaWxlLCAiJWxkICIgSU5UNjRfRk9STUFUICIgJS4wZiAlLjBmICUuMGYgJS4wZiIsCisJ CQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9GT1JNQVQgIiAlLjBmICUuMGYgJS4wZiAl LjBmICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQsCiAJCQkJCShsb25nKSBhZ2ctPnN0 YXJ0X3RpbWUsCiAJCQkJCWFnZy0+Y250LAogCQkJCQlhZ2ctPmxhdGVuY3kuc3VtLAogCQkJCQlh Z2ctPmxhdGVuY3kuc3VtMiwKIAkJCQkJYWdnLT5sYXRlbmN5Lm1pbiwKLQkJCQkJYWdnLT5sYXRl bmN5Lm1heCk7CisJCQkJCWFnZy0+bGF0ZW5jeS5tYXgsCisJCQkJCWFnZy0+ZXJyb3JzLAorCQkJ CQlhZ2ctPmVycm9yc19pbl9mYWlsZWRfdHgpOwogCQkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJ ewogCQkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmICUuMGYgJS4wZiAlLjBmIiwKQEAgLTMzMjUs NiArMzg0OCwxMCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQlpZiAo bGF0ZW5jeV9saW1pdCkKIAkJCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFULCBh Z2ctPnNraXBwZWQpOwogCQkJfQorCQkJaWYgKG1heF90cmllcyA+IDEpCisJCQkJZnByaW50Zihs b2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQlhZ2ctPnJl dHJpZWQsCisJCQkJCQlhZ2ctPnJldHJpZXMpOwogCQkJZnB1dGMoJ1xuJywgbG9nZmlsZSk7CiAK IAkJCS8qIHJlc2V0IGRhdGEgYW5kIG1vdmUgdG8gbmV4dCBpbnRlcnZhbCAqLwpAQCAtMzMzMiw3 ICszODU5LDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCX0KIAogCQkv KiBhY2N1bXVsYXRlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi0JCWFjY3VtU3RhdHMoYWdn LCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKGFnZywgc2tpcHBlZCwgbGF0 ZW5jeSwgbGFnLCBzdC0+Zmlyc3RfZmFpbHVyZSwgc3QtPnJldHJpZXMpOwogCX0KIAllbHNlCiAJ ewpAQCAtMzM0MiwxNCArMzg2OSwyNSBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwKIAkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CiAJCWlmIChza2lwcGVkKQogCQkJZnByaW50 Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkICVkICVsZCAlbGQiLAotCQkJ CQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwKKwkJCQkJc3QtPmlkLCBnZXRUb3RhbENu dChzdCksIHN0LT51c2VfZmlsZSwKIAkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2 X3VzZWMpOwotCQllbHNlCisJCWVsc2UgaWYgKHN0LT5maXJzdF9mYWlsdXJlID09IE5PX0ZBSUxV UkUpCiAJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJWQgJWxk ICVsZCIsCi0JCQkJCXN0LT5pZCwgc3QtPmNudCwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlLAorCQkJ CQlzdC0+aWQsIGdldFRvdGFsQ250KHN0KSwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlLAorCQkJCQko bG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJCWVsc2UgaWYgKHN0LT5maXJz dF9mYWlsdXJlID09IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pCisJCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGluX2ZhaWxlZF90eCAlZCAlbGQgJWxkIiwKKwkJCQkJ c3QtPmlkLCBnZXRUb3RhbENudChzdCksIHN0LT51c2VfZmlsZSwKKwkJCQkJKGxvbmcpIHR2LnR2 X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCQllbHNlCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIl ZCAiIElOVDY0X0ZPUk1BVCAiIGZhaWxlZCAlZCAlbGQgJWxkIiwKKwkJCQkJc3QtPmlkLCBnZXRU b3RhbENudChzdCksIHN0LT51c2VfZmlsZSwKIAkJCQkJKGxvbmcpIHR2LnR2X3NlYywgKGxvbmcp IHR2LnR2X3VzZWMpOworCiAJCWlmICh0aHJvdHRsZV9kZWxheSkKIAkJCWZwcmludGYobG9nZmls ZSwgIiAlLjBmIiwgbGFnKTsKKwkJaWYgKG1heF90cmllcyA+IDEpCisJCQlmcHJpbnRmKGxvZ2Zp bGUsICIgJWQiLCBzdC0+cmV0cmllcyk7CiAJCWZwdXRjKCdcbicsIGxvZ2ZpbGUpOwogCX0KIH0K QEAgLTMzNjksNyArMzkwNyw3IEBAIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdywKIAlib29sCQl0aHJlYWRfZGV0YWlscyA9IHByb2dy ZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lfbGltaXQsCiAJCQkJZGV0YWlsZWQgPSB0 aHJlYWRfZGV0YWlscyB8fCB1c2VfbG9nIHx8IHBlcl9zY3JpcHRfc3RhdHM7CiAKLQlpZiAoZGV0 YWlsZWQgJiYgIXNraXBwZWQpCisJaWYgKGRldGFpbGVkICYmICFza2lwcGVkICYmIHN0LT5maXJz dF9mYWlsdXJlID09IE5PX0ZBSUxVUkUpCiAJewogCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKCpu b3cpKQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsKQEAgLTMzODIsNyArMzkyMCw4 IEBAIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3Rp bWUgKm5vdywKIAlpZiAodGhyZWFkX2RldGFpbHMpCiAJewogCQkvKiBrZWVwIGRldGFpbGVkIHRo cmVhZCBzdGF0cyAqLwotCQlhY2N1bVN0YXRzKCZ0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBsYXRl bmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKCZ0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5 LCBsYWcsIHN0LT5maXJzdF9mYWlsdXJlLAorCQkJCSAgIHN0LT5yZXRyaWVzKTsKIAogCQkvKiBj b3VudCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgbGF0ZW5jeSBsaW1pdCwgaWYgbmVlZGVkICovCiAJ CWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRlbmN5X2xpbWl0KQpAQCAtMzM5MCwx OSArMzkyOSwyNCBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBpbnN0cl90aW1lICpub3csCiAJfQogCWVsc2UKIAl7Ci0JCS8qIG5vIGRldGFpbGVkIHN0YXRz LCBqdXN0IGNvdW50ICovCi0JCXRocmVhZC0+c3RhdHMuY250Kys7CisJCS8qIG5vIGRldGFpbGVk IHN0YXRzICovCisJCWFjY3VtU3RhdHMoJnRocmVhZC0+c3RhdHMsIHNraXBwZWQsIDAsIDAsIHN0 LT5maXJzdF9mYWlsdXJlLAorCQkJCSAgIHN0LT5yZXRyaWVzKTsKIAl9CiAKIAkvKiBjbGllbnQg c3RhdCBpcyBqdXN0IGNvdW50aW5nICovCi0Jc3QtPmNudCsrOworCWlmIChzdC0+Zmlyc3RfZmFp bHVyZSA9PSBOT19GQUlMVVJFKQorCQlzdC0+Y250Kys7CisJZWxzZQorCQlzdC0+ZWNudCsrOwog CiAJaWYgKHVzZV9sb2cpCiAJCWRvTG9nKHRocmVhZCwgc3QsIGFnZywgc2tpcHBlZCwgbGF0ZW5j eSwgbGFnKTsKIAogCS8qIFhYWCBjb3VsZCB1c2UgYSBtdXRleCBoZXJlLCBidXQgd2UgY2hvb3Nl IG5vdCB0byAqLwogCWlmIChwZXJfc2NyaXB0X3N0YXRzKQotCQlhY2N1bVN0YXRzKCZzcWxfc2Ny aXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CisJCWFjY3Vt U3RhdHMoJnNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwg bGFnLAorCQkJCSAgIHN0LT5maXJzdF9mYWlsdXJlLCBzdC0+cmV0cmllcyk7CiB9CiAKIApAQCAt NDUzNSw3ICs1MDc5LDggQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRh ICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCWRvdWJsZQkJdGltZV9pbmNsdWRlLAog CQkJCXRwc19pbmNsdWRlLAogCQkJCXRwc19leGNsdWRlOwotCWludDY0CQludHggPSB0b3RhbC0+ Y250IC0gdG90YWwtPnNraXBwZWQ7CisJaW50NjQJCW50eCA9IHRvdGFsLT5jbnQgLSB0b3RhbC0+ c2tpcHBlZCwKKwkJCQl0b3RhbF9udHggPSB0b3RhbC0+Y250ICsgdG90YWwtPmVycm9yczsKIAlp bnQJCQlpLAogCQkJCXRvdGFsQ2FjaGVPdmVyZmxvd3MgPSAwOwogCkBAIC00NTU2LDggKzUxMDEs OCBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0 cl90aW1lIHRvdGFsX3RpbWUsCiAJaWYgKGR1cmF0aW9uIDw9IDApCiAJewogCQlwcmludGYoIm51 bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogJWRcbiIsIG54YWN0cyk7Ci0JCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9S TUFUICIvJWRcbiIsCi0JCQkgICBudHgsIG54YWN0cyAqIG5jbGllbnRzKTsKKwkJcHJpbnRmKCJu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIiBJTlQ2NF9GT1JNQVQg Ii8iIElOVDY0X0ZPUk1BVCAiXG4iLAorCQkJICAgbnR4LCB0b3RhbF9udHgpOwogCX0KIAllbHNl CiAJewpAQCAtNDU2NSw2ICs1MTEwLDI1IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJcHJpbnRmKCJudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIiBJTlQ2NF9GT1JNQVQgIlxu IiwKIAkJCSAgIG50eCk7CiAJfQorCisJaWYgKHRvdGFsLT5lcnJvcnMgPiAwKQorCQlwcmludGYo Im51bWJlciBvZiBlcnJvcnM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkgICB0 b3RhbC0+ZXJyb3JzLCAxMDAuMCAqIHRvdGFsLT5lcnJvcnMgLyB0b3RhbF9udHgpOworCisJaWYg KHRvdGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4ID4gMCkKKwkJcHJpbnRmKCJudW1iZXIgb2YgZXJy b3JzIFwiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvblwiOiAiIElOVDY0X0ZPUk1BVCAiICglLjNm JSUpXG4iLAorCQkJICAgdG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHgsCisJCQkgICAxMDAuMCAq IHRvdGFsLT5lcnJvcnNfaW5fZmFpbGVkX3R4IC8gdG90YWxfbnR4KTsKKworCS8qIGl0IGNhbiBi ZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBpcyBncmVhdGVyIHRoYW4gb25lICovCisJaWYg KHRvdGFsLT5yZXRyaWVkID4gMCkKKwl7CisJCXByaW50ZigibnVtYmVyIG9mIHJldHJpZWQ6ICIg SU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCisJCQkgICB0b3RhbC0+cmV0cmllZCwgMTAwLjAg KiB0b3RhbC0+cmV0cmllZCAvIHRvdGFsX250eCk7CisJCXByaW50ZigibnVtYmVyIG9mIHJldHJp ZXM6ICIgSU5UNjRfRk9STUFUICJcbiIsIHRvdGFsLT5yZXRyaWVzKTsKKwl9CisJcHJpbnRmKCJt YXhpbXVtIG51bWJlciBvZiB0cmllczogJWRcbiIsIG1heF90cmllcyk7CisKIAkvKiBSZXBvcnQg emlwZmlhbiBjYWNoZSBvdmVyZmxvdyAqLwogCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsr KQogCXsKQEAgLTQ2MTQsNyArNTE3OCw3IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAlwcmludGYoInRwcyA9 ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUp OwogCiAJLyogUmVwb3J0IHBlci1zY3JpcHQvY29tbWFuZCBzdGF0aXN0aWNzICovCi0JaWYgKHBl cl9zY3JpcHRfc3RhdHMgfHwgaXNfbGF0ZW5jaWVzKQorCWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8 IHJlcG9ydF9wZXJfY29tbWFuZCkKIAl7CiAJCWludAkJCWk7CiAKQEAgLTQ2MjMsNiArNTE4Nyw3 IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3Ry X3RpbWUgdG90YWxfdGltZSwKIAkJCWlmIChwZXJfc2NyaXB0X3N0YXRzKQogCQkJewogCQkJCVN0 YXRzRGF0YSAgKnNzdGF0cyA9ICZzcWxfc2NyaXB0W2ldLnN0YXRzOworCQkJCWludDY0CQlzY3Jp cHRfdG90YWxfbnR4ID0gc3N0YXRzLT5jbnQgKyBzc3RhdHMtPmVycm9yczsKIAogCQkJCXByaW50 ZigiU1FMIHNjcmlwdCAlZDogJXNcbiIKIAkJCQkJICAgIiAtIHdlaWdodDogJWQgKHRhcmdldHMg JS4xZiUlIG9mIHRvdGFsKVxuIgpAQCAtNDYzMSw5ICs1MTk2LDMwIEBAIHByaW50UmVzdWx0cyhU U3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwK IAkJCQkJICAgc3FsX3NjcmlwdFtpXS53ZWlnaHQsCiAJCQkJCSAgIDEwMC4wICogc3FsX3Njcmlw dFtpXS53ZWlnaHQgLyB0b3RhbF93ZWlnaHQsCiAJCQkJCSAgIHNzdGF0cy0+Y250LAotCQkJCQkg ICAxMDAuMCAqIHNzdGF0cy0+Y250IC8gdG90YWwtPmNudCwKKwkJCQkJICAgMTAwLjAgKiBzc3Rh dHMtPmNudCAvIHNjcmlwdF90b3RhbF9udHgsCiAJCQkJCSAgIChzc3RhdHMtPmNudCAtIHNzdGF0 cy0+c2tpcHBlZCkgLyB0aW1lX2luY2x1ZGUpOwogCisJCQkJaWYgKHRvdGFsLT5lcnJvcnMgPiAw KQorCQkJCQlwcmludGYoIiAtIG51bWJlciBvZiBlcnJvcnM6ICIgSU5UNjRfRk9STUFUICIgKCUu M2YlJSlcbiIsCisJCQkJCQkgICBzc3RhdHMtPmVycm9ycywKKwkJCQkJCSAgIDEwMC4wICogc3N0 YXRzLT5lcnJvcnMgLyBzY3JpcHRfdG90YWxfbnR4KTsKKworCQkJCWlmICh0b3RhbC0+ZXJyb3Jz X2luX2ZhaWxlZF90eCA+IDApCisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIGVycm9ycyBcImlu IGZhaWxlZCBTUUwgdHJhbnNhY3Rpb25cIjogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxuIiwK KwkJCQkJCSAgIHNzdGF0cy0+ZXJyb3JzX2luX2ZhaWxlZF90eCwKKwkJCQkJCSAgICgxMDAuMCAq IHNzdGF0cy0+ZXJyb3JzX2luX2ZhaWxlZF90eCAvCisJCQkJCQkJc2NyaXB0X3RvdGFsX250eCkp OworCisJCQkJLyogaXQgY2FuIGJlIG5vbi16ZXJvIG9ubHkgaWYgbWF4X3RyaWVzIGlzIGdyZWF0 ZXIgdGhhbiBvbmUgKi8KKwkJCQlpZiAodG90YWwtPnJldHJpZWQgPiAwKQorCQkJCXsKKwkJCQkJ cHJpbnRmKCIgLSBudW1iZXIgb2YgcmV0cmllZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUlKVxu IiwKKwkJCQkJCSAgIHNzdGF0cy0+cmV0cmllZCwKKwkJCQkJCSAgIDEwMC4wICogc3N0YXRzLT5y ZXRyaWVkIC8gc2NyaXB0X3RvdGFsX250eCk7CisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHJl dHJpZXM6ICIgSU5UNjRfRk9STUFUICJcbiIsCisJCQkJCQkgICBzc3RhdHMtPnJldHJpZXMpOwor CQkJCX0KKwogCQkJCWlmICh0aHJvdHRsZV9kZWxheSAmJiBsYXRlbmN5X2xpbWl0ICYmIHNzdGF0 cy0+Y250ID4gMCkKIAkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBw ZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YlJSlcbiIsCiAJCQkJCQkgICBzc3RhdHMtPnNraXBw ZWQsCkBAIC00NjQyLDE1ICs1MjI4LDMzIEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCQlwcmludFNpbXBs ZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNzdGF0cy0+bGF0ZW5jeSk7CiAJCQl9CiAKLQkJCS8qIFJl cG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8KLQkJCWlmIChpc19sYXRlbmNpZXMpCisJCQkv KiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzIGFuZCBlcnJvcnMgKi8KKwkJCWlmIChyZXBv cnRfcGVyX2NvbW1hbmQpCiAJCQl7CiAJCQkJQ29tbWFuZCAgICoqY29tbWFuZHM7CiAKIAkJCQlp ZiAocGVyX3NjcmlwdF9zdGF0cykKLQkJCQkJcHJpbnRmKCIgLSBzdGF0ZW1lbnQgbGF0ZW5jaWVz IGluIG1pbGxpc2Vjb25kczpcbiIpOworCQkJCQlwcmludGYoIiAtIHN0YXRlbWVudCBsYXRlbmNp ZXMgaW4gbWlsbGlzZWNvbmRzIik7CiAJCQkJZWxzZQotCQkJCQlwcmludGYoInN0YXRlbWVudCBs YXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOlxuIik7CisJCQkJCXByaW50Zigic3RhdGVtZW50IGxh dGVuY2llcyBpbiBtaWxsaXNlY29uZHMiKTsKKworCQkJCWlmICh0b3RhbC0+ZXJyb3JzID4gMCkK KwkJCQl7CisJCQkJCXByaW50ZigiJXMgZXJyb3JzIiwKKwkJCQkJCSAgICgodG90YWwtPmVycm9y c19pbl9mYWlsZWRfdHggPT0gMCAmJgorCQkJCQkJCXRvdGFsLT5yZXRyaWVkID09IDApID8KKwkJ CQkJCQkiIGFuZCIgOiAiLCIpKTsKKwkJCQl9CisJCQkJaWYgKHRvdGFsLT5lcnJvcnNfaW5fZmFp bGVkX3R4ID4gMCkKKwkJCQl7CisJCQkJCXByaW50ZigiJXMgZXJyb3JzIFwiaW4gZmFpbGVkIFNR TCB0cmFuc2FjdGlvblwiIiwKKwkJCQkJCSAgIHRvdGFsLT5yZXRyaWVkID09IDAgPyAiIGFuZCIg OiAiLCIpOworCQkJCX0KKwkJCQlpZiAodG90YWwtPnJldHJpZWQgPiAwKQorCQkJCXsKKwkJCQkJ cHJpbnRmKCIgYW5kIHJldHJpZXMiKTsKKwkJCQl9CisJCQkJcHJpbnRmKCI6XG4iKTsKIAogCQkJ CWZvciAoY29tbWFuZHMgPSBzcWxfc2NyaXB0W2ldLmNvbW1hbmRzOwogCQkJCQkgKmNvbW1hbmRz ICE9IE5VTEw7CkBAIC00NjU4LDEwICs1MjYyLDI1IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRo cmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCQl7CiAJ CQkJCVNpbXBsZVN0YXRzICpjc3RhdHMgPSAmKCpjb21tYW5kcyktPnN0YXRzOwogCi0JCQkJCXBy aW50ZigiICAgJTExLjNmICAlc1xuIiwKKwkJCQkJcHJpbnRmKCIgICAlMTEuM2YiLAogCQkJCQkJ ICAgKGNzdGF0cy0+Y291bnQgPiAwKSA/Ci0JCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAv IGNzdGF0cy0+Y291bnQgOiAwLjAsCi0JCQkJCQkgICAoKmNvbW1hbmRzKS0+bGluZSk7CisJCQkJ CQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAvIGNzdGF0cy0+Y291bnQgOiAwLjApOworCQkJCQlp ZiAodG90YWwtPmVycm9ycyA+IDApCisJCQkJCXsKKwkJCQkJCXByaW50ZigiICAlMjAiIElOVDY0 X01PRElGSUVSICJkIiwKKwkJCQkJCQkgICAoKmNvbW1hbmRzKS0+ZXJyb3JzKTsKKwkJCQkJfQor CQkJCQlpZiAodG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHggPiAwKQorCQkJCQl7CisJCQkJCQlw cmludGYoIiAgJTIwIiBJTlQ2NF9NT0RJRklFUiAiZCIsCisJCQkJCQkJICAgKCpjb21tYW5kcykt PmVycm9yc19pbl9mYWlsZWRfdHgpOworCQkJCQl9CisJCQkJCWlmICh0b3RhbC0+cmV0cmllZCA+ IDApCisJCQkJCXsKKwkJCQkJCXByaW50ZigiICAlMjAiIElOVDY0X01PRElGSUVSICJkIiwKKwkJ CQkJCQkgICAoKmNvbW1hbmRzKS0+cmV0cmllcyk7CisJCQkJCX0KKwkJCQkJcHJpbnRmKCIgICVz XG4iLCAoKmNvbW1hbmRzKS0+bGluZSk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC00NzIwLDcgKzUz MzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJidWlsdGluIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsICdiJ30sCiAJCXsiY2xpZW50IiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdjJ30sCiAJCXsiY29ubmVjdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnQyd9LAotCQl7 ImRlYnVnIiwgbm9fYXJndW1lbnQsIE5VTEwsICdkJ30sCisJCXsiZGVidWciLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgJ2QnfSwKIAkJeyJkZWZpbmUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ0QnfSwKIAkJeyJmaWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdmJ30sCiAJCXsi ZmlsbGZhY3RvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LApAQCAtNDczNSw3ICs1 MzU0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsicHJvZ3Jlc3MiLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKIAkJeyJwcm90b2NvbCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAnTSd9LAogCQl7InF1aWV0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdxJ30sCi0J CXsicmVwb3J0LWxhdGVuY2llcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAorCQl7InJlcG9y dC1wZXItY29tbWFuZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAogCQl7InJhdGUiLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKIAkJeyJzY2FsZSIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAncyd9LAogCQl7InNlbGVjdC1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdTJ30s CkBAIC00NzU0LDYgKzUzNzMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJs b2ctcHJlZml4IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDd9LAogCQl7ImZvcmVpZ24ta2V5 cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA4fSwKIAkJeyJyYW5kb20tc2VlZCIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCA5fSwKKwkJeyJtYXgtdHJpZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgMTB9LAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwogCkBAIC00ODI1LDcgKzU0NDUsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiBzZXQgcmFuZG9tIHNlZWQgZWFybHks IGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQgd2hpbGUgcGFyc2luZyBzY3JpcHRzLiAqLwogCXNldF9y YW5kb21fc2VlZChnZXRlbnYoIlBHQkVOQ0hfUkFORE9NX1NFRUQiKSwgIlBHQkVOQ0hfUkFORE9N X1NFRUQgZW52aXJvbm1lbnQgdmFyaWFibGUiKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25n KGFyZ2MsIGFyZ3YsICJpSTpoOm52cDpkcWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpM OiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImlJOmg6bnZwOmQ6cWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpN OlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQljaGFyCSAg ICpzY3JpcHQ7CiAKQEAgLTQ4NTUsOCArNTQ3NSwyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCQlwZ3BvcnQgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAkJCWNh c2UgJ2QnOgotCQkJCWRlYnVnKys7Ci0JCQkJYnJlYWs7CisJCQkJeworCQkJCQlmb3IgKGRlYnVn X2xldmVsID0gMDsKKwkJCQkJCSBkZWJ1Z19sZXZlbCA8IE5VTV9ERUJVR0xFVkVMOworCQkJCQkJ IGRlYnVnX2xldmVsKyspCisJCQkJCXsKKwkJCQkJCWlmIChzdHJjbXAob3B0YXJnLCBERUJVR0xF VkVsW2RlYnVnX2xldmVsXSkgPT0gMCkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAo ZGVidWdfbGV2ZWwgPj0gTlVNX0RFQlVHTEVWRUwpCisJCQkJCXsKKwkJCQkJCWZwcmludGYoc3Rk ZXJyLCAiaW52YWxpZCBkZWJ1ZyBsZXZlbCAoLWQpOiBcIiVzXCJcbiIsCisJCQkJCQkJCW9wdGFy Zyk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCWNhc2Ug J2MnOgogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQluY2xpZW50cyA9 IGF0b2kob3B0YXJnKTsKQEAgLTQ5MDgsNyArNTU0Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCWJyZWFrOwogCQkJY2FzZSAncic6CiAJCQkJYmVuY2htYXJraW5nX29wdGlv bl9zZXQgPSB0cnVlOwotCQkJCWlzX2xhdGVuY2llcyA9IHRydWU7CisJCQkJcmVwb3J0X3Blcl9j b21tYW5kID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3MnOgogCQkJCXNjYWxlX2dpdmVu ID0gdHJ1ZTsKQEAgLTQ5ODksNyArNTYyMyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQkJCQl9CiAKIAkJCQkJKnArKyA9ICdcMCc7Ci0JCQkJCWlmICghcHV0VmFyaWFibGUoJnN0 YXRlWzBdLCAib3B0aW9uIiwgb3B0YXJnLCBwKSkKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3Rh dGVbMF0udmFyaWFibGVzLCAib3B0aW9uIiwgb3B0YXJnLCBwKSkKIAkJCQkJCWV4aXQoMSk7CiAJ CQkJfQogCQkJCWJyZWFrOwpAQCAtNTEwMSw2ICs1NzM1LDE2IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKIAkJCQlzZXRf cmFuZG9tX3NlZWQob3B0YXJnLCAiLS1yYW5kb20tc2VlZCBvcHRpb24iKTsKIAkJCQlicmVhazsK KwkJCWNhc2UgMTA6CQkJLyogbWF4LXRyaWVzICovCisJCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOworCQkJCW1heF90cmllcyA9IGF0b2kob3B0YXJnKTsKKwkJCQlpZiAobWF4X3Ry aWVzIDw9IDApCisJCQkJeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVyIG9m IG1heGltdW0gdHJpZXM6IFwiJXNcIlxuIiwKKwkJCQkJCQlvcHRhcmcpOworCQkJCQlleGl0KDEp OworCQkJCX0KKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZnByaW50ZihzdGRlcnIsIF8o IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksIHByb2duYW1lKTsK IAkJCQlleGl0KDEpOwpAQCAtNTI4NywxOSArNTkzMSwxOSBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJCWludAkJCWo7CiAKIAkJCXN0YXRlW2ldLmlkID0gaTsKLQkJCWZvciAoaiA9 IDA7IGogPCBzdGF0ZVswXS5udmFyaWFibGVzOyBqKyspCisJCQlmb3IgKGogPSAwOyBqIDwgc3Rh dGVbMF0udmFyaWFibGVzLm52YXJpYWJsZXM7IGorKykKIAkJCXsKLQkJCQlWYXJpYWJsZSAgICp2 YXIgPSAmc3RhdGVbMF0udmFyaWFibGVzW2pdOworCQkJCVZhcmlhYmxlICAgKnZhciA9ICZzdGF0 ZVswXS52YXJpYWJsZXMuYXJyYXlbal07CiAKIAkJCQlpZiAodmFyLT52YWx1ZS50eXBlICE9IFBH QlRfTk9fVkFMVUUpCiAJCQkJewotCQkJCQlpZiAoIXB1dFZhcmlhYmxlVmFsdWUoJnN0YXRlW2ld LCAic3RhcnR1cCIsCi0JCQkJCQkJCQkJICAgdmFyLT5uYW1lLCAmdmFyLT52YWx1ZSkpCisJCQkJ CWlmICghcHV0VmFyaWFibGVWYWx1ZSgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCisJ CQkJCQkJCQkJICAgdmFyLT5uYW1lLCAmdmFyLT52YWx1ZSwgdHJ1ZSkpCiAJCQkJCQlleGl0KDEp OwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVtp XSwgInN0YXJ0dXAiLAorCQkJCQlpZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVtpXS52YXJpYWJsZXMs ICJzdGFydHVwIiwKIAkJCQkJCQkJCSB2YXItPm5hbWUsIHZhci0+c3ZhbHVlKSkKIAkJCQkJCWV4 aXQoMSk7CiAJCQkJfQpAQCAtNTMxMSw5ICs1OTU1LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQogCXsKIAkJc3RhdGVbaV0u Y3N0YWNrID0gY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRlKCk7CisJCWluaXRSYW5kb21TdGF0ZSgm c3RhdGVbaV0ucmFuZG9tX3N0YXRlKTsKIAl9CiAKLQlpZiAoZGVidWcpCisJaWYgKGRlYnVnX2xl dmVsID49IERFQlVHX0FMTCkKIAl7CiAJCWlmIChkdXJhdGlvbiA8PSAwKQogCQkJcHJpbnRmKCJw Z2hvc3Q6ICVzIHBncG9ydDogJXMgbmNsaWVudHM6ICVkIG54YWN0czogJWQgZGJOYW1lOiAlc1xu IiwKQEAgLTUzNzQsMTEgKzYwMTksMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ ICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxseSBnZXQgLXMgb3IgZGF0YWJhc2Ugc2NhbGUsIGJ1 dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4cGxpY2l0IC1EIHN3aXRjaAogCSAqLwotCWlmIChs b29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJzY2FsZSIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZh cmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJzY2FsZSIpID09IE5VTEwpCiAJewogCQlmb3Ig KGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewotCQkJaWYgKCFwdXRWYXJpYWJsZUludCgm c3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUpKQorCQkJaWYgKCFwdXRWYXJpYWJs ZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJzY2FsZSIsIHNjYWxlLAorCQkJ CQkJCQl0cnVlKSkKIAkJCQlleGl0KDEpOwogCQl9CiAJfQpAQCAtNTM4NywxNSArNjAzMywxOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBEZWZpbmUgYSA6Y2xpZW50X2lkIHZh cmlhYmxlIHRoYXQgaXMgdW5pcXVlIHBlciBjb25uZWN0aW9uLiBCdXQgZG9uJ3QKIAkgKiBvdmVy cmlkZSBhbiBleHBsaWNpdCAtRCBzd2l0Y2guCiAJICovCi0JaWYgKGxvb2t1cFZhcmlhYmxlKCZz dGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0 ZVswXS52YXJpYWJsZXMsICJjbGllbnRfaWQiKSA9PSBOVUxMKQogCXsKIAkJZm9yIChpID0gMDsg aSA8IG5jbGllbnRzOyBpKyspCi0JCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXSwgInN0 YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSkpCisJCXsKKwkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0 YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSwKKwkJCQkJCQkJdHJ1 ZSkpCiAJCQkJZXhpdCgxKTsKKwkJfQogCX0KIAogCS8qIHNldCBkZWZhdWx0IHNlZWQgZm9yIGhh c2ggZnVuY3Rpb25zICovCi0JaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgImRlZmF1bHRf c2VlZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMs ICJkZWZhdWx0X3NlZWQiKSA9PSBOVUxMKQogCXsKIAkJdWludDY0CXNlZWQgPSAoKHVpbnQ2NCkg KHJhbmRvbSgpICYgMHhGRkZGKSA8PCA0OCkgfAogCQkJCQkgICAoKHVpbnQ2NCkgKHJhbmRvbSgp ICYgMHhGRkZGKSA8PCAzMikgfApAQCAtNTQwMywxNSArNjA1MiwxNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJCQkJICAgKHVpbnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKTsKIAog CQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJbnQo JnN0YXRlW2ldLCAic3RhcnR1cCIsICJkZWZhdWx0X3NlZWQiLCAoaW50NjQpIHNlZWQpKQorCQkJ aWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJkZWZh dWx0X3NlZWQiLAorCQkJCQkJCQkoaW50NjQpIHNlZWQsIHRydWUpKQogCQkJCWV4aXQoMSk7CiAJ fQogCiAJLyogc2V0IHJhbmRvbSBzZWVkIHVubGVzcyBvdmVyd3JpdHRlbiAqLwotCWlmIChsb29r dXBWYXJpYWJsZSgmc3RhdGVbMF0sICJyYW5kb21fc2VlZCIpID09IE5VTEwpCisJaWYgKGxvb2t1 cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJyYW5kb21fc2VlZCIpID09IE5VTEwpCiAJ ewogCQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKLQkJCWlmICghcHV0VmFyaWFibGVJ bnQoJnN0YXRlW2ldLCAic3RhcnR1cCIsICJyYW5kb21fc2VlZCIsIHJhbmRvbV9zZWVkKSkKKwkJ CWlmICghcHV0VmFyaWFibGVJbnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAicmFu ZG9tX3NlZWQiLAorCQkJCQkJCQlyYW5kb21fc2VlZCwgdHJ1ZSkpCiAJCQkJZXhpdCgxKTsKIAl9 CiAKQEAgLTU0NDQsOSArNjA5NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl0 aHJlYWQtPnN0YXRlID0gJnN0YXRlW25jbGllbnRzX2RlYWx0XTsKIAkJdGhyZWFkLT5uc3RhdGUg PQogCQkJKG5jbGllbnRzIC0gbmNsaWVudHNfZGVhbHQgKyBudGhyZWFkcyAtIGkgLSAxKSAvIChu dGhyZWFkcyAtIGkpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVswXSA9IHJhbmRvbSgpOwotCQl0 aHJlYWQtPnJhbmRvbV9zdGF0ZVsxXSA9IHJhbmRvbSgpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0 ZVsyXSA9IHJhbmRvbSgpOworCQlpbml0UmFuZG9tU3RhdGUoJnRocmVhZC0+cmFuZG9tX3N0YXRl KTsKIAkJdGhyZWFkLT5sb2dmaWxlID0gTlVMTDsgLyogZmlsbGVkIGluIGxhdGVyICovCiAJCXRo cmVhZC0+bGF0ZW5jeV9sYXRlID0gMDsKIAkJdGhyZWFkLT56aXBmX2NhY2hlLm5iX2NlbGxzID0g MDsKQEAgLTU1MjgsNiArNjE3NywxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ bWVyZ2VTaW1wbGVTdGF0cygmc3RhdHMubGFnLCAmdGhyZWFkLT5zdGF0cy5sYWcpOwogCQlzdGF0 cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7CiAJCXN0YXRzLnNraXBwZWQgKz0gdGhyZWFkLT5z dGF0cy5za2lwcGVkOworCQlzdGF0cy5yZXRyaWVzICs9IHRocmVhZC0+c3RhdHMucmV0cmllczsK KwkJc3RhdHMucmV0cmllZCArPSB0aHJlYWQtPnN0YXRzLnJldHJpZWQ7CisJCXN0YXRzLmVycm9y cyArPSB0aHJlYWQtPnN0YXRzLmVycm9yczsKKwkJc3RhdHMuZXJyb3JzX2luX2ZhaWxlZF90eCAr PSB0aHJlYWQtPnN0YXRzLmVycm9yc19pbl9mYWlsZWRfdHg7CiAJCWxhdGVuY3lfbGF0ZSArPSB0 aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJSU5TVFJfVElNRV9BREQoY29ubl90b3RhbF90aW1lLCB0 aHJlYWQtPmNvbm5fdGltZSk7CiAJfQpAQCAtNTgxMiw3ICs2NDY1LDExIEBAIHRocmVhZFJ1bih2 b2lkICphcmcpCiAJCQkJLyogZ2VuZXJhdGUgYW5kIHNob3cgcmVwb3J0ICovCiAJCQkJU3RhdHNE YXRhCWN1cjsKIAkJCQlpbnQ2NAkJcnVuID0gbm93IC0gbGFzdF9yZXBvcnQsCi0JCQkJCQkJbnR4 OworCQkJCQkJCW50eCwKKwkJCQkJCQlyZXRyaWVzLAorCQkJCQkJCXJldHJpZWQsCisJCQkJCQkJ ZXJyb3JzLAorCQkJCQkJCWVycm9yc19pbl9mYWlsZWRfdHg7CiAJCQkJZG91YmxlCQl0cHMsCiAJ CQkJCQkJdG90YWxfcnVuLAogCQkJCQkJCWxhdGVuY3ksCkBAIC01ODM5LDYgKzY0OTYsMTEgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJbWVyZ2VTaW1wbGVTdGF0cygmY3VyLmxhZywgJnRo cmVhZFtpXS5zdGF0cy5sYWcpOwogCQkJCQljdXIuY250ICs9IHRocmVhZFtpXS5zdGF0cy5jbnQ7 CiAJCQkJCWN1ci5za2lwcGVkICs9IHRocmVhZFtpXS5zdGF0cy5za2lwcGVkOworCQkJCQljdXIu cmV0cmllcyArPSB0aHJlYWRbaV0uc3RhdHMucmV0cmllczsKKwkJCQkJY3VyLnJldHJpZWQgKz0g dGhyZWFkW2ldLnN0YXRzLnJldHJpZWQ7CisJCQkJCWN1ci5lcnJvcnMgKz0gdGhyZWFkW2ldLnN0 YXRzLmVycm9yczsKKwkJCQkJY3VyLmVycm9yc19pbl9mYWlsZWRfdHggKz0KKwkJCQkJCXRocmVh ZFtpXS5zdGF0cy5lcnJvcnNfaW5fZmFpbGVkX3R4OwogCQkJCX0KIAogCQkJCS8qIHdlIGNvdW50 IG9ubHkgYWN0dWFsbHkgZXhlY3V0ZWQgdHJhbnNhY3Rpb25zICovCkBAIC01ODU2LDYgKzY1MTgs MTEgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQl7CiAJCQkJCWxhdGVuY3kgPSBzcWxhdCA9 IHN0ZGV2ID0gbGFnID0gMDsKIAkJCQl9CisJCQkJcmV0cmllcyA9IGN1ci5yZXRyaWVzIC0gbGFz dC5yZXRyaWVzOworCQkJCXJldHJpZWQgPSBjdXIucmV0cmllZCAtIGxhc3QucmV0cmllZDsKKwkJ CQllcnJvcnMgPSBjdXIuZXJyb3JzIC0gbGFzdC5lcnJvcnM7CisJCQkJZXJyb3JzX2luX2ZhaWxl ZF90eCA9IGN1ci5lcnJvcnNfaW5fZmFpbGVkX3R4IC0KKwkJCQkJbGFzdC5lcnJvcnNfaW5fZmFp bGVkX3R4OwogCiAJCQkJaWYgKHByb2dyZXNzX3RpbWVzdGFtcCkKIAkJCQl7CkBAIC01ODgxLDYg KzY1NDgsMTQgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJCSJwcm9ncmVzczogJXMsICUu MWYgdHBzLCBsYXQgJS4zZiBtcyBzdGRkZXYgJS4zZiIsCiAJCQkJCQl0YnVmLCB0cHMsIGxhdGVu Y3ksIHN0ZGV2KTsKIAorCQkJCWlmIChlcnJvcnMgPiAwKQorCQkJCXsKKwkJCQkJZnByaW50Zihz dGRlcnIsICIsICIgSU5UNjRfRk9STUFUICIgZmFpbGVkIiAsIGVycm9ycyk7CisJCQkJCWlmIChl cnJvcnNfaW5fZmFpbGVkX3R4ID4gMCkKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiICgiIElOVDY0 X0ZPUk1BVCAiIGluIGZhaWxlZCB0eCkiLAorCQkJCQkJCQllcnJvcnNfaW5fZmFpbGVkX3R4KTsK KwkJCQl9CisKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQkJewogCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiwgbGFnICUuM2YgbXMiLCBsYWcpOwpAQCAtNTg4OCw2ICs2NTYzLDExIEBAIHRocmVh ZFJ1bih2b2lkICphcmcpCiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQg IiBza2lwcGVkIiwKIAkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNraXBwZWQpOwogCQkJCX0K KworCQkJCS8qIGl0IGNhbiBiZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBpcyBncmVhdGVy IHRoYW4gb25lICovCisJCQkJaWYgKHJldHJpZWQgPiAwKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwg IiwgIiBJTlQ2NF9GT1JNQVQgIiByZXRyaWVkLCAiIElOVDY0X0ZPUk1BVCAiIHJldHJpZXMiLAor CQkJCQkJCXJldHJpZWQsIHJldHJpZXMpOwogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAog CQkJCWxhc3QgPSBjdXI7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5j aF93aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2Vy dmVyLnBsCmluZGV4IDA5Mjk0MTguLjRjZTc3ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAw MV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCkBAIC0xMTgsNyArMTE4LDggQEAgcGdiZW5jaCgKIAlb ICAgcXJ7YnVpbHRpbjogVFBDLUJ9LAogCQlxcntjbGllbnRzOiAyXGJ9LAogCQlxcntwcm9jZXNz ZWQ6IDEwLzEwfSwKLQkJcXJ7bW9kZTogc2ltcGxlfSBdLAorCQlxcnttb2RlOiBzaW1wbGV9LAor CQlxcnttYXhpbXVtIG51bWJlciBvZiB0cmllczogMX0gXSwKIAlbcXJ7XiR9XSwKIAkncGdiZW5j aCB0cGNiLWxpa2UnKTsKIApAQCAtMTM0LDcgKzEzNSw3IEBAIHBnYmVuY2goCiAJJ3BnYmVuY2gg c2ltcGxlIHVwZGF0ZScpOwogCiBwZ2JlbmNoKAotCSctdCAxMDAgLWMgNyAtTSBwcmVwYXJlZCAt YiBzZSAtLWRlYnVnJywKKwknLXQgMTAwIC1jIDcgLU0gcHJlcGFyZWQgLWIgc2UgLS1kZWJ1ZyBh bGwnLAogCTAsCiAJWyAgIHFye2J1aWx0aW46IHNlbGVjdCBvbmx5fSwKIAkJcXJ7Y2xpZW50czog N1xifSwKQEAgLTQ5MSw2ICs0OTIsMTAgQEAgbXkgQGVycm9ycyA9ICgKIFxzZXQgaSAwCiBTRUxF Q1QgTEVBU1QoOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppLCA6aSwgOmksIDppKTsKIH0g XSwKKwlbICAgJ3NxbCBkaXZpc2lvbiBieSB6ZXJvJywgMCwgW3Fye0VSUk9SOiAgZGl2aXNpb24g YnkgemVyb31dLAorCQlxey0tIFNRTCBkaXZpc2lvbiBieSB6ZXJvCisJU0VMRUNUIDEvMDsKK30g XSwKIAogCSMgU0hFTEwKIAlbICAgJ3NoZWxsIGJhZCBjb21tYW5kJywgICAgICAgICAgICAgICAw LApAQCAtNjIxLDYgKzYyNiwxNiBAQCBTRUxFQ1QgTEVBU1QoOmksIDppLCA6aSwgOmksIDppLCA6 aSwgOmksIDppLCA6aSwgOmksIDppKTsKIAlbICAgJ3NsZWVwIHVua25vd24gdW5pdCcsICAgICAg ICAgMSwKIAkJW3Fye3VucmVjb2duaXplZCB0aW1lIHVuaXR9XSwgcXtcc2xlZXAgMSB3ZWVrfSBd LAogCisJIyBDT05ESVRJT05BTCBCTE9DS1MKKwlbICAgJ2lmIGVsaWYgZmFpbGVkIGNvbmRpdGlv bnMnLCAwLAorCQlbcXJ7ZGl2aXNpb24gYnkgemVyb31dLAorCQlxey0tIGZhaWxlZCBjb25kaXRp b25zCitcaWYgMSAvIDAKK1xlbGlmIDEgLyAwCitcZWxzZQorXGVuZGlmCit9IF0sCisKIAkjIE1J U0MKIAlbICAgJ21pc2MgaW52YWxpZCBiYWNrc2xhc2ggY29tbWFuZCcsICAgICAgICAgMSwKIAkJ W3Fye2ludmFsaWQgY29tbWFuZCAuKiAibm9zdWNoY29tbWFuZCJ9XSwgcXtcbm9zdWNoY29tbWFu ZH0gXSwKQEAgLTYzNSw5ICs2NTAsMTEgQEAgZm9yIG15ICRlIChAZXJyb3JzKQogCW15ICRuID0g JzAwMV9wZ2JlbmNoX2Vycm9yXycgLiAkbmFtZTsKIAkkbiA9fiBzLyAvXy9nOwogCXBnYmVuY2go Ci0JCSctbiAtdCAxIC1EZm9vPWJsYSAtRG51bGw9bnVsbCAtRHRydWU9dHJ1ZSAtRG9uZT0xIC1E emVybz0wLjAgLURiYWR0cnVlPXRydWVYWFggLU0gcHJlcGFyZWQnLAorCQknLW4gLXQgMSAtRGZv bz1ibGEgLURudWxsPW51bGwgLUR0cnVlPXRydWUgLURvbmU9MSAtRHplcm89MC4wIC1EYmFkdHJ1 ZT10cnVlWFhYIC1NIHByZXBhcmVkIC1kIGZhaWxzJywKIAkJJHN0YXR1cywKLQkJWyAkc3RhdHVz ID8gcXJ7XiR9IDogcXJ7cHJvY2Vzc2VkOiAwLzF9IF0sCisJCSgkc3RhdHVzID8KKwkJIFsgcXJ7 XiR9IF0gOgorCQkgWyBxcntwcm9jZXNzZWQ6IDAvMX0sIHFye251bWJlciBvZiBlcnJvcnM6IDEg XCgxMDAuMDAwJVwpfSBdKSwKIAkJJHJlLAogCQkncGdiZW5jaCBzY3JpcHQgZXJyb3I6ICcgLiAk bmFtZSwKIAkJeyAkbiA9PiAkc2NyaXB0IH0pOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNo L3QvMDAyX3BnYmVuY2hfbm9fc2VydmVyLnBsIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3BnYmVu Y2hfbm9fc2VydmVyLnBsCmluZGV4IDY4MmJjMjIuLmEwYzIyN2UgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdiZW5jaC90LzAwMl9wZ2JlbmNoX25vX3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVu Y2gvdC8wMDJfcGdiZW5jaF9ub19zZXJ2ZXIucGwKQEAgLTU3LDcgKzU3LDcgQEAgbXkgQG9wdGlv bnMgPSAoCiAKIAkjIG5hbWUsIG9wdGlvbnMsIHN0ZGVyciBjaGVja3MKIAlbICAgJ2JhZCBvcHRp b24nLAotCQknLWggaG9tZSAtcCA1NDMyIC1VIGNhbHZpbiAtZCAtLWJhZC1vcHRpb24nLAorCQkn LWggaG9tZSAtcCA1NDMyIC1VIGNhbHZpbiAtZCBhbGwgLS1iYWQtb3B0aW9uJywKIAkJWyBxcnso dW5yZWNvZ25pemVkfGlsbGVnYWwpIG9wdGlvbn0sIHFyey0taGVscC4qbW9yZSBpbmZvcm1hdGlv bn0gXSBdLAogCVsgICAnbm8gZmlsZScsCiAJCSctZiBuby1zdWNoLWZpbGUnLApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxz LnBsIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2Zh aWxzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWQ3ZGEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDNfc2VyaWFsaXphdGlvbl9hbmRfZGVh ZGxvY2tfZmFpbHMucGwKQEAgLTAsMCArMSw4MTUgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fybmlu Z3M7CisKK3VzZSBDb25maWc7Cit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2Ug VGVzdDo6TW9yZSB0ZXN0cyA9PiAyMTsKKwordXNlIGNvbnN0YW50Cit7CisJUkVBRF9DT01NSVRU RUQgICA9PiAwLAorCVJFUEVBVEFCTEVfUkVBRCAgPT4gMSwKKwlTRVJJQUxJWkFCTEUgICAgID0+ IDIsCit9OworCitteSBAaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gKAorCSdyZWFkXFwgY29tbWl0 dGVkJywKKwkncmVwZWF0YWJsZVxcIHJlYWQnLAorCSdzZXJpYWxpemFibGUnKTsKKworIyBUaGUg a2V5cyBvZiBhZHZpc29yeSBsb2NrcyBmb3IgdGVzdGluZyBkZWFkbG9jayBmYWlsdXJlczoKK3Vz ZSBjb25zdGFudAoreworCURFQURMT0NLXzEgICAgICAgICA9PiAzLAorCVdBSVRfUEdCRU5DSF8y ICAgICA9PiA0LAorCURFQURMT0NLXzIgICAgICAgICA9PiA1LAorCVRSQU5TQUNUSU9OX0VORFNf MSA9PiA2LAorCVRSQU5TQUNUSU9OX0VORFNfMiA9PiA3LAorfTsKKworIyBUZXN0IGNvbmN1cnJl bnQgdXBkYXRlIGluIHRhYmxlIHJvdy4KK215ICRub2RlID0gZ2V0X25ld19ub2RlKCdtYWluJyk7 Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKyAgICAnQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHh5ICh4IGludGVnZXIsIHkgaW50ZWdlcik7 ICcKKyAgLiAnSU5TRVJUIElOVE8geHkgVkFMVUVTICgxLCAyKSwgKDIsIDMpOycpOworCitteSAk c2NyaXB0X3NlcmlhbGl6YXRpb24gPSAkbm9kZS0+YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRf c2VyaWFsaXphdGlvbic7CithcHBlbmRfdG9fZmlsZSgkc2NyaXB0X3NlcmlhbGl6YXRpb24sCisJ CSJcXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJCRUdJTjtcbiIKKwkg IC4gIlVQREFURSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGEgIgorCSAgLiAiV0hFUkUgeCA9IDEgQU5E IHBnX2Fkdmlzb3J5X2xvY2soMCkgSVMgTk9UIE5VTEw7XG4iCisJICAuICJTRUxFQ1QgcGdfYWR2 aXNvcnlfdW5sb2NrX2FsbCgpO1xuIgorCSAgLiAiRU5EO1xuIik7CisKK215ICRzY3JpcHRfZGVh ZGxvY2tzMSA9ICRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdF9kZWFkbG9ja3MxJzsK K2FwcGVuZF90b19maWxlKCRzY3JpcHRfZGVhZGxvY2tzMSwKKwkJIkJFR0lOO1xuIgorCSAgLiAi U0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzEgLiAiKTtcbiIKKwkgIC4gIlNF TEVDVCBwZ19hZHZpc29yeV9sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpO1xuIgorCSAgLiAi U0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzIgLiAiKTtcbiIKKwkgIC4gIkVO RDtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iCisJICAuICJT RUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EU18xIC4gIik7XG4iCisJ ICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpOyIpOworCitteSAkc2NyaXB0X2Rl YWRsb2NrczIgPSAkbm9kZS0+YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRfZGVhZGxvY2tzMic7 CithcHBlbmRfdG9fZmlsZSgkc2NyaXB0X2RlYWRsb2NrczIsCisJCSJCRUdJTjtcbiIKKwkgIC4g IlNFTEVDVCBwZ19hZHZpc29yeV9sb2NrKCIgLiBERUFETE9DS18yIC4gIik7XG4iCisJICAuICJT RUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygiIC4gREVBRExPQ0tfMSAuICIpO1xuIgorCSAgLiAiRU5E O1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiIKKwkgIC4gIlNF TEVDVCBwZ19hZHZpc29yeV9sb2NrKCIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiKTtcbiIKKwkg IC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7Iik7CisKK215ICRzY3JpcHRfY29t bWl0X2ZhaWx1cmUgPSAkbm9kZS0+YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRfY29tbWl0X2Zh aWx1cmUnOworYXBwZW5kX3RvX2ZpbGUoJHNjcmlwdF9jb21taXRfZmFpbHVyZSwKKwkJIlxcc2V0 IGRlbHRhIHJhbmRvbSgtNTAwMCwgNTAwMClcbiIKKwkgIC4gIkJFR0lOO1xuIgorCSAgLiAiVVBE QVRFIHh5IFNFVCB5ID0geSArIDpkZWx0YSBXSEVSRSB4ID0gMTtcbiIKKwkgIC4gIlNFTEVDVCBw Z19hZHZpc29yeV9sb2NrKDApO1xuIgorCSAgLiAiRU5EO1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fk dmlzb3J5X3VubG9ja19hbGwoKTsiKTsKKworc3ViIHRlc3RfcGdiZW5jaF9zZXJpYWxpemF0aW9u X2Vycm9ycworeworCW15ICRpc29sYXRpb25fbGV2ZWwgPSBSRVBFQVRBQkxFX1JFQUQ7CisJbXkg JGlzb2xhdGlvbl9sZXZlbF9zaGVsbCA9ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xhdGlv bl9sZXZlbF07CisKKwlsb2NhbCAkRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKwlsb2NhbCAk RU5We1BHT1BUSU9OU30gPQorCQkiLWMgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249IiAu ICRpc29sYXRpb25fbGV2ZWxfc2hlbGw7CisJcHJpbnQgIiMgUEdPUFRJT05TOiAiIC4gJEVOVntQ R09QVElPTlN9IC4gIlxuIjsKKworCW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3FsKTsK KwlteSAoJGhfcGdiZW5jaCwgJGluX3BnYmVuY2gsICRvdXRfcGdiZW5jaCwgJGVycl9wZ2JlbmNo KTsKKworCSMgT3BlbiBhIHBzcWwgc2Vzc2lvbiwgcnVuIGEgcGFyYWxsZWwgdHJhbnNhY3Rpb24g YW5kIGFxdWlyZSBhbiBhZHZpc29yeQorCSMgbG9jazoKKwlwcmludCAiIyBTdGFydGluZyBwc3Fs XG4iOworCSRoX3BzcWwgPSBJUEM6OlJ1bjo6c3RhcnQgWyAncHNxbCcgXSwgXCRpbl9wc3FsLCBc JG91dF9wc3FsOworCisJJGluX3BzcWwgPSAiYmVnaW47XG4iOworCXByaW50ICIjIFJ1bm5pbmcg aW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGls ICRvdXRfcHNxbCA9fiAvQkVHSU4vOworCisJJGluX3BzcWwgPQorCQkidXBkYXRlIHh5IHNldCB5 ID0geSArIDEgIgorCSAgLiAid2hlcmUgeCA9IDEgYW5kIHBnX2Fkdmlzb3J5X2xvY2soMCkgaXMg bm90IG51bGw7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAk aW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvVVBEQVRFIDEv OworCisJIyBTdGFydCBwZ2JlbmNoOgorCW15IEBjb21tYW5kID0gKAorCQlxdyhwZ2JlbmNoIC0t bm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zIDEgLS1kZWJ1ZyBmYWlscyAtLWZpbGUpLAorCQkkc2Ny aXB0X3NlcmlhbGl6YXRpb24pOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNv bW1hbmQpIC4gIlxuIjsKKwkkaF9wZ2JlbmNoID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZCwg XCRpbl9wZ2JlbmNoLCBcJG91dF9wZ2JlbmNoLAorCSAgXCRlcnJfcGdiZW5jaDsKKworCSMgV2Fp dCB1bnRpbCBwZ2JlbmNoIGFsc28gdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2FtZSBhZHZpc29yeSBs b2NrOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0ICogZnJvbSBwZ19sb2NrcyB3 aGVyZSAiCisJCSAgLiAibG9ja3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJCSAgLiAib2Jqc3Vi aWQgPSAxIGFuZCAiCisJCSAgLiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwgb2JqaWQ6OmJp Z2ludCA9IDA6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRlZDtcbiI7CisJCXByaW50 ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJCSRoX3BzcWwt PnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAoJG91dF9wc3FsICF+IC8x IHJvdy8pOworCisJIyBJbiBwc3FsLCBjb21taXQgdGhlIHRyYW5zYWN0aW9uLCByZWxlYXNlIGFk dmlzb3J5IGxvY2tzIGFuZCBlbmQgdGhlCisJIyBzZXNzaW9uOgorCSRpbl9wc3FsID0gImVuZDtc biI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsK KwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9DT01NSVQvOworCisJJGluX3Bz cWwgPSAic2VsZWN0IHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiI7CisJcHJpbnQgIiMgUnVu bmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkg dW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV91bmxvY2tfYWxsLzsKKworCSRpbl9wc3Fs ID0gIlxccVxuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGlu X3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisKKwkkaF9w c3FsLT5maW5pc2goKTsKKworCSMgR2V0IHBnYmVuY2ggcmVzdWx0cworCSRoX3BnYmVuY2gtPnB1 bXAoKSB1bnRpbCBsZW5ndGggJG91dF9wZ2JlbmNoOworCSRoX3BnYmVuY2gtPmZpbmlzaCgpOwor CisJIyBPbiBXaW5kb3dzLCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3MgaXMgcmV0dXJu ZWQgZGlyZWN0bHkgYXMgdGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3aGlsZSBvbiBVbml4 LCBpdCdzIHJldHVybmVkIGluIHRoZSBoaWdoIGJpdHMKKwkjIG9mIHRoZSBleGl0IGNvZGUgKHNl ZSBXRVhJVFNUQVRVUyBtYWNybyBpbiB0aGUgc3RhbmRhcmQgPHN5cy93YWl0Lmg+CisJIyBoZWFk ZXIgZmlsZSkuIElQQzo6UnVuJ3MgcmVzdWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGV4aXQg Y29kZSA+PiA4LAorCSMgYXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlvbiwgd2hpY2ggd2lsbCBh bHdheXMgcmV0dXJuIDAgb24gV2luZG93cyBhcworCSMgbG9uZyBhcyB0aGUgcHJvY2VzcyB3YXMg bm90IHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLiBUbyB3b3JrIGFyb3VuZAorCSMgdGhhdCwg dXNlICRoLT5mdWxsX3Jlc3VsdCBvbiBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJlc3VsdCA9CisJ ICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGhfcGdiZW5jaC0+ZnVs bF9yZXN1bHRzKVswXQorCSAgOiAkaF9wZ2JlbmNoLT5yZXN1bHQoMCk7CisKKwkjIENoZWNrIHBn YmVuY2ggcmVzdWx0cworCW9rKCEkcmVzdWx0LCAiQGNvbW1hbmQgZXhpdCBjb2RlIDAiKTsKKwor CWxpa2UoJG91dF9wZ2JlbmNoLAorCQlxcntwcm9jZXNzZWQ6IDAvMX0sCisJCSJjb25jdXJyZW50 IHVwZGF0ZTogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbXkgJHBhdHRlcm4g PQorCQkiY2xpZW50IDAgZ290IGFuIGVycm9yIGluIGNvbW1hbmQgMiBcXChTUUxcXCkgb2Ygc2Ny aXB0IDA7ICIKKwkgIC4gIkVSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRv IGNvbmN1cnJlbnQgdXBkYXRlIjsKKworCWxpa2UoJGVycl9wZ2JlbmNoLAorCQlxcnskcGF0dGVy bn0sCisJCSJjb25jdXJyZW50IHVwZGF0ZTogY2hlY2sgc2VyaWFsaXphdGlvbiBlcnJvciIpOwor fQorCitzdWIgdGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25fZmFpbHVyZXMKK3sKKwlteSAkaXNv bGF0aW9uX2xldmVsID0gUkVQRUFUQUJMRV9SRUFEOworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hl bGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwg JEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJ Ii1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3No ZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisK KwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoX3BnYmVuY2gsICRp bl9wZ2JlbmNoLCAkb3V0X3BnYmVuY2gsICRlcnJfcGdiZW5jaCk7CisKKwkjIE9wZW4gYSBwc3Fs IHNlc3Npb24sIHJ1biBhIHBhcmFsbGVsIHRyYW5zYWN0aW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNv cnkKKwkjIGxvY2s6CisJcHJpbnQgIiMgU3RhcnRpbmcgcHNxbFxuIjsKKwkkaF9wc3FsID0gSVBD OjpSdW46OnN0YXJ0IFsgJ3BzcWwnIF0sIFwkaW5fcHNxbCwgXCRvdXRfcHNxbDsKKworCSRpbl9w c3FsID0gImJlZ2luO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIg IiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL0JFR0lO LzsKKworCSRpbl9wc3FsID0KKwkJInVwZGF0ZSB4eSBzZXQgeSA9IHkgKyAxICIKKwkgIC4gIndo ZXJlIHggPSAxIGFuZCBwZ19hZHZpc29yeV9sb2NrKDApIGlzIG5vdCBudWxsO1xuIjsKKwlwcmlu dCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwt PnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL1VQREFURSAxLzsKKworCSMgU3RhcnQgcGdiZW5j aDoKKwlteSBAY29tbWFuZCA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0 aW9ucyAxIC0tZGVidWcgYWxsIC0tbWF4LXRyaWVzIDIpLAorCQkiLS1maWxlIiwKKwkJJHNjcmlw dF9zZXJpYWxpemF0aW9uKTsKKwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9pbigiICIsIEBjb21t YW5kKSAuICJcbiI7CisJJGhfcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwk aW5fcGdiZW5jaCwgXCRvdXRfcGdiZW5jaCwKKwkgIFwkZXJyX3BnYmVuY2g7CisKKwkjIFdhaXQg dW50aWwgcGdiZW5jaCBhbHNvIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9j azoKKwlkbworCXsKKwkJJGluX3BzcWwgPQorCQkJInNlbGVjdCAqIGZyb20gcGdfbG9ja3Mgd2hl cmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1Ymlk ID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdp bnQgPSAwOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAi IyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5w dW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvMSBy b3cvKTsKKworCSMgSW4gcHNxbCwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiwgcmVsZWFzZSBhZHZp c29yeSBsb2NrcyBhbmQgZW5kIHRoZQorCSMgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJlbmQ7XG4i OworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJ JGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9wc3Fs ID0gInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iOworCXByaW50ICIjIFJ1bm5p bmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVu dGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfdW5sb2NrX2FsbC87CisKKwkkaW5fcHNxbCA9 ICJcXHFcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9w c3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCisJJGhfcHNx bC0+ZmluaXNoKCk7CisKKwkjIEdldCBwZ2JlbmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5wdW1w KCkgdW50aWwgbGVuZ3RoICRvdXRfcGdiZW5jaDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsKKwor CSMgT24gV2luZG93cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVk IGRpcmVjdGx5IGFzIHRoZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwg aXQncyByZXR1cm5lZCBpbiB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUg V0VYSVRTVEFUVVMgbWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVy IGZpbGUpLiBJUEM6OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNv ZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3 YXlzIHJldHVybiAwIG9uIFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5v dCB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVz ZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQgPQorCSAg ICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1bGxf cmVzdWx0cylbMF0KKwkgIDogJGhfcGdiZW5jaC0+cmVzdWx0KDApOworCisJIyBDaGVjayBwZ2Jl bmNoIHJlc3VsdHMKKwlvayghJHJlc3VsdCwgIkBjb21tYW5kIGV4aXQgY29kZSAwIik7CisKKwls aWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCB1 cGRhdGUgd2l0aCByZXRyeWluZzogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJ bGlrZSgkb3V0X3BnYmVuY2gsCisJCXFye14oKD8hbnVtYmVyIG9mIGVycm9ycykoLnxcbikpKiR9 LAorCQkiY29uY3VycmVudCB1cGRhdGUgd2l0aCByZXRyeWluZzogY2hlY2sgZXJyb3JzIik7CisK KwlteSAkcGF0dGVybiA9CisJCSJjbGllbnQgMCBzZW5kaW5nIEJFR0lOO1xuIgorCSAgLiAiKGNs aWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4eSBT RVQgeSA9IHkgXFwrICgtP1xcZCspICIKKwkgIC4gIldIRVJFIHggPSAxIEFORCBwZ19hZHZpc29y eV9sb2NrXFwoMFxcKSBJUyBOT1QgTlVMTDtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50 IDAgZ290IGEgZmFpbHVyZSBcXCh0cnkgMS8yXFwpIGluIGNvbW1hbmQgMiBcXChTUUxcXCkgb2Yg c2NyaXB0IDA7ICIKKwkgIC4gIkVSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVl IHRvIGNvbmN1cnJlbnQgdXBkYXRlXG5cbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNU IHBnX2Fkdmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNs aWVudCAwIGNvbnRpbnVlcyBhIGZhaWxlZCB0cmFuc2FjdGlvbiBpbiBjb21tYW5kIDMgXFwoU1FM XFwpIG9mIHNjcmlwdCAwOyAiCisJICAuICJFUlJPUjogIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMg YWJvcnRlZCwgY29tbWFuZHMgaWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2tc blxuIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBFTkQ7XG4iCisJICAuICJcXGcxKyIKKwkgIC4g ImNsaWVudCAwIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBcXCh0cnkgMi8yXFwpXG4i CisJICAuICJjbGllbnQgMCBleGVjdXRpbmcgXFxcXHNldCBkZWx0YVxuIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGlu ZyBVUERBVEUgeHkgU0VUIHkgPSB5IFxcKyBcXGcyICIKKwkgIC4gIldIRVJFIHggPSAxIEFORCBw Z19hZHZpc29yeV9sb2NrXFwoMFxcKSBJUyBOT1QgTlVMTDsiOworCisJbGlrZSgkZXJyX3BnYmVu Y2gsCisJCXFyeyRwYXR0ZXJufSwKKwkJImNvbmN1cnJlbnQgdXBkYXRlIHdpdGggcmV0cnlpbmc6 IGNoZWNrIHRoZSByZXRyaWVkIHRyYW5zYWN0aW9uIik7Cit9CisKK3N1YiB0ZXN0X3BnYmVuY2hf ZGVhZGxvY2tfZXJyb3JzCit7CisJbXkgJGlzb2xhdGlvbl9sZXZlbCA9IFJFQURfQ09NTUlUVEVE OworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRp c29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJ bG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0 aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAu ICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRf cHNxbCk7CisJbXkgKCRoMSwgJGluMSwgJG91dDEsICRlcnIxKTsKKwlteSAoJGgyLCAkaW4yLCAk b3V0MiwgJGVycjIpOworCisJIyBPcGVuIGEgcHNxbCBzZXNzaW9uIGFuZCBhcXVpcmUgYW4gYWR2 aXNvcnkgbG9jazoKKwlwcmludCAiIyBTdGFydGluZyBwc3FsXG4iOworCSRoX3BzcWwgPSBJUEM6 OlJ1bjo6c3RhcnQgWyAncHNxbCcgXSwgXCRpbl9wc3FsLCBcJG91dF9wc3FsOworCisJJGluX3Bz cWwgPQorCQkic2VsZWN0IHBnX2Fkdmlzb3J5X2xvY2soIiAuIFdBSVRfUEdCRU5DSF8yIC4gIikg IgorCSAgLiAiYXMgcGdfYWR2aXNvcnlfbG9ja18iIC4gV0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsK KwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRo X3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X2xvY2tfQHtbIFdB SVRfUEdCRU5DSF8yIF19LzsKKworCSMgUnVuIHRoZSBmaXJzdCBwZ2JlbmNoOgorCW15IEBjb21t YW5kMSA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0aW9ucyAxIC0tZGVi dWcgYWxsIC0tZmlsZSksCisJCSRzY3JpcHRfZGVhZGxvY2tzMSk7CisJcHJpbnQgIiMgUnVubmlu ZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDEpIC4gIlxuIjsKKwkkaDEgPSBJUEM6OlJ1bjo6c3Rh cnQgXEBjb21tYW5kMSwgXCRpbjEsIFwkb3V0MSwgXCRlcnIxOworCisJIyBXYWl0IHVudGlsIHRo ZSBmaXJzdCBwZ2JlbmNoIGFsc28gdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2FtZSBhZHZpc29yeSBs b2NrOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291bnQoKikgIgor CQkgIC4gIndoZW4gMCB0aGVuICciIC4gV0FJVF9QR0JFTkNIXzIgLiAiX3plcm8nICIKKwkJICAu ICJlbHNlICciIC4gV0FJVF9QR0JFTkNIXzIgLiAiX25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZy b20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgor CQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMy KSB8IG9iamlkOjpiaWdpbnQgPSAiCisJCSAgLiBXQUlUX1BHQkVOQ0hfMgorCQkgIC4gIjo6Ymln aW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBp biBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxl IGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBXQUlUX1BHQkVO Q0hfMiBdfV9ub3RfemVyby8pOworCisJIyBSdW4gdGhlIHNlY29uZCBwZ2JlbmNoOgorCW15IEBj b21tYW5kMiA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0aW9ucyAxIC0t ZGVidWcgYWxsIC0tZmlsZSksCisJCSRzY3JpcHRfZGVhZGxvY2tzMik7CisJcHJpbnQgIiMgUnVu bmluZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDIpIC4gIlxuIjsKKwkkaDIgPSBJUEM6OlJ1bjo6 c3RhcnQgXEBjb21tYW5kMiwgXCRpbjIsIFwkb3V0MiwgXCRlcnIyOworCisJIyBXYWl0IHVudGls IHRoZSBzZWNvbmQgcGdiZW5jaCB0cmllcyB0byBhY3F1aXJlIHRoZSBsb2NrIGhlbGQgYnkgdGhl IGZpcnN0CisJIyBwZ2JlbmNoOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNh c2UgY291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVuICciIC4gREVBRExPQ0tfMSAuICJfemVy bycgIgorCQkgIC4gImVsc2UgJyIgLiBERUFETE9DS18xIC4gIl9ub3RfemVybycgZW5kICIKKwkJ ICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScg YW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2lu dCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gREVBRExPQ0tfMQorCQkgIC4gIjo6 YmlnaW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJcHJpbnQgIiMgUnVubmlu ZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdo aWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwgIX4gL0B7WyBERUFETE9D S18xIF19X25vdF96ZXJvLyk7CisKKwkjIEluIHRoZSBwc3FsIHNlc3Npb24sIHJlbGVhc2UgdGhl IGxvY2sgdGhhdCB0aGUgZmlyc3QgcGdiZW5jaCBpcyB3YWl0aW5nCisJIyBmb3IgYW5kIGVuZCB0 aGUgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3QgcGdfYWR2aXNvcnlfdW5sb2NrKCIg LiBXQUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFzIHBnX2Fkdmlzb3J5X3VubG9ja18iIC4g V0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBq b2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4g L3BnX2Fkdmlzb3J5X3VubG9ja19Ae1sgV0FJVF9QR0JFTkNIXzIgXX0vOworCisJJGluX3BzcWwg PSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5f cHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRoX3Bz cWwtPmZpbmlzaCgpOworCisJIyBHZXQgcmVzdWx0cyBmcm9tIGFsbCBwZ2JlbmNoZXM6CisJJGgx LT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXQxOworCSRoMS0+ZmluaXNoKCk7CisKKwkkaDItPnB1 bXAoKSB1bnRpbCBsZW5ndGggJG91dDI7CisJJGgyLT5maW5pc2goKTsKKworCSMgT24gV2luZG93 cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFz IHRoZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5l ZCBpbiB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMg bWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6 OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkj IGFzc3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAw IG9uIFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVk IGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9y ZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQxID0KKwkgICAgKCRDb25maWd7 b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaDEtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDog JGgxLT5yZXN1bHQoMCk7CisKKwlteSAkcmVzdWx0MiA9CisJICAgICgkQ29uZmlne29zbmFtZX0g ZXEgIk1TV2luMzIiKQorCSAgPyAoJGgyLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMi0+cmVz dWx0KDApOworCisJIyBDaGVjayBhbGwgcGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQxLCAi QGNvbW1hbmQxIGV4aXQgY29kZSAwIik7CisJb2soISRyZXN1bHQyLCAiQGNvbW1hbmQyIGV4aXQg Y29kZSAwIik7CisKKwkjIFRoZSBmaXJzdCBvciBzZWNvbmQgcGdiZW5jaCBzaG91bGQgZ2V0IGEg ZGVhZGxvY2sgZXJyb3IKKwlvaygoJG91dDEgPX4gL3Byb2Nlc3NlZDogMFwvMS8gb3IgJG91dDIg PX4gL3Byb2Nlc3NlZDogMFwvMS8pLAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGU6IGNo ZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCW9rKAorCQkoJGVycjEgPX4gL2NsaWVu dCAwIGdvdCBhbiBlcnJvciBpbiBjb21tYW5kIDMgXChTUUxcKSBvZiBzY3JpcHQgMDsgRVJST1I6 ICBkZWFkbG9jayBkZXRlY3RlZC8gb3IKKwkgICAgICRlcnIyID1+IC9jbGllbnQgMCBnb3QgYW4g ZXJyb3IgaW4gY29tbWFuZCAyIFwoU1FMXCkgb2Ygc2NyaXB0IDA7IEVSUk9SOiAgZGVhZGxvY2sg ZGV0ZWN0ZWQvKSwKKwkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiBjaGVjayBkZWFkbG9j ayBlcnJvciIpOworfQorCitzdWIgdGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2ZhaWx1cmVzCit7CisJ bXkgJGlzb2xhdGlvbl9sZXZlbCA9IFJFQURfQ09NTUlUVEVEOworCW15ICRpc29sYXRpb25fbGV2 ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJ bG9jYWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9 ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xl dmVsX3NoZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJc biI7CisKKwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoMSwgJGlu MSwgJG91dDEsICRlcnIxKTsKKwlteSAoJGgyLCAkaW4yLCAkb3V0MiwgJGVycjIpOworCisJIyBP cGVuIGEgcHNxbCBzZXNzaW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNvcnkgbG9jazoKKwlwcmludCAi IyBTdGFydGluZyBwc3FsXG4iOworCSRoX3BzcWwgPSBJUEM6OlJ1bjo6c3RhcnQgWyAncHNxbCcg XSwgXCRpbl9wc3FsLCBcJG91dF9wc3FsOworCisJJGluX3BzcWwgPQorCQkic2VsZWN0IHBnX2Fk dmlzb3J5X2xvY2soIiAuIFdBSVRfUEdCRU5DSF8yIC4gIikgIgorCSAgLiAiYXMgcGdfYWR2aXNv cnlfbG9ja18iIC4gV0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGlu IHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAk b3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X2xvY2tfQHtbIFdBSVRfUEdCRU5DSF8yIF19LzsKKwor CSMgUnVuIHRoZSBmaXJzdCBwZ2JlbmNoOgorCW15IEBjb21tYW5kMSA9ICgKKwkJcXcocGdiZW5j aCAtLW5vLXZhY3V1bSAtLXRyYW5zYWN0aW9ucyAxIC0tZGVidWcgYWxsIC0tbWF4LXRyaWVzIDIp LAorCQkiLS1maWxlIiwKKwkJJHNjcmlwdF9kZWFkbG9ja3MxKTsKKwlwcmludCAiIyBSdW5uaW5n OiAiIC4gam9pbigiICIsIEBjb21tYW5kMSkgLiAiXG4iOworCSRoMSA9IElQQzo6UnVuOjpzdGFy dCBcQGNvbW1hbmQxLCBcJGluMSwgXCRvdXQxLCBcJGVycjE7CisKKwkjIFdhaXQgdW50aWwgdGhl IGZpcnN0IHBnYmVuY2ggYWxzbyB0cmllcyB0byBhY3F1aXJlIHRoZSBzYW1lIGFkdmlzb3J5IGxv Y2s6CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSAiCisJ CSAgLiAid2hlbiAwIHRoZW4gJyIgLiBXQUlUX1BHQkVOQ0hfMiAuICJfemVybycgIgorCQkgIC4g ImVsc2UgJyIgLiBXQUlUX1BHQkVOQ0hfMiAuICJfbm90X3plcm8nIGVuZCAiCisJCSAgLiAiZnJv bSBwZ19sb2NrcyB3aGVyZSAiCisJCSAgLiAibG9ja3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJ CSAgLiAib2Jqc3ViaWQgPSAxIGFuZCAiCisJCSAgLiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIp IHwgb2JqaWQ6OmJpZ2ludCA9ICIKKwkJICAuIFdBSVRfUEdCRU5DSF8yCisJCSAgLiAiOjpiaWdp bnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGlu IHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUg bGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtbIFdBSVRfUEdCRU5D SF8yIF19X25vdF96ZXJvLyk7CisKKwkjIFJ1biB0aGUgc2Vjb25kIHBnYmVuY2g6CisJbXkgQGNv bW1hbmQyID0gKAorCQlxdyhwZ2JlbmNoIC0tbm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zIDEgLS1k ZWJ1ZyBhbGwgLS1tYXgtdHJpZXMgMiksCisJCSItLWZpbGUiLAorCQkkc2NyaXB0X2RlYWRsb2Nr czIpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQyKSAuICJcbiI7 CisJJGgyID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDIsIFwkaW4yLCBcJG91dDIsIFwkZXJy MjsKKworCSMgV2FpdCB1bnRpbCB0aGUgc2Vjb25kIHBnYmVuY2ggdHJpZXMgdG8gYWNxdWlyZSB0 aGUgbG9jayBoZWxkIGJ5IHRoZSBmaXJzdAorCSMgcGdiZW5jaDoKKwlkbworCXsKKwkJJGluX3Bz cWwgPQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhlbiAnIiAu IERFQURMT0NLXzEgLiAiX3plcm8nICIKKwkJICAuICJlbHNlICciIC4gREVBRExPQ0tfMSAuICJf bm90X3plcm8nIGVuZCAiCisJCSAgLiAiZnJvbSBwZ19sb2NrcyB3aGVyZSAiCisJCSAgLiAibG9j a3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJCSAgLiAib2Jqc3ViaWQgPSAxIGFuZCAiCisJCSAg LiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwgb2JqaWQ6OmJpZ2ludCA9ICIKKwkJICAuIERF QURMT0NLXzEKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRlZDtcbiI7 CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJ CSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAoJG91dF9w c3FsICF+IC9Ae1sgREVBRExPQ0tfMSBdfV9ub3RfemVyby8pOworCisJIyBJbiB0aGUgcHNxbCBz ZXNzaW9uLCBhY3F1aXJlIHRoZSBsb2NrcyB0aGF0IHBnYmVuY2hlcyB3aWxsIHdhaXQgZm9yOgor CSRpbl9wc3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV9sb2NrKCIgLiBUUkFOU0FDVElPTl9F TkRTXzEgLiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV9sb2NrXyIgLiBUUkFOU0FDVElPTl9F TkRTXzEgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwg JGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlz b3J5X2xvY2tfQHtbIFRSQU5TQUNUSU9OX0VORFNfMSBdfS87CisKKwkkaW5fcHNxbCA9CisJCSJz ZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIikgIgorCSAg LiAiYXMgcGdfYWR2aXNvcnlfbG9ja18iIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIjtcbiI7CisJ cHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9w c3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV9sb2NrX0B7WyBUUkFO U0FDVElPTl9FTkRTXzIgXX0vOworCisJIyBJbiB0aGUgcHNxbCBzZXNzaW9uLCByZWxlYXNlIHRo ZSBsb2NrIHRoYXQgdGhlIGZpcnN0IHBnYmVuY2ggaXMgd2FpdGluZworCSMgZm9yOgorCSRpbl9w c3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2soIiAuIFdBSVRfUEdCRU5DSF8yIC4g IikgIgorCSAgLiAiYXMgcGdfYWR2aXNvcnlfdW5sb2NrXyIgLiBXQUlUX1BHQkVOQ0hfMiAuICI7 XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7 CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNvcnlfdW5sb2Nr X0B7WyBXQUlUX1BHQkVOQ0hfMiBdfS87CisKKwkjIFdhaXQgdW50aWwgcGdiZW5jaGVzIHRyeSB0 byBhY3F1aXJlIHRoZSBsb2NrcyBoZWxkIGJ5IHRoZSBwc3FsIHNlc3Npb246CisJZG8KKwl7CisJ CSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSAiCisJCSAgLiAid2hlbiAwIHRo ZW4gJyIgLiBUUkFOU0FDVElPTl9FTkRTXzEgLiAiX3plcm8nICIKKwkJICAuICJlbHNlICciIC4g VFJBTlNBQ1RJT05fRU5EU18xIC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xv Y2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJv YmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmpp ZDo6YmlnaW50ID0gIgorCQkgIC4gVFJBTlNBQ1RJT05fRU5EU18xCisJCSAgLiAiOjpiaWdpbnQp IGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBz cWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVu Z3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtbIFRSQU5TQUNUSU9OX0VO RFNfMSBdfV9ub3RfemVyby8pOworCisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3Qg Y2FzZSBjb3VudCgqKSAiCisJCSAgLiAid2hlbiAwIHRoZW4gJyIgLiBUUkFOU0FDVElPTl9FTkRT XzIgLiAiX3plcm8nICIKKwkJICAuICJlbHNlICciIC4gVFJBTlNBQ1RJT05fRU5EU18yIC4gIl9u b3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2Nr dHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAu ICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gVFJB TlNBQ1RJT05fRU5EU18yCisJCSAgLiAiOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50 ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3Bz cWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUg KCRvdXRfcHNxbCAhfiAvQHtbIFRSQU5TQUNUSU9OX0VORFNfMiBdfV9ub3RfemVyby8pOworCisJ IyBJbiB0aGUgcHNxbCBzZXNzaW9uLCByZWxlYXNlIGFkdmlzb3J5IGxvY2tzIGFuZCBlbmQgdGhl IHNlc3Npb246CisJJGluX3BzcWwgPSAic2VsZWN0IHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKSBh cyBwZ19hZHZpc29yeV91bmxvY2tfYWxsO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6 ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3Bz cWwgPX4gL3BnX2Fkdmlzb3J5X3VubG9ja19hbGwvOworCisJJGluX3BzcWwgPSAiXFxxXG4iOwor CXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhf cHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRoX3BzcWwtPmZpbmlzaCgp OworCisJIyBHZXQgcmVzdWx0cyBmcm9tIGFsbCBwZ2JlbmNoZXM6CisJJGgxLT5wdW1wKCkgdW50 aWwgbGVuZ3RoICRvdXQxOworCSRoMS0+ZmluaXNoKCk7CisKKwkkaDItPnB1bXAoKSB1bnRpbCBs ZW5ndGggJG91dDI7CisJJGgyLT5maW5pc2goKTsKKworCSMgT24gV2luZG93cywgdGhlIGV4aXQg c3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFzIHRoZQorCSMgcHJv Y2VzcydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBpbiB0aGUgaGln aCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMgbWFjcm8gaW4gdGhl IHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6OlJ1bidzIHJlc3Vs dCBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRo ZSBVbml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9uIFdpbmRvd3Mg YXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2Vw dGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2lu ZG93cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQxID0KKwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAi TVNXaW4zMiIpCisJICA/ICgkaDEtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDogJGgxLT5yZXN1bHQo MCk7CisKKwlteSAkcmVzdWx0MiA9CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIi KQorCSAgPyAoJGgyLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMi0+cmVzdWx0KDApOworCisJ IyBDaGVjayBhbGwgcGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQxLCAiQGNvbW1hbmQxIGV4 aXQgY29kZSAwIik7CisJb2soISRyZXN1bHQyLCAiQGNvbW1hbmQyIGV4aXQgY29kZSAwIik7CisK KwlsaWtlKCRvdXQxLAorCQlxcntwcm9jZXNzZWQ6IDEvMX0sCisJCSJjb25jdXJyZW50IGRlYWRs b2NrIHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBwZ2JlbmNoIDE6ICIKKwkgIC4gImNoZWNrIHByb2Nl c3NlZCB0cmFuc2FjdGlvbnMiKTsKKwlsaWtlKCRvdXQyLAorCQlxcntwcm9jZXNzZWQ6IDEvMX0s CisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiBwZ2JlbmNoIDI6 ICIKKwkgIC4gImNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCSMgVGhlIGZpcnN0 IG9yIHNlY29uZCBwZ2JlbmNoIHNob3VsZCBnZXQgYSBkZWFkbG9jayBlcnJvciB3aGljaCB3YXMg cmV0cmllZDoKKwlsaWtlKCRvdXQxIC4gJG91dDIsCisJCXFye14oKD8hbnVtYmVyIG9mIGVycm9y cykoLnxcbikpKiR9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGUgd2l0aCByZXRyeWlu ZzogY2hlY2sgZXJyb3JzIik7CisKKwlteSAkcGF0dGVybjEgPQorCQkiY2xpZW50IDAgc2VuZGlu ZyBCRUdJTjtcbiIKKwkgIC4gIihjbGllbnQgMCByZWNlaXZpbmdcbikrIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxc KTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2 aXNvcnlfbG9ja1xcKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIK KwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gREVB RExPQ0tfMiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIGdvdCBhIGZh aWx1cmUgXFwodHJ5IDEvMlxcKSBpbiBjb21tYW5kIDMgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAi CisJICAuICJFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVkXG4iCisJICAuICIoKD8hY2xpZW50IDAp KC58XG4pKSoiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxcZzErIgor CSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxc KTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2 aXNvcnlfbG9ja1xcKCIgLiBUUkFOU0FDVElPTl9FTkRTXzEgLiAiXFwpO1xuIgorCSAgLiAiXFxn MSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxs XFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCByZXBlYXRzIHRoZSBmYWls ZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxcKVxuIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBC RUdJTjtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdf YWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgor CSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBXQUlU X1BHQkVOQ0hfMiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRp bmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gREVBRExPQ0tfMiAuICJcXCk7XG4iCisJ ICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgRU5EO1xuIgorCSAgLiAiXFxnMSsi CisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwo XFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19h ZHZpc29yeV9sb2NrXFwoIiAuIFRSQU5TQUNUSU9OX0VORFNfMSAuICJcXCk7XG4iCisJICAuICJc XGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19h bGxcXChcXCk7XG4iCisJICAuICJcXGcxKyI7CisKKwlteSAkcGF0dGVybjIgPQorCQkiY2xpZW50 IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIihjbGllbnQgMCByZWNlaXZpbmdcbikrIgorCSAg LiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9D S18yIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxF Q1QgcGdfYWR2aXNvcnlfbG9ja1xcKCIgLiBERUFETE9DS18xIC4gIlxcKTtcbiIKKwkgIC4gIlxc ZzErIgorCSAgLiAiY2xpZW50IDAgZ290IGEgZmFpbHVyZSBcXCh0cnkgMS8yXFwpIGluIGNvbW1h bmQgMiBcXChTUUxcXCkgb2Ygc2NyaXB0IDA7ICIKKwkgIC4gIkVSUk9SOiAgZGVhZGxvY2sgZGV0 ZWN0ZWRcbiIKKwkgIC4gIigoPyFjbGllbnQgMCkoLnxcbikpKiIKKwkgIC4gImNsaWVudCAwIHNl bmRpbmcgRU5EO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVD VCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJj bGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIFRSQU5TQUNUSU9O X0VORFNfMiAuICJcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcg U0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcxKyIKKwkg IC4gImNsaWVudCAwIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBcXCh0cnkgMi8yXFwp XG4iCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEJFR0lOO1xuIgorCSAgLiAiXFxnMSsiCisJICAu ICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIERFQURMT0NL XzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVD VCBwZ19hZHZpc29yeV9sb2NrXFwoIiAuIERFQURMT0NLXzEgLiAiXFwpO1xuIgorCSAgLiAiXFxn MSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAi Y2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIK KwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlf bG9ja1xcKCIgLiBUUkFOU0FDVElPTl9FTkRTXzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMSsiCisJ ICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwoXFwp O1xuIgorCSAgLiAiXFxnMSsiOworCisJb2soKCRlcnIxID1+IC8kcGF0dGVybjEvIG9yICRlcnIy ID1+IC8kcGF0dGVybjIvKSwKKwkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlIHdpdGggcmV0 cnlpbmc6ICIKKwkgIC4gImNoZWNrIHRoZSByZXRyaWVkIHRyYW5zYWN0aW9uIik7Cit9CisKK3N1 YiB0ZXN0X3BnYmVuY2hfY29tbWl0X2ZhaWx1cmUKK3sKKwlteSAkaXNvbGF0aW9uX2xldmVsID0g U0VSSUFMSVpBQkxFOworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xl dmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5v ZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNh Y3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXByaW50ICIjIFBH T1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGhfcHNxbCwgJGlu X3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoX3BnYmVuY2gsICRpbl9wZ2JlbmNoLCAkb3V0X3Bn YmVuY2gsICRlcnJfcGdiZW5jaCk7CisKKwkjIE9wZW4gYSBwc3FsIHNlc3Npb24gYW5kIGFxdWly ZSBhbiBhZHZpc29yeSBsb2NrOgorCXByaW50ICIjIFN0YXJ0aW5nIHBzcWxcbiI7CisJJGhfcHNx bCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3BzcWw7CisK KwkkaW5fcHNxbCA9ICJzZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygwKTtcbiI7CisJcHJpbnQgIiMg UnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1w KCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV9sb2NrLzsKKworCSMgU3RhcnQgcGdi ZW5jaDoKKwlteSBAY29tbWFuZCA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAtLXRyYW5z YWN0aW9ucyAxIC0tZGVidWcgYWxsIC0tbWF4LXRyaWVzIDIpLAorCQkiLS1maWxlIiwKKwkJJHNj cmlwdF9jb21taXRfZmFpbHVyZSk7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAiLCBA Y29tbWFuZCkgLiAiXG4iOworCSRoX3BnYmVuY2ggPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21tYW5k LCBcJGluX3BnYmVuY2gsIFwkb3V0X3BnYmVuY2gsCisJICBcJGVycl9wZ2JlbmNoOworCisJIyBX YWl0IHVudGlsIHBnYmVuY2ggYWxzbyB0cmllcyB0byBhY3F1aXJlIHRoZSBzYW1lIGFkdmlzb3J5 IGxvY2s6CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSB3 aGVuIDAgdGhlbiAnemVybycgZWxzZSAnbm90X3plcm8nIGVuZCAiCisJCSAgLiAiZnJvbSBwZ19s b2NrcyB3aGVyZSAiCisJCSAgLiAibG9ja3R5cGUgPSAnYWR2aXNvcnknIGFuZCAiCisJCSAgLiAi b2Jqc3ViaWQgPSAxIGFuZCAiCisJCSAgLiAiKChjbGFzc2lkOjpiaWdpbnQgPDwgMzIpIHwgb2Jq aWQ6OmJpZ2ludCA9IDA6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRlZDtcbiI7CisJ CXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJCSRo X3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAoJG91dF9wc3Fs ICF+IC9ub3RfemVyby8pOworCisJIyBJbiBwc3FsLCBydW4gYSBwYXJhbGxlbCB0cmFuc2FjdGlv biwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQgZW5kIHRoZQorCSMgc2Vzc2lvbjoKKworCSRp bl9wc3FsID0gImJlZ2luXDt1cGRhdGUgeHkgc2V0IHkgPSB5ICsgMSB3aGVyZSB4ID0gMlw7ZW5k O1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwp OworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL0NPTU1JVC87CisKKwkkaW5f cHNxbCA9ICJzZWxlY3QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpO1xuIjsKKwlwcmludCAiIyBS dW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAo KSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X3VubG9ja19hbGwvOworCisJJGluX3Bz cWwgPSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAk aW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRo X3BzcWwtPmZpbmlzaCgpOworCisJIyBHZXQgcGdiZW5jaCByZXN1bHRzCisJJGhfcGdiZW5jaC0+ cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0X3BnYmVuY2g7CisJJGhfcGdiZW5jaC0+ZmluaXNoKCk7 CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1 cm5lZCBkaXJlY3RseSBhcyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9uIFVu aXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4aXQgY29kZSAo c2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhl YWRlciBmaWxlKS4gSVBDOjpSdW4ncyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhp dCBjb2RlID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3aWxs IGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25nIGFzIHRoZSBwcm9jZXNzIHdh cyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0 LCB1c2UgJGgtPmZ1bGxfcmVzdWx0IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0ID0K KwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaF9wZ2JlbmNoLT5m dWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoX3BnYmVuY2gtPnJlc3VsdCgwKTsKKworCSMgQ2hlY2sg cGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQsICJAY29tbWFuZCBleGl0IGNvZGUgMCIpOwor CisJbGlrZSgkb3V0X3BnYmVuY2gsCisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNvbW1pdCBm YWlsdXJlOiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisKKwlsaWtlKCRvdXRfcGdi ZW5jaCwKKwkJcXJ7XigoPyFudW1iZXIgb2YgZXJyb3JzKSgufFxuKSkqJH0sCisJCSJjb21taXQg ZmFpbHVyZTogY2hlY2sgZXJyb3JzIik7CisKKwlteSAkcGF0dGVybiA9CisJCSJjbGllbnQgMCBz ZW5kaW5nIEJFR0lOO1xuIgorCSAgLiAiKGNsaWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJj bGllbnQgMCBzZW5kaW5nIFVQREFURSB4eSBTRVQgeSA9IHkgXFwrICgtP1xcZCspIFdIRVJFIHgg PSAxO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19h ZHZpc29yeV9sb2NrXFwoMFxcKTtcbiIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2Vu ZGluZyBFTkQ7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIGdvdCBhIGZhaWx1cmUg XFwodHJ5IDEvMlxcKSBpbiBjb21tYW5kIDQgXFwoU1FMXFwpIG9mIHNjcmlwdCAwOyAiCisJICAu ICJFUlJPUjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byByZWFkL3dyaXRlIGRl cGVuZGVuY2llcyBhbW9uZyB0cmFuc2FjdGlvbnNcbiIKKwkgIC4gIkRFVEFJTDogIFJlYXNvbiBj b2RlOiBDYW5jZWxlZCBvbiBpZGVudGlmaWNhdGlvbiBhcyBhIHBpdm90LCBkdXJpbmcgY29tbWl0 IGF0dGVtcHQuXG4iCisJICAuICIoKD8hY2xpZW50IDApKC58XG4pKSoiCisJICAuICJjbGllbnQg MCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAi XFxnMSsiCisJICAuICJjbGllbnQgMCByZXBlYXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwo dHJ5IDIvMlxcKVxuIgorCSAgLiAiY2xpZW50IDAgZXhlY3V0aW5nIFxcXFxzZXQgZGVsdGFcbiIK KwkgIC4gImNsaWVudCAwIHNlbmRpbmcgQkVHSU47XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNs aWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0geSBcXCsgXFxnMiBXSEVSRSB4ID0gMTtc biIKKwkgIC4gIlxcZzErIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNv cnlfbG9ja1xcKDBcXCk7XG4iCisJICAuICJcXGcxKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcg RU5EO1xuIgorCSAgLiAiXFxnMSsiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19h ZHZpc29yeV91bmxvY2tfYWxsXFwoXFwpO1xuIgorCSAgLiAiXFxnMSsiOworCisJbGlrZSgkZXJy X3BnYmVuY2gsCisJCXFyeyRwYXR0ZXJufSwKKwkJImNvbW1pdCBmYWlsdXJlOiAiCisJICAuICJj aGVjayB0aGUgY29tcGxldGlvbiBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGJsb2NrIik7Cit9 CisKK3Rlc3RfcGdiZW5jaF9zZXJpYWxpemF0aW9uX2Vycm9ycygpOwordGVzdF9wZ2JlbmNoX3Nl cmlhbGl6YXRpb25fZmFpbHVyZXMoKTsKKwordGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2Vycm9ycygp OwordGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2ZhaWx1cmVzKCk7CisKK3Rlc3RfcGdiZW5jaF9jb21t aXRfZmFpbHVyZSgpOworCisjZG9uZQorJG5vZGUtPnN0b3A7Ci0tIAoyLjcuNAoK --=_f75b0167759004add2b258d905546620--