Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oR0ND-0005st-NV for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Aug 2022 00:05:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oR0NA-0005XF-BA for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Aug 2022 00:05:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oR0N9-0005X4-JC for pgsql-hackers@lists.postgresql.org; Thu, 25 Aug 2022 00:05:23 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oR0N4-0000qI-7k for pgsql-hackers@lists.postgresql.org; Thu, 25 Aug 2022 00:05:22 +0000 Received: from [192.168.8.199] (unknown [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 1480E21C2E8F; Thu, 25 Aug 2022 03:05:16 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661385916; bh=9Xq8H8LvrWRSjRMI1PiyvRU7nJRbMAEVjm2+4FMSgdo=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=D0LPR8HE+tE4sllRVlP7KbmVI8vLuVMlTTedB/cdwqvx4UQbNMBEMgPPuQ94kqnmY 480JhZzTo0Hx9zj5cXDosR6XgkKqtWxTwoGbk0CUQgZSXImnJAIaN3GqYlhg4CbSvr 9qiYPuH/B2S80PtPxRDfHTIvvWFCPUNoqsneUadI= Content-Type: multipart/mixed; boundary="------------CDnVHwVuJZR5k02GZ5jjcuBU" Message-ID: <3f8d4c2b-1e58-bf19-580e-64e9755897ef@postgrespro.ru> Date: Thu, 25 Aug 2022 03:05:15 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SQL/JSON features for v15 Content-Language: en-US To: Andrew Dunstan , "Jonathan S. Katz" , Tom Lane Cc: Robert Haas , Andres Freund , PostgreSQL Hackers , Michael Paquier , John Naylor , Amit Langote References: <20220815223853.itrlpqgpqheg6r6a@awork3.anarazel.de> <225d341b-f310-eed0-ceff-b8ec61669d9f@postgrespro.ru> <20220816021425.5sa6gx67zmpou3bc@awork3.anarazel.de> <8d0ffc54-469a-ffab-68a3-8b547e24a08d@postgresql.org> <7d83684b-7932-9f29-400b-0beedfafcdd4@postgrespro.ru> <69022273-e7e3-6d1a-10f8-d1b4740e4b97@postgresql.org> <92cab50c-152b-84fc-fd49-12b936113a3d@postgresql.org> <692364.1661267311@sss.pgh.pa.us> <35468585-e18f-3be6-a228-4ec478f796ac@postgresql.org> <716936.1661275451@sss.pgh.pa.us> <3596205e-ce1e-6959-7559-6ddd67f8294b@postgrespro.ru> From: Nikita Glukhov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------CDnVHwVuJZR5k02GZ5jjcuBU Content-Type: multipart/alternative; boundary="------------u6g2IWtO0Algws03bZ6Ejvzq" --------------u6g2IWtO0Algws03bZ6Ejvzq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 24.08.2022 01:12, Andrew Dunstan wrote: > On 2022-08-23 Tu 17:29, Nikita Glukhov wrote: > >> Here is my plan: >> >> 0. Take my last v7-0001 patch as a base. It already contains refactoring >> of JsonCoercion code. (Fix 0002 is not needed anymore, because it is for >> json[b] domains, which simply will not be supported.) >> >> 1. Replace JSON_COERCION_VIA_EXPR in JsonCoercion with new >> JsonCoercionType(s) for hardcoded coercions. JsonCoerion node were completely removed because they are not needed anymore (see p. 4). >> 2. Disable all non-JSON-compatible output types in coerceJsonFuncExpr(). >> >> 3. Add missing safe type input functions for integers, numerics, and >> maybe others. We need to write much more functions, than I expected. And I still didn't implemented safe input functions for numeric and datetime types. I will start to do it tomorrow. >> 4. Implement hardcoded coercions using these functions in >> ExecEvalJsonExprCoercion(). That was done using simple `switch (returning_typid) { .. }`, which can be nested into `switch (jbv->type)`. >> 5. Try to allow only constants (and also maybe column/parameter >> references) in JSON_VALUE's DEFAULT expressions. This should be enough >> for the most of practical cases. JSON_QUERY even does not have DEFAULT >> expressions -- it has only EMPTY ARRAY and EMPTY OBJECT, which can be >> treated as simple JSON constants. I have not tried to implement this yet. > er, really? This is from the regression output: > > > SELECT JSON_QUERY(jsonb '[]', '$[*]' DEFAULT '"empty"' ON EMPTY); > json_query > ------------ > "empty" > (1 row) > > SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' DEFAULT '"empty"' ON ERROR); > json_query > ------------ > "empty" > (1 row) > This is another extension. SQL standard defines only EMPTY ARRAY an EMPTY OBJECT behavior for JSON_QUERY: ::= ERROR | NULL | EMPTY ARRAY | EMPTY OBJECT ::= ERROR | NULL | EMPTY ARRAY | EMPTY OBJECT >> But it is possible to allow all other expressions in ERROR ON ERROR >> case, and I don't know if it will be consistent enough to allow some >> expressions in one case and deny in other. >> >> And there is another problem: expressions can be only checked for >> Const-ness only after expression simplification. AFAIU, at the >> parsing stage they look like 'string'::type. So, it's unclear if it >> is correct to check expressions in ExecInitExpr(). >> >> 6. Remove subtransactions. They were completely removed. Only DEFAULT expression needs to be fixed now. > Sounds like a good plan, modulo the issues in item 5. I would rather > lose some features temporarily than try to turn handsprings to make them > work and jeopardize the rest. > > I'll look forward to seeing your patch in the morning :-) > v8 - is a highly WIP patch, which I failed to finish today. Even some test cases fail now, and they simply show unfinished things like casts to bytea (they can be simply removed) and missing safe input functions. -- Nikita Glukhov Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------u6g2IWtO0Algws03bZ6Ejvzq Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi,

On 24.08.2022 01:12, Andrew Dunstan wrote:
On 2022-08-23 Tu 17:29, Nikita Glukhov wrote:

Here is my plan:

0. Take my last v7-0001 patch as a base.  It already contains refactoring 
of JsonCoercion code.  (Fix 0002 is not needed anymore, because it is for  
json[b] domains, which simply will not be supported.)

1. Replace JSON_COERCION_VIA_EXPR in JsonCoercion with new
JsonCoercionType(s) for hardcoded coercions.
JsonCoerion node were completely removed because they are not needed 
anymore (see p. 4).
2. Disable all non-JSON-compatible output types in coerceJsonFuncExpr().

3. Add missing safe type input functions for integers, numerics, and
maybe others.
We need to write much more functions, than I expected. And I still didn't 
implemented safe  input functions for numeric and datetime types.  
I will start to do it tomorrow.
4. Implement hardcoded coercions using these functions in
ExecEvalJsonExprCoercion().
That was done using simple `switch (returning_typid) { .. }`, 
which can be nested into `switch (jbv->type)`.
5. Try to allow only constants (and also maybe column/parameter
references) in JSON_VALUE's DEFAULT expressions.  This should be enough
for the most of practical cases.  JSON_QUERY even does not have DEFAULT
expressions -- it has only EMPTY ARRAY and EMPTY OBJECT, which can be
treated as simple JSON constants.  
I have not tried to implement this yet.



er, really? This is from the regression output:


SELECT JSON_QUERY(jsonb '[]', '$[*]' DEFAULT '"empty"' ON EMPTY);
 json_query
------------
 "empty"
(1 row)

SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' DEFAULT '"empty"' ON ERROR);
 json_query
------------
 "empty"
(1 row)


    
This is another extension.  SQL standard defines only 
EMPTY ARRAY an EMPTY OBJECT behavior for JSON_QUERY:

<JSON query empty behavior> ::=
ERROR
| NULL
| EMPTY ARRAY
| EMPTY OBJECT

<JSON query error behavior> ::=
ERROR
| NULL
| EMPTY ARRAY
| EMPTY OBJECT


But it is possible to allow all other expressions in ERROR ON ERROR 
case, and I don't know if it will be consistent enough to allow some 
expressions in one case and deny in other.  

And there is another problem: expressions can be only checked for 
Const-ness only after expression simplification.  AFAIU, at the
parsing stage they look like 'string'::type.  So, it's unclear if it 
is correct to check expressions in ExecInitExpr().

6. Remove subtransactions.
They were completely removed. Only DEFAULT expression needs to be fixed now.


Sounds like a good plan, modulo the issues in item 5. I would rather
lose some features temporarily than try to turn handsprings to make them
work and jeopardize the rest.

I'll look forward to seeing your patch in the morning :-)

v8 - is a highly WIP patch, which I failed to finish today.
Even some test cases fail now, and they simply show unfinished
things like casts to bytea (they can be simply removed) and missing
safe input functions.


-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


--------------u6g2IWtO0Algws03bZ6Ejvzq-- --------------CDnVHwVuJZR5k02GZ5jjcuBU Content-Type: text/x-patch; charset=UTF-8; name="v8-0001-WIP-Remove-subtransactions-in-JsonExpr-execution.patch" Content-Disposition: attachment; filename*0="v8-0001-WIP-Remove-subtransactions-in-JsonExpr-execution.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSBkMDJmZWE1OTc5OWFjZWFmOTVkZDgxYjhmMjQxNjQzNDc4OGUwNGMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFRodSwgMjUgQXVnIDIwMjIgMDI6NDI6MTcgKzAzMDAKU3ViamVj dDogW1BBVENIIHY4XSBXSVA6IFJlbW92ZSBzdWJ0cmFuc2FjdGlvbnMgaW4gSnNvbkV4cHIg ZXhlY3V0aW9uCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAg ICAgICAgfCAgODQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMg ICAgICAgfCA4OTIgKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfdHlwZXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jICAgICAgICAgICAgICAgfCAgOTEgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2NsYXVzZXMuYyAgICAgICAgfCAgMTIgLQogc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2V4cHIuYyAgICAgICAgICAgICB8IDIwMCArKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Jvb2wuYyAgICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2RhdGUuYyAgICAgICAgICAgICAgICB8IDE1OCArKystCiBzcmMvYmFja2VuZC91dGls cy9hZHQvanNvbmIuYyAgICAgICAgICAgICAgIHwgIDI2ICstCiBzcmMvYmFja2VuZC91dGls cy9hZHQvbnVtZXJpYy5jICAgICAgICAgICAgIHwgIDY0ICstCiBzcmMvYmFja2VuZC91dGls cy9hZHQvbnVtdXRpbHMuYyAgICAgICAgICAgIHwgIDIwICstCiBzcmMvYmFja2VuZC91dGls cy9hZHQvdGltZXN0YW1wLmMgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9leGVj dXRvci9leGVjRXhwci5oICAgICAgICAgICAgIHwgIDQ5ICstCiBzcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgIHwgIDM2ICstCiBzcmMvaW5jbHVkZS91dGls cy9idWlsdGlucy5oICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxz L2RhdGUuaCAgICAgICAgICAgICAgICAgICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvdXRpbHMv anNvbmIuaCAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9u dW1lcmljLmggICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS91dGlscy90 aW1lc3RhbXAuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgfCAzMzAgKysrKysrLS0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAgfCAgNzYgKy0KIDIyIGZpbGVzIGNoYW5n ZWQsIDEyNDQgaW5zZXJ0aW9ucygrKSwgODc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCmluZGV4IGQwYTU3YzdhYWVlLi41NTg5OTJkZjkwOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwci5jCkBAIC0yNTYxLDU4ICsyNTYxLDQxIEBAIEV4ZWNJbml0RXhw clJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQljYXNlIFRfSnNvbkV4cHI6 CiAJCQl7CiAJCQkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9k ZSk7Ci0JCQkJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29u RXhwclN0YXRlKSk7CisJCQkJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CiAJCQkJTGlzdENl bGwgICAqYXJnZXhwcmxjOwogCQkJCUxpc3RDZWxsICAgKmFyZ25hbWVsYzsKIAotCQkJCXNj cmF0Y2gub3Bjb2RlID0gRUVPUF9KU09ORVhQUjsKLQkJCQlzY3JhdGNoLmQuanNvbmV4cHIu anNlc3RhdGUgPSBqc2VzdGF0ZTsKKwkJCQkvKiBKU09OX1RBQkxFIHByZXVkby1mdW5jdGlv biByZXR1cm5zIGNvbnRleHQgaXRlbSBhcyBhIHJlc3VsdCAqLworCQkJCWlmIChqZXhwci0+ b3AgPT0gSlNPTl9UQUJMRV9PUCkKKwkJCQl7CisJCQkJCUV4ZWNJbml0RXhwclJlYygoRXhw ciAqKSBqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIHN0YXRlLAorCQkJCQkJCQkJcmVzdiwgcmVz bnVsbCk7CisJCQkJCWJyZWFrOworCQkJCX0KIAorCQkJCWpzZXN0YXRlID0gcGFsbG9jMChz aXplb2YoSnNvbkV4cHJTdGF0ZSkpOwogCQkJCWpzZXN0YXRlLT5qc2V4cHIgPSBqZXhwcjsK IAotCQkJCWpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwciA9Ci0JCQkJCXBhbGxvYyhzaXplb2Yo KmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwcikpOworCQkJCXNjcmF0Y2gub3Bjb2RlID0gRUVP UF9KU09ORVhQUjsKKwkJCQlzY3JhdGNoLmQuanNvbmV4cHIuanNlc3RhdGUgPSBqc2VzdGF0 ZTsKIAogCQkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+Zm9ybWF0dGVkX2V4 cHIsIHN0YXRlLAotCQkJCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLT52YWx1ZSwK LQkJCQkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci0+aXNudWxsKTsKLQotCQkJCWpz ZXN0YXRlLT5wYXRoc3BlYyA9Ci0JCQkJCXBhbGxvYyhzaXplb2YoKmpzZXN0YXRlLT5wYXRo c3BlYykpOworCQkJCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLnZhbHVlLAorCQkJ CQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLmlzbnVsbCk7CiAKIAkJCQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPnBhdGhfc3BlYywgc3RhdGUsCi0JCQkJCQkJCSZq c2VzdGF0ZS0+cGF0aHNwZWMtPnZhbHVlLAotCQkJCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVj LT5pc251bGwpOwotCi0JCQkJanNlc3RhdGUtPnJlc19leHByID0KLQkJCQkJcGFsbG9jKHNp emVvZigqanNlc3RhdGUtPnJlc19leHByKSk7Ci0KLQkJCQlqc2VzdGF0ZS0+cmVzdWx0X2V4 cHIgPSBqZXhwci0+cmVzdWx0X2NvZXJjaW9uCi0JCQkJCT8gRXhlY0luaXRFeHByV2l0aENh c2VWYWx1ZSgoRXhwciAqKSBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLT5leHByLAotCQkJCQkJ CQkJCQkJc3RhdGUtPnBhcmVudCwKLQkJCQkJCQkJCQkJCSZqc2VzdGF0ZS0+cmVzX2V4cHIt PnZhbHVlLAotCQkJCQkJCQkJCQkJJmpzZXN0YXRlLT5yZXNfZXhwci0+aXNudWxsKQotCQkJ CQk6IE5VTEw7CisJCQkJCQkJCSZqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUsCisJCQkJCQkJ CSZqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsKTsKIAotCQkJCWpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5ID0gIWpleHByLT5vbl9lbXB0eSA/IE5VTEwgOgotCQkJCQlFeGVjSW5pdEV4 cHIoKEV4cHIgKikgamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIsCi0JCQkJCQkJCSBz dGF0ZS0+cGFyZW50KTsKKwkJCQlpZiAoamV4cHItPm9uX2VtcHR5KQorCQkJCQlqc2VzdGF0 ZS0+ZGVmYXVsdF9vbl9lbXB0eSA9CisJCQkJCQlFeGVjSW5pdEV4cHIoKEV4cHIgKikgamV4 cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIsCisJCQkJCQkJCQkgc3RhdGUtPnBhcmVudCk7 CiAKIAkJCQlqc2VzdGF0ZS0+ZGVmYXVsdF9vbl9lcnJvciA9CiAJCQkJCUV4ZWNJbml0RXhw cigoRXhwciAqKSBqZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwciwKIAkJCQkJCQkJIHN0 YXRlLT5wYXJlbnQpOwogCi0JCQkJaWYgKGpleHByLT5vbWl0X3F1b3RlcyB8fAotCQkJCQko amV4cHItPnJlc3VsdF9jb2VyY2lvbiAmJiBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLT52aWFf aW8pKQotCQkJCXsKLQkJCQkJT2lkCQkJdHlwaW5wdXQ7Ci0KLQkJCQkJLyogbG9va3VwIHRo ZSByZXN1bHQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uICovCi0JCQkJCWdldFR5cGVJbnB1dElu Zm8oamV4cHItPnJldHVybmluZy0+dHlwaWQsICZ0eXBpbnB1dCwKLQkJCQkJCQkJCSAmanNl c3RhdGUtPmlucHV0LnR5cGlvcGFyYW0pOwotCQkJCQlmbWdyX2luZm8odHlwaW5wdXQsICZq c2VzdGF0ZS0+aW5wdXQuZnVuYyk7Ci0JCQkJfQotCiAJCQkJanNlc3RhdGUtPmFyZ3MgPSBO SUw7CiAKIAkJCQlmb3Jib3RoKGFyZ2V4cHJsYywgamV4cHItPnBhc3NpbmdfdmFsdWVzLApA QCAtMjYzNiwzNSArMjYxOSw4IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHBy U3RhdGUgKnN0YXRlLAogCQkJCQkJbGFwcGVuZChqc2VzdGF0ZS0+YXJncywgdmFyKTsKIAkJ CQl9CiAKLQkJCQlqc2VzdGF0ZS0+Y2FjaGUgPSBOVUxMOwotCi0JCQkJaWYgKGpleHByLT5j b2VyY2lvbnMpCi0JCQkJewotCQkJCQlKc29uQ29lcmNpb24gKipjb2VyY2lvbjsKLQkJCQkJ c3RydWN0IEpzb25Db2VyY2lvblN0YXRlICpjc3RhdGU7Ci0JCQkJCURhdHVtCSAgICpjYXNl dmFsOwotCQkJCQlib29sCSAgICpjYXNlbnVsbDsKLQotCQkJCQlqc2VzdGF0ZS0+Y29lcmNp b25fZXhwciA9Ci0JCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+Y29lcmNpb25fZXhw cikpOwotCi0JCQkJCWNhc2V2YWwgPSAmanNlc3RhdGUtPmNvZXJjaW9uX2V4cHItPnZhbHVl OwotCQkJCQljYXNlbnVsbCA9ICZqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci0+aXNudWxsOwot Ci0JCQkJCWZvciAoY3N0YXRlID0gJmpzZXN0YXRlLT5jb2VyY2lvbnMubnVsbCwKLQkJCQkJ CSBjb2VyY2lvbiA9ICZqZXhwci0+Y29lcmNpb25zLT5udWxsOwotCQkJCQkJIGNvZXJjaW9u IDw9ICZqZXhwci0+Y29lcmNpb25zLT5jb21wb3NpdGU7Ci0JCQkJCQkgY29lcmNpb24rKywg Y3N0YXRlKyspCi0JCQkJCXsKLQkJCQkJCWNzdGF0ZS0+Y29lcmNpb24gPSAqY29lcmNpb247 Ci0JCQkJCQljc3RhdGUtPmVzdGF0ZSA9ICpjb2VyY2lvbiA/Ci0JCQkJCQkJRXhlY0luaXRF eHByV2l0aENhc2VWYWx1ZSgoRXhwciAqKSAoKmNvZXJjaW9uKS0+ZXhwciwKLQkJCQkJCQkJ CQkJCQkgIHN0YXRlLT5wYXJlbnQsCi0JCQkJCQkJCQkJCQkJICBjYXNldmFsLCBjYXNlbnVs bCkgOiBOVUxMOwotCQkJCQl9Ci0JCQkJfQotCiAJCQkJRXhwckV2YWxQdXNoU3RlcChzdGF0 ZSwgJnNjcmF0Y2gpOworCiAJCQkJYnJlYWs7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jCmluZGV4IDYzNjc5NGNhNmYxLi5iMmFjY2VkZjhjYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC0xODQ0LDcgKzE4NDQs NyBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNv bnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUikKIAkJewog CQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLwotCQkJ RXhlY0V2YWxKc29uKHN0YXRlLCBvcCwgZWNvbnRleHQpOworCQkJRXhlY0V2YWxKc29uRXhw cihzdGF0ZSwgb3AsIGVjb250ZXh0KTsKIAkJCUVFT19ORVhUKCk7CiAJCX0KIApAQCAtNDcw MCw5NiArNDcwMCw2IEBAIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJKm9wLT5yZXNudWxsID0gaXNudWxsOwogfQogCi0v KgotICogRXZhbHVhdGUgYSBKU09OIGVycm9yL2VtcHR5IGJlaGF2aW9yIHJlc3VsdC4KLSAq Lwotc3RhdGljIERhdHVtCi1FeGVjRXZhbEpzb25CZWhhdmlvcihFeHByQ29udGV4dCAqZWNv bnRleHQsIEpzb25CZWhhdmlvciAqYmVoYXZpb3IsCi0JCQkJCSBFeHByU3RhdGUgKmRlZmF1 bHRfZXN0YXRlLCBib29sICppc19udWxsKQotewotCSppc19udWxsID0gZmFsc2U7Ci0KLQlz d2l0Y2ggKGJlaGF2aW9yLT5idHlwZSkKLQl7Ci0JCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBU WV9BUlJBWToKLQkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1ha2VFbXB0eUFycmF5 KCkpOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1Q6Ci0JCQlyZXR1cm4g SnNvbmJQR2V0RGF0dW0oSnNvbmJNYWtlRW1wdHlPYmplY3QoKSk7Ci0KLQkJY2FzZSBKU09O X0JFSEFWSU9SX1RSVUU6Ci0JCQlyZXR1cm4gQm9vbEdldERhdHVtKHRydWUpOwotCi0JCWNh c2UgSlNPTl9CRUhBVklPUl9GQUxTRToKLQkJCXJldHVybiBCb29sR2V0RGF0dW0oZmFsc2Up OwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9OVUxMOgotCQljYXNlIEpTT05fQkVIQVZJT1Jf VU5LTk9XTjoKLQkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZOgotCQkJKmlzX251bGwgPSB0 cnVlOwotCQkJcmV0dXJuIChEYXR1bSkgMDsKLQotCQljYXNlIEpTT05fQkVIQVZJT1JfREVG QVVMVDoKLQkJCXJldHVybiBFeGVjRXZhbEV4cHIoZGVmYXVsdF9lc3RhdGUsIGVjb250ZXh0 LCBpc19udWxsKTsKLQotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIsIGJlaGF2aW9yLT5idHlwZSk7Ci0JCQlyZXR1cm4g KERhdHVtKSAwOwotCX0KLX0KLQotLyoKLSAqIEV2YWx1YXRlIGEgY29lcmNpb24gb2YgYSBK U09OIGl0ZW0gdG8gdGhlIHRhcmdldCB0eXBlLgotICovCi1zdGF0aWMgRGF0dW0KLUV4ZWNF dmFsSnNvbkV4cHJDb2VyY2lvbihFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNv bnRleHQsCi0JCQkJCQkgRGF0dW0gcmVzLCBib29sICppc051bGwsIHZvaWQgKnAsIGJvb2wg KmVycm9yKQotewotCUV4cHJTdGF0ZSAgKmVzdGF0ZSA9IHA7Ci0JSnNvbkV4cHJTdGF0ZSAq anNlc3RhdGU7Ci0KLQlpZiAoZXN0YXRlKQkJCQkJLyogY29lcmNlIHVzaW5nIHNwZWNpZmll ZCBleHByZXNzaW9uICovCi0JCXJldHVybiBFeGVjRXZhbEV4cHIoZXN0YXRlLCBlY29udGV4 dCwgaXNOdWxsKTsKLQotCWpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7Ci0K LQlpZiAoanNlc3RhdGUtPmpzZXhwci0+b3AgIT0gSlNPTl9FWElTVFNfT1ApCi0JewotCQlK c29uQ29lcmNpb24gKmNvZXJjaW9uID0ganNlc3RhdGUtPmpzZXhwci0+cmVzdWx0X2NvZXJj aW9uOwotCQlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7Ci0JCUpzb25i CSAgICpqYiA9ICppc051bGwgPyBOVUxMIDogRGF0dW1HZXRKc29uYlAocmVzKTsKLQotCQlp ZiAoKGNvZXJjaW9uICYmIGNvZXJjaW9uLT52aWFfaW8pIHx8Ci0JCQkoamV4cHItPm9taXRf cXVvdGVzICYmICEqaXNOdWxsICYmCi0JCQkgSkJfUk9PVF9JU19TQ0FMQVIoamIpKSkKLQkJ ewotCQkJLyogc3RyaXAgcXVvdGVzIGFuZCBjYWxsIHR5cGlucHV0IGZ1bmN0aW9uICovCi0J CQljaGFyCSAgICpzdHIgPSAqaXNOdWxsID8gTlVMTCA6IEpzb25iVW5xdW90ZShqYik7Ci0K LQkJCXJldHVybiBJbnB1dEZ1bmN0aW9uQ2FsbCgmanNlc3RhdGUtPmlucHV0LmZ1bmMsIHN0 ciwKLQkJCQkJCQkJCSBqc2VzdGF0ZS0+aW5wdXQudHlwaW9wYXJhbSwKLQkJCQkJCQkJCSBq ZXhwci0+cmV0dXJuaW5nLT50eXBtb2QpOwotCQl9Ci0JCWVsc2UgaWYgKGNvZXJjaW9uICYm IGNvZXJjaW9uLT52aWFfcG9wdWxhdGUpCi0JCQlyZXR1cm4ganNvbl9wb3B1bGF0ZV90eXBl KHJlcywgSlNPTkJPSUQsCi0JCQkJCQkJCQkgIGpleHByLT5yZXR1cm5pbmctPnR5cGlkLAot CQkJCQkJCQkJICBqZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCi0JCQkJCQkJCQkgICZqc2Vz dGF0ZS0+Y2FjaGUsCi0JCQkJCQkJCQkgIGVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1v cnksCi0JCQkJCQkJCQkgIGlzTnVsbCk7Ci0JfQotCi0JaWYgKGpzZXN0YXRlLT5yZXN1bHRf ZXhwcikKLQl7Ci0JCWpzZXN0YXRlLT5yZXNfZXhwci0+dmFsdWUgPSByZXM7Ci0JCWpzZXN0 YXRlLT5yZXNfZXhwci0+aXNudWxsID0gKmlzTnVsbDsKLQotCQlyZXMgPSBFeGVjRXZhbEV4 cHIoanNlc3RhdGUtPnJlc3VsdF9leHByLCBlY29udGV4dCwgaXNOdWxsKTsKLQl9Ci0KLQly ZXR1cm4gcmVzOwotfQotCiAvKgogICogRXZhbHVhdGUgYSBKU09OIHBhdGggdmFyaWFibGUg Y2FjaGluZyBjb21wdXRlZCB2YWx1ZS4KICAqLwpAQCAtNDg0NCw4NCArNDc1NCwzOTQgQEAg RXZhbEpzb25QYXRoVmFyKHZvaWQgKmN4dCwgY2hhciAqdmFyTmFtZSwgaW50IHZhck5hbWVM ZW4sCiB9CiAKIC8qCi0gKiBQcmVwYXJlIFNRTC9KU09OIGl0ZW0gY29lcmNpb24gdG8gdGhl IG91dHB1dCB0eXBlLiBSZXR1cm5lZCBhIGRhdHVtIG9mIHRoZQotICogY29ycmVzcG9uZGlu ZyBTUUwgdHlwZSBhbmQgYSBwb2ludGVyIHRvIHRoZSBjb2VyY2lvbiBzdGF0ZS4KKyAqIENo ZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBvdmVycmlkZSBkZWZhdWx0IGNvZXJjaW9uIGluCisg KiBKU09OX1FVRVJZKE9NSVQgUVVPVEVTKSBjYXNlLgogICovCi1EYXR1bQotRXhlY1ByZXBh cmVKc29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sCi0JCQkJCQkJSnNvblJldHVy bmluZyAqcmV0dXJuaW5nLAotCQkJCQkJCXN0cnVjdCBKc29uQ29lcmNpb25zU3RhdGUgKmNv ZXJjaW9ucywKLQkJCQkJCQlzdHJ1Y3QgSnNvbkNvZXJjaW9uU3RhdGUgKipwY29lcmNpb24p CitzdGF0aWMgYm9vbAorRXhlY0pzb25RdWVyeU5lZWRzSU9Db2VyY2lvbihKc29uRXhwciAq anNleHByLCBEYXR1bSByZXMsIGJvb2wgaXNudWxsKQogewotCXN0cnVjdCBKc29uQ29lcmNp b25TdGF0ZSAqY29lcmNpb247Ci0JRGF0dW0JCXJlczsKLQlKc29uYlZhbHVlCWJ1ZjsKKwlp ZiAoanNleHByLT5vbWl0X3F1b3RlcyAmJiAhaXNudWxsKQorCXsKKwkJSnNvbmIJICAgKmpi ID0gRGF0dW1HZXRKc29uYlAocmVzKTsKKwkJSnNvbmJWYWx1ZQlqYnY7CisKKwkJLyogQ29l cmNlIHN0cmluZyBpdGVtcyB2aWEgSS9PIGluIE9NSVQgUVVPVEVTIGNhc2UgKi8KKwkJcmV0 dXJuIEpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsICZqYnYpICYmCisJCQlqYnYudHlw ZSA9PSBqYnZTdHJpbmc7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBDb2VyY2Ug QyBzdHJpbmcgdG8gdGV4dCwgdmFyY2hhcihOKSwgb3IgYnBjaGFyKE4pICovCitzdGF0aWMg RGF0dW0KK0V4ZWNKc29uU3RyaW5nQ29lcmNpb24oY29uc3QgY2hhciAqc3RyLCBpbnQzMiBs ZW4sIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKQoreworCWlmICh0eXBpZCA9PSBURVhUT0lE IHx8IHR5cGlkID09IEpTT05PSUQgfHwgdHlwbW9kIDw9IFZBUkhEUlNaKQorCQlyZXR1cm4g UG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihzdHIsIGxlbikpOwor CWVsc2UKKwl7CisJCWNoYXIJICAgKnR4dDsKKwkJaW50MzIJCXNpemU7CisKKwkJbGVuID0g VkFSSERSU1ogKyBsZW47CiAKLQlpZiAoaXRlbS0+dHlwZSA9PSBqYnZCaW5hcnkgJiYKLQkJ SnNvbkNvbnRhaW5lcklzU2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSkpCisJCWlmICh0 eXBpZCA9PSBCUENIQVJPSUQpCisJCQlzaXplID0gdHlwbW9kOworCQllbHNlCisJCQlzaXpl ID0gTWluKGxlbiwgdHlwbW9kKTsKKworCQl0eHQgPSBwYWxsb2Moc2l6ZSk7CisJCVNFVF9W QVJTSVpFKHR4dCwgc2l6ZSk7CisKKwkJbWVtY3B5KFZBUkRBVEEodHh0KSwgc3RyLCBNaW4o c2l6ZSwgbGVuKSAtIFZBUkhEUlNaKTsKKworCQlpZiAobGVuIDwgc2l6ZSkKKwkJCW1lbXNl dCh0eHQgKyBsZW4sICcgJywgc2l6ZSAtIGxlbik7CisKKwkJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bSh0eHQpOworCX0KK30KKworLyogQ29lcmNlIFNRTC9KU09OIGl0ZW0gdG8gdGV4dCAq Lworc3RhdGljIERhdHVtCitFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KFBHRnVuY3Rpb24gb3V0 ZnVuYywgRGF0dW0gdmFsdWUsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKQoreworCWNoYXIJ ICAgKnN0ciA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG91dGZ1bmMs IHZhbHVlKSk7CisKKwlyZXR1cm4gRXhlY0pzb25TdHJpbmdDb2VyY2lvbihzdHIsIHN0cmxl bihzdHIpLCB0eXBpZCwgdHlwbW9kKTsKK30KKworLyogQ29lcmNlIGRhdGV0aW1lIFNRTC9K U09OIGl0ZW0gdG8gdGhlIG91dHB1dCB0eXBpZCAqLworc3RhdGljIERhdHVtCitFeGVjSnNv bkRhdGV0aW1lQ29lcmNpb24oRGF0dW0gdmFsLCBPaWQgdmFsX3R5cGlkLCBPaWQgdHlwaWQs IGludDMyIHR5cG1vZCwKKwkJCQkJCSBib29sICppc251bGwsIGJvb2wgKmVycm9yKQorewor CWlmICh2YWxfdHlwaWQgPT0gdHlwaWQpCisJCXJldHVybiB2YWw7CisKKwlzd2l0Y2ggKHZh bF90eXBpZCkKIAl7Ci0JCWJvb2wJCXJlcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJ CWNhc2UgREFURU9JRDoKKwkJCWlmICh0eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZB UkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNv ZXJjaW9uVG9UZXh0KGRhdGVfb3V0LCB2YWwsIHR5cGlkLCB0eXBtb2QpOworCQkJZWxzZSBp ZiAodHlwaWQgPT0gREFURU9JRCkKKwkJCQlyZXR1cm4gdmFsOworCQkJZWxzZSBpZiAodHlw aWQgPT0gVElNRVNUQU1QT0lEKQorCQkJeworCQkJCWludAkJCW92ZXJmbG93ID0gMDsKKwkJ CQlUaW1lc3RhbXAJdHMgPQorCQkJCQlkYXRlMnRpbWVzdGFtcF9vcHRfb3ZlcmZsb3coRGF0 dW1HZXREYXRlQURUKHZhbCksCisJCQkJCQkJCQkJCQllcnJvciA/ICZvdmVyZmxvdyA6IE5V TEwpOworCisJCQkJaWYgKG92ZXJmbG93KQorCQkJCXsKKwkJCQkJKmVycm9yID0gdHJ1ZTsK KwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQl9CiAKLQkJcmVzID0gSnNvbmJFeHRyYWN0 U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSwgJmJ1Zik7Ci0JCWl0ZW0gPSAmYnVmOwot CQlBc3NlcnQocmVzKTsKKwkJCQlyZXR1cm4gVGltZXN0YW1wR2V0RGF0dW0odHMpOworCQkJ fQorCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QVFpPSUQpCisJCQl7CisJCQkJaW50 CQkJb3ZlcmZsb3cgPSAwOworCQkJCVRpbWVzdGFtcFR6CXJlcyA9CisJCQkJCWRhdGUydGlt ZXN0YW1wdHpfb3B0X292ZXJmbG93KERhdHVtR2V0RGF0ZUFEVCh2YWwpLAorCQkJCQkJCQkJ CQkJICBlcnJvciA/ICZvdmVyZmxvdyA6IE5VTEwpOworCisJCQkJaWYgKG92ZXJmbG93KQor CQkJCXsKKwkJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJ CQl9CisKKwkJCQlyZXR1cm4gVGltZXN0YW1wVHpHZXREYXR1bShyZXMpOworCQkJfQorCQkJ ZWxzZQorCQkJCWJyZWFrOyAvKiBObyBjYXN0ICovCisKKwkJY2FzZSBUSU1FT0lEOgorCQkJ aWYgKHR5cGlkID09IFRFWFRPSUQgfHwgdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fCB0eXBpZCA9 PSBCUENIQVJPSUQpCisJCQkJcmV0dXJuIEV4ZWNKc29uQ29lcmNpb25Ub1RleHQodGltZV9v dXQsIHZhbCwgdHlwaWQsIHR5cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FT0lE KQorCQkJCXJldHVybiB2YWw7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJ CQkJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZV90aW1ldHosIHZhbCk7CisJCQll bHNlCisJCQkJYnJlYWs7CS8qIE5vIGNhc3QgKi8KKworCQljYXNlIFRJTUVUWk9JRDoKKwkJ CWlmICh0eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQg PT0gQlBDSEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KHRpbWV0 el9vdXQsIHZhbCwgdHlwaWQsIHR5cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1F VFpPSUQpCisJCQkJcmV0dXJuIHZhbDsKKwkJCWVsc2UgaWYgKHR5cGlkID09IFRJTUVPSUQp CisJCQkJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZXR6X3RpbWUsIHZhbCk7CisJ CQllbHNlCisJCQkJYnJlYWs7CisKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQlpZiAodHlw aWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hB Uk9JRCkKKwkJCQlyZXR1cm4gRXhlY0pzb25Db2VyY2lvblRvVGV4dCh0aW1lc3RhbXBfb3V0 LCB2YWwsIHR5cGlkLCB0eXBtb2QpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1Q T0lEKQorCQkJCXJldHVybiB2YWw7CisJCQllbHNlIGlmICh0eXBpZCA9PSBEQVRFT0lEKQor CQkJCXJldHVybiB0aW1lc3RhbXBfZGF0ZV9vcHRfZXJyb3IoRGF0dW1HZXRUaW1lc3RhbXAo dmFsKSwgZXJyb3IpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRU9JRCkKKwkJCXsKKwkJ CQlUaW1lQURUCQl0aW1lID0KKwkJCQkJdGltZXN0YW1wX3RpbWVfb3B0X2Vycm9yKERhdHVt R2V0VGltZXN0YW1wKHZhbCksCisJCQkJCQkJCQkJCSBpc251bGwsIGVycm9yKTsKKworCQkJ CWlmICgoZXJyb3IgJiYgKmVycm9yKSB8fCAqaXNudWxsKQorCQkJCQlyZXR1cm4gKERhdHVt KSAwOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIFRpbWVBRFRHZXREYXR1bSh0aW1lKTsKKwkJ CX0KKwkJCWVsc2UgaWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJeworCQkJCWlu dAkJCW92ZXJmbG93ID0gMDsKKwkJCQlUaW1lc3RhbXBUeiB0c3R6ID0KKwkJCQkJdGltZXN0 YW1wMnRpbWVzdGFtcHR6X29wdF9vdmVyZmxvdyhEYXR1bUdldFRpbWVzdGFtcCh2YWwpLAor CQkJCQkJCQkJCQkJCSAgIGVycm9yID8gJm92ZXJmbG93IDogTlVMTCk7CisKKwkJCQlpZiAo b3ZlcmZsb3cpCisJCQkJeworCQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gKERh dHVtKSAwOworCQkJCX0KKworCQkJCXJldHVybiBUaW1lc3RhbXBUekdldERhdHVtKHRzdHop OworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOwkvKiBObyBjYXN0ICovCisKKwkJY2FzZSBU SU1FU1RBTVBUWk9JRDoKKwkJCWlmICh0eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZB UkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNv ZXJjaW9uVG9UZXh0KHRpbWVzdGFtcHR6X291dCwgdmFsLCB0eXBpZCwgdHlwbW9kKTsKKwkJ CWVsc2UgaWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJCXJldHVybiB2YWw7CisJ CQllbHNlIGlmICh0eXBpZCA9PSBEQVRFT0lEKQorCQkJCXJldHVybiB0aW1lc3RhbXB0el9k YXRlX29wdF9lcnJvcihEYXR1bUdldFRpbWVzdGFtcFR6KHZhbCksIGVycm9yKTsKKwkJCWVs c2UgaWYgKHR5cGlkID09IFRJTUVPSUQpCisJCQl7CisJCQkJVGltZUFEVAkJdGltZSA9CisJ CQkJCXRpbWVzdGFtcHR6X3RpbWVfb3B0X2Vycm9yKERhdHVtR2V0VGltZXN0YW1wVHoodmFs KSwKKwkJCQkJCQkJCQkJICAgaXNudWxsLCBlcnJvcik7CisKKwkJCQlpZiAoKGVycm9yICYm ICplcnJvcikgfHwgKmlzbnVsbCkKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQllbHNl CisJCQkJCXJldHVybiBUaW1lQURUR2V0RGF0dW0odGltZSk7CisJCQl9CisJCQllbHNlIGlm ICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJCQl7CisJCQkJVGltZVR6QURUICAqcmVzdWx0ID0K KwkJCQkJdGltZXN0YW1wdHpfdGltZXR6X29wdF9lcnJvcihEYXR1bUdldFRpbWVzdGFtcFR6 KHZhbCksIGVycm9yKTsKKworCQkJCWlmICgoZXJyb3IgJiYgKmVycm9yKSB8fCAhcmVzdWx0 KQorCQkJCXsKKwkJCQkJKmlzbnVsbCA9IHRydWU7CisJCQkJCXJldHVybiAoRGF0dW0pIDA7 CisJCQkJfQorCisJCQkJcmV0dXJuIFRpbWVUekFEVFBHZXREYXR1bShyZXN1bHQpOworCQkJ fQorCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQorCQkJeworCQkJCVRpbWVz dGFtcAl0cyA9CisJCQkJCXRpbWVzdGFtcHR6MnRpbWVzdGFtcF9vcHRfZXJyb3IoRGF0dW1H ZXRUaW1lc3RhbXBUeih2YWwpLAorCQkJCQkJCQkJCQkJCWVycm9yKTsKKworCQkJCWlmIChl cnJvciAmJiAqZXJyb3IpCisJCQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCQlyZXR1cm4g VGltZXN0YW1wR2V0RGF0dW0odHMpOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOwkvKiBO byBjYXN0ICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpz b25iIGRhdGV0aW1lIHR5cGUgb2lkICV1IiwgdmFsX3R5cGlkKTsKKwkJCWJyZWFrOwogCX0K IAotCS8qIGdldCBjb2VyY2lvbiBzdGF0ZSByZWZlcmVuY2UgYW5kIGRhdHVtIG9mIHRoZSBj b3JyZXNwb25kaW5nIFNRTCB0eXBlICovCisJaWYgKCFlcnJvcikKKwkJZXJlcG9ydChFUlJP UiwKKwkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9U T19UQVJHRVRfVFlQRSksCisJCQkgZXJybXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBj YXN0IHRvIHRhcmdldCB0eXBlIikpKTsKKworCSplcnJvciA9IHRydWU7CisJKmlzbnVsbCA9 IHRydWU7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisvKiBDb2VyY2UgYm9vbGVhbiBT UUwvSlNPTiBpdGVtIG9yIEpTT05fRVhJU1RTIHJlc3VsdCB0byB0aGUgb3V0cHV0IHR5cGUg Ki8KK3N0YXRpYyBib29sCitFeGVjSnNvbkJvb2xDb2VyY2lvbihib29sIHZhbCwgT2lkIHR5 cGlkLCBpbnQzMiB0eXBtb2QsIERhdHVtICpyZXMpCit7CisJaWYgKHR5cGlkID09IEJPT0xP SUQpCisJCSpyZXMgPSBCb29sR2V0RGF0dW0odmFsKTsKKwllbHNlIGlmICh0eXBpZCA9PSBJ TlQ0T0lEKQorCQkvKiBXZSBvbmx5IGhhdmUgY2FzdCBib29sOjppbnQ0IGluIHRoZSBjYXRh bG9nLiAqLworCQkqcmVzID0gSW50MzJHZXREYXR1bSh2YWwgPyAxIDogMCk7CisJZWxzZSBp ZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09 IEJQQ0hBUk9JRCkKKwkJLyoKKwkJICogYm9vbDo6dGV4dCByZXR1cm5zICd0cnVlJyAvICdm YWxzZScsCisJCSAqIGJvb2xvdXQoKSByZXR1cm5zICd0JyAvICdmJy4KKwkJICovCisJCSpy ZXMgPSBFeGVjSnNvblN0cmluZ0NvZXJjaW9uKHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIsIHZh bCA/IDQgOiA1LAorCQkJCQkJCQkJICB0eXBpZCwgdHlwbW9kKTsKKwllbHNlCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgRGF0dW0KK0pzb25iUEdl dFRleHREYXR1bShKc29uYiAqamIpCit7CisJY2hhcgkgICAqc3RyID0gSnNvbmJUb0NTdHJp bmcoTlVMTCwgJmpiLT5yb290LCBWQVJTSVpFKGpiKSk7CisJRGF0dW0JCXJlcyA9IENTdHJp bmdHZXRUZXh0RGF0dW0oc3RyKTsKKworCXBmcmVlKHN0cik7CisJcmV0dXJuIHJlczsKK30K KworLyogQ29lcmNlIFNRTC9KU09OIGl0ZW0gdG8gdGhlIG91dHB1dCB0eXBpZCAqLworc3Rh dGljIERhdHVtCitFeGVjSnNvblZhbHVlQ29lcmNpb24oSnNvbmJWYWx1ZSAqaXRlbSwgT2lk IHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCSAgYm9vbCAqaXNudWxsLCBib29sICplcnJv cikKK3sKKwkqaXNudWxsID0gZmFsc2U7CisKKwkvKiBTcGVjaWFsIGNhc2UgZm9yIGpzb24g YW5kIGpzb25iIG91dHB1dCB0eXBlcyAqLworCWlmICh0eXBpZCA9PSBKU09OQk9JRCkKKwkJ cmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0pKTsKKworCWlm ICh0eXBpZCA9PSBKU09OT0lEKQorCQlyZXR1cm4gSnNvbmJQR2V0VGV4dERhdHVtKEpzb25i VmFsdWVUb0pzb25iKGl0ZW0pKTsKKworCS8qCisJICogQ29lcmNpb24gbWV0aG9kIGFuZCBz ZXQgb2Ygc3VwcG9ydGVkIG91dHB1dCB0eXBlcyBhcmUgZGV0ZXJtaW5lZAorCSAqIGJ5IHRo ZSBpdGVtIHR5cGUuCisJICovCiAJc3dpdGNoIChpdGVtLT50eXBlKQogCXsKIAkJY2FzZSBq YnZOdWxsOgotCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT5udWxsOwotCQkJcmVzID0gKERh dHVtKSAwOwotCQkJYnJlYWs7CisJCQlBc3NlcnQoMCk7IC8qIG11c3QgYmUgaGFuZGxlZCBi eSB0aGUgY2FsbGVyICovCisJCQkqaXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0p IDA7CiAKIAkJY2FzZSBqYnZTdHJpbmc6Ci0JCQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPnN0 cmluZzsKLQkJCXJlcyA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHRfd2l0aF9s ZW4oaXRlbS0+dmFsLnN0cmluZy52YWwsCisJCQlpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0 eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCXsKKwkJCQly ZXR1cm4gRXhlY0pzb25TdHJpbmdDb2VyY2lvbihpdGVtLT52YWwuc3RyaW5nLnZhbCwKKwkJ CQkJCQkJCQkJICBpdGVtLT52YWwuc3RyaW5nLmxlbiwKKwkJCQkJCQkJCQkJICB0eXBpZCwg dHlwbW9kKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHR5cGlkID09IElOVDJPSUQgfHwgdHlwaWQg PT0gSU5UNE9JRCB8fCB0eXBpZCA9PSBJTlQ4T0lEKQorCQkJeworCQkJCWNoYXIJICAgKnN0 ciA9IHBuc3RyZHVwKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJCSAgIGl0ZW0t PnZhbC5zdHJpbmcubGVuKTsKKworCQkJCWlmIChlcnJvcikKKwkJCQl7CisJCQkJCWludDY0 CQl2YWwgPSBwZ19zdHJ0b2ludDY0X29wdF9lcnJvcihzdHIsIGVycm9yKTsKKworCQkJCQlp ZiAoKmVycm9yKQorCQkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJCQlpZiAodHlwaWQg PT0gSU5UMk9JRCkKKwkJCQkJeworCQkJCQkJaWYgKHZhbCA8PSBQR19JTlQxNl9NQVggfHwg dmFsID49IFBHX0lOVDE2X01JTikKKwkJCQkJCQlyZXR1cm4gSW50MTZHZXREYXR1bSgoaW50 MTYpIHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAodHlwaWQgPT0gSU5UNE9JRCkKKwkJ CQkJeworCQkJCQkJaWYgKHZhbCA8PSBQR19JTlQzMl9NQVggfHwgdmFsID49IFBHX0lOVDMy X01JTikKKwkJCQkJCQlyZXR1cm4gSW50MzJHZXREYXR1bSgoaW50MzIpIHZhbCk7CisJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIEludDY0R2V0RGF0dW0odmFsKTsKKworCQkJ CQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCX0KKwkJCQll bHNlIGlmICh0eXBpZCA9PSBJTlQyT0lEKQorCQkJCQlyZXR1cm4gSW50MTZHZXREYXR1bShw Z19zdHJ0b2ludDE2KHN0cikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IElOVDRPSUQpCisJ CQkJCXJldHVybiBJbnQzMkdldERhdHVtKHBnX3N0cnRvaW50MzIoc3RyKSk7CisJCQkJZWxz ZQorCQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bShwZ19zdHJ0b2ludDY0KHN0cikpOworCQkJ fQorCQkJZWxzZSBpZiAodHlwaWQgPT0gQk9PTE9JRCkKKwkJCXsKKwkJCQlyZXR1cm4gQm9v bEdldERhdHVtKGJvb2xpbl9vcHRfZXJyb3IoaXRlbS0+dmFsLnN0cmluZy52YWwsCisJCQkJ CQkJCQkJCQkJIGl0ZW0tPnZhbC5zdHJpbmcubGVuLAorCQkJCQkJCQkJCQkJCSBlcnJvcikp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURhdHVtCQlzdHIgPSBDU3RyaW5nR2V0RGF0 dW0ocG5zdHJkdXAoaXRlbS0+dmFsLnN0cmluZy52YWwsCiAJCQkJCQkJCQkJCQkJCSAgIGl0 ZW0tPnZhbC5zdHJpbmcubGVuKSk7Ci0JCQlicmVhazsKKworCQkJCWlmICh0eXBpZCA9PSBO VU1FUklDT0lEKQorCQkJCQlyZXR1cm4gRGlyZWN0RnVuY3Rpb25DYWxsMyhudW1lcmljX2lu LCBzdHIsCisJCQkJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0oMCksCisJCQkJCQkJCQkJ CSAgIEludDMyR2V0RGF0dW0odHlwbW9kKSk7CS8qIEZJWE1FIGVycm9ycyAqLworCQkJCWVs c2UgaWYgKHR5cGlkID09IERBVEVPSUQpCisJCQkJCXJldHVybiBEaXJlY3RGdW5jdGlvbkNh bGwxKGRhdGVfaW4sIHN0cik7CS8qIEZJWE1FIGVycm9ycyAqLworCQkJCWVsc2UgaWYgKHR5 cGlkID09IFRJTUVPSUQpCisJCQkJCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwxKHRpbWVf aW4sIHN0cik7CS8qIEZJWE1FIGVycm9ycyAqLworCQkJCWVsc2UgaWYgKHR5cGlkID09IFRJ TUVUWk9JRCkKKwkJCQkJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZXR6X2luLCBz dHIpOwkvKiBGSVhNRSBlcnJvcnMgKi8KKwkJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FU1RB TVBPSUQpCisJCQkJCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwxKHRpbWVzdGFtcF9pbiwg c3RyKTsJLyogRklYTUUgZXJyb3JzICovCisJCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNU QU1QVFpPSUQpCisJCQkJCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwxKHRpbWVzdGFtcHR6 X2luLCBzdHIpOwkvKiBGSVhNRSBlcnJvcnMgKi8KKwkJCQllbHNlCisJCQkJCWJyZWFrOwkv KiBObyBjYXN0ICovCisJCQl9CiAKIAkJY2FzZSBqYnZOdW1lcmljOgotCQkJY29lcmNpb24g PSAmY29lcmNpb25zLT5udW1lcmljOwotCQkJcmVzID0gTnVtZXJpY0dldERhdHVtKGl0ZW0t PnZhbC5udW1lcmljKTsKLQkJCWJyZWFrOworCQkJeworCQkJCU51bWVyaWMJCW51bSA9IGl0 ZW0tPnZhbC5udW1lcmljOworCisJCQkJaWYgKHR5cGlkID09IE5VTUVSSUNPSUQpCisJCQkJ CXJldHVybiBOdW1lcmljR2V0RGF0dW0obnVtKTsKKwkJCQllbHNlIGlmICh0eXBpZCA9PSBU RVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQor CQkJCQlyZXR1cm4gRXhlY0pzb25Db2VyY2lvblRvVGV4dChudW1lcmljX291dCwgTnVtZXJp Y0dldERhdHVtKG51bSksIHR5cGlkLCB0eXBtb2QpOworCQkJCWVsc2UgaWYgKHR5cGlkID09 IElOVDJPSUQpCisJCQkJCXJldHVybiBJbnQxNkdldERhdHVtKG51bWVyaWNfaW50Ml9vcHRf ZXJyb3IobnVtLCBlcnJvcikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IElOVDRPSUQpCisJ CQkJCXJldHVybiBJbnQzMkdldERhdHVtKG51bWVyaWNfaW50NF9vcHRfZXJyb3IobnVtLCBl cnJvcikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IElOVDhPSUQpCisJCQkJCXJldHVybiBJ bnQ2NEdldERhdHVtKG51bWVyaWNfaW50OF9vcHRfZXJyb3IobnVtLCBlcnJvcikpOworCQkJ CWVsc2UKKwkJCQkJYnJlYWs7CS8qIE5vIGNhc3QgKi8KKwkJCX0KIAogCQljYXNlIGpidkJv b2w6Ci0JCQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPmJvb2xlYW47Ci0JCQlyZXMgPSBCb29s R2V0RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBqYnZE YXRldGltZToKLQkJCXJlcyA9IGl0ZW0tPnZhbC5kYXRldGltZS52YWx1ZTsKLQkJCXN3aXRj aCAoaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKQogCQkJewotCQkJCWNhc2UgREFURU9JRDoK LQkJCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT5kYXRlOwotCQkJCQlicmVhazsKLQkJCQlj YXNlIFRJTUVPSUQ6Ci0JCQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+dGltZTsKLQkJCQkJ YnJlYWs7Ci0JCQkJY2FzZSBUSU1FVFpPSUQ6Ci0JCQkJCWNvZXJjaW9uID0gJmNvZXJjaW9u cy0+dGltZXR6OwotCQkJCQlicmVhazsKLQkJCQljYXNlIFRJTUVTVEFNUE9JRDoKLQkJCQkJ Y29lcmNpb24gPSAmY29lcmNpb25zLT50aW1lc3RhbXA7Ci0JCQkJCWJyZWFrOwotCQkJCWNh c2UgVElNRVNUQU1QVFpPSUQ6Ci0JCQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+dGltZXN0 YW1wdHo7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIGpzb25iIGRhdGV0aW1lIHR5cGUgb2lkICV1IiwKLQkJCQkJCSBpdGVtLT52 YWwuZGF0ZXRpbWUudHlwaWQpOwotCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCURhdHVt CQlyZXM7CisKKwkJCQlpZiAoRXhlY0pzb25Cb29sQ29lcmNpb24oaXRlbS0+dmFsLmJvb2xl YW4sIHR5cGlkLCB0eXBtb2QsICZyZXMpKQorCQkJCQlyZXR1cm4gcmVzOworCisJCQkJYnJl YWs7IC8qIE5vIGNhc3QgKi8KIAkJCX0KLQkJCWJyZWFrOworCisJCWNhc2UgamJ2RGF0ZXRp bWU6CisJCQlyZXR1cm4gRXhlY0pzb25EYXRldGltZUNvZXJjaW9uKGl0ZW0tPnZhbC5kYXRl dGltZS52YWx1ZSwKKwkJCQkJCQkJCQkJaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkLAorCQkJ CQkJCQkJCQl0eXBpZCwgdHlwbW9kLCBpc251bGwsIGVycm9yKTsKIAogCQljYXNlIGpidkFy cmF5OgogCQljYXNlIGpidk9iamVjdDoKIAkJY2FzZSBqYnZCaW5hcnk6Ci0JCQljb2VyY2lv biA9ICZjb2VyY2lvbnMtPmNvbXBvc2l0ZTsKLQkJCXJlcyA9IEpzb25iUEdldERhdHVtKEpz b25iVmFsdWVUb0pzb25iKGl0ZW0pKTsKKwkJCUFzc2VydCgwKTsJLyogbm9uLXNjYWxhcnMg bXVzdCBiZSByZWplY3RlZCBieSBKc29uUGF0aFZhbHVlKCkgKi8KIAkJCWJyZWFrOwogCiAJ CWRlZmF1bHQ6CkBAIC00OTI5LDk5ICs1MTQ5LDk4IEBAIEV4ZWNQcmVwYXJlSnNvbkl0ZW1D b2VyY2lvbihKc29uYlZhbHVlICppdGVtLAogCQkJcmV0dXJuIChEYXR1bSkgMDsKIAl9CiAK LQkqcGNvZXJjaW9uID0gY29lcmNpb247CisJaWYgKCFlcnJvcikKKwkJZXJlcG9ydChFUlJP UiwKKwkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9U T19UQVJHRVRfVFlQRSksCisJCQkgZXJybXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBj YXN0IHRvIHRhcmdldCB0eXBlIikpKTsKIAotCXJldHVybiByZXM7Ci19CisJKmVycm9yID0g dHJ1ZTsKKwkqaXNudWxsID0gdHJ1ZTsKIAotdHlwZWRlZiBEYXR1bSAoKkpzb25GdW5jKSAo RXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJCQkJICAgRGF0 dW0gaXRlbSwgYm9vbCAqcmVzbnVsbCwgdm9pZCAqcCwgYm9vbCAqZXJyb3IpOworCXJldHVy biAoRGF0dW0pIDA7Cit9CiAKKy8qCisgKiBFdmFsdWF0ZSBhIEpTT04gZXJyb3IvZW1wdHkg YmVoYXZpb3IgYW5kIGNvZXJjZSByZXN1bHQgdG8gdGhlIG91dHB1dAorICogdHlwZS4KKyAq Lwogc3RhdGljIERhdHVtCi1FeGVjRXZhbEpzb25FeHByU3VidHJhbnMoSnNvbkZ1bmMgZnVu YywgRXhwckV2YWxTdGVwICpvcCwKLQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQsCi0J CQkJCQkgRGF0dW0gcmVzLCBib29sICpyZXNudWxsLAotCQkJCQkJIHZvaWQgKnAsIGJvb2wg KmVycm9yLCBib29sIHN1YnRyYW5zKQorRXhlY0V2YWxKc29uQmVoYXZpb3IoRXhwckNvbnRl eHQgKmVjb250ZXh0LCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkgRXhwclN0YXRl ICpkZWZhdWx0X2VzdGF0ZSwKKwkJCQkJIE9pZCByZXRfdHlwaWQsIGludDMyIHJldF90eXBt b2QsIGJvb2wgKmlzX251bGwpCiB7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCVJl c291cmNlT3duZXIgb2xkb3duZXI7Ci0KLQlpZiAoIXN1YnRyYW5zKQotCQkvKiBObyBuZWVk IHRvIHVzZSBzdWJ0cmFuc2FjdGlvbnMuICovCi0JCXJldHVybiBmdW5jKG9wLCBlY29udGV4 dCwgcmVzLCByZXNudWxsLCBwLCBlcnJvcik7CisJKmlzX251bGwgPSBmYWxzZTsKIAotCS8q Ci0JICogV2Ugc2hvdWxkIGNhdGNoIGV4Y2VwdGlvbnMgb2YgY2F0ZWdvcnkgRVJSQ09ERV9E QVRBX0VYQ0VQVElPTiBhbmQKLQkgKiBleGVjdXRlIHRoZSBjb3JyZXNwb25kaW5nIE9OIEVS Uk9SIGJlaGF2aW9yIHRoZW4uCi0JICovCi0Jb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlD b250ZXh0OwotCW9sZG93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJc3dpdGNoIChi ZWhhdmlvci0+YnR5cGUpCisJeworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk6 CisJCQlpZiAocmV0X3R5cGlkID09IEpTT05CT0lEKQorCQkJCXJldHVybiBKc29uYlBHZXRE YXR1bShKc29uYk1ha2VFbXB0eUFycmF5KCkpOworCQkJZWxzZQorCQkJeworCQkJCUFzc2Vy dChyZXRfdHlwaWQgPT0gSlNPTk9JRCB8fCByZXRfdHlwaWQgPT0gVEVYVE9JRCB8fAorCQkJ CQkgICByZXRfdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fCByZXRfdHlwaWQgPT0gQlBDSEFST0lE KTsKIAotCUFzc2VydChlcnJvcik7CisJCQkJcmV0dXJuIEV4ZWNKc29uU3RyaW5nQ29lcmNp b24oIltdIiwgMiwgcmV0X3R5cGlkLCByZXRfdHlwbW9kKTsKKwkJCX0KIAotCUJlZ2luSW50 ZXJuYWxTdWJUcmFuc2FjdGlvbihOVUxMKTsKLQkvKiBXYW50IHRvIGV4ZWN1dGUgZXhwcmVz c2lvbnMgaW5zaWRlIGZ1bmN0aW9uJ3MgbWVtb3J5IGNvbnRleHQgKi8KLQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9P QkpFQ1Q6CisJCQlpZiAocmV0X3R5cGlkID09IEpTT05CT0lEKQorCQkJCXJldHVybiBKc29u YlBHZXREYXR1bShKc29uYk1ha2VFbXB0eU9iamVjdCgpKTsKKwkJCWVsc2UKKwkJCXsKKwkJ CQlBc3NlcnQocmV0X3R5cGlkID09IEpTT05PSUQgfHwgcmV0X3R5cGlkID09IFRFWFRPSUQg fHwKKwkJCQkJICAgcmV0X3R5cGlkID09IFZBUkNIQVJPSUQgfHwgcmV0X3R5cGlkID09IEJQ Q0hBUk9JRCk7CiAKLQlQR19UUlkoKTsKLQl7Ci0JCXJlcyA9IGZ1bmMob3AsIGVjb250ZXh0 LCByZXMsIHJlc251bGwsIHAsIGVycm9yKTsKKwkJCQlyZXR1cm4gRXhlY0pzb25TdHJpbmdD b2VyY2lvbigie30iLCAyLCByZXRfdHlwaWQsIHJldF90eXBtb2QpOworCQkJfQogCi0JCS8q IENvbW1pdCB0aGUgaW5uZXIgdHJhbnNhY3Rpb24sIHJldHVybiB0byBvdXRlciB4YWN0IGNv bnRleHQgKi8KLQkJUmVsZWFzZUN1cnJlbnRTdWJUcmFuc2FjdGlvbigpOwotCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0JCUN1cnJlbnRSZXNvdXJjZU93bmVyID0g b2xkb3duZXI7Ci0JfQotCVBHX0NBVENIKCk7Ci0JewotCQlFcnJvckRhdGEgICplZGF0YTsK LQkJaW50CQkJZWNhdGVnb3J5OworCQljYXNlIEpTT05fQkVIQVZJT1JfVFJVRToKKwkJY2Fz ZSBKU09OX0JFSEFWSU9SX0ZBTFNFOgorCQkJeworCQkJCURhdHVtCQlyZXM7CisJCQkJYm9v bAkJb2sgPQorCQkJCQlFeGVjSnNvbkJvb2xDb2VyY2lvbihiZWhhdmlvci0+YnR5cGUgPT0g SlNPTl9CRUhBVklPUl9UUlVFLAorCQkJCQkJCQkJCSByZXRfdHlwaWQsIHJldF90eXBtb2Qs ICZyZXMpOwogCi0JCS8qIFNhdmUgZXJyb3IgaW5mbyBpbiBvbGRjb250ZXh0ICovCi0JCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKLQkJZWRhdGEgPSBDb3B5RXJyb3JE YXRhKCk7Ci0JCUZsdXNoRXJyb3JTdGF0ZSgpOworCQkJCUFzc2VydChvayk7IC8qIHJldHVy bmluZyB0eXBlIG11c3QgYmUgY2hlY2sgaW4gcGFyc2VyICovCiAKLQkJLyogQWJvcnQgdGhl IGlubmVyIHRyYW5zYWN0aW9uICovCi0JCVJvbGxiYWNrQW5kUmVsZWFzZUN1cnJlbnRTdWJU cmFuc2FjdGlvbigpOwotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0J CUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CisJCQkJcmV0dXJuIHJlczsKKwkJ CX0KIAotCQllY2F0ZWdvcnkgPSBFUlJDT0RFX1RPX0NBVEVHT1JZKGVkYXRhLT5zcWxlcnJj b2RlKTsKKwkJY2FzZSBKU09OX0JFSEFWSU9SX05VTEw6CisJCWNhc2UgSlNPTl9CRUhBVklP Ul9VTktOT1dOOgorCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFk6CisJCQkqaXNfbnVsbCA9 IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCi0JCWlmIChlY2F0ZWdvcnkgIT0gRVJS Q09ERV9EQVRBX0VYQ0VQVElPTiAmJgkvKiBqc29ucGF0aCBhbmQgb3RoZXIgZGF0YQotCQkJ CQkJCQkJCQkJCSAqIGVycm9ycyAqLwotCQkJZWNhdGVnb3J5ICE9IEVSUkNPREVfSU5URUdS SVRZX0NPTlNUUkFJTlRfVklPTEFUSU9OKQkvKiBkb21haW4gZXJyb3JzICovCi0JCQlSZVRo cm93RXJyb3IoZWRhdGEpOworCQljYXNlIEpTT05fQkVIQVZJT1JfREVGQVVMVDoKKwkJCS8q CisJCQkgKiBFeGVjdXRlIERFRkFVTFQgZXhwcmVzc2lvbi4KKwkJCSAqIENvZXJjaW9uIGlz IG5vdCBuZWVkZWQgaGVyZSwgYmVjYXVzZSBleHByZXNzaW9uIGlzCisJCQkgKiBhbHJlYWR5 IGNvZXJjZWQgdG8gdGhlIHRhcmdldCB0eXBlIGJ5IHRoZSBwYXJzZXIuCisJCQkgKi8KKwkJ CXJldHVybiBFeGVjRXZhbEV4cHIoZGVmYXVsdF9lc3RhdGUsIGVjb250ZXh0LCBpc19udWxs KTsKIAotCQlyZXMgPSAoRGF0dW0pIDA7Ci0JCSplcnJvciA9IHRydWU7CisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGJlaGF2aW9yICVkIiwg YmVoYXZpb3ItPmJ0eXBlKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CiAJfQotCVBHX0VORF9U UlkoKTsKLQotCXJldHVybiByZXM7CiB9CiAKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlKc29u UGF0aCAgICpwYXRoOwotCWJvb2wJICAgKmVycm9yOwotCWJvb2wJCWNvZXJjaW9uSW5TdWJ0 cmFuczsKLX0gRXhlY0V2YWxKc29uRXhwckNvbnRleHQ7Ci0KIHN0YXRpYyBEYXR1bQotRXhl Y0V2YWxKc29uRXhwcihFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQs Ci0JCQkJIERhdHVtIGl0ZW0sIGJvb2wgKnJlc251bGwsIHZvaWQgKnBjeHQsCi0JCQkJIGJv b2wgKmVycm9yKQorRXhlY0V2YWxKc29uRXhwckludGVybmFsKEV4cHJTdGF0ZSAqc3RhdGUs CisJCQkJCQkgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4 dCwKKwkJCQkJCSBKc29uUGF0aCAqcGF0aCwgRGF0dW0gaXRlbSwgYm9vbCAqcmVzbnVsbCwK KwkJCQkJCSBib29sICplcnJvcikKIHsKLQlFeGVjRXZhbEpzb25FeHByQ29udGV4dCAqY3h0 ID0gcGN4dDsKLQlKc29uUGF0aCAgICpwYXRoID0gY3h0LT5wYXRoOwotCUpzb25FeHByU3Rh dGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CiAJSnNvbkV4cHIgICAq amV4cHIgPSBqc2VzdGF0ZS0+anNleHByOwotCUV4cHJTdGF0ZSAgKmVzdGF0ZSA9IE5VTEw7 CiAJYm9vbAkJZW1wdHkgPSBmYWxzZTsKIAlEYXR1bQkJcmVzID0gKERhdHVtKSAwOworCU9p ZAkJCXJldF90eXBpZCA9IGpleHByLT5yZXR1cm5pbmctPnR5cGlkOworCWludDMyCQlyZXRf dHlwbW9kID0gamV4cHItPnJldHVybmluZy0+dHlwbW9kOworCisJKnJlc251bGwgPSB0cnVl OwogCiAJc3dpdGNoIChqZXhwci0+b3ApCiAJewpAQCAtNTAyOSw3MCArNTI0OCw5NCBAQCBF eGVjRXZhbEpzb25FeHByKEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4 dCwKIAkJCXJlcyA9IEpzb25QYXRoUXVlcnkoaXRlbSwgcGF0aCwgamV4cHItPndyYXBwZXIs ICZlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKIAkJCWlmIChlcnJv ciAmJiAqZXJyb3IpCi0JCQl7Ci0JCQkJKnJlc251bGwgPSB0cnVlOwogCQkJCXJldHVybiAo RGF0dW0pIDA7Ci0JCQl9CisKKwkJCWlmIChlbXB0eSkKKwkJCQlicmVhazsKKwogCQkJKnJl c251bGwgPSAhRGF0dW1HZXRQb2ludGVyKHJlcyk7Ci0JCQlicmVhazsKKworCQkJLyogT3Zl cnJpZGUgZGVmYXVsdCBjb2VyY2lvbiBpbiBPTUlUIFFVT1RFUyBjYXNlICovCisJCQlpZiAo RXhlY0pzb25RdWVyeU5lZWRzSU9Db2VyY2lvbihqZXhwciwgcmVzLCAqcmVzbnVsbCkpCisJ CQl7CisJCQkJY2hhcgkgICAqc3RyID0gSnNvbmJVbnF1b3RlKERhdHVtR2V0SnNvbmJQKHJl cykpOworCisJCQkJaWYgKHJldF90eXBpZCA9PSBKU09OQk9JRCkKKwkJCQl7CisJCQkJCXJl cyA9IGpzb25iX2Zyb21fY3N0cmluZyhzdHIsIHN0cmxlbihzdHIpLCBmYWxzZSwgZXJyb3Ip OworCisJCQkJCWlmIChlcnJvciAmJiAqZXJyb3IpCisJCQkJCQlyZXR1cm4gKERhdHVtKSAw OworCisJCQkJCXJldHVybiByZXM7CisJCQkJfQorCQkJCWVsc2UgaWYgKHJldF90eXBpZCA9 PSBKU09OT0lEKQorCQkJCXsKKwkJCQkJdGV4dAkgICAqanNvbiA9IGNzdHJpbmdfdG9fdGV4 dChzdHIpOworCQkJCQlKc29uTGV4Q29udGV4dCAqbGV4OworCQkJCQlKc29uUGFyc2VFcnJv clR5cGUgcmVzdWx0OworCisJCQkJCS8qIHZhbGlkYXRlIGl0ICovCisJCQkJCWxleCA9IG1h a2VKc29uTGV4Q29udGV4dChqc29uLCBmYWxzZSk7CisJCQkJCXJlc3VsdCA9IHBnX3BhcnNl X2pzb24obGV4LCAmbnVsbFNlbUFjdGlvbik7CisKKwkJCQkJaWYgKHJlc3VsdCAhPSBKU09O X1NVQ0NFU1MpCisJCQkJCXsKKwkJCQkJCWlmIChlcnJvcikKKwkJCQkJCXsKKwkJCQkJCQkq ZXJyb3IgPSB0cnVlOworCQkJCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQkJCQl9CisKKwkJ CQkJCWpzb25fZXJlcG9ydF9lcnJvcihyZXN1bHQsIGxleCk7CisJCQkJCX0KKworCQkJCQly ZXR1cm4gUG9pbnRlckdldERhdHVtKGpzb24pOworCQkJCX0KKwkJCQllbHNlIGlmIChyZXRf dHlwaWQgPT0gVEVYVE9JRCB8fAorCQkJCQkJIHJldF90eXBpZCA9PSBWQVJDSEFST0lEIHx8 CisJCQkJCQkgcmV0X3R5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQkJcmV0dXJuIEV4ZWNKc29u U3RyaW5nQ29lcmNpb24oc3RyLCBzdHJsZW4oc3RyKSwgcmV0X3R5cGlkLCByZXRfdHlwbW9k KTsKKwkJCX0KKwkJCWVsc2UgaWYgKHJldF90eXBpZCA9PSBKU09OQk9JRCkKKwkJCQlyZXR1 cm4gcmVzOworCQkJZWxzZSBpZiAocmV0X3R5cGlkID09IEpTT05PSUQgfHwgcmV0X3R5cGlk ID09IFRFWFRPSUQpCisJCQkJcmV0dXJuIEpzb25iUEdldFRleHREYXR1bShEYXR1bUdldEpz b25iUChyZXMpKTsKKwkJCWVsc2UgaWYgKHJldF90eXBpZCA9PSBWQVJDSEFST0lEIHx8IHJl dF90eXBpZCA9PSBCUENIQVJPSUQpCisJCQl7CisJCQkJSnNvbmIJICAgKmpiID0gRGF0dW1H ZXRKc29uYlAocmVzKTsKKwkJCQljaGFyCSAgICpzdHIgPSBKc29uYlRvQ1N0cmluZyhOVUxM LCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKKworCQkJCXJldHVybiBFeGVjSnNvblN0cmlu Z0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciksIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJ CQl9CisKKwkJCUFzc2VydCgwKTsJLyogdW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgKi8KKwkJ CSplcnJvciA9ICpyZXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CiAKIAkJ Y2FzZSBKU09OX1ZBTFVFX09QOgogCQkJewotCQkJCXN0cnVjdCBKc29uQ29lcmNpb25TdGF0 ZSAqamNzdGF0ZTsKIAkJCQlKc29uYlZhbHVlICpqYnYgPSBKc29uUGF0aFZhbHVlKGl0ZW0s IHBhdGgsICZlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCQkJCQlqc2VzdGF0ZS0+YXJncyk7CiAK IAkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQogCQkJCQlyZXR1cm4gKERhdHVtKSAwOwogCi0J CQkJaWYgKCFqYnYpCQkvKiBOVUxMIG9yIGVtcHR5ICovCisJCQkJaWYgKGVtcHR5KQogCQkJ CQlicmVhazsKIAotCQkJCUFzc2VydCghZW1wdHkpOworCQkJCWlmICghamJ2KQorCQkJCQly ZXR1cm4gKERhdHVtKSAwOwkvKiBOVUxMICovCiAKLQkJCQkqcmVzbnVsbCA9IGZhbHNlOwor CQkJCUFzc2VydChqYnYtPnR5cGUgIT0gamJ2TnVsbCk7CiAKLQkJCQkvKiBjb2VyY2Ugc2Nh bGFyIGl0ZW0gdG8gdGhlIG91dHB1dCB0eXBlICovCi0JCQkJaWYgKGpleHByLT5yZXR1cm5p bmctPnR5cGlkID09IEpTT05PSUQgfHwKLQkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQg PT0gSlNPTkJPSUQpCi0JCQkJewotCQkJCQkvKiBVc2UgcmVzdWx0IGNvZXJjaW9uIGZyb20g anNvbltiXSB0byB0aGUgb3V0cHV0IHR5cGUgKi8KLQkJCQkJcmVzID0gSnNvbmJQR2V0RGF0 dW0oSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCQly ZXMgPSBFeGVjSnNvblZhbHVlQ29lcmNpb24oamJ2LCByZXRfdHlwaWQsIHJldF90eXBtb2Qs CisJCQkJCQkJCQkJCXJlc251bGwsIGVycm9yKTsKIAotCQkJCS8qIFVzZSBjb2VyY2lvbiBm cm9tIFNRTC9KU09OIGl0ZW0gdHlwZSB0byB0aGUgb3V0cHV0IHR5cGUgKi8KLQkJCQlyZXMg PSBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oamJ2LAotCQkJCQkJCQkJCQkJICBqc2Vz dGF0ZS0+anNleHByLT5yZXR1cm5pbmcsCi0JCQkJCQkJCQkJCQkgICZqc2VzdGF0ZS0+Y29l cmNpb25zLAotCQkJCQkJCQkJCQkJICAmamNzdGF0ZSk7Ci0KLQkJCQlpZiAoamNzdGF0ZS0+ Y29lcmNpb24gJiYKLQkJCQkJKGpjc3RhdGUtPmNvZXJjaW9uLT52aWFfaW8gfHwKLQkJCQkJ IGpjc3RhdGUtPmNvZXJjaW9uLT52aWFfcG9wdWxhdGUpKQotCQkJCXsKLQkJCQkJaWYgKGVy cm9yKQotCQkJCQl7Ci0JCQkJCQkqZXJyb3IgPSB0cnVlOwotCQkJCQkJcmV0dXJuIChEYXR1 bSkgMDsKLQkJCQkJfQotCi0JCQkJCS8qCi0JCQkJCSAqIENvZXJjaW9uIHZpYSBJL08gbWVh bnMgaGVyZSB0aGF0IHRoZSBjYXN0IHRvIHRoZSB0YXJnZXQKLQkJCQkJICogdHlwZSBzaW1w bHkgZG9lcyBub3QgZXhpc3QuCi0JCQkJCSAqLwotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19U QVJHRVRfVFlQRSksCi0JCQkJCQkJIGVycm1zZygiU1FML0pTT04gaXRlbSBjYW5ub3QgYmUg Y2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKCFqY3N0YXRl LT5lc3RhdGUpCi0JCQkJCXJldHVybiByZXM7IC8qIG5vIGNvZXJjaW9uICovCisJCQkJaWYg KGVycm9yICYmICplcnJvcikKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKIAotCQkJCS8qIGNv ZXJjZSB1c2luZyBzcGVjaWZpYyBleHByZXNzaW9uICovCi0JCQkJZXN0YXRlID0gamNzdGF0 ZS0+ZXN0YXRlOwotCQkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52YWx1ZSA9IHJlczsK LQkJCQlqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci0+aXNudWxsID0gKnJlc251bGw7Ci0JCQkJ YnJlYWs7CisJCQkJcmV0dXJuIHJlczsKIAkJCX0KIAogCQljYXNlIEpTT05fRVhJU1RTX09Q OgpAQCAtNTEwMSwxMTMgKzUzNDQsODEgQEAgRXhlY0V2YWxKc29uRXhwcihFeHByRXZhbFN0 ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQkJCQkJCQkJCQkJanNlc3RhdGUt PmFyZ3MsCiAJCQkJCQkJCQkJCQkJZXJyb3IpOwogCi0JCQkJKnJlc251bGwgPSBlcnJvciAm JiAqZXJyb3I7Ci0JCQkJcmVzID0gQm9vbEdldERhdHVtKGV4aXN0cyk7Ci0KLQkJCQlpZiAo IWpzZXN0YXRlLT5yZXN1bHRfZXhwcikKLQkJCQkJcmV0dXJuIHJlczsKKwkJCQlpZiAoIWVy cm9yIHx8ICEqZXJyb3IpCisJCQkJeworCQkJCQkvKiBTaG91bGQgc3VjY2VlZCwgb3V0cHV0 IHR5cGUgaXMgY2hlY2tlZCBieSBwYXJzZXIgKi8KKwkJCQkJKHZvaWQpIEV4ZWNKc29uQm9v bENvZXJjaW9uKGV4aXN0cywgcmV0X3R5cGlkLCByZXRfdHlwbW9kLCAmcmVzKTsKKwkJCQkJ KnJlc251bGwgPSBmYWxzZTsKKwkJCQl9CiAKLQkJCQkvKiBjb2VyY2UgdXNpbmcgcmVzdWx0 IGV4cHJlc3Npb24gKi8KLQkJCQllc3RhdGUgPSBqc2VzdGF0ZS0+cmVzdWx0X2V4cHI7Ci0J CQkJanNlc3RhdGUtPnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJCQlqc2VzdGF0ZS0+cmVz X2V4cHItPmlzbnVsbCA9ICpyZXNudWxsOwotCQkJCWJyZWFrOworCQkJCXJldHVybiByZXM7 CiAJCQl9CiAKLQkJY2FzZSBKU09OX1RBQkxFX09QOgotCQkJKnJlc251bGwgPSBmYWxzZTsK LQkJCXJldHVybiBpdGVtOwotCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhwci0+b3ApOwogCQkJcmV0 dXJuIChEYXR1bSkgMDsKIAl9CiAKLQlpZiAoZW1wdHkpCi0JewotCQlBc3NlcnQoamV4cHIt Pm9uX2VtcHR5KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RTICovCisJQXNzZXJ0KGVtcHR5 KTsKKwlBc3NlcnQoamV4cHItPm9uX2VtcHR5KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RT ICovCiAKLQkJaWYgKGpleHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9F UlJPUikKKwlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VS Uk9SKQorCXsKKwkJaWYgKGVycm9yKQogCQl7Ci0JCQlpZiAoZXJyb3IpCi0JCQl7Ci0JCQkJ KmVycm9yID0gdHJ1ZTsKLQkJCQlyZXR1cm4gKERhdHVtKSAwOwotCQkJfQotCi0JCQllcmVw b3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9KU09OX0lURU0pLAot CQkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpKTsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCQl9CiAKLQkJaWYgKGpleHByLT5vbl9lbXB0eS0+ YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQotCi0JCQkvKgotCQkJICogRXhlY3V0 ZSBERUZBVUxUIGV4cHJlc3Npb24gYXMgYSBjb2VyY2lvbiBleHByZXNzaW9uLCBiZWNhdXNl Ci0JCQkgKiBpdHMgcmVzdWx0IGlzIGFscmVhZHkgY29lcmNlZCB0byB0aGUgdGFyZ2V0IHR5 cGUuCi0JCQkgKi8KLQkJCWVzdGF0ZSA9IGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5Owot CQllbHNlCi0JCQkvKiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yICovCi0JCQlyZXMgPSBF eGVjRXZhbEpzb25CZWhhdmlvcihlY29udGV4dCwgamV4cHItPm9uX2VtcHR5LAotCQkJCQkJ CQkJICAganNlc3RhdGUtPmRlZmF1bHRfb25fZW1wdHksCi0JCQkJCQkJCQkgICByZXNudWxs KTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9KU09O X0lURU0pLAorCQkJCSBlcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSkpOwogCX0KIAotCXJl dHVybiBFeGVjRXZhbEpzb25FeHByU3VidHJhbnMoRXhlY0V2YWxKc29uRXhwckNvZXJjaW9u LCBvcCwgZWNvbnRleHQsCi0JCQkJCQkJCQlyZXMsIHJlc251bGwsIGVzdGF0ZSwgZXJyb3Is Ci0JCQkJCQkJCQljeHQtPmNvZXJjaW9uSW5TdWJ0cmFucyk7CisJLyogRXhlY3V0ZSBPTiBF TVBUWSBiZWhhdmlvciAqLworCXJldHVybiBFeGVjRXZhbEpzb25CZWhhdmlvcihlY29udGV4 dCwgamV4cHItPm9uX2VtcHR5LAorCQkJCQkJCQlqc2VzdGF0ZS0+ZGVmYXVsdF9vbl9lbXB0 eSwKKwkJCQkJCQkJcmV0X3R5cGlkLCByZXRfdHlwbW9kLCByZXNudWxsKTsKIH0KIAogYm9v bAotRXhlY0V2YWxKc29uTmVlZHNTdWJUcmFuc2FjdGlvbihKc29uRXhwciAqanNleHByLAot CQkJCQkJCQlzdHJ1Y3QgSnNvbkNvZXJjaW9uc1N0YXRlICpjb2VyY2lvbnMpCitFeGVjRXZh bEV4cHJDYW5UaHJvd0Vycm9ycyhOb2RlICpleHByKQogewotCWlmIChqc2V4cHItPm9uX2Vy cm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQorCWlmICghZXhwcikKIAkJcmV0 dXJuIGZhbHNlOwogCi0JaWYgKGpzZXhwci0+b3AgPT0gSlNPTl9FWElTVFNfT1AgJiYgIWpz ZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCWlmIChJc0EoZXhwciwgQ29uc3QpKQogCQlyZXR1 cm4gZmFsc2U7CiAKLQlpZiAoIWNvZXJjaW9ucykKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1 cm4gZmFsc2U7CisJLyogVE9ETyBjb25zaWRlciBtb3JlIGNhc2VzICovCisJcmV0dXJuIHRy dWU7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCQlFeGVjRXZhbEpzb24KKyAqCQlFeGVjRXZh bEpzb25FeHByCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKLUV4ZWNFdmFsSnNvbihFeHBy U3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQp CitFeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3As IEV4cHJDb250ZXh0ICplY29udGV4dCkKIHsKLQlFeGVjRXZhbEpzb25FeHByQ29udGV4dCBj eHQ7CiAJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0 ZTsKIAlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7CiAJRGF0dW0JCWl0 ZW07Ci0JRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKKwlEYXR1bQkJcmVzOwogCUpzb25QYXRo ICAgKnBhdGg7CiAJTGlzdENlbGwgICAqbGM7CiAJYm9vbAkJZXJyb3IgPSBmYWxzZTsKLQli b29sCQluZWVkU3VidHJhbnM7CiAJYm9vbAkJdGhyb3dFcnJvcnMgPSBqZXhwci0+b25fZXJy b3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CiAKLQkqb3AtPnJlc251bGwgPSB0 cnVlOwkJLyogdW50aWwgd2UgZ2V0IGEgcmVzdWx0ICovCi0JKm9wLT5yZXN2YWx1ZSA9IChE YXR1bSkgMDsKLQotCWlmIChqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHItPmlzbnVsbCB8fCBq c2VzdGF0ZS0+cGF0aHNwZWMtPmlzbnVsbCkKKwlpZiAoanNlc3RhdGUtPmZvcm1hdHRlZF9l eHByLmlzbnVsbCB8fCBqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsKQogCXsKLQkJLyogZXhl Y3V0ZSBkb21haW4gY2hlY2tzIGZvciBOVUxMcyAqLwotCQkodm9pZCkgRXhlY0V2YWxKc29u RXhwckNvZXJjaW9uKG9wLCBlY29udGV4dCwgcmVzLCBvcC0+cmVzbnVsbCwKLQkJCQkJCQkJ CQlOVUxMLCBOVUxMKTsKLQotCQlBc3NlcnQoKm9wLT5yZXNudWxsKTsKKwkJKm9wLT5yZXNu dWxsID0gdHJ1ZTsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKIAkJcmV0dXJuOwog CX0KIAotCWl0ZW0gPSBqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHItPnZhbHVlOwotCXBhdGgg PSBEYXR1bUdldEpzb25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMtPnZhbHVlKTsKKwlpdGVt ID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGggPSBEYXR1bUdldEpz b25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUpOwogCiAJLyogcmVzZXQgSlNPTiBw YXRoIHZhcmlhYmxlIGNvbnRleHRzICovCiAJZm9yZWFjaChsYywganNlc3RhdGUtPmFyZ3Mp CkBAIC01MjE4LDI5ICs1NDI5LDIwIEBAIEV4ZWNFdmFsSnNvbihFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAJCXZhci0+ZXZh bHVhdGVkID0gZmFsc2U7CiAJfQogCi0JbmVlZFN1YnRyYW5zID0gRXhlY0V2YWxKc29uTmVl ZHNTdWJUcmFuc2FjdGlvbihqZXhwciwgJmpzZXN0YXRlLT5jb2VyY2lvbnMpOwotCi0JY3h0 LnBhdGggPSBwYXRoOwotCWN4dC5lcnJvciA9IHRocm93RXJyb3JzID8gTlVMTCA6ICZlcnJv cjsKLQljeHQuY29lcmNpb25JblN1YnRyYW5zID0gIW5lZWRTdWJ0cmFucyAmJiAhdGhyb3dF cnJvcnM7Ci0JQXNzZXJ0KCFuZWVkU3VidHJhbnMgfHwgY3h0LmVycm9yKTsKLQotCXJlcyA9 IEV4ZWNFdmFsSnNvbkV4cHJTdWJ0cmFucyhFeGVjRXZhbEpzb25FeHByLCBvcCwgZWNvbnRl eHQsIGl0ZW0sCi0JCQkJCQkJCSAgIG9wLT5yZXNudWxsLCAmY3h0LCBjeHQuZXJyb3IsCi0J CQkJCQkJCSAgIG5lZWRTdWJ0cmFucyk7CisJcmVzID0gRXhlY0V2YWxKc29uRXhwckludGVy bmFsKHN0YXRlLCBqc2VzdGF0ZSwgZWNvbnRleHQsCisJCQkJCQkJCSAgIHBhdGgsIGl0ZW0s IG9wLT5yZXNudWxsLAorCQkJCQkJCQkgICB0aHJvd0Vycm9ycyA/IE5VTEwgOiAmZXJyb3Ip OwogCiAJaWYgKGVycm9yKQogCXsKKwkJQXNzZXJ0KCF0aHJvd0Vycm9ycyk7CisKIAkJLyog RXhlY3V0ZSBPTiBFUlJPUiBiZWhhdmlvciAqLwogCQlyZXMgPSBFeGVjRXZhbEpzb25CZWhh dmlvcihlY29udGV4dCwgamV4cHItPm9uX2Vycm9yLAogCQkJCQkJCQkgICBqc2VzdGF0ZS0+ ZGVmYXVsdF9vbl9lcnJvciwKKwkJCQkJCQkJICAgamV4cHItPnJldHVybmluZy0+dHlwaWQs CisJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKIAkJCQkJCQkJICAgb3At PnJlc251bGwpOwotCi0JCS8qIHJlc3VsdCBpcyBhbHJlYWR5IGNvZXJjZWQgaW4gREVGQVVM VCBiZWhhdmlvciBjYXNlICovCi0JCWlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpT T05fQkVIQVZJT1JfREVGQVVMVCkKLQkJCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lv bihvcCwgZWNvbnRleHQsIHJlcywKLQkJCQkJCQkJCQkgICBvcC0+cmVzbnVsbCwKLQkJCQkJ CQkJCQkgICBOVUxMLCBOVUxMKTsKIAl9CiAKIAkqb3AtPnJlc3ZhbHVlID0gcmVzOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMvYmFj a2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwppbmRleCBiZDM5NjUxNDNkYS4uZmQ3MjYz MGY1ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5j CisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yNDA4LDcg KzI0MDgsNyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCWJy ZWFrOwogCiAJCQljYXNlIEVFT1BfSlNPTkVYUFI6Ci0JCQkJYnVpbGRfRXZhbFhGdW5jKGIs IG1vZCwgIkV4ZWNFdmFsSnNvbiIsCisJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4 ZWNFdmFsSnNvbkV4cHIiLAogCQkJCQkJCQl2X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7CiAJ CQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKIAkJCQlicmVhazsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCAzNzM0NzFhZDI3Zi4uMzdm ZTY0NjU0YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlw ZXMuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKQEAgLTEz NSw3ICsxMzUsNyBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlFeGVj RXZhbFhtbEV4cHIsCiAJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxKc29u SXNQcmVkaWNhdGUsCi0JRXhlY0V2YWxKc29uLAorCUV4ZWNFdmFsSnNvbkV4cHIsCiAJTWFr ZUV4cGFuZGVkT2JqZWN0UmVhZE9ubHlJbnRlcm5hbCwKIAlzbG90X2dldG1pc3NpbmdhdHRy cywKIAlzbG90X2dldHNvbWVhdHRyc19pbnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4 IGMzMzRkYWFlMzkyLi5lMDI0MGJlZWVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAg LTI2Niw5ICsyNjYsNiBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRf SnNvbkV4cHI6CiAJCQl0eXBlID0gKChjb25zdCBKc29uRXhwciAqKSBleHByKS0+cmV0dXJu aW5nLT50eXBpZDsKIAkJCWJyZWFrOwotCQljYXNlIFRfSnNvbkNvZXJjaW9uOgotCQkJdHlw ZSA9IGV4cHJUeXBlKCgoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHIpLT5leHByKTsKLQkJ CWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2Rl IHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CiAJCQl0eXBlID0gSW52YWxpZE9p ZDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwpAQCAtNTA3LDggKzUwNCw2IEBAIGV4cHJU eXBtb2QoY29uc3QgTm9kZSAqZXhwcikKIAkJCXJldHVybiAoKGNvbnN0IEpzb25Db25zdHJ1 Y3RvckV4cHIgKikgZXhwciktPnJldHVybmluZy0+dHlwbW9kOwogCQljYXNlIFRfSnNvbkV4 cHI6CiAJCQlyZXR1cm4gKChKc29uRXhwciAqKSBleHByKS0+cmV0dXJuaW5nLT50eXBtb2Q7 Ci0JCWNhc2UgVF9Kc29uQ29lcmNpb246Ci0JCQlyZXR1cm4gZXhwclR5cG1vZCgoKGNvbnN0 IEpzb25Db2VyY2lvbiAqKSBleHByKS0+ZXhwcik7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsK IAl9CkBAIC0xMDEwLDE0ICsxMDA1LDEyIEBAIGV4cHJDb2xsYXRpb24oY29uc3QgTm9kZSAq ZXhwcikKIAkJY2FzZSBUX0pzb25FeHByOgogCQkJewogCQkJCUpzb25FeHByICAgKmpleHBy ID0gKEpzb25FeHByICopIGV4cHI7Ci0JCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IGpl eHByLT5yZXN1bHRfY29lcmNpb247CiAKLQkJCQlpZiAoIWNvZXJjaW9uKQotCQkJCQljb2xs ID0gSW52YWxpZE9pZDsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+ZXhwcikKLQkJCQkJY29s bCA9IGV4cHJDb2xsYXRpb24oY29lcmNpb24tPmV4cHIpOwotCQkJCWVsc2UgaWYgKGNvZXJj aW9uLT52aWFfaW8gfHwgY29lcmNpb24tPnZpYV9wb3B1bGF0ZSkKLQkJCQkJY29sbCA9IGNv ZXJjaW9uLT5jb2xsYXRpb247CisJCQkJaWYgKGpleHByLT5yZXR1cm5pbmctPnR5cGlkID09 IFRFWFRPSUQgfHwKKwkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gQ0hBUk9JRCB8 fAorCQkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBWQVJDSEFST0lEIHx8CisJCQkJ CWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQkJY29sbCA9IGpl eHByLT5jb2xsYXRpb247CiAJCQkJZWxzZQogCQkJCQljb2xsID0gSW52YWxpZE9pZDsKIAkJ CX0KQEAgLTEyNTUsMTQgKzEyNDgsMTIgQEAgZXhwclNldENvbGxhdGlvbihOb2RlICpleHBy LCBPaWQgY29sbGF0aW9uKQogCQljYXNlIFRfSnNvbkV4cHI6CiAJCQl7CiAJCQkJSnNvbkV4 cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgZXhwcjsKLQkJCQlKc29uQ29lcmNpb24gKmNv ZXJjaW9uID0gamV4cHItPnJlc3VsdF9jb2VyY2lvbjsKIAotCQkJCWlmICghY29lcmNpb24p Ci0JCQkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsKLQkJCQllbHNlIGlmIChj b2VyY2lvbi0+ZXhwcikKLQkJCQkJZXhwclNldENvbGxhdGlvbihjb2VyY2lvbi0+ZXhwciwg Y29sbGF0aW9uKTsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+dmlhX2lvIHx8IGNvZXJjaW9u LT52aWFfcG9wdWxhdGUpCi0JCQkJCWNvZXJjaW9uLT5jb2xsYXRpb24gPSBjb2xsYXRpb247 CisJCQkJaWYgKGpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IFRFWFRPSUQgfHwKKwkJCQkJ amV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gQ0hBUk9JRCB8fAorCQkJCQlqZXhwci0+cmV0 dXJuaW5nLT50eXBpZCA9PSBWQVJDSEFST0lEIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmct PnR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQkJamV4cHItPmNvbGxhdGlvbiA9IGNvbGxhdGlv bjsKIAkJCQllbHNlCiAJCQkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsKIAkJ CX0KQEAgLTI1MDcsOCArMjQ5OCw2IEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXIoTm9kZSAq bm9kZSwKIAogCQkJCWlmICh3YWxrZXIoamV4cHItPmZvcm1hdHRlZF9leHByLCBjb250ZXh0 KSkKIAkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtlcihqZXhwci0+cmVzdWx0X2Nv ZXJjaW9uLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7CiAJCQkJaWYgKHdhbGtlcihq ZXhwci0+cGFzc2luZ192YWx1ZXMsIGNvbnRleHQpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJ CQkvKiB3ZSBhc3N1bWUgd2Fsa2VyIGRvZXNuJ3QgY2FyZSBhYm91dCBwYXNzaW5nX25hbWVz ICovCkBAIC0yNTE3LDM2ICsyNTA2LDYgQEAgZXhwcmVzc2lvbl90cmVlX3dhbGtlcihOb2Rl ICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlpZiAod2Fsa2VyKGpleHByLT5vbl9l cnJvci0+ZGVmYXVsdF9leHByLCBjb250ZXh0KSkKIAkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJ aWYgKHdhbGtlcihqZXhwci0+Y29lcmNpb25zLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRy dWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBUX0pzb25Db2VyY2lvbjoKLQkJCXJldHVy biB3YWxrZXIoKChKc29uQ29lcmNpb24gKikgbm9kZSktPmV4cHIsIGNvbnRleHQpOwotCQlj YXNlIFRfSnNvbkl0ZW1Db2VyY2lvbnM6Ci0JCQl7Ci0JCQkJSnNvbkl0ZW1Db2VyY2lvbnMg KmNvZXJjaW9ucyA9IChKc29uSXRlbUNvZXJjaW9ucyAqKSBub2RlOwotCi0JCQkJaWYgKHdh bGtlcihjb2VyY2lvbnMtPm51bGwsIGNvbnRleHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+c3RyaW5nLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJu IHRydWU7Ci0JCQkJaWYgKHdhbGtlcihjb2VyY2lvbnMtPm51bWVyaWMsIGNvbnRleHQpKQot CQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+Ym9vbGVhbiwg Y29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoY29lcmNpb25z LT5kYXRlLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtlcihj b2VyY2lvbnMtPnRpbWUsIGNvbnRleHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAo d2Fsa2VyKGNvZXJjaW9ucy0+dGltZXR6LCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7 Ci0JCQkJaWYgKHdhbGtlcihjb2VyY2lvbnMtPnRpbWVzdGFtcCwgY29udGV4dCkpCi0JCQkJ CXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoY29lcmNpb25zLT50aW1lc3RhbXB0eiwg Y29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoY29lcmNpb25z LT5jb21wb3NpdGUsIGNvbnRleHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJy ZWFrOwogCQlkZWZhdWx0OgpAQCAtMzU3Niw3ICszNTM1LDYgQEAgZXhwcmVzc2lvbl90cmVl X211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQlGTEFUQ09QWShuZXdub2RlLCBqZXhwciwgSnNv bkV4cHIpOwogCQkJCU1VVEFURShuZXdub2RlLT5wYXRoX3NwZWMsIGpleHByLT5wYXRoX3Nw ZWMsIE5vZGUgKik7CiAJCQkJTVVUQVRFKG5ld25vZGUtPmZvcm1hdHRlZF9leHByLCBqZXhw ci0+Zm9ybWF0dGVkX2V4cHIsIE5vZGUgKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPnJlc3Vs dF9jb2VyY2lvbiwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwgSnNvbkNvZXJjaW9uICopOwog CQkJCU1VVEFURShuZXdub2RlLT5wYXNzaW5nX3ZhbHVlcywgamV4cHItPnBhc3NpbmdfdmFs dWVzLCBMaXN0ICopOwogCQkJCS8qIGFzc3VtZSBtdXRhdG9yIGRvZXMgbm90IGNhcmUgYWJv dXQgcGFzc2luZ19uYW1lcyAqLwogCQkJCWlmIChuZXdub2RlLT5vbl9lbXB0eSkKQEAgLTM1 ODcsMzUgKzM1NDUsNiBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcihOb2RlICpub2RlLAog CQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2Ug VF9Kc29uQ29lcmNpb246Ci0JCQl7Ci0JCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChK c29uQ29lcmNpb24gKikgbm9kZTsKLQkJCQlKc29uQ29lcmNpb24gKm5ld25vZGU7Ci0KLQkJ CQlGTEFUQ09QWShuZXdub2RlLCBjb2VyY2lvbiwgSnNvbkNvZXJjaW9uKTsKLQkJCQlNVVRB VEUobmV3bm9kZS0+ZXhwciwgY29lcmNpb24tPmV4cHIsIE5vZGUgKik7Ci0JCQkJcmV0dXJu IChOb2RlICopIG5ld25vZGU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBUX0pzb25JdGVt Q29lcmNpb25zOgotCQkJewotCQkJCUpzb25JdGVtQ29lcmNpb25zICpjb2VyY2lvbnMgPSAo SnNvbkl0ZW1Db2VyY2lvbnMgKikgbm9kZTsKLQkJCQlKc29uSXRlbUNvZXJjaW9ucyAqbmV3 bm9kZTsKLQotCQkJCUZMQVRDT1BZKG5ld25vZGUsIGNvZXJjaW9ucywgSnNvbkl0ZW1Db2Vy Y2lvbnMpOwotCQkJCU1VVEFURShuZXdub2RlLT5udWxsLCBjb2VyY2lvbnMtPm51bGwsIEpz b25Db2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+c3RyaW5nLCBjb2VyY2lvbnMt PnN0cmluZywgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFURShuZXdub2RlLT5udW1lcmlj LCBjb2VyY2lvbnMtPm51bWVyaWMsIEpzb25Db2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3 bm9kZS0+Ym9vbGVhbiwgY29lcmNpb25zLT5ib29sZWFuLCBKc29uQ29lcmNpb24gKik7Ci0J CQkJTVVUQVRFKG5ld25vZGUtPmRhdGUsIGNvZXJjaW9ucy0+ZGF0ZSwgSnNvbkNvZXJjaW9u ICopOwotCQkJCU1VVEFURShuZXdub2RlLT50aW1lLCBjb2VyY2lvbnMtPnRpbWUsIEpzb25D b2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+dGltZXR6LCBjb2VyY2lvbnMtPnRp bWV0eiwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFURShuZXdub2RlLT50aW1lc3RhbXAs IGNvZXJjaW9ucy0+dGltZXN0YW1wLCBKc29uQ29lcmNpb24gKik7Ci0JCQkJTVVUQVRFKG5l d25vZGUtPnRpbWVzdGFtcHR6LCBjb2VyY2lvbnMtPnRpbWVzdGFtcHR6LCBKc29uQ29lcmNp b24gKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPmNvbXBvc2l0ZSwgY29lcmNpb25zLT5jb21w b3NpdGUsIEpzb25Db2VyY2lvbiAqKTsKLQkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsK LQkJCX0KLQkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2du aXplZCBub2RlIHR5cGU6ICVkIiwKIAkJCQkgKGludCkgbm9kZVRhZyhub2RlKSk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggNTMzZGY4NmZmNzcuLjNjMTRk ZGZiYTJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2Vz LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC04OTYs MTggKzg5Niw2IEBAIG1heF9wYXJhbGxlbF9oYXphcmRfd2Fsa2VyKE5vZGUgKm5vZGUsIG1h eF9wYXJhbGxlbF9oYXphcmRfY29udGV4dCAqY29udGV4dCkKIAkJCQkJCQkJIGNvbnRleHQs IDApOwogCX0KIAotCS8qIEpzb25FeHByIGlzIHBhcmFsbGVsLXVuc2FmZSBpZiBzdWJ0cmFu c2FjdGlvbnMgY2FuIGJlIHVzZWQuICovCi0JZWxzZSBpZiAoSXNBKG5vZGUsIEpzb25FeHBy KSkKLQl7Ci0JCUpzb25FeHByICAgKmpzZXhwciA9IChKc29uRXhwciAqKSBub2RlOwotCi0J CWlmIChFeGVjRXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKGpzZXhwciwgTlVMTCkpCi0J CXsKLQkJCWNvbnRleHQtPm1heF9oYXphcmQgPSBQUk9QQVJBTExFTF9VTlNBRkU7Ci0JCQly ZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQogCS8qIFJlY3Vyc2UgdG8gY2hlY2sgYXJndW1lbnRz ICovCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwKIAkJCQkJCQkJICBt YXhfcGFyYWxsZWxfaGF6YXJkX3dhbGtlciwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmlu ZGV4IGZhYmI1ZjcyMDc2Li5hNmU1ZmUxZWI5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhw ci5jCkBAIC00MTA4LDcgKzQxMDgsNiBAQCB0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkvKiBmb3JtYXQgaXMgZGV0 ZXJtaW5lZCBieSBjb250ZXh0IGl0ZW0gdHlwZSAqLwogCWZvcm1hdCA9IGV4cHJUeXBlKGpz ZXhwci0+Zm9ybWF0dGVkX2V4cHIpID09IEpTT05CT0lEID8gSlNfRk9STUFUX0pTT05CIDog SlNfRk9STUFUX0pTT047CiAKLQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiA9IE5VTEw7CiAJ anNleHByLT5vbWl0X3F1b3RlcyA9IGZhbHNlOwogCiAJanNleHByLT5mb3JtYXQgPSBmdW5j LT5jb21tb24tPmV4cHItPmZvcm1hdDsKQEAgLTQxNjksNDAgKzQxNjgsNiBAQCBhc3NpZ25E ZWZhdWx0SnNvblJldHVybmluZ1R5cGUoTm9kZSAqY29udGV4dF9pdGVtLCBKc29uRm9ybWF0 ICpjb250ZXh0X2Zvcm1hdCwKIAlyZXQtPnR5cG1vZCA9IC0xOwogfQogCi0vKgotICogVHJ5 IHRvIGNvZXJjZSBleHByZXNzaW9uIHRvIHRoZSBvdXRwdXQgdHlwZSBvcgotICogdXNlIGpz b25fcG9wdWxhdGVfdHlwZSgpIGZvciBjb21wb3NpdGUsIGFycmF5IGFuZCBkb21haW4gdHlw ZXMgb3IKLSAqIHVzZSBjb2VyY2lvbiB2aWEgSS9PLgotICovCi1zdGF0aWMgSnNvbkNvZXJj aW9uICoKLWNvZXJjZUpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwciwg Y29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKQotewotCWNoYXIJCXR5cHR5cGU7Ci0J SnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25Db2VyY2lvbik7Ci0KLQlj b2VyY2lvbi0+ZXhwciA9IGNvZXJjZUpzb25GdW5jRXhwcihwc3RhdGUsIGV4cHIsIHJldHVy bmluZywgZmFsc2UpOwotCi0JaWYgKGNvZXJjaW9uLT5leHByKQotCXsKLQkJaWYgKGNvZXJj aW9uLT5leHByID09IGV4cHIpCi0JCQljb2VyY2lvbi0+ZXhwciA9IE5VTEw7Ci0KLQkJcmV0 dXJuIGNvZXJjaW9uOwotCX0KLQotCXR5cHR5cGUgPSBnZXRfdHlwdHlwZShyZXR1cm5pbmct PnR5cGlkKTsKLQotCWlmIChyZXR1cm5pbmctPnR5cGlkID09IFJFQ09SRE9JRCB8fAotCQl0 eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFIHx8Ci0JCXR5cHR5cGUgPT0gVFlQVFlQRV9E T01BSU4gfHwKLQkJdHlwZV9pc19hcnJheShyZXR1cm5pbmctPnR5cGlkKSkKLQkJY29lcmNp b24tPnZpYV9wb3B1bGF0ZSA9IHRydWU7Ci0JZWxzZQotCQljb2VyY2lvbi0+dmlhX2lvID0g dHJ1ZTsKLQotCXJldHVybiBjb2VyY2lvbjsKLX0KLQogLyoKICAqIFRyYW5zZm9ybSBhIEpT T04gb3V0cHV0IGNsYXVzZSBvZiBKU09OX1ZBTFVFIGFuZCBKU09OX1FVRVJZLgogICovCkBA IC00MjEwLDggKzQxNzUsNiBAQCBzdGF0aWMgdm9pZAogdHJhbnNmb3JtSnNvbkZ1bmNFeHBy T3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAogCQkJCQkJ CUpzb25FeHByICpqc2V4cHIpCiB7Ci0JTm9kZQkgICAqZXhwciA9IGpzZXhwci0+Zm9ybWF0 dGVkX2V4cHI7Ci0KIAlqc2V4cHItPnJldHVybmluZyA9IHRyYW5zZm9ybUpzb25PdXRwdXQo cHN0YXRlLCBmdW5jLT5vdXRwdXQsIGZhbHNlKTsKIAogCS8qIEpTT05fVkFMVUUgcmV0dXJu cyB0ZXh0IGJ5IGRlZmF1bHQgKi8KQEAgLTQyMjUsMTQgKzQxODgsNDEgQEAgdHJhbnNmb3Jt SnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpm dW5jLAogCXsKIAkJSnNvblJldHVybmluZyByZXQ7CiAKLQkJaWYgKGZ1bmMtPm9wID09IEpT T05fVkFMVUVfT1AgJiYKLQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBKU09OT0lE ICYmCi0JCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgIT0gSlNPTkJPSUQpCisJCWlmIChm dW5jLT5vcCA9PSBKU09OX1ZBTFVFX09QKQogCQl7Ci0JCQkvKiBGb3JjZWQgY29lcmNpb24g dmlhIEkvTyBmb3IgSlNPTl9WQUxVRSBmb3Igbm9uLUpTT04gdHlwZXMgKi8KLQkJCWpzZXhw ci0+cmVzdWx0X2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJjaW9uKTsKLQkJCWpzZXhw ci0+cmVzdWx0X2NvZXJjaW9uLT5leHByID0gTlVMTDsKLQkJCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uLT52aWFfaW8gPSB0cnVlOworCQkJLyoKKwkJCSAqIE9ubHkgYSBsaW1pdGVkIGxp c3Qgb2Ygb3V0cHV0IHR5cGVzIGlzIHN1cHBvcnRlZCBpbgorCQkJICogSlNPTl9WQUxVRSgp IG5vdy4KKwkJCSAqLworCQkJc3dpdGNoIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpCisJ CQl7CisJCQkJY2FzZSBKU09OQk9JRDoKKwkJCQljYXNlIEpTT05PSUQ6CisJCQkJY2FzZSBU RVhUT0lEOgorCQkJCWNhc2UgVkFSQ0hBUk9JRDoKKwkJCQljYXNlIEJQQ0hBUk9JRDoKKwkJ CQljYXNlIEJPT0xPSUQ6CisJCQkJY2FzZSBOVU1FUklDT0lEOgorCQkJCWNhc2UgSU5UMk9J RDoKKwkJCQljYXNlIElOVDRPSUQ6CisJCQkJY2FzZSBJTlQ4T0lEOgorCQkJCS8qIGNhc2Ug RkxPQVQ0T0lEOiBGSVhNRSAqLworCQkJCS8qIGNhc2UgRkxPQVQ4T0lEOiBGSVhNRSAqLwor CQkJCWNhc2UgREFURU9JRDoKKwkJCQljYXNlIFRJTUVPSUQ6CisJCQkJY2FzZSBUSU1FVFpP SUQ6CisJCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoK KwkJCQkJYnJlYWs7IC8qIE9rICovCisKKwkJCQlkZWZhdWx0OgorCQkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK KwkJCQkJCQkgZXJybXNnKCJyZXR1cm5pbmcgdHlwZSAlcyBpcyBub3Qgc3VwcG9ydGVkIGlu IEpTT05fVkFMVUUoKSIsCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4cHItPnJldHVy bmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9uKHBz dGF0ZSwgZnVuYy0+bG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKwkJCX0KKwogCQkJ cmV0dXJuOwogCQl9CiAKQEAgLTQyNDEsMTMgKzQyMzEsMjIgQEAgdHJhbnNmb3JtSnNvbkZ1 bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAog CQlpZiAocmV0LnR5cGlkICE9IGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCB8fAogCQkJcmV0 LnR5cG1vZCAhPSBqc2V4cHItPnJldHVybmluZy0+dHlwbW9kKQogCQl7Ci0JCQlOb2RlCSAg ICpwbGFjZWhvbGRlciA9IG1ha2VDYXNlVGVzdEV4cHIoZXhwcik7Ci0KLQkJCUFzc2VydCgo KENhc2VUZXN0RXhwciAqKSBwbGFjZWhvbGRlciktPnR5cGVJZCA9PSByZXQudHlwaWQpOwot CQkJQXNzZXJ0KCgoQ2FzZVRlc3RFeHByICopIHBsYWNlaG9sZGVyKS0+dHlwZU1vZCA9PSBy ZXQudHlwbW9kKTsKKwkJCXN3aXRjaCAoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKQorCQkJ eworCQkJCWNhc2UgSlNPTkJPSUQ6CisJCQkJY2FzZSBKU09OT0lEOgorCQkJCWNhc2UgVEVY VE9JRDoKKwkJCQljYXNlIFZBUkNIQVJPSUQ6CisJCQkJY2FzZSBCUENIQVJPSUQ6CisJCQkJ CWJyZWFrOwogCi0JCQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiA9IGNvZXJjZUpzb25FeHBy KHBzdGF0ZSwgcGxhY2Vob2xkZXIsCi0JCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5n KTsKKwkJCQlkZWZhdWx0OgorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJyZXR1 cm5pbmcgdHlwZSAlcyBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fUVVFUlkoKSIsCisJCQkJ CQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJ CQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9uKHBzdGF0ZSwgZnVuYy0+bG9jYXRpb24s IChOb2RlICopIGpzZXhwcikpKTsKKwkJCX0KIAkJfQogCX0KIAllbHNlCkBAIC00MjkzLDYy ICs0MjkyLDYgQEAgY29lcmNlRGVmYXVsdEpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwg SnNvbkV4cHIgKmpzZXhwciwgTm9kZSAqZGVmZXhwcikKIAlyZXR1cm4gZGVmZXhwcjsKIH0K IAotLyoKLSAqIEluaXRpYWxpemUgU1FML0pTT04gaXRlbSBjb2VyY2lvbiBmcm9tIHRoZSBT UUwgdHlwZSAidHlwaWQiIHRvIHRoZSB0YXJnZXQKLSAqICJyZXR1cm5pbmciIHR5cGUuCi0g Ki8KLXN0YXRpYyBKc29uQ29lcmNpb24gKgotaW5pdEpzb25JdGVtQ29lcmNpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBPaWQgdHlwaWQsCi0JCQkJCSBjb25zdCBKc29uUmV0dXJuaW5nICpy ZXR1cm5pbmcpCi17Ci0JTm9kZQkgICAqZXhwcjsKLQotCWlmICh0eXBpZCA9PSBVTktOT1dO T0lEKQotCXsKLQkJZXhwciA9IChOb2RlICopIG1ha2VOdWxsQ29uc3QoVU5LTk9XTk9JRCwg LTEsIEludmFsaWRPaWQpOwotCX0KLQllbHNlCi0JewotCQlDYXNlVGVzdEV4cHIgKnBsYWNl aG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKLQotCQlwbGFjZWhvbGRlci0+dHlw ZUlkID0gdHlwaWQ7Ci0JCXBsYWNlaG9sZGVyLT50eXBlTW9kID0gLTE7Ci0JCXBsYWNlaG9s ZGVyLT5jb2xsYXRpb24gPSBJbnZhbGlkT2lkOwotCi0JCWV4cHIgPSAoTm9kZSAqKSBwbGFj ZWhvbGRlcjsKLQl9Ci0KLQlyZXR1cm4gY29lcmNlSnNvbkV4cHIocHN0YXRlLCBleHByLCBy ZXR1cm5pbmcpOwotfQotCi1zdGF0aWMgdm9pZAotaW5pdEpzb25JdGVtQ29lcmNpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkl0ZW1Db2VyY2lvbnMgKmNvZXJjaW9ucywKLQkJCQkJ ICBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsIE9pZCBjb250ZXh0SXRlbVR5cGVJ ZCkKLXsKLQlzdHJ1Y3QKLQl7Ci0JCUpzb25Db2VyY2lvbiAqKmNvZXJjaW9uOwotCQlPaWQJ CQl0eXBpZDsKLQl9CQkgICAqcCwKLQkJCQljb2VyY2lvblR5cGlkc1tdID0KLQl7Ci0JCXsm Y29lcmNpb25zLT5udWxsLCBVTktOT1dOT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnN0cmluZywg VEVYVE9JRH0sCi0JCXsmY29lcmNpb25zLT5udW1lcmljLCBOVU1FUklDT0lEfSwKLQkJeyZj b2VyY2lvbnMtPmJvb2xlYW4sIEJPT0xPSUR9LAotCQl7JmNvZXJjaW9ucy0+ZGF0ZSwgREFU RU9JRH0sCi0JCXsmY29lcmNpb25zLT50aW1lLCBUSU1FT0lEfSwKLQkJeyZjb2VyY2lvbnMt PnRpbWV0eiwgVElNRVRaT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnRpbWVzdGFtcCwgVElNRVNU QU1QT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnRpbWVzdGFtcHR6LCBUSU1FU1RBTVBUWk9JRH0s Ci0JCXsmY29lcmNpb25zLT5jb21wb3NpdGUsIGNvbnRleHRJdGVtVHlwZUlkfSwKLQkJe05V TEwsIEludmFsaWRPaWR9Ci0JfTsKLQotCWZvciAocCA9IGNvZXJjaW9uVHlwaWRzOyBwLT5j b2VyY2lvbjsgcCsrKQotCQkqcC0+Y29lcmNpb24gPSBpbml0SnNvbkl0ZW1Db2VyY2lvbihw c3RhdGUsIHAtPnR5cGlkLCByZXR1cm5pbmcpOwotfQotCiAvKgogICogVHJhbnNmb3JtIEpT T05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RTIGZ1bmN0aW9ucyBpbnRvIGEgSnNv bkV4cHIgbm9kZS4KICAqLwpAQCAtNDM3NywxMCArNDMyMCw2IEBAIHRyYW5zZm9ybUpzb25G dW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQlj b2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsCiAJCQkJCQkJCQkgIGpzZXhw ci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwcik7CiAKLQkJCWpzZXhwci0+Y29lcmNpb25zID0g bWFrZU5vZGUoSnNvbkl0ZW1Db2VyY2lvbnMpOwotCQkJaW5pdEpzb25JdGVtQ29lcmNpb25z KHBzdGF0ZSwganNleHByLT5jb2VyY2lvbnMsIGpzZXhwci0+cmV0dXJuaW5nLAotCQkJCQkJ CQkgIGV4cHJUeXBlKGNvbnRleHRJdGVtRXhwcikpOwotCiAJCQlicmVhazsKIAogCQljYXNl IEpTT05fUVVFUllfT1A6CkBAIC00NDA5LDYgKzQzNDgsNyBAQCB0cmFuc2Zvcm1Kc29uRnVu Y0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQlqc2V4 cHItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxU OwogCQkJanNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVG QVVMVDsKIAorCQkJLyogQ29lcmNlIGludGVybWVkaWF0ZSBib29sZWFuIHJlc3VsdCB0byB0 aGUgb3V0cHV0IHR5cGUgaWYgbmVlZGVkICovCiAJCQlpZiAoIU9pZElzVmFsaWQoanNleHBy LT5yZXR1cm5pbmctPnR5cGlkKSkKIAkJCXsKIAkJCQlqc2V4cHItPnJldHVybmluZy0+dHlw aWQgPSBCT09MT0lEOwpAQCAtNDQxNiwzMiArNDM1NiwyMSBAQCB0cmFuc2Zvcm1Kc29uRnVu Y0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQl9CiAJ CQllbHNlIGlmIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQgIT0gQk9PTE9JRCkKIAkJCXsK LQkJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHBy KTsKLQkJCQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBqc2V4cHIp OwotCi0JCQkJcGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7Ci0JCQkJcGxhY2Vob2xk ZXItPnR5cGVNb2QgPSAtMTsKLQkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxp ZE9pZDsKLQotCQkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNv ZXJjaW9uKTsKLQkJCQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9Ci0JCQkJCWNv ZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIChOb2RlICopIHBsYWNlaG9sZGVyLCBCT09M T0lELAotCQkJCQkJCQkJCSAganNleHByLT5yZXR1cm5pbmctPnR5cGlkLAotCQkJCQkJCQkJ CSAganNleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKLQkJCQkJCQkJCQkgIENPRVJDSU9OX0VY UExJQ0lULAotCQkJCQkJCQkJCSAgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCi0JCQkJCQkJCQkJ ICBsb2NhdGlvbik7Ci0KLQkJCQlpZiAoIWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uLT5leHBy KQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FOTk9U X0NPRVJDRSksCi0JCQkJCQkJIGVycm1zZygiY2Fubm90IGNhc3QgdHlwZSAlcyB0byAlcyIs Ci0JCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShCT09MT0lEKSwKLQkJCQkJCQkJCWZvcm1hdF90 eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAotCQkJCQkJCSBwYXJzZXJfY29l cmNpb25fZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbiwgKE5vZGUgKikganNleHByKSkp OworCQkJCXN3aXRjaCAoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKQorCQkJCXsKKwkJCQkJ Y2FzZSBJTlQ0T0lEOgorCQkJCQljYXNlIFRFWFRPSUQ6CisJCQkJCWNhc2UgVkFSQ0hBUk9J RDoKKwkJCQkJY2FzZSBCUENIQVJPSUQ6CisJCQkJCQlicmVhazsKIAotCQkJCWlmIChqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9PSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKLQkJ CQkJanNleHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOworCQkJCQlkZWZhdWx0 OgorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkgZXJybXNnKCJyZXR1cm5pbmcgdHlwZSAl cyBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkiLAorCQkJCQkJCQkJCWZvcm1h dF90eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAorCQkJCQkJCQkgcGFyc2Vy X2NvZXJjaW9uX2VycnBvc2l0aW9uKHBzdGF0ZSwgZnVuYy0+bG9jYXRpb24sIChOb2RlICop IGpzZXhwcikpKTsKKwkJCQl9CiAJCQl9CiAJCQlicmVhazsKIApAQCAtNDQ1Nyw3ICs0Mzg2 LDYgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1 bmNFeHByICpmdW5jKQogCQkJCQkJIGVycm1zZygiSlNPTl9UQUJMRSgpIGlzIG5vdCB5ZXQg aW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUiKSwKIAkJCQkJCSBlcnJoaW50KCJUcnkg Y2FzdGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIiKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9z aXRpb24ocHN0YXRlLCBmdW5jLT5sb2NhdGlvbikpKTsKLQogCQkJYnJlYWs7CiAJfQogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYm9vbC5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Jvb2wuYwppbmRleCBjZDczMzUyODdmOS4uNzg1NTdjOTlkYzUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ib29sLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Jvb2wuYwpAQCAtMTI2LDEyICsxMjYsMTAgQEAgcGFyc2VfYm9vbF93aXRo X2xlbihjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbiwgYm9vbCAqcmVzdWx0KQogICoK ICAqIEluIHRoZSBzd2l0Y2ggc3RhdGVtZW50LCBjaGVjayB0aGUgbW9zdC11c2VkIHBvc3Np YmlsaXRpZXMgZmlyc3QuCiAgKi8KLURhdHVtCi1ib29saW4oUEdfRlVOQ1RJT05fQVJHUykK K2Jvb2wKK2Jvb2xpbl9vcHRfZXJyb3IoY29uc3QgY2hhciAqaW5fc3RyLCBzaXplX3QJbGVu LCBib29sICplcnJvcikKIHsKLQljb25zdCBjaGFyICppbl9zdHIgPSBQR19HRVRBUkdfQ1NU UklORygwKTsKIAljb25zdCBjaGFyICpzdHI7Ci0Jc2l6ZV90CQlsZW47CiAJYm9vbAkJcmVz dWx0OwogCiAJLyoKQEAgLTE0MSwyMCArMTM5LDI5IEBAIGJvb2xpbihQR19GVU5DVElPTl9B UkdTKQogCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqc3RyKSkKIAkJc3RyKys7 CiAKLQlsZW4gPSBzdHJsZW4oc3RyKTsKKwlsZW4gLT0gc3RyIC0gaW5fc3RyOwogCXdoaWxl IChsZW4gPiAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpIHN0cltsZW4gLSAxXSkpCiAJ CWxlbi0tOwogCiAJaWYgKHBhcnNlX2Jvb2xfd2l0aF9sZW4oc3RyLCBsZW4sICZyZXN1bHQp KQotCQlQR19SRVRVUk5fQk9PTChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCisJaWYg KCFlcnJvcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBz eW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCisJCQkJCQkiYm9vbGVhbiIsIGluX3N0cikp KTsKKworCSplcnJvciA9IHRydWU7CisJcmV0dXJuIGZhbHNlOworfQogCi0JZXJlcG9ydChF UlJPUiwKLQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKLQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlICVzOiBcIiVz XCIiLAotCQkJCQkiYm9vbGVhbiIsIGluX3N0cikpKTsKK0RhdHVtCitib29saW4oUEdfRlVO Q1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsK IAotCS8qIG5vdCByZWFjaGVkICovCi0JUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCVBHX1JF VFVSTl9CT09MKGJvb2xpbl9vcHRfZXJyb3Ioc3RyLCBzdHJsZW4oc3RyKSwgTlVMTCkpOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGUuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRlLmMKaW5kZXggMDgxZGZhMjQ1MGYuLjc3OGJmYzkw Njg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRlLmMKQEAgLTEyODYsMTAgKzEyODYsOSBAQCBkYXRl X3RpbWVzdGFtcChQR19GVU5DVElPTl9BUkdTKQogLyogdGltZXN0YW1wX2RhdGUoKQogICog Q29udmVydCB0aW1lc3RhbXAgdG8gZGF0ZSBkYXRhIHR5cGUuCiAgKi8KLURhdHVtCi10aW1l c3RhbXBfZGF0ZShQR19GVU5DVElPTl9BUkdTKQorRGF0ZUFEVAordGltZXN0YW1wX2RhdGVf b3B0X2Vycm9yKFRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgKmVycm9yKQogewotCVRpbWVz dGFtcAl0aW1lc3RhbXAgPSBQR19HRVRBUkdfVElNRVNUQU1QKDApOwogCURhdGVBRFQJCXJl c3VsdDsKIAlzdHJ1Y3QgcGdfdG0gdHQsCiAJCQkgICAqdG0gPSAmdHQ7CkBAIC0xMzAyLDE2 ICsxMzAxLDMyIEBAIHRpbWVzdGFtcF9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZWxzZQog CXsKIAkJaWYgKHRpbWVzdGFtcDJ0bSh0aW1lc3RhbXAsIE5VTEwsIHRtLCAmZnNlYywgTlVM TCwgTlVMTCkgIT0gMCkKKwkJeworCQkJaWYgKGVycm9yKQorCQkJeworCQkJCSplcnJvciA9 IHRydWU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfREFURVRJTUVfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkJ IGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZSIpKSk7CisJCX0KIAogCQlyZXN1bHQg PSBkYXRlMmoodG0tPnRtX3llYXIsIHRtLT50bV9tb24sIHRtLT50bV9tZGF5KSAtIFBPU1RH UkVTX0VQT0NIX0pEQVRFOwogCX0KIAotCVBHX1JFVFVSTl9EQVRFQURUKHJlc3VsdCk7CisJ cmV0dXJuIHJlc3VsdDsKIH0KIAorLyogdGltZXN0YW1wX2RhdGUoKQorICogQ29udmVydCB0 aW1lc3RhbXAgdG8gZGF0ZSBkYXRhIHR5cGUuCisgKi8KK0RhdHVtCit0aW1lc3RhbXBfZGF0 ZShQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVSTl9EQVRFQURUKHRpbWVzdGFtcF9k YXRlX29wdF9lcnJvcihQR19HRVRBUkdfVElNRVNUQU1QKDApLCBOVUxMKSk7Cit9CiAKIC8q IGRhdGVfdGltZXN0YW1wdHooKQogICogQ29udmVydCBkYXRlIHRvIHRpbWVzdGFtcCB3aXRo IHRpbWUgem9uZSBkYXRhIHR5cGUuCkBAIC0xMzI3LDE0ICsxMzQyLDkgQEAgZGF0ZV90aW1l c3RhbXB0eihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9USU1FU1RBTVAocmVzdWx0 KTsKIH0KIAotCi0vKiB0aW1lc3RhbXB0el9kYXRlKCkKLSAqIENvbnZlcnQgdGltZXN0YW1w IHdpdGggdGltZSB6b25lIHRvIGRhdGUgZGF0YSB0eXBlLgotICovCi1EYXR1bQotdGltZXN0 YW1wdHpfZGF0ZShQR19GVU5DVElPTl9BUkdTKQorRGF0ZUFEVAordGltZXN0YW1wdHpfZGF0 ZV9vcHRfZXJyb3IoVGltZXN0YW1wVHogdGltZXN0YW1wLCBib29sICplcnJvcikKIHsKLQlU aW1lc3RhbXBUeiB0aW1lc3RhbXAgPSBQR19HRVRBUkdfVElNRVNUQU1QKDApOwogCURhdGVB RFQJCXJlc3VsdDsKIAlzdHJ1Y3QgcGdfdG0gdHQsCiAJCQkgICAqdG0gPSAmdHQ7CkBAIC0x MzQ4LDE0ICsxMzU4LDMxIEBAIHRpbWVzdGFtcHR6X2RhdGUoUEdfRlVOQ1RJT05fQVJHUykK IAllbHNlCiAJewogCQlpZiAodGltZXN0YW1wMnRtKHRpbWVzdGFtcCwgJnR6LCB0bSwgJmZz ZWMsIE5VTEwsIE5VTEwpICE9IDApCisJCXsKKwkJCWlmIChlcnJvcikKKwkJCXsKKwkJCQkq ZXJyb3IgPSB0cnVlOworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSks CiAJCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkpOworCQl9CiAKIAkJ cmVzdWx0ID0gZGF0ZTJqKHRtLT50bV95ZWFyLCB0bS0+dG1fbW9uLCB0bS0+dG1fbWRheSkg LSBQT1NUR1JFU19FUE9DSF9KREFURTsKIAl9CiAKLQlQR19SRVRVUk5fREFURUFEVChyZXN1 bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHRpbWVzdGFtcHR6X2RhdGUoKQorICog Q29udmVydCB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUgdG8gZGF0ZSBkYXRhIHR5cGUuCisg Ki8KK0RhdHVtCit0aW1lc3RhbXB0el9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdf UkVUVVJOX0RBVEVBRFQodGltZXN0YW1wdHpfZGF0ZV9vcHRfZXJyb3IoUEdfR0VUQVJHX1RJ TUVTVEFNUCgwKSwgTlVMTCkpOwogfQogCiAKQEAgLTE4ODksMjIgKzE5MTYsMzIgQEAgb3Zl cmxhcHNfdGltZShQR19GVU5DVElPTl9BUkdTKQogLyogdGltZXN0YW1wX3RpbWUoKQogICog Q29udmVydCB0aW1lc3RhbXAgdG8gdGltZSBkYXRhIHR5cGUuCiAgKi8KLURhdHVtCi10aW1l c3RhbXBfdGltZShQR19GVU5DVElPTl9BUkdTKQorVGltZUFEVAordGltZXN0YW1wX3RpbWVf b3B0X2Vycm9yKFRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgKmlzbnVsbCwgYm9vbCAqZXJy b3IpCiB7Ci0JVGltZXN0YW1wCXRpbWVzdGFtcCA9IFBHX0dFVEFSR19USU1FU1RBTVAoMCk7 CiAJVGltZUFEVAkJcmVzdWx0OwogCXN0cnVjdCBwZ190bSB0dCwKIAkJCSAgICp0bSA9ICZ0 dDsKIAlmc2VjX3QJCWZzZWM7CiAKIAlpZiAoVElNRVNUQU1QX05PVF9GSU5JVEUodGltZXN0 YW1wKSkKLQkJUEdfUkVUVVJOX05VTEwoKTsKKwl7CisJCSppc251bGwgPSB0cnVlOworCQly ZXR1cm4gMDsKKwl9CiAKIAlpZiAodGltZXN0YW1wMnRtKHRpbWVzdGFtcCwgTlVMTCwgdG0s ICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkq ZXJyb3IgPSAqaXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfREFURVRJTUVfVkFMVUVf T1VUX09GX1JBTkdFKSwKIAkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIikp KTsKKwl9CiAKIAkvKgogCSAqIENvdWxkIGFsc28gZG8gdGhpcyB3aXRoIHRpbWUgPSAodGlt ZXN0YW1wIC8gVVNFQ1NfUEVSX0RBWSAqCkBAIC0xOTEyLDE3ICsxOTQ5LDMzIEBAIHRpbWVz dGFtcF90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICovCiAJcmVzdWx0ID0gKCgoKHRtLT50 bV9ob3VyICogTUlOU19QRVJfSE9VUiArIHRtLT50bV9taW4pICogU0VDU19QRVJfTUlOVVRF KSArIHRtLT50bV9zZWMpICoKIAkJCSAgVVNFQ1NfUEVSX1NFQykgKyBmc2VjOworCSppc251 bGwgPSBmYWxzZTsKIAotCVBHX1JFVFVSTl9USU1FQURUKHJlc3VsdCk7CisJcmV0dXJuIHJl c3VsdDsKIH0KIAotLyogdGltZXN0YW1wdHpfdGltZSgpCi0gKiBDb252ZXJ0IHRpbWVzdGFt cHR6IHRvIHRpbWUgZGF0YSB0eXBlLgorLyogdGltZXN0YW1wX3RpbWUoKQorICogQ29udmVy dCB0aW1lc3RhbXAgdG8gdGltZSBkYXRhIHR5cGUuCiAgKi8KIERhdHVtCi10aW1lc3RhbXB0 el90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCit0aW1lc3RhbXBfdGltZShQR19GVU5DVElPTl9B UkdTKQoreworCWJvb2wJCWlzbnVsbDsKKwlUaW1lQURUCQl0aW1lID0KKwkJdGltZXN0YW1w X3RpbWVfb3B0X2Vycm9yKFBHX0dFVEFSR19USU1FU1RBTVAoMCksICZpc251bGwsIE5VTEwp OworCisJaWYgKGlzbnVsbCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwllbHNlCisJCVBHX1JF VFVSTl9USU1FQURUKHRpbWUpOworfQorCisvKiB0aW1lc3RhbXB0el90aW1lX29wdF9lcnJv cigpCisgKiBDb252ZXJ0IHRpbWVzdGFtcHR6IHRvIHRpbWUgZGF0YSB0eXBlLgorICovCitU aW1lQURUCit0aW1lc3RhbXB0el90aW1lX29wdF9lcnJvcihUaW1lc3RhbXBUeiB0aW1lc3Rh bXAsIGJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpCiB7Ci0JVGltZXN0YW1wVHogdGltZXN0 YW1wID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgwKTsKIAlUaW1lQURUCQlyZXN1bHQ7CiAJc3Ry dWN0IHBnX3RtIHR0LAogCQkJICAgKnRtID0gJnR0OwpAQCAtMTkzMCwxMiArMTk4MywyMyBA QCB0aW1lc3RhbXB0el90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZnNlY190CQlmc2VjOwog CiAJaWYgKFRJTUVTVEFNUF9OT1RfRklOSVRFKHRpbWVzdGFtcCkpCi0JCVBHX1JFVFVSTl9O VUxMKCk7CisJeworCQkqaXNudWxsID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQogCiAJaWYg KHRpbWVzdGFtcDJ0bSh0aW1lc3RhbXAsICZ0eiwgdG0sICZmc2VjLCBOVUxMLCBOVUxMKSAh PSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSAqaXNudWxsID0gdHJ1 ZTsKKwkJCXJldHVybiAwOworCQl9CisKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygi dGltZXN0YW1wIG91dCBvZiByYW5nZSIpKSk7CisJfQogCiAJLyoKIAkgKiBDb3VsZCBhbHNv IGRvIHRoaXMgd2l0aCB0aW1lID0gKHRpbWVzdGFtcCAvIFVTRUNTX1BFUl9EQVkgKgpAQCAt MTk0Myw4ICsyMDA3LDI1IEBAIHRpbWVzdGFtcHR6X3RpbWUoUEdfRlVOQ1RJT05fQVJHUykK IAkgKi8KIAlyZXN1bHQgPSAoKCgodG0tPnRtX2hvdXIgKiBNSU5TX1BFUl9IT1VSICsgdG0t PnRtX21pbikgKiBTRUNTX1BFUl9NSU5VVEUpICsgdG0tPnRtX3NlYykgKgogCQkJICBVU0VD U19QRVJfU0VDKSArIGZzZWM7CisJKmlzbnVsbCA9IGZhbHNlOwogCi0JUEdfUkVUVVJOX1RJ TUVBRFQocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiB0aW1lc3RhbXB0el90 aW1lKCkKKyAqIENvbnZlcnQgdGltZXN0YW1wdHogdG8gdGltZSBkYXRhIHR5cGUuCisgKi8K K0RhdHVtCit0aW1lc3RhbXB0el90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYm9vbAkJ aXNudWxsOworCVRpbWVBRFQJCXJlc3VsdCA9CisJCXRpbWVzdGFtcHR6X3RpbWVfb3B0X2Vy cm9yKFBHX0dFVEFSR19USU1FU1RBTVAoMCksICZpc251bGwsIE5VTEwpOworCisJaWYgKGlz bnVsbCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwllbHNlCisJCVBHX1JFVFVSTl9USU1FQURU KHJlc3VsdCk7CiB9CiAKIC8qIGRhdGV0aW1lX3RpbWVzdGFtcCgpCkBAIC0yODEyLDEwICsy ODkzLDkgQEAgdGltZV90aW1ldHooUEdfRlVOQ1RJT05fQVJHUykKIC8qIHRpbWVzdGFtcHR6 X3RpbWV0eigpCiAgKiBDb252ZXJ0IHRpbWVzdGFtcCB0byB0aW1ldHogZGF0YSB0eXBlLgog ICovCi1EYXR1bQotdGltZXN0YW1wdHpfdGltZXR6KFBHX0ZVTkNUSU9OX0FSR1MpCitUaW1l VHpBRFQgKgordGltZXN0YW1wdHpfdGltZXR6X29wdF9lcnJvcihUaW1lc3RhbXBUeiB0aW1l c3RhbXAsIGJvb2wgKmVycm9yKQogewotCVRpbWVzdGFtcFR6IHRpbWVzdGFtcCA9IFBHX0dF VEFSR19USU1FU1RBTVAoMCk7CiAJVGltZVR6QURUICAqcmVzdWx0OwogCXN0cnVjdCBwZ190 bSB0dCwKIAkJCSAgICp0bSA9ICZ0dDsKQEAgLTI4MjMsMjAgKzI5MDMsNDIgQEAgdGltZXN0 YW1wdHpfdGltZXR6KFBHX0ZVTkNUSU9OX0FSR1MpCiAJZnNlY190CQlmc2VjOwogCiAJaWYg KFRJTUVTVEFNUF9OT1RfRklOSVRFKHRpbWVzdGFtcCkpCi0JCVBHX1JFVFVSTl9OVUxMKCk7 CisJCXJldHVybiBOVUxMOwogCiAJaWYgKHRpbWVzdGFtcDJ0bSh0aW1lc3RhbXAsICZ0eiwg dG0sICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJ CQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfREFURVRJTUVfVkFMVUVfT1VUX09GX1JBTkdF KSwKIAkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIikpKTsKKwl9CiAKIAly ZXN1bHQgPSAoVGltZVR6QURUICopIHBhbGxvYyhzaXplb2YoVGltZVR6QURUKSk7CiAKIAl0 bTJ0aW1ldHoodG0sIGZzZWMsIHR6LCByZXN1bHQpOwogCi0JUEdfUkVUVVJOX1RJTUVUWkFE VF9QKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogdGltZXN0YW1wdHpfdGlt ZXR6KCkKKyAqIENvbnZlcnQgdGltZXN0YW1wIHRvIHRpbWV0eiBkYXRhIHR5cGUuCisgKi8K K0RhdHVtCit0aW1lc3RhbXB0el90aW1ldHooUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlUaW1l VHpBRFQgICpyZXN1bHQgPQorCQl0aW1lc3RhbXB0el90aW1ldHpfb3B0X2Vycm9yKFBHX0dF VEFSR19USU1FU1RBTVAoMCksIE5VTEwpOworCisJaWYgKHJlc3VsdCkKKwkJUEdfUkVUVVJO X1RJTUVUWkFEVF9QKHJlc3VsdCk7CisJZWxzZQorCQlQR19SRVRVUk5fTlVMTCgpOworfQog CiAvKiBkYXRldGltZXR6X3RpbWVzdGFtcHR6KCkKICAqIENvbnZlcnQgZGF0ZSBhbmQgdGlt ZXR6IHRvIHRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSBkYXRhIHR5cGUuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uYi5jCmluZGV4IGY3MDBjNWI0YzkzLi4xZGE1MTlkYWFlZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25iLmMKQEAgLTQ2LDcgKzQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbmJBZ2dT dGF0ZQogCU9pZAkJCXZhbF9vdXRwdXRfZnVuYzsKIH0gSnNvbmJBZ2dTdGF0ZTsKIAotc3Rh dGljIGlubGluZSBEYXR1bSBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxl biwgYm9vbCB1bmlxdWVfa2V5cyk7CiBzdGF0aWMgc2l6ZV90IGNoZWNrU3RyaW5nTGVuKHNp emVfdCBsZW4pOwogc3RhdGljIHZvaWQganNvbmJfaW5fb2JqZWN0X3N0YXJ0KHZvaWQgKnBz dGF0ZSk7CiBzdGF0aWMgdm9pZCBqc29uYl9pbl9vYmplY3RfZW5kKHZvaWQgKnBzdGF0ZSk7 CkBAIC03Nyw3ICs3Niw3IEBAIGpzb25iX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJY2hh cgkgICAqanNvbiA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwogCi0JcmV0dXJuIGpzb25iX2Zy b21fY3N0cmluZyhqc29uLCBzdHJsZW4oanNvbiksIGZhbHNlKTsKKwlQR19SRVRVUk5fREFU VU0oanNvbmJfZnJvbV9jc3RyaW5nKGpzb24sIHN0cmxlbihqc29uKSwgZmFsc2UsIE5VTEwp KTsKIH0KIAogLyoKQEAgLTEwMSw3ICsxMDAsNyBAQCBqc29uYl9yZWN2KFBHX0ZVTkNUSU9O X0FSR1MpCiAJZWxzZQogCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQganNvbmIgdmVyc2lv biBudW1iZXIgJWQiLCB2ZXJzaW9uKTsKIAotCXJldHVybiBqc29uYl9mcm9tX2NzdHJpbmco c3RyLCBuYnl0ZXMsIGZhbHNlKTsKKwlyZXR1cm4ganNvbmJfZnJvbV9jc3RyaW5nKHN0ciwg bmJ5dGVzLCBmYWxzZSwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xNDcsNyArMTQ2LDcgQEAganNv bmJfZnJvbV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKQogewogCXJldHVybiBq c29uYl9mcm9tX2NzdHJpbmcoVkFSREFUQV9BTlkoanMpLAogCQkJCQkJCSAgVkFSU0laRV9B TllfRVhIRFIoanMpLAotCQkJCQkJCSAgdW5pcXVlX2tleXMpOworCQkJCQkJCSAgdW5pcXVl X2tleXMsIE5VTEwpOwogfQogCiAvKgpAQCAtMjM5LDEyICsyMzgsMTMgQEAganNvbmJfdHlw ZW9mKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKgogICogVXNlcyB0aGUganNvbiBwYXJzZXIgKHdp dGggaG9va3MpIHRvIGNvbnN0cnVjdCBhIGpzb25iLgogICovCi1zdGF0aWMgaW5saW5lIERh dHVtCi1qc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1bmlx dWVfa2V5cykKK0RhdHVtCitqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxl biwgYm9vbCB1bmlxdWVfa2V5cywgYm9vbCAqZXJyb3IpCiB7CiAJSnNvbkxleENvbnRleHQg KmxleDsKIAlKc29uYkluU3RhdGUgc3RhdGU7CiAJSnNvblNlbUFjdGlvbiBzZW07CisJSnNv blBhcnNlRXJyb3JUeXBlIHJlc3VsdDsKIAogCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihz dGF0ZSkpOwogCW1lbXNldCgmc2VtLCAwLCBzaXplb2Yoc2VtKSk7CkBAIC0yNjEsMTAgKzI2 MSwyMCBAQCBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1 bmlxdWVfa2V5cykKIAlzZW0uc2NhbGFyID0ganNvbmJfaW5fc2NhbGFyOwogCXNlbS5vYmpl Y3RfZmllbGRfc3RhcnQgPSBqc29uYl9pbl9vYmplY3RfZmllbGRfc3RhcnQ7CiAKLQlwZ19w YXJzZV9qc29uX29yX2VyZXBvcnQobGV4LCAmc2VtKTsKKwlyZXN1bHQgPSBwZ19wYXJzZV9q c29uKGxleCwgJnNlbSk7CisJaWYgKHJlc3VsdCAhPSBKU09OX1NVQ0NFU1MpCisJeworCQlp ZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAw OworCQl9CisKKwkJanNvbl9lcmVwb3J0X2Vycm9yKHJlc3VsdCwgbGV4KTsKKwl9CiAKIAkv KiBhZnRlciBwYXJzaW5nLCB0aGUgaXRlbSBtZW1iZXIgaGFzIHRoZSBjb21wb3NlZCBqc29u YiBzdHJ1Y3R1cmUgKi8KLQlQR19SRVRVUk5fUE9JTlRFUihKc29uYlZhbHVlVG9Kc29uYihz dGF0ZS5yZXMpKTsKKwlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIo c3RhdGUucmVzKSk7CiB9CiAKIHN0YXRpYyBzaXplX3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9udW1lcmljLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJp Yy5jCmluZGV4IDkyMGE2M2IwMDgxLi45OGIxYTlhYzllZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bnVtZXJpYy5jCkBAIC00MzA4LDE1ICs0MzA4LDIwIEBAIGludDhfbnVtZXJpYyhQR19GVU5D VElPTl9BUkdTKQogfQogCiAKLURhdHVtCi1udW1lcmljX2ludDgoUEdfRlVOQ1RJT05fQVJH UykKK2ludDY0CitudW1lcmljX2ludDhfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBib29sICpl cnJvcikKIHsKLQlOdW1lcmljCQludW0gPSBQR19HRVRBUkdfTlVNRVJJQygwKTsKIAlOdW1l cmljVmFyCXg7CiAJaW50NjQJCXJlc3VsdDsKIAogCWlmIChOVU1FUklDX0lTX1NQRUNJQUwo bnVtKSkKIAl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJl dHVybiAwOworCQl9CisKIAkJaWYgKE5VTUVSSUNfSVNfTkFOKG51bSkpCiAJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CkBAIC00MzMxLDEzICs0MzM2LDI2IEBAIG51bWVyaWNfaW50OChQR19GVU5DVElPTl9BUkdT KQogCWluaXRfdmFyX2Zyb21fbnVtKG51bSwgJngpOwogCiAJaWYgKCFudW1lcmljdmFyX3Rv X2ludDY0KCZ4LCAmcmVzdWx0KSkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9y ID0gdHJ1ZTsKKwkJCXJldHVybiAwOworCQl9CisKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQko ZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkgZXJy bXNnKCJiaWdpbnQgb3V0IG9mIHJhbmdlIikpKTsKKwl9CiAKLQlQR19SRVRVUk5fSU5UNjQo cmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCitEYXR1bQorbnVtZXJpY19pbnQ4KFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0lOVDY0KG51bWVyaWNfaW50OF9vcHRf ZXJyb3IoUEdfR0VUQVJHX05VTUVSSUMoMCksIE5VTEwpKTsKK30KIAogRGF0dW0KIGludDJf bnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQpAQCAtNDM0NywxNyArNDM2NSwyMCBAQCBpbnQy X251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fTlVNRVJJQyhpbnQ2NF90 b19udW1lcmljKHZhbCkpOwogfQogCi0KLURhdHVtCi1udW1lcmljX2ludDIoUEdfRlVOQ1RJ T05fQVJHUykKK2ludDE2CitudW1lcmljX2ludDJfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBi b29sICplcnJvcikKIHsKLQlOdW1lcmljCQludW0gPSBQR19HRVRBUkdfTlVNRVJJQygwKTsK IAlOdW1lcmljVmFyCXg7CiAJaW50NjQJCXZhbDsKLQlpbnQxNgkJcmVzdWx0OwogCiAJaWYg KE5VTUVSSUNfSVNfU1BFQ0lBTChudW0pKQogCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkq ZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlpZiAoTlVNRVJJQ19JU19O QU4obnVtKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKQEAgLTQzNzIsMjEgKzQzOTMsNDAgQEAgbnVtZXJpY19p bnQyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW5pdF92YXJfZnJvbV9udW0obnVtLCAmeCk7CiAK IAlpZiAoIW51bWVyaWN2YXJfdG9faW50NjQoJngsICZ2YWwpKQorCXsKKwkJaWYgKGVycm9y KQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0Zf UkFOR0UpLAogCQkJCSBlcnJtc2coInNtYWxsaW50IG91dCBvZiByYW5nZSIpKSk7CisJfQog CiAJaWYgKHVubGlrZWx5KHZhbCA8IFBHX0lOVDE2X01JTikgfHwgdW5saWtlbHkodmFsID4g UEdfSU5UMTZfTUFYKSkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1 ZTsKKwkJCXJldHVybiAwOworCQl9CisKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkgZXJybXNnKCJz bWFsbGludCBvdXQgb2YgcmFuZ2UiKSkpOworCX0KIAogCS8qIERvd24tY29udmVydCB0byBp bnQyICovCi0JcmVzdWx0ID0gKGludDE2KSB2YWw7Ci0KLQlQR19SRVRVUk5fSU5UMTYocmVz dWx0KTsKKwlyZXR1cm4gKGludDE2KSB2YWw7CiB9CiAKK0RhdHVtCitudW1lcmljX2ludDIo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19SRVRVUk5fSU5UMTYobnVtZXJpY19pbnQyX29w dF9lcnJvcihQR19HRVRBUkdfTlVNRVJJQygwKSwgTlVMTCkpOworfQogCiBEYXR1bQogZmxv YXQ4X251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9udW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0aWxz LmMKaW5kZXggY2MzZjk1ZDM5OTAuLmI4MmIzMGY5MDEzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bnVtdXRpbHMuYwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludmFsaWRfc3ludGF4OgogICogcG9z aXRpdmUgbnVtYmVyLgogICovCiBpbnQ2NAotcGdfc3RydG9pbnQ2NChjb25zdCBjaGFyICpz KQorcGdfc3RydG9pbnQ2NF9vcHRfZXJyb3IoY29uc3QgY2hhciAqcywgYm9vbCAqZXJyb3Ip CiB7CiAJY29uc3QgY2hhciAqcHRyID0gczsKIAlpbnQ2NAkJdG1wID0gMDsKQEAgLTMwNywx MiArMzA3LDI0IEBAIHBnX3N0cnRvaW50NjQoY29uc3QgY2hhciAqcykKIAlyZXR1cm4gdG1w OwogCiBvdXRfb2ZfcmFuZ2U6CisJaWYgKGVycm9yKQorCXsKKwkJKmVycm9yID0gdHJ1ZTsK KwkJcmV0dXJuIDA7CisJfQorCiAJZXJlcG9ydChFUlJPUiwKIAkJCShlcnJjb2RlKEVSUkNP REVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJIGVycm1zZygidmFsdWUgXCIl c1wiIGlzIG91dCBvZiByYW5nZSBmb3IgdHlwZSAlcyIsCiAJCQkJCXMsICJiaWdpbnQiKSkp OwogCiBpbnZhbGlkX3N5bnRheDoKKwlpZiAoZXJyb3IpCisJeworCQkqZXJyb3IgPSB0cnVl OworCQlyZXR1cm4gMDsKKwl9CisKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAogCQkJIGVycm1zZygiaW52YWxp ZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCkBAIC0zMjEsNiArMzMzLDEy IEBAIGludmFsaWRfc3ludGF4OgogCXJldHVybiAwOwkJCQkJLyoga2VlcCBjb21waWxlciBx dWlldCAqLwogfQogCitpbnQ2NAorcGdfc3RydG9pbnQ2NChjb25zdCBjaGFyICpzKQorewor CXJldHVybiBwZ19zdHJ0b2ludDY0X29wdF9lcnJvcihzLCBOVUxMKTsKK30KKwogLyoKICAq IHBnX2l0b2E6IGNvbnZlcnRzIGEgc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHRvIGl0cyBzdHJp bmcgcmVwcmVzZW50YXRpb24KICAqIGFuZCByZXR1cm5zIHN0cmxlbihhKS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC90aW1lc3RhbXAuYwppbmRleCA0OWNkYjI5MGFjMi4uODg5ZDM0NzZlNTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMKQEAgLTU2MTQsOCArNTYxNCw4IEBAIHRp bWVzdGFtcHR6X3RpbWVzdGFtcChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9USU1F U1RBTVAodGltZXN0YW1wdHoydGltZXN0YW1wKHRpbWVzdGFtcCkpOwogfQogCi1zdGF0aWMg VGltZXN0YW1wCi10aW1lc3RhbXB0ejJ0aW1lc3RhbXAoVGltZXN0YW1wVHogdGltZXN0YW1w KQorVGltZXN0YW1wCit0aW1lc3RhbXB0ejJ0aW1lc3RhbXBfb3B0X2Vycm9yKFRpbWVzdGFt cFR6IHRpbWVzdGFtcCwgYm9vbCAqZXJyb3IpCiB7CiAJVGltZXN0YW1wCXJlc3VsdDsKIAlz dHJ1Y3QgcGdfdG0gdHQsCkBAIC01NjI4LDE3ICs1NjI4LDQwIEBAIHRpbWVzdGFtcHR6MnRp bWVzdGFtcChUaW1lc3RhbXBUeiB0aW1lc3RhbXApCiAJZWxzZQogCXsKIAkJaWYgKHRpbWVz dGFtcDJ0bSh0aW1lc3RhbXAsICZ0eiwgdG0sICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQor CQl7CisJCQlpZiAoZXJyb3IpCisJCQl7CisJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQlyZXR1 cm4gMDsKKwkJCX0KKwogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCQkgZXJybXNnKCJ0aW1lc3Rh bXAgb3V0IG9mIHJhbmdlIikpKTsKKwkJfQorCiAJCWlmICh0bTJ0aW1lc3RhbXAodG0sIGZz ZWMsIE5VTEwsICZyZXN1bHQpICE9IDApCisJCXsKKwkJCWlmIChlcnJvcikKKwkJCXsKKwkJ CQkqZXJyb3IgPSB0cnVlOworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5H RSksCiAJCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkpOworCQl9CiAJ fQogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBUaW1lc3RhbXAKK3RpbWVzdGFtcHR6 MnRpbWVzdGFtcChUaW1lc3RhbXBUeiB0aW1lc3RhbXApCit7CisJcmV0dXJuIHRpbWVzdGFt cHR6MnRpbWVzdGFtcF9vcHRfZXJyb3IodGltZXN0YW1wLCBOVUxMKTsKK30KKwogLyogdGlt ZXN0YW1wdHpfem9uZSgpCiAgKiBFdmFsdWF0ZSB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUg dHlwZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS4KICAqIFJldHVybnMgYSB0aW1lc3Rh bXAgd2l0aG91dCB0aW1lIHpvbmUuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBj OGVmOTE3ZmZlMC4uYWRhYmY1N2M5N2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApA QCAtNzYyLDQzICs3NjIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJTdGF0ZQogewog CUpzb25FeHByICAgKmpzZXhwcjsJCQkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8K IAotCXN0cnVjdAotCXsKLQkJRm1nckluZm8JZnVuYzsJCS8qIHR5cGlucHV0IGZ1bmN0aW9u IGZvciBvdXRwdXQgdHlwZSAqLwotCQlPaWQJCQl0eXBpb3BhcmFtOwotCX0JCQlpbnB1dDsJ CQkvKiBJL08gaW5mbyBmb3Igb3V0cHV0IHR5cGUgKi8KLQogCU51bGxhYmxlRGF0dW0KLQkJ CSAgICpmb3JtYXR0ZWRfZXhwciwgLyogZm9ybWF0dGVkIGNvbnRleHQgaXRlbSB2YWx1ZSAq LwotCQkJICAgKnJlc19leHByLAkJLyogcmVzdWx0IGl0ZW0gKi8KLQkJCSAgICpjb2VyY2lv bl9leHByLAkvKiBpbnB1dCBmb3IgSlNPTiBpdGVtIGNvZXJjaW9uICovCi0JCQkgICAqcGF0 aHNwZWM7CQkvKiBwYXRoIHNwZWNpZmljYXRpb24gdmFsdWUgKi8KKwkJCQlmb3JtYXR0ZWRf ZXhwciwJLyogZm9ybWF0dGVkIGNvbnRleHQgaXRlbSB2YWx1ZSAqLworCQkJCWNvZXJjaW9u X2V4cHIsCS8qIGlucHV0IGZvciBKU09OIGl0ZW0gY29lcmNpb24gKi8KKwkJCQlwYXRoc3Bl YzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiB2YWx1ZSAqLwogCi0JRXhwclN0YXRlICAqcmVz dWx0X2V4cHI7CS8qIGNvZXJjZWQgdG8gb3V0cHV0IHR5cGUgKi8KIAlFeHByU3RhdGUgICpk ZWZhdWx0X29uX2VtcHR5OwkvKiBPTiBFTVBUWSBERUZBVUxUIGV4cHJlc3Npb24gKi8KIAlF eHByU3RhdGUgICpkZWZhdWx0X29uX2Vycm9yOwkvKiBPTiBFUlJPUiBERUZBVUxUIGV4cHJl c3Npb24gKi8KIAlMaXN0CSAgICphcmdzOwkJCS8qIHBhc3NpbmcgYXJndW1lbnRzICovCi0K LQl2b2lkCSAgICpjYWNoZTsJCQkvKiBjYWNoZSBmb3IganNvbl9wb3B1bGF0ZV90eXBlKCkg Ki8KLQotCXN0cnVjdCBKc29uQ29lcmNpb25zU3RhdGUKLQl7Ci0JCXN0cnVjdCBKc29uQ29l cmNpb25TdGF0ZQotCQl7Ci0JCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uOyAvKiBjb2VyY2lv biBleHByZXNzaW9uICovCi0JCQlFeHByU3RhdGUgICplc3RhdGU7IC8qIGNvZXJjaW9uIGV4 cHJlc3Npb24gc3RhdGUgKi8KLQkJfQkJCW51bGwsCi0JCQkJCXN0cmluZywKLQkJbnVtZXJp YyAgICAsCi0JCQkJCWJvb2xlYW4sCi0JCQkJCWRhdGUsCi0JCQkJCXRpbWUsCi0JCQkJCXRp bWV0eiwKLQkJCQkJdGltZXN0YW1wLAotCQkJCQl0aW1lc3RhbXB0eiwKLQkJCQkJY29tcG9z aXRlOwotCX0JCQljb2VyY2lvbnM7CQkvKiBzdGF0ZXMgZm9yIGNvZXJjaW9uIGZyb20gU1FM L0pTT04gaXRlbQotCQkJCQkJCQkgKiB0eXBlcyBkaXJlY3RseSB0byB0aGUgb3V0cHV0IHR5 cGUgKi8KIH0gSnNvbkV4cHJTdGF0ZTsKIAogLyogZnVuY3Rpb25zIGluIGV4ZWNFeHByLmMg Ki8KQEAgLTg2MCwxOCArODMxLDggQEAgZXh0ZXJuIHZvaWQgRXhlY0V2YWxTeXNWYXIoRXhw clN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCSAgIEV4cHJDb250ZXh0 ICplY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIHZvaWQgRXhlY0V2 YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwK IAkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCk7Ci1leHRlcm4gdm9pZCBFeGVjRXZh bEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKLQkJCQkJCSBFeHBy Q29udGV4dCAqZWNvbnRleHQpOwotZXh0ZXJuIERhdHVtIEV4ZWNQcmVwYXJlSnNvbkl0ZW1D b2VyY2lvbihzdHJ1Y3QgSnNvbmJWYWx1ZSAqaXRlbSwKLQkJCQkJCQkJCQkgSnNvblJldHVy bmluZyAqcmV0dXJuaW5nLAotCQkJCQkJCQkJCSBzdHJ1Y3QgSnNvbkNvZXJjaW9uc1N0YXRl ICpjb2VyY2lvbnMsCi0JCQkJCQkJCQkJIHN0cnVjdCBKc29uQ29lcmNpb25TdGF0ZSAqKnBq Y3N0YXRlKTsKLWV4dGVybiBib29sIEV4ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24o SnNvbkV4cHIgKmpzZXhwciwKLQkJCQkJCQkJCQkJc3RydWN0IEpzb25Db2VyY2lvbnNTdGF0 ZSAqKTsKLWV4dGVybiBEYXR1bSBFeGVjRXZhbEV4cHJQYXNzaW5nQ2FzZVZhbHVlKEV4cHJT dGF0ZSAqZXN0YXRlLAotCQkJCQkJCQkJCSAgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29s ICppc251bGwsCi0JCQkJCQkJCQkJICBEYXR1bSBjYXNldmFsX2RhdHVtLAotCQkJCQkJCQkJ CSAgYm9vbCBjYXNldmFsX2lzbnVsbCk7CitleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25FeHBy KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkJIEV4cHJDb250 ZXh0ICplY29udGV4dCk7CiAKIGV4dGVybiB2b2lkIEV4ZWNBZ2dJbml0R3JvdXAoQWdnU3Rh dGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLCBBZ2dTdGF0ZVBlckdy b3VwIHBlcmdyb3VwLAogCQkJCQkJCSBFeHByQ29udGV4dCAqYWdnY29udGV4dCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDNhYTk2YmI2ODU1Li4xNGZiYjMyY2U5YyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE1NTEsMzkgKzE1NTEsNiBAQCB0eXBlZGVmIHN0cnVj dCBKc29uQmVoYXZpb3IKIAlOb2RlCSAgICpkZWZhdWx0X2V4cHI7CS8qIGRlZmF1bHQgZXhw cmVzc2lvbiwgaWYgYW55ICovCiB9IEpzb25CZWhhdmlvcjsKIAotLyoKLSAqIEpzb25Db2Vy Y2lvbiAtCi0gKgkJY29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtIHR5cGVzIHRvIFNRTCB0 eXBlcwotICovCi10eXBlZGVmIHN0cnVjdCBKc29uQ29lcmNpb24KLXsKLQlOb2RlVGFnCQl0 eXBlOwotCU5vZGUJICAgKmV4cHI7CQkJLyogcmVzdWx0aW5nIGV4cHJlc3Npb24gY29lcmNl ZCB0byB0YXJnZXQgdHlwZSAqLwotCWJvb2wJCXZpYV9wb3B1bGF0ZTsJLyogY29lcmNlIHJl c3VsdCB1c2luZyBqc29uX3BvcHVsYXRlX3R5cGUoKT8gKi8KLQlib29sCQl2aWFfaW87CQkJ LyogY29lcmNlIHJlc3VsdCB1c2luZyB0eXBlIGlucHV0IGZ1bmN0aW9uPyAqLwotCU9pZAkJ CWNvbGxhdGlvbjsJCS8qIGNvbGxhdGlvbiBmb3IgY29lcmNpb24gdmlhIEkvTyBvciBwb3B1 bGF0ZSAqLwotfSBKc29uQ29lcmNpb247Ci0KLS8qCi0gKiBKc29uSXRlbUNvZXJjaW9ucyAt Ci0gKgkJZXhwcmVzc2lvbnMgZm9yIGNvZXJjaW9uIGZyb20gU1FML0pTT04gaXRlbSB0eXBl cyBkaXJlY3RseSB0byB0aGUKLSAqCQlvdXRwdXQgU1FMIHR5cGUKLSAqLwotdHlwZWRlZiBz dHJ1Y3QgSnNvbkl0ZW1Db2VyY2lvbnMKLXsKLQlOb2RlVGFnCQl0eXBlOwotCUpzb25Db2Vy Y2lvbiAqbnVsbDsKLQlKc29uQ29lcmNpb24gKnN0cmluZzsKLQlKc29uQ29lcmNpb24gKm51 bWVyaWM7Ci0JSnNvbkNvZXJjaW9uICpib29sZWFuOwotCUpzb25Db2VyY2lvbiAqZGF0ZTsK LQlKc29uQ29lcmNpb24gKnRpbWU7Ci0JSnNvbkNvZXJjaW9uICp0aW1ldHo7Ci0JSnNvbkNv ZXJjaW9uICp0aW1lc3RhbXA7Ci0JSnNvbkNvZXJjaW9uICp0aW1lc3RhbXB0ejsKLQlKc29u Q29lcmNpb24gKmNvbXBvc2l0ZTsJLyogYXJyYXlzIGFuZCBvYmplY3RzICovCi19IEpzb25J dGVtQ29lcmNpb25zOwotCiAvKgogICogSnNvbkV4cHIgLQogICoJCXRyYW5zZm9ybWVkIHJl cHJlc2VudGF0aW9uIG9mIEpTT05fVkFMVUUoKSwgSlNPTl9RVUVSWSgpLCBKU09OX0VYSVNU UygpCkBAIC0xNTkzLDcgKzE1NjAsNiBAQCB0eXBlZGVmIHN0cnVjdCBKc29uRXhwcgogCUV4 cHIJCXhwcjsKIAlKc29uRXhwck9wCW9wOwkJCQkvKiBqc29uIGZ1bmN0aW9uIElEICovCiAJ Tm9kZQkgICAqZm9ybWF0dGVkX2V4cHI7IC8qIGZvcm1hdHRlZCBjb250ZXh0IGl0ZW0gZXhw cmVzc2lvbiAqLwotCUpzb25Db2VyY2lvbiAqcmVzdWx0X2NvZXJjaW9uOwkvKiByZXN1bHRp bmcgY29lcmNpb24gdG8gUkVUVVJOSU5HIHR5cGUgKi8KIAlKc29uRm9ybWF0ICpmb3JtYXQ7 CQkJLyogY29udGV4dCBpdGVtIGZvcm1hdCAoSlNPTi9KU09OQikgKi8KIAlOb2RlCSAgICpw YXRoX3NwZWM7CQkvKiBKU09OIHBhdGggc3BlY2lmaWNhdGlvbiBleHByZXNzaW9uICovCiAJ TGlzdAkgICAqcGFzc2luZ19uYW1lczsJLyogUEFTU0lORyBhcmd1bWVudCBuYW1lcyAqLwpA QCAtMTYwMSw4ICsxNTY3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHIKIAlKc29uUmV0 dXJuaW5nICpyZXR1cm5pbmc7CS8qIFJFVFVSTklORyBjbGF1c2UgdHlwZS9mb3JtYXQgaW5m byAqLwogCUpzb25CZWhhdmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAq LwogCUpzb25CZWhhdmlvciAqb25fZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLwot CUpzb25JdGVtQ29lcmNpb25zICpjb2VyY2lvbnM7CS8qIGNvZXJjaW9ucyBmb3IgSlNPTl9W QUxVRSAqLwogCUpzb25XcmFwcGVyIHdyYXBwZXI7CQkvKiBXUkFQUEVSIGZvciBKU09OX1FV RVJZICovCisJT2lkCQkJY29sbGF0aW9uOwkJLyogT0lEIG9mIGNvbGxhdGlvbiwgb3IgSW52 YWxpZE9pZCBpZiBub25lICovCiAJYm9vbAkJb21pdF9xdW90ZXM7CS8qIEtFRVAvT01JVCBR VU9URVMgZm9yIEpTT05fUVVFUlkgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxv Y2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IEpzb25FeHByOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0 aW5zLmgKaW5kZXggMjIxYzNlNmMzZGUuLjVlMWFhMzdjMWY1IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0 aW5zLmgKQEAgLTI0LDYgKzI0LDcgQEAKIC8qIGJvb2wuYyAqLwogZXh0ZXJuIGJvb2wgcGFy c2VfYm9vbChjb25zdCBjaGFyICp2YWx1ZSwgYm9vbCAqcmVzdWx0KTsKIGV4dGVybiBib29s IHBhcnNlX2Jvb2xfd2l0aF9sZW4oY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4sIGJv b2wgKnJlc3VsdCk7CitleHRlcm4gYm9vbCBib29saW5fb3B0X2Vycm9yKGNvbnN0IGNoYXIg KnZhbHVlLCBzaXplX3QJbGVuLCBib29sICplcnJvcik7CiAKIC8qIGRvbWFpbnMuYyAqLwog ZXh0ZXJuIHZvaWQgZG9tYWluX2NoZWNrKERhdHVtIHZhbHVlLCBib29sIGlzbnVsbCwgT2lk IGRvbWFpblR5cGUsCkBAIC00Niw2ICs0Nyw3IEBAIGV4dGVybiBpbnQJbmFtZXN0cmNtcChO YW1lIG5hbWUsIGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gaW50MTYgcGdfc3RydG9pbnQx Nihjb25zdCBjaGFyICpzKTsKIGV4dGVybiBpbnQzMiBwZ19zdHJ0b2ludDMyKGNvbnN0IGNo YXIgKnMpOwogZXh0ZXJuIGludDY0IHBnX3N0cnRvaW50NjQoY29uc3QgY2hhciAqcyk7Citl eHRlcm4gaW50NjQgcGdfc3RydG9pbnQ2NF9vcHRfZXJyb3IoY29uc3QgY2hhciAqcywgYm9v bCAqZXJyb3IpOwogZXh0ZXJuIGludAlwZ19pdG9hKGludDE2IGksIGNoYXIgKmEpOwogZXh0 ZXJuIGludAlwZ191bHRvYV9uKHVpbnQzMiBsLCBjaGFyICphKTsKIGV4dGVybiBpbnQJcGdf dWxsdG9hX24odWludDY0IGwsIGNoYXIgKmEpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvZGF0ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5oCmluZGV4IDkxYWUyNDI1 NGRmLi45MDU5ZjJiNWNlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2RhdGUuaApAQCAtODcsNCArODcsMTQgQEAgZXh0 ZXJuIGJvb2wgdGltZV9vdmVyZmxvd3MoaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsIGZz ZWNfdCBmc2VjKTsKIGV4dGVybiBib29sIGZsb2F0X3RpbWVfb3ZlcmZsb3dzKGludCBob3Vy LCBpbnQgbWluLCBkb3VibGUgc2VjKTsKIGV4dGVybiB2b2lkIEFkanVzdFRpbWVGb3JUeXBt b2QoVGltZUFEVCAqdGltZSwgaW50MzIgdHlwbW9kKTsKIAorZXh0ZXJuIERhdGVBRFQgdGlt ZXN0YW1wX2RhdGVfb3B0X2Vycm9yKFRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgKmVycm9y KTsKK2V4dGVybiBUaW1lQURUIHRpbWVzdGFtcF90aW1lX29wdF9lcnJvcihUaW1lc3RhbXAg dGltZXN0YW1wLAorCQkJCQkJCQkJCWJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpOworCitl eHRlcm4gRGF0ZUFEVCB0aW1lc3RhbXB0el9kYXRlX29wdF9lcnJvcihUaW1lc3RhbXAgdGlt ZXN0YW1wLCBib29sICplcnJvcik7CitleHRlcm4gVGltZUFEVCB0aW1lc3RhbXB0el90aW1l X29wdF9lcnJvcihUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJICBib29sICpp c251bGwsIGJvb2wgKmVycm9yKTsKK2V4dGVybiBUaW1lVHpBRFQgKnRpbWVzdGFtcHR6X3Rp bWV0el9vcHRfZXJyb3IoVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJCQkJCQkgICBi b29sICplcnJvcik7CisKICNlbmRpZgkJCQkJCQkvKiBEQVRFX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5o CmluZGV4IGJhZTQ2NmI1MjM0Li5kNTU3NGZhYTc5ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvanNvbmIuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCkBAIC00 MjAsNiArNDIwLDggQEAgZXh0ZXJuIHZvaWQgSnNvbmJIYXNoU2NhbGFyVmFsdWVFeHRlbmRl ZChjb25zdCBKc29uYlZhbHVlICpzY2FsYXJWYWwsCiAKIC8qIGpzb25iLmMgc3VwcG9ydCBm dW5jdGlvbnMgKi8KIGV4dGVybiBEYXR1bSBqc29uYl9mcm9tX3RleHQodGV4dCAqanMsIGJv b2wgdW5pcXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpzb25iX2Zyb21fY3N0cmluZyhjaGFy ICpqc29uLCBpbnQgbGVuLCBib29sIHVuaXF1ZV9rZXlzLAorCQkJCQkJCQlib29sICplcnJv cik7CiBleHRlcm4gY2hhciAqSnNvbmJUb0NTdHJpbmcoU3RyaW5nSW5mbyBvdXQsIEpzb25i Q29udGFpbmVyICppbiwKIAkJCQkJCQlpbnQgZXN0aW1hdGVkX2xlbik7CiBleHRlcm4gY2hh ciAqSnNvbmJUb0NTdHJpbmdJbmRlbnQoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29udGFpbmVy ICppbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL251bWVyaWMuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL251bWVyaWMuaAppbmRleCAzY2FhNzRkZmU3YS4uZWRlNjhhYjgxYjgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL251bWVyaWMuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9udW1lcmljLmgKQEAgLTg1LDYgKzg1LDggQEAgZXh0ZXJuIE51bWVyaWMg bnVtZXJpY19kaXZfb3B0X2Vycm9yKE51bWVyaWMgbnVtMSwgTnVtZXJpYyBudW0yLAogCQkJ CQkJCQkJIGJvb2wgKmhhdmVfZXJyb3IpOwogZXh0ZXJuIE51bWVyaWMgbnVtZXJpY19tb2Rf b3B0X2Vycm9yKE51bWVyaWMgbnVtMSwgTnVtZXJpYyBudW0yLAogCQkJCQkJCQkJIGJvb2wg KmhhdmVfZXJyb3IpOwotZXh0ZXJuIGludDMyIG51bWVyaWNfaW50NF9vcHRfZXJyb3IoTnVt ZXJpYyBudW0sIGJvb2wgKmVycm9yKTsKK2V4dGVybiBpbnQxNiBudW1lcmljX2ludDJfb3B0 X2Vycm9yKE51bWVyaWMgbnVtLCBib29sICpoYXZlX2Vycm9yKTsKK2V4dGVybiBpbnQzMiBu dW1lcmljX2ludDRfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBib29sICpoYXZlX2Vycm9yKTsK K2V4dGVybiBpbnQ2NCBudW1lcmljX2ludDhfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBib29s ICpoYXZlX2Vycm9yKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9QR19OVU1FUklDX0hfICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL3RpbWVzdGFtcC5oCmluZGV4IGVkZjNhOTczMTg2Li5mOTM4MmQ3MTkzZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdGltZXN0YW1wLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvdGltZXN0YW1wLmgKQEAgLTEwMiw2ICsxMDIsOCBAQCBleHRlcm4gaW50CXRp bWVzdGFtcF9jbXBfaW50ZXJuYWwoVGltZXN0YW1wIGR0MSwgVGltZXN0YW1wIGR0Mik7CiAK IGV4dGVybiBUaW1lc3RhbXBUeiB0aW1lc3RhbXAydGltZXN0YW1wdHpfb3B0X292ZXJmbG93 KFRpbWVzdGFtcCB0aW1lc3RhbXAsCiAJCQkJCQkJCQkJCQkJICBpbnQgKm92ZXJmbG93KTsK K2V4dGVybiBUaW1lc3RhbXAgdGltZXN0YW1wdHoydGltZXN0YW1wX29wdF9lcnJvcihUaW1l c3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkgYm9vbCAqZXJyb3IpOwogZXh0ZXJu IGludDMyIHRpbWVzdGFtcF9jbXBfdGltZXN0YW1wdHpfaW50ZXJuYWwoVGltZXN0YW1wIHRp bWVzdGFtcFZhbCwKIAkJCQkJCQkJCQkJCVRpbWVzdGFtcFR6IGR0Mik7CiAKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0CmluZGV4IGVmNDk2MTEw YWYzLi4wZDA3MDVlNmE4ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iX3NxbGpzb24ub3V0CkBAIC0xODQsMTEgKzE4NCwxMSBAQCBTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJzEnLCAnc3RyaWN0ICRbMV0nIFJFVFVSTklORyB0ZXh0IEZBTFNFIE9OIEVS Uk9SKTsKICgxIHJvdykKIAogU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0n IFJFVFVSTklORyBqc29uYik7Ci1FUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0 byBqc29uYgorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBqc29uYiBpcyBub3Qgc3VwcG9ydGVk IGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyRbMF0nIFJFVFVSTklORyBqc29uYik7CiAgICAgICAgICAgICAgICBeCiBTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5HIGZsb2F0NCk7Ci1FUlJP UjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitFUlJPUjogIHJldHVybmlu ZyB0eXBlIHJlYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6 IFNFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgZmxvYXQ0 KTsKICAgICAgICAgICAgICAgIF4KIC0tIEpTT05fVkFMVUUKQEAgLTI0Miw3ICsyNDIsOSBA QCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyB0ZXh0KTsK IAogLyoganNvbmIgYnl0ZWEgPz8/ICovCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIz JywgJyQnIFJFVFVSTklORyBieXRlYSBFUlJPUiBPTiBFUlJPUik7Ci1FUlJPUjogIFNRTC9K U09OIGl0ZW0gY2Fubm90IGJlIGNhc3QgdG8gdGFyZ2V0IHR5cGUKK0VSUk9SOiAgcmV0dXJu aW5nIHR5cGUgYnl0ZWEgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUg MjogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgYnl0ZWEg RVJST1IgT04gLi4uCisgICAgICAgICAgICAgICBeCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMS4yMycsICckJyk7CiAganNvbl92YWx1ZSAKIC0tLS0tLS0tLS0tLQpAQCAtMzQ5LDE0 ICszNTEsMjEzIEBAIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMjAxNy0wMi0yMCInLCAn JCcgUkVUVVJOSU5HIGRhdGUpICsgOTsKICAwMy0wMS0yMDE3CiAoMSByb3cpCiAKLS0tIFRl c3QgTlVMTCBjaGVja3MgZXhlY3V0aW9uIGluIGRvbWFpbiB0eXBlcworLS0gVGVzdCBmb3Ig ZG9tYWluIHR5cGVzCiBDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2ludF9ub3RfbnVsbCBBUyBp bnQgTk9UIE5VTEw7CitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2pzb25fbm90X251bGwgQVMg anNvbiBOT1QgTlVMTCBDSEVDSyAoVkFMVUU6OnRleHQgPD4gJzAnKTsKK0NSRUFURSBET01B SU4gc3FsanNvbmJfanNvbmJfbm90X251bGwgQVMganNvbmIgTk9UIE5VTEwgQ0hFQ0sgKFZB TFVFIDw+ICcwJyk7CistLSBUZXN0IGNhc3RpbmcgdG8ganNvbltiXSBkb21haW5zIChpdGVt cyBjYXN0ZWQgYXMgaXMsIHN0cmluZ3MgYXJlIG5vdCB1bnF1b3RlZCkKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251 bGwpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlz IG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbi4uLgorICAg ICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxIicsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworRVJST1I6ICByZXR1cm5pbmcgdHlw ZSBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFM VUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEiJywgJyQnIFJFVFVS TklORyBzcWxqc29uYl9qc29uYl8uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxs KTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBpcyBu b3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3QuLi4KKyAgICAg ICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQnIFJFVFVSTklO RyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNx bGpzb25iX2pzb25iX25vdF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgp CitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9qc29uYl9uby4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwp OworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlzIG5v dCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uXy4uLgorICAgICAg ICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUg c3FsanNvbmJfanNvbmJfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVF KCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX2pzb25iLi4uCisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVs bCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwgaXMg bm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fLi4uCisgICAg ICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworRVJST1I6ICByZXR1cm5pbmcgdHlw ZSBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFM VUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmIuLi4KKyAgICAgICAgICAgICAgIF4KKy0tIFRlc3QgTlVM TCBjaGVja3MgZXhlY3V0aW9uIGluIGRvbWFpbiB0eXBlcwogU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKLUVS Uk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxs IHZhbHVlcworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwg aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vLi4uCisg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJF VFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZKTsKK0VS Uk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfaW50X25vdF9udWxsIGlzIG5vdCBzdXBw b3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9uby4uLgorICAgICAgICAgICAg ICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3Fs anNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSk7CitFUlJPUjogIHJl dHVybmluZyB0eXBlIHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGlu IEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm8uLi4KKyAgICAgICAgICAgICAgIF4KK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBERUZBVUxUIDIgT04gRVJST1IpOworRVJST1I6ICByZXR1cm5pbmcgdHlw ZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVF KCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vLi4uCisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwg REVGQVVMVCBOVUxMIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUik7CitFUlJPUjogIHJl dHVybmluZyB0eXBlIHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGlu IEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm8uLi4KKyAgICAgICAgICAgICAgIF4KIFNF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1cm5p bmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09O X1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBS RVRVUk5JTkcgc3FsanNvbmJfaW50X25vLi4uCisgICAgICAgICAgICAgICBeCiBTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90 X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25i X2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1 cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBK U09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5h JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vLi4uCisgICAgICAgICAgICAgICBeCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29u X25vdF9udWxsKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbl9ub3Rf bnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX24u Li4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04gRU1Q VFkpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlz IG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbi4uLgorICAg ICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkpOwor RVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlzIG5vdCBz dXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbi4uLgorICAgICAgICAg ICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcg c3FsanNvbmJfanNvbl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFUlJPUik7CitFUlJPUjog IHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwgaXMgbm90IHN1cHBvcnRl ZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEn LCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9uLi4uCisgICAgICAgICAgICAgICBe CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29u Yl9qc29uX25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBERUZBVUxUICcyJyBPTiBF UlJPUik7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwg aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9uLi4uCisg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJF VFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJST1I6 ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlzIG5vdCBzdXBwb3J0 ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbi4uLgorICAgICAgICAgICAgICAg XgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNv bmJfanNvbl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRVJST1IpOworRVJST1I6ICByZXR1 cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4g SlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbi4uLgorICAgICAgICAgICAgICAgXgorU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNv bmJfbm90X251bGwpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29u Yl8uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywg JyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9O IEVNUFRZKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251 bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfLi4u CisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEn IFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1Q VFkpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBp cyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl8uLi4KKyAg ICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVU VVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsK K0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwgaXMgbm90 IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfLi4uCisgICAgICAg ICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklO RyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgREVGQVVM VCAnMicgT04gRVJST1IpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29u Yl9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9q c29uYl8uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIE5VTEwgT04gRVJS T1IpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBp cyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl8uLi4KKyAg ICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVU VVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7 CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25iX25vdF9udWxsIGlzIG5v dCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iXy4uLgorICAgICAg ICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNx bGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQor TElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcg c3FsanNvbmJfaW50X24uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVG QVVMVCAyIE9OIEVNUFRZKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfaW50 X25vdF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9p bnRfbi4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04g RVJST1IpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwg aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9uLi4uCisg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBS RVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJST1I6 ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRl ZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9uLi4uCisgICAgICAgICAgICAgICBe CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNv bmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CitFUlJPUjogIHJldHVy bmluZyB0eXBlIHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpT T05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X24uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29u X25vdF9udWxsKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbl9ub3Rf bnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl8u Li4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVN UFRZKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBp cyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl8uLi4KKyAg ICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsK K0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBpcyBub3Qg c3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl8uLi4KKyAgICAgICAg ICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklO RyBzcWxqc29uYl9qc29uX25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJST1I6ICByZXR1 cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uX25vdF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4g SlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uXy4uLgorICAgICAgICAgICAgICAgXgorU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pz b25fbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgcmV0dXJuaW5n IHR5cGUgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05f VkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBS RVRVUk5JTkcgc3FsanNvbmJfanNvbl8uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25iX25vdF9u dWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYi4u LgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAn JCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVN UFRZKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwg aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iLi4uCisg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBS RVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVGQVVMVCAnMicgT04gRVJST1Ip OworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBpcyBu b3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmIuLi4KKyAgICAg ICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVS TklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAg cmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwgaXMgbm90IHN1cHBvcnRl ZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iLi4uCisgICAgICAgICAgICAgICBe CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNv bmJfanNvbmJfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgcmV0 dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBp biBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iLi4uCisgICAgICAgICAgICAgICBeCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNv bl9ub3RfbnVsbCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90 X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90 Li4uCisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICck JyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwgaXMgbm90IHN1 cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90Li4uCisgICAgICAgICAg ICAgICBeCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3Fs anNvbmJfanNvbl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFUlJPUik7CitFUlJPUjogIHJl dHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBp biBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzAnLCAn JCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90Li4uCisgICAgICAgICAgICAgICBeCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNv bmJfbm90X251bGwpOworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJf bm8uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcwJywg JyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7 CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25iX25vdF9udWxsIGlzIG5v dCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9uby4uLgorICAgICAg ICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzAnLCAnJCcgUkVUVVJOSU5H IHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKK0VSUk9S OiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwgaXMgbm90IHN1cHBv cnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vLi4uCisgICAgICAgICAgICAg ICBeCistLSBUZXN0IHJldHVybmluZyBvZiBub24tc2NhbGFyIGl0ZW1zCiBTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnW10nLCAnJCcpOwogIGpzb25fdmFsdWUgCiAtLS0tLS0tLS0tLS0K QEAgLTQ3OCwxMSArNjc5LDkgQEAgU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAn JGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhKTsKICgxIHJvdykKIAogU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiAp JyBBUyBhIFJFVFVSTklORyBwb2ludCk7Ci0ganNvbl92YWx1ZSAKLS0tLS0tLS0tLS0tLQot ICgxLDIpCi0oMSByb3cpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgcG9pbnQgaXMgbm90 IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApLi4uCisgICAgICAg ICAgICAgICBeCiAtLSBUZXN0IHRpbWVzdGFtcHR6IHBhc3NpbmcgYW5kIG91dHB1dAogU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6 ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOwogICAgICAgICAgIGpzb25fdmFs dWUgICAgICAgICAgCkBAIC04NTIsNDkgKzEwNTEsMzUgQEAgRlJPTQogQ1JFQVRFIFRZUEUg c3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBqc29uYiwganNh IGpzb25bXSk7CiBDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChyZWNhIHNxbGpzb25i X3JlY1tdKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9v IiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIi LCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsK LSAgICAgICAgICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICgxLGFhYSwiWzEsICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwge31dfSIs KQotKDEgcm93KQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX3JlYyBpcyBu b3Qgc3VwcG9ydGVkIGluIEpTT05fUVVFUlkoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICIuLi4KKyAgICAg ICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7 ImpzYSI6ICBbeyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7fX0sIDEy M119JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOwotICAgICAgICAgdW5u ZXN0ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB7ImEiOiAxLCAiYiI6 IFsiZm9vIl19Ci0geyJhIjogMiwgImMiOiB7fX0KLSAxMjMKLSgzIHJvd3MpCi0KK0VSUk9S OiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfcmVjIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNP Tl9RVUVSWSgpCitMSU5FIDE6IFNFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpz b25iICd7ImpzYSI6ICBbeyJhIjogMSwgIi4uLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgogU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3sicmVj YSI6IFt7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjogW3t9LCB0 cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjYSkpLnJlY2EpOwotIGEgfCAg ICAgIHQgICAgICB8IGpzIHwgICAgIGpiICAgICB8IGpzYSAKLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tCi0gMSB8IFsiZm9vIiwgW11dIHwgICAgfCAgICAg ICAgICAgIHwgCi0gMiB8ICAgICAgICAgICAgIHwgICAgfCBbe30sIHRydWVdIHwgCi0oMiBy b3dzKQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX3JlY2EgaXMgbm90IHN1 cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUICogRlJPTSB1bm5lc3Qo KEpTT05fUVVFUlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAiLi4uCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiAtLSBFeHRlbnNpb246IGFycmF5IHR5cGVzIHJldHVy bmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiMyJdJywgJyRbKl0n IFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOwotICBqc29uX3F1ZXJ5ICAKLS0tLS0t LS0tLS0tLS0tCi0gezEsMixOVUxMLDN9Ci0oMSByb3cpCi0KK0VSUk9SOiAgcmV0dXJuaW5n IHR5cGUgaW50ZWdlcltdIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9RVUVSWSgpCitMSU5F IDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICckWypdJyBS RVRVUk5JTkcgaS4uLgorICAgICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSB1bm5lc3Qo SlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAy LCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlY1tdKSk7 Ci0gYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwganNhIAotLS0tKy0tLS0t LS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KLSAxIHwgWyJmb28iLCBbXV0gfCAg ICB8ICAgICAgICAgICAgfCAKLSAyIHwgICAgICAgICAgICAgfCAgICB8IFt7fSwgdHJ1ZV0g fCAKLSgyIHJvd3MpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfcmVjW10g aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUICogRlJP TSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28iLi4uCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tIEV4dGVuc2lvbjogZG9tYWluIHR5 cGVzIHJldHVybmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7Ci0ganNvbl9xdWVyeSAKLS0t LS0tLS0tLS0tLQotICAgICAgICAgIDEKLSgxIHJvdykKLQorRVJST1I6ICByZXR1cm5pbmcg dHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FV RVJZKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iLi4uCisgICAgICAgICAgICAgICBeCiBTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50 X25vdF9udWxsKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2Vz IG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29u Yl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUg MTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5H IHNxbGpzb25iLi4uCisgICAgICAgICAgICAgICBeCiAtLSBUZXN0IHRpbWVzdGFtcHR6IHBh c3NpbmcgYW5kIG91dHB1dAogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMp OwogICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAKQEAgLTEwNDgsNyArMTIzMyw2IEBA IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMTIzJywgJyQnCiAoMSByb3cpCiAK IC0tIEpTT05fVEFCTEU6IGJhc2ljIGZ1bmN0aW9uYWxpdHkKLUNSRUFURSBET01BSU4ganNv bmJfdGVzdF9kb21haW4gQVMgdGV4dCBDSEVDSyAodmFsdWUgPD4gJ2ZvbycpOwogU0VMRUNU ICoKIEZST00KIAkoVkFMVUVTCkBAIC0xMDY5LDcgKzEyNTMsNiBAQCBGUk9NCiAJCQkiY2hh cig0KSIgY2hhcig0KSBQQVRIICckJywKIAkJCSJib29sIiBib29sIFBBVEggJyQnLAogCQkJ Im51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCi0JCQkiZG9tYWluIiBqc29uYl90ZXN0X2Rv bWFpbiBQQVRIICckJywKIAkJCWpzIGpzb24gUEFUSCAnJCcsCiAJCQlqYiBqc29uYiBQQVRI ICckJywKIAkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRIICckJywKQEAgLTEwODUs MTAgKzEyNjgsNyBAQCBGUk9NCiAJCQlleGlzdHM0IHRleHQgRVhJU1RTIFBBVEggJ3N0cmlj dCAkLmFhYScgRkFMU0UgT04gRVJST1IsCiAJCQlqczIganNvbiBQQVRIICckJywKIAkJCWpz YjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKLQkJCWpzYjJxIGpzb25iIFBBVEgg JyQnIE9NSVQgUVVPVEVTLAotCQkJaWEgaW50W10gUEFUSCAnJCcsCi0JCQl0YSB0ZXh0W10g UEFUSCAnJCcsCi0JCQlqYmEganNvbmJbXSBQQVRIICckJworCQkJanNiMnEganNvbmIgUEFU SCAnJCcgT01JVCBRVU9URVMKIAkJKQogCSkganQKIAlPTiB0cnVlOwpAQCAtMTEyMyw3ICsx MzAzLDYgQEAgU0VMRUNUICogRlJPTQogCQkJImNoYXIoNCkiIGNoYXIoNCkgUEFUSCAnJCcs CiAJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKIAkJCSJudW1lcmljIiBudW1lcmljIFBBVEgg JyQnLAotCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCiAJCQlqcyBq c29uIFBBVEggJyQnLAogCQkJamIganNvbmIgUEFUSCAnJCcsCiAJCQlqc3QgdGV4dCAgICBG T1JNQVQgSlNPTiAgUEFUSCAnJCcsCkBAIC0xMTM5LDkgKzEzMTgsNiBAQCBTRUxFQ1QgKiBG Uk9NCiAJCQlqczIganNvbiBQQVRIICckJywKIAkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJ VEggV1JBUFBFUiwKIAkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAotCQkJ aWEgaW50W10gUEFUSCAnJCcsCi0JCQl0YSB0ZXh0W10gUEFUSCAnJCcsCi0JCQlqYmEganNv bmJbXSBQQVRIICckJywKIAkJCU5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TICgK IAkJCQlhMSBpbnQsCiAJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5T ICgKQEAgLTExNjgsNyArMTM0NCw2IEBAIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGlj Lmpzb25iX3RhYmxlX3ZpZXcgQVMKICAgICAianNvbl90YWJsZSIuImNoYXIoNCkiLAogICAg ICJqc29uX3RhYmxlIi5ib29sLAogICAgICJqc29uX3RhYmxlIi4ibnVtZXJpYyIsCi0gICAg Impzb25fdGFibGUiLmRvbWFpbiwKICAgICAianNvbl90YWJsZSIuanMsCiAgICAgImpzb25f dGFibGUiLmpiLAogICAgICJqc29uX3RhYmxlIi5qc3QsCkBAIC0xMTg0LDkgKzEzNTksNiBA QCBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3IEFTCiAg ICAgImpzb25fdGFibGUiLmpzMiwKICAgICAianNvbl90YWJsZSIuanNiMncsCiAgICAgImpz b25fdGFibGUiLmpzYjJxLAotICAgICJqc29uX3RhYmxlIi5pYSwKLSAgICAianNvbl90YWJs ZSIudGEsCi0gICAgImpzb25fdGFibGUiLmpiYSwKICAgICAianNvbl90YWJsZSIuYTEsCiAg ICAgImpzb25fdGFibGUiLmIxLAogICAgICJqc29uX3RhYmxlIi5hMTEsCkBAIC0xMjA1LDcg KzEzNzcsNiBAQCBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92 aWV3IEFTCiAgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICck JywKICAgICAgICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcsCiAgICAgICAgICAg ICAgICAgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCi0gICAgICAgICAgICAgICAgZG9t YWluIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAogICAgICAgICAgICAgICAgIGpzIGpz b24gUEFUSCAnJCcsCiAgICAgICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCiAgICAg ICAgICAgICAgICAganN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCkBAIC0xMjIxLDkg KzEzOTIsNiBAQCBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92 aWV3IEFTCiAgICAgICAgICAgICAgICAganMyIGpzb24gUEFUSCAnJCcsCiAgICAgICAgICAg ICAgICAganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIs CiAgICAgICAgICAgICAgICAganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCi0g ICAgICAgICAgICAgICAgaWEgaW50ZWdlcltdIFBBVEggJyQnLAotICAgICAgICAgICAgICAg IHRhIHRleHRbXSBQQVRIICckJywKLSAgICAgICAgICAgICAgICBqYmEganNvbmJbXSBQQVRI ICckJywKICAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEKICAgICAg ICAgICAgICAgICBDT0xVTU5TICgKICAgICAgICAgICAgICAgICAgICAgYTEgaW50ZWdlciBQ QVRIICckLiJhMSInLApAQCAtMTI0OCwxNSArMTQxNiwxNCBAQCBDUkVBVEUgT1IgUkVQTEFD RSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3IEFTCiAgICAgICAgICAgICBQTEFOIChq c29uX3RhYmxlX3BhdGhfMSBPVVRFUiAoKHAxIE9VVEVSICJwMSAxIikgVU5JT04gKHAyIE9V VEVSICgicDI6MSIgVU5JT04gcDIyKSkpKQogICAgICAgICApCiBFWFBMQUlOIChDT1NUUyBP RkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAianNvbl90YWJsZSIKLSAg IE91dHB1dDogImpzb25fdGFibGUiLmlkLCAianNvbl90YWJsZSIuaWQyLCAianNvbl90YWJs ZSIuImludCIsICJqc29uX3RhYmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNoYXIoNCkiLCAi anNvbl90YWJsZSIuYm9vbCwgImpzb25fdGFibGUiLiJudW1lcmljIiwgImpzb25fdGFibGUi LmRvbWFpbiwgImpzb25fdGFibGUiLmpzLCAianNvbl90YWJsZSIuamIsICJqc29uX3RhYmxl Ii5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJqc29uX3RhYmxlIi5qc3YsICJqc29uX3RhYmxl Ii5qc2IsICJqc29uX3RhYmxlIi5qc2JxLCAianNvbl90YWJsZSIuYWFhLCAianNvbl90YWJs ZSIuYWFhMSwgImpzb25fdGFibGUiLmV4aXN0czEsICJqc29uX3RhYmxlIi5leGlzdHMyLCAi anNvbl90YWJsZSIuZXhpc3RzMywgImpzb25fdGFibGUiLmpzMiwgImpzb25fdGFibGUiLmpz YjJ3LCAianNvbl90YWJsZSIuanNiMnEsICJqc29uX3RhYmxlIi5pYSwgImpzb25fdGFibGUi LnRhLCAianNvbl90YWJsZSIuamJhLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxlIi5i MSwgImpzb25fdGFibGUiLmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUiLmEy MgotICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAn JFsqXScgQVMganNvbl90YWJsZV9wYXRoXzEgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompz b25iIEFTICJiIGMiIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9SRElO QUxJVFksICJpbnQiIGludGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJywgImNo YXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywgYm9vbCBib29sZWFuIFBBVEggJyQnLCAi bnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywgZG9tYWluIGpzb25iX3Rlc3RfZG9tYWluIFBB VEggJyQnLCBqcyBqc29uIFBBVEggJyQnLCBqYiBqc29uYiBQQVRIICckJywganN0IHRleHQg Rk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYyBjaGFyYWN0ZXIoNCkgRk9STUFUIEpTT04gUEFU SCAnJCcsIGpzdiBjaGFyYWN0ZXIgdmFyeWluZyg0KSBGT1JNQVQgSlNPTiBQQVRIICckJywg anNiIGpzb25iIFBBVEggJyQnLCBqc2JxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLCBh YWEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFhYSIn LCBleGlzdHMxIGJvb2xlYW4gRVhJU1RTIFBBVEggJyQuImFhYSInLCBleGlzdHMyIGludGVn ZXIgRVhJU1RTIFBBVEggJyQuImFhYSInIFRSVUUgT04gRVJST1IsIGV4aXN0czMgdGV4dCBF WElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsIGpzMiBqc29u IFBBVEggJyQnLCBqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFVOQ09ORElUSU9OQUwgV1JB UFBFUiwganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsIGlhIGludGVnZXJbXSBQ QVRIICckJywgdGEgdGV4dFtdIFBBVEggJyQnLCBqYmEganNvbmJbXSBQQVRIICckJywgTkVT VEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKGExIGludGVnZXIgUEFUSCAnJC4iYTEi JywgYjEgdGV4dCBQQVRIICckLiJiMSInLCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEi IENPTFVNTlMgKGExMSB0ZXh0IFBBVEggJyQuImExMSInKSksIE5FU1RFRCBQQVRIICckWzJd JyBBUyBwMiBDT0xVTU5TICggTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5T IChhMjEgdGV4dCBQQVRIICckLiJhMjEiJyksIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIg Q09MVU1OUyAoYTIyIHRleHQgUEFUSCAnJC4iYTIyIicpKSkgUExBTiAoanNvbl90YWJsZV9w YXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBPVVRFUiAoInAyOjEi IFVOSU9OIHAyMikpKSkpCisgICBPdXRwdXQ6ICJqc29uX3RhYmxlIi5pZCwgImpzb25fdGFi bGUiLmlkMiwgImpzb25fdGFibGUiLiJpbnQiLCAianNvbl90YWJsZSIudGV4dCwgImpzb25f dGFibGUiLiJjaGFyKDQpIiwgImpzb25fdGFibGUiLmJvb2wsICJqc29uX3RhYmxlIi4ibnVt ZXJpYyIsICJqc29uX3RhYmxlIi5qcywgImpzb25fdGFibGUiLmpiLCAianNvbl90YWJsZSIu anN0LCAianNvbl90YWJsZSIuanNjLCAianNvbl90YWJsZSIuanN2LCAianNvbl90YWJsZSIu anNiLCAianNvbl90YWJsZSIuanNicSwgImpzb25fdGFibGUiLmFhYSwgImpzb25fdGFibGUi LmFhYTEsICJqc29uX3RhYmxlIi5leGlzdHMxLCAianNvbl90YWJsZSIuZXhpc3RzMiwgImpz b25fdGFibGUiLmV4aXN0czMsICJqc29uX3RhYmxlIi5qczIsICJqc29uX3RhYmxlIi5qc2Iy dywgImpzb25fdGFibGUiLmpzYjJxLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxlIi5i MSwgImpzb25fdGFibGUiLmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUiLmEy MgorICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAn JFsqXScgQVMganNvbl90YWJsZV9wYXRoXzEgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompz b25iIEFTICJiIGMiIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9SRElO QUxJVFksICJpbnQiIGludGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJywgImNo YXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywgYm9vbCBib29sZWFuIFBBVEggJyQnLCAi bnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywganMganNvbiBQQVRIICckJywgamIganNvbmIg UEFUSCAnJCcsIGpzdCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFjdGVy KDQpIEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9S TUFUIEpTT04gUEFUSCAnJCcsIGpzYiBqc29uYiBQQVRIICckJywganNicSBqc29uYiBQQVRI ICckJyBPTUlUIFFVT1RFUywgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGFhYTEgaW50 ZWdlciBQQVRIICckLiJhYWEiJywgZXhpc3RzMSBib29sZWFuIEVYSVNUUyBQQVRIICckLiJh YWEiJywgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVS Uk9SLCBleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBVTktOT1dO IE9OIEVSUk9SLCBqczIganNvbiBQQVRIICckJywganNiMncganNvbmIgUEFUSCAnJCcgV0lU SCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVP VEVTLCBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09MVU1OUyAoYTEgaW50ZWdlciBQQVRI ICckLiJhMSInLCBiMSB0ZXh0IFBBVEggJyQuImIxIicsIE5FU1RFRCBQQVRIICckWypdJyBB UyAicDEgMSIgQ09MVU1OUyAoYTExIHRleHQgUEFUSCAnJC4iYTExIicpKSwgTkVTVEVEIFBB VEggJyRbMl0nIEFTIHAyIENPTFVNTlMgKCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEi IENPTFVNTlMgKGEyMSB0ZXh0IFBBVEggJyQuImEyMSInKSwgTkVTVEVEIFBBVEggJyRbKl0n IEFTIHAyMiBDT0xVTU5TIChhMjIgdGV4dCBQQVRIICckLiJhMjIiJykpKSBQTEFOIChqc29u X3RhYmxlX3BhdGhfMSBPVVRFUiAoKHAxIE9VVEVSICJwMSAxIikgVU5JT04gKHAyIE9VVEVS ICgicDI6MSIgVU5JT04gcDIyKSkpKSkKICgzIHJvd3MpCiAKIERST1AgVklFVyBqc29uYl90 YWJsZV92aWV3OwotRFJPUCBET01BSU4ganNvbmJfdGVzdF9kb21haW47CiAtLSBKU09OX1RB QkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgogU0VMRUNUICoKIEZST00KQEAgLTEz MTgsMTUgKzE0ODUsMTUgQEAgU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBpbnQ0IEVYSVNUUyBQQVRIICckLmEnKSk7CiAoMSByb3cpCiAK IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEg aW50MiBFWElTVFMgUEFUSCAnJC5hJykpOwotRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJv b2xlYW4gdG8gc21hbGxpbnQKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc21hbGxpbnQgaXMg bm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6IC4uLkVMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSS4uLgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENP TFVNTlMgKGEgaW50OCBFWElTVFMgUEFUSCAnJC5hJykpOwotRVJST1I6ICBjYW5ub3QgY2Fz dCB0eXBlIGJvb2xlYW4gdG8gYmlnaW50CitFUlJPUjogIHJldHVybmluZyB0eXBlIGJpZ2lu dCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogLi4uRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJ Li4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAn JCcgQ09MVU1OUyAoYSBmbG9hdDQgRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fu bm90IGNhc3QgdHlwZSBib29sZWFuIHRvIHJlYWwKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUg cmVhbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogLi4uRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGZsb2F0 NCBFLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBjaGFyKDMpIEVYSVNUUyBQQVRIICckLmEnKSk7CkBAIC0xMzM2 LDExICsxNTAzLDExIEBAIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywg JyQnIENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpCiAoMSByb3cpCiAK IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEg anNvbiBFWElTVFMgUEFUSCAnJC5hJykpOwotRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJv b2xlYW4gdG8ganNvbgorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBqc29uIGlzIG5vdCBzdXBw b3J0ZWQgaW4gSlNPTl9FWElTVFMoKQogTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbiBFWEkuLi4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChh IGpzb25iIEVYSVNUUyBQQVRIICckLmEnKSk7Ci1FUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUg Ym9vbGVhbiB0byBqc29uYgorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBqc29uYiBpcyBub3Qg c3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYLi4uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgogLS0gSlNPTl9UQUJMRTogbmVzdGVkIHBhdGhzIGFuZCBwbGFucwpAQCAtMjEwMiwx MSArMjI2OSwxNCBAQCBzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7 CiAtLSBTaG91bGQgYmUgbm9uLXBhcmFsbGVsIGR1ZSB0byBzdWJ0cmFuc2FjdGlvbnMKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBzdW0oSlNPTl9WQUxVRShqcywgJyQnIFJFVFVS TklORyBudW1lcmljKSkgRlJPTSB0ZXN0X3BhcmFsbGVsX2pzb25iX3ZhbHVlOwotICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBZ2dyZWdhdGUKLSAgIC0+ICBT ZXEgU2NhbiBvbiB0ZXN0X3BhcmFsbGVsX2pzb25iX3ZhbHVlCi0oMiByb3dzKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRo ZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogNAorICAgICAgICAgLT4gIFBhcnRpYWwg QWdncmVnYXRlCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gdGVz dF9wYXJhbGxlbF9qc29uYl92YWx1ZQorKDUgcm93cykKIAogU0VMRUNUIHN1bShKU09OX1ZB TFVFKGpzLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMpKSBGUk9NIHRlc3RfcGFyYWxsZWxfanNv bmJfdmFsdWU7CiAgICAgc3VtICAgICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iX3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3Fs anNvbi5zcWwKaW5kZXggZmZmMjUzNzQ4MDguLmU3NGE0YTVkYmJlIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbApAQCAtODIsMTIgKzgyLDczIEBAIFNFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsK IAogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5J TkcgZGF0ZSkgKyA5OwogCi0tLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21h aW4gdHlwZXMKKy0tIFRlc3QgZm9yIGRvbWFpbiB0eXBlcwogQ1JFQVRFIERPTUFJTiBzcWxq c29uYl9pbnRfbm90X251bGwgQVMgaW50IE5PVCBOVUxMOworQ1JFQVRFIERPTUFJTiBzcWxq c29uYl9qc29uX25vdF9udWxsIEFTIGpzb24gTk9UIE5VTEwgQ0hFQ0sgKFZBTFVFOjp0ZXh0 IDw+ICcwJyk7CitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2pzb25iX25vdF9udWxsIEFTIGpz b25iIE5PVCBOVUxMIENIRUNLIChWQUxVRSA8PiAnMCcpOworCistLSBUZXN0IGNhc3Rpbmcg dG8ganNvbltiXSBkb21haW5zIChpdGVtcyBjYXN0ZWQgYXMgaXMsIHN0cmluZ3MgYXJlIG5v dCB1bnF1b3RlZCkKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX2pzb25fbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyIxIicsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90 X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJCcgUkVUVVJOSU5HIHNx bGpzb25iX2pzb25iX25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3Rf bnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRVUk5JTkcg c3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1 ZScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworCistLSBUZXN0 IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKIFNFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29u Yl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZB VUxUIE5VTEwgT04gRU1QVFkpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5h JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29u Yl9pbnRfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJP Uik7CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxq c29uYl9pbnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CiBTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVM VCBOVUxMIE9OIEVSUk9SKTsKIAorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5h JyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERF RkFVTFQgJzInIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVN UFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNx bGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3Rf bnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgREVGQVVMVCAnMicgT04gRVJST1IpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNv bl9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCBOVUxM IE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVGQVVM VCAnMicgT04gRU1QVFkpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBS RVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZ KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpz b25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9u dWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29u Yl9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgTlVM TCBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxU IDIgT04gRU1QVFkpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVU VVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04gRVJST1IpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCBOVUxM IE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVU VVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVM VCAnMicgT04gRU1QVFkpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcg UkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04gRVJST1Ip OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpz b25iX2pzb25fbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBERUZB VUxUIE5VTEwgT04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcs ICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9u dWxsIERFRkFVTFQgJzInIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUICcy JyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJf bm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25f bm90X251bGwgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzAn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04g RVJST1IpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcg c3FsanNvbmJfanNvbmJfbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzAn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIEVSUk9SIE9OIEVSUk9S KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxqc29u Yl9qc29uYl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFUlJPUik7CisKKy0tIFRlc3QgcmV0 dXJuaW5nIG9mIG5vbi1zY2FsYXIgaXRlbXMKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb XScsICckJyk7CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcgRVJST1IgT04g RVJST1IpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnKTsKQEAgLTMzOCw4 ICszOTksNiBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEyMycsICckJwog CUNPTFVNTlMgKGl0ZW0gaW50IFBBVEggJyQnLCBmb28gaW50KSkgYmFyOwogCiAtLSBKU09O X1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5Ci1DUkVBVEUgRE9NQUlOIGpzb25iX3Rlc3Rf ZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdmb28nKTsKLQogU0VMRUNUICoKIEZS T00KIAkoVkFMVUVTCkBAIC0zNjAsNyArNDE5LDYgQEAgRlJPTQogCQkJImNoYXIoNCkiIGNo YXIoNCkgUEFUSCAnJCcsCiAJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKIAkJCSJudW1lcmlj IiBudW1lcmljIFBBVEggJyQnLAotCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFU SCAnJCcsCiAJCQlqcyBqc29uIFBBVEggJyQnLAogCQkJamIganNvbmIgUEFUSCAnJCcsCiAJ CQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCkBAIC0zNzcsMTAgKzQzNSw3 IEBAIEZST00KIAogCQkJanMyIGpzb24gUEFUSCAnJCcsCiAJCQlqc2IydyBqc29uYiBQQVRI ICckJyBXSVRIIFdSQVBQRVIsCi0JCQlqc2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RF UywKLQkJCWlhIGludFtdIFBBVEggJyQnLAotCQkJdGEgdGV4dFtdIFBBVEggJyQnLAotCQkJ amJhIGpzb25iW10gUEFUSCAnJCcKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVP VEVTCiAJCSkKIAkpIGp0CiAJT04gdHJ1ZTsKQEAgLTM5OSw3ICs0NTQsNiBAQCBTRUxFQ1Qg KiBGUk9NCiAJCQkiY2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKIAkJCSJib29sIiBib29s IFBBVEggJyQnLAogCQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCi0JCQkiZG9tYWlu IiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKIAkJCWpzIGpzb24gUEFUSCAnJCcsCiAJ CQlqYiBqc29uYiBQQVRIICckJywKIAkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRI ICckJywKQEAgLTQxNiw5ICs0NzAsNiBAQCBTRUxFQ1QgKiBGUk9NCiAJCQlqczIganNvbiBQ QVRIICckJywKIAkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKIAkJCWpz YjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAotCQkJaWEgaW50W10gUEFUSCAnJCcs Ci0JCQl0YSB0ZXh0W10gUEFUSCAnJCcsCi0JCQlqYmEganNvbmJbXSBQQVRIICckJywKIAog CQkJTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAogCQkJCWExIGludCwKQEAg LTQ0Myw3ICs0OTQsNiBAQCBTRUxFQ1QgKiBGUk9NCiBFWFBMQUlOIChDT1NUUyBPRkYsIFZF UkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzsKIAogRFJPUCBWSUVXIGpz b25iX3RhYmxlX3ZpZXc7Ci1EUk9QIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbjsKIAogLS0g SlNPTl9UQUJMRTogT04gRU1QVFkvT04gRVJST1IgYmVoYXZpb3IKIFNFTEVDVCAqCi0tIAoy LjE3LjEKCg== --------------CDnVHwVuJZR5k02GZ5jjcuBU--