Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5OUF-00DJni-Q4 for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Nov 2023 11:00:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r5OUD-00FxEZ-I6 for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Nov 2023 11:00:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5OUD-00FxER-42 for pgsql-hackers@lists.postgresql.org; Tue, 21 Nov 2023 11:00:09 +0000 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r5OU8-007aZt-J1 for pgsql-hackers@postgresql.org; Tue, 21 Nov 2023 11:00:08 +0000 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2c501bd6ff1so67142811fa.3 for ; Tue, 21 Nov 2023 03:00:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700564403; x=1701169203; darn=postgresql.org; h=in-reply-to:content-language:from:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=RuLkDR69/kdlexDvr8jib9heq+abC9DauY42hUyVSlk=; b=FfBJPrL0/mbLtcQz/DzYqbjxkrf5WWpEJq6AH5+6wr7eNL1LgMPAikGnN7Z+f2pWHS dVBvK8rcUY3mTuaDuK4i30V/skHhgoKwDBg6tLkRKyMxzXjkNG2LIAHEYEqt04Ovn6yw CFfbmEM3H0DdY1lOPZgvH3192l+JiY6geO6AKtA8myK5qsQ1zJuD+ZjcrLuWeNo10/EL sQah8Lc8C+JnvgQb87bm7A2OSVwkwP+3nQ+71f6DMN5gHIqqO41y3VQaJMTSiSYnryn4 ZcYNDnNH6U8cUmTSHyM7fc7OUWX8q9aEq+wHD/ai+DwsTeetjqqoD9okzHpvX6h4Er+h +O7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700564403; x=1701169203; h=in-reply-to:content-language:from:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=RuLkDR69/kdlexDvr8jib9heq+abC9DauY42hUyVSlk=; b=mfbijWgtaNdULSm44/v45nuHAWsU7ZGnRWo3ls1z1oY2Qh0QGS0HwwiHrQxeu+xP31 BZXnmUkMSOjrkmYqFMF+mJTjuMkkokc4UPoXwHVY3z1j67uC7thh/bEfKdzDCsoiDoux EwboQgP5fQJ742c4JtcKob3BVpv4As+B7l0LoC0qQZiQjUby/8D6yQ+LdYmU3UghixA7 orTKEU98FF3ROqlfNCzxRMrm8cDaLR2ecxyo+knA0dGF/TUk6iIooIYjSgELG2yLzuBS OCu888QMrfO+V1J+Z3UKCa32WlE2eVHqEYdTb8gww2PDy+TWJAcI6mbOY8IT1WqYxRiK AKlw== X-Gm-Message-State: AOJu0Yzv87AVDkdhXiFT4lrqadDLJzIOke9fB1qnPbJ1+KXC3oXoz8JY ESy+AnYjB+qJEMs/D/YdxziiPqc3X9t1pw== X-Google-Smtp-Source: AGHT+IGgp8A8e2J+Zwc9eWhgBPXJY62PnJoP1NBwp2qXVbKRBKHnQi0CgRHHgD3jBEI6D1BBAZsNsg== X-Received: by 2002:a2e:930d:0:b0:2b9:4b2e:5420 with SMTP id e13-20020a2e930d000000b002b94b2e5420mr6088992ljh.52.1700564402863; Tue, 21 Nov 2023 03:00:02 -0800 (PST) Received: from [1.0.0.7] ([91.185.76.245]) by smtp.gmail.com with ESMTPSA id l25-20020a2e99d9000000b002c505793a23sm1200604ljj.109.2023.11.21.03.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Nov 2023 03:00:01 -0800 (PST) Content-Type: multipart/mixed; boundary="------------bChBHeIVXDsybeserihlZrKq" Message-ID: <32d112ee-0b6f-d4ab-441b-e2bba66a1d83@gmail.com> Date: Tue, 21 Nov 2023 14:00:00 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: Why is src/test/modules/committs/t/002_standby.pl flaky? To: Thomas Munro , Tom Lane Cc: Noah Misch , Andrew Dunstan , pgsql-hackers References: <1609152.1641691036@sss.pgh.pa.us> <3b904d7b-ef84-6f1b-9326-9f88c1374eb8@gmail.com> <5d507424-13ce-d19f-2f5d-ab4c6a987316@gmail.com> <2411751.1641849927@sss.pgh.pa.us> <20220319084704.GB2822749@rfd.leadboat.com> <2452111.1647918811@sss.pgh.pa.us> <2520306.1647958783@sss.pgh.pa.us> From: Alexander Lakhin Content-Language: en-US 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. --------------bChBHeIVXDsybeserihlZrKq Content-Type: multipart/alternative; boundary="------------fWXqZK07bjQkeLqfDzNNL0Bn" --------------fWXqZK07bjQkeLqfDzNNL0Bn Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello Thomas, 10.11.2023 06:31, Thomas Munro wrote: > Here is a new attempt to fix this mess. Disclaimer: this based > entirely on reading the manual and vicariously hacking a computer I > don't have via CI. As it also might (and I would like it to) be the final attempt, I decided to gather information and all the cases that we had on this topic. At least, for the last 5 years we've seen: [1] 2019-01-18: Re: BUG #15598: PostgreSQL Error Code is not reported when connection terminated due to idle-in-transaction timeout     test 099_case_15598 made (in attachment) no commit [2] 2019-01-22: Rare SSL failures on eelpout     references [1]     test 099_rare_ssl_failures made (in attachment) commit 2019-03-19 1f39a1c06: Restructure libpq's hqandling of send failures. [3] 2019-11-28: pgsql: Add tests for '-f' option in dropdb utility.     test 051_dropdb_force was proposed (included in the attachment) commit 2019-11-30 98a9b37ba: Revert commits 290acac92b and 8a7e9e9dad. [4] 2019-12-06: closesocket behavior in different platforms     references [1], [2], [3]; a documentation change proposed no commit [5] 2020-06-03: libpq copy error handling busted     test 099_pgbench_with_server_off made (in attachment) commit 2020-06-07 7247e243a: Try to read data from the socket in pqSendSome's write_failed paths. (a fix for 1f39a1c06) [6] 2020-10-19: BUG #16678: The ecpg connect/test5 test sometimes fails on Windows no commit [7] 2021-11-17: Windows: Wrong error message at connection termination    references [6] commit: 2021-12-02 6051857fc: On Windows, close the client socket explicitly during backend shutdown. [8] 2021-12-05 17:03:18: MSVC SSL test failure commit: 2021-12-07 ed52c3707: On Windows, also call shutdown() while closing the client socket. [9] 2021-12-30: Why is src/test/modules/committs/t/002_standby.pl flaky?    additional test 099_postgres_fdw_disconnect made (in attachment) commit 2022-01-26 75674c7ec: Revert "graceful shutdown" changes for Windows, in back branches only. (REL_14_STABLE) commit 2022-03-22 29992a6a5: Revert "graceful shutdown" changes for Windows. (master) [10] 2022-02-02 19:19:22: BUG #17391: While using --with-ssl=openssl and PG_TEST_EXTRA='ssl' options, SSL tests fail on OpenBSD 7.0 commit 2022-02-12 335fa5a26: Fix thinko in PQisBusy(). (a fix for 1f39a1c06) commit 2022-02-12 faa189c93: Move libpq's write_failed mechanism down to pqsecure_raw_write(). (a fix for 1f39a1c06) As it becomes difficult to test/check all those cases scattered around, I decided to retell the whole story by means of tests. Please look at the script win-sock-tests-01.cmd attached, which can be executed both on Windows (as regular cmd) and on Linux (bash win-sock-tests-01.cmd). At the end of the script we can see several things. First, the last patchset you posted, applied to b282fa88d~1, fixes the issue discussed in this thread (it eliminates failures of commit_ts_002_standby (and also 099_postgres_fdw_disconnect)). Second, with the sleep added (see [6]), I had the same results of `meson test` on Windows and on Linux. Namely, there are some tests failing (see win-sock-tests-01.cmd) due to walsender preventing server stop. I describe this issue separately (see details in walsender-cannot-exit.txt; maybe it's worth to discuss it in a separate thread) as it's kind of off-topic. With the supplementary sleep() added to WalSndLoop(), the complete `meson test` passes successfully both on Windows and on Linux. Third, cases [1] and [3] are still broken, due to a Windows peculiarity. Please see server.c and client.c attached, which demonstrate: Case "no shutdown/closesocket" on Windows: C:\src>server Listening for incoming connections...                         C:\src>client Client connected: 127.0.0.1:64395                         Connection to server established. Enter message: msg Client message: msg Sending message...                         Sleeping... Exiting... C:\src>                         Calling recv()...                         recv() failed Case "no shutdown/closesocket" on Linux: $ server Listening for incoming connections...                         $ client Client connected: 127.0.0.1:33044                         Connection to server established. Enter message: msg Client message: msg Sending message...                         Sleeping... Exiting... $                         Calling recv()...                         Server message: MESSAGE Case "shutdown/closesocket" on Windows: C:\src>server shutdown closesocket Listening for incoming connections...                         C:\src>client Client connected: 127.0.0.1:64396                         Connection to server established. Enter message: msg Client message: msg Sending message...                         Sleeping... Calling shutdown()... Calling closesocket()... Exiting... C:\src>                         Calling recv()...                         Server message: MESSAGE That's okay so far, but what makes cases [1]/[3] different from all cases in the whole existing test suite, which now performed successfully, is that psql calls send() before recv() on a socket closed and abandoned by the server. Those programs show on Windows: C:\src>server shutdown closesocket Listening for incoming connections...                         C:\src>client send_before_recv Client connected: 127.0.0.1:64397                         Connection to server established. Enter message: msg Client message: msg Sending message...                         Sleeping... Calling shutdown()... Calling closesocket()... Exiting... C:\src>                         send() returned 4                         Calling recv()...                         recv() failed As known, on Linux the same scenario works just fine. Fourth, tests 099_rare_ssl_failures (and 001_ssl_tests, though more rarely) fail for me with the latest patches (only on Windows again): ...  8/10 postgresql:ssl_1 / ssl_1/099_rare_ssl_failures ERROR           141.34s   exit status 3 ...  9/10 postgresql:ssl_7 / ssl_7/099_rare_ssl_failures OK              142.52s   2000 subtests passed 10/10 postgresql:ssl_6 / ssl_6/099_rare_ssl_failures OK              143.00s   2000 subtests passed Ok:                 2 Expected Fail:      0 Fail:               8 ssl_1\099_rare_ssl_failures\log\regress_log_099_rare_ssl_failures.txt: ... iteration 354 [20:57:06.984](0.106s) ok 707 - certificate authorization fails with revoked client cert with server-side CRL directory [20:57:06.984](0.000s) ok 708 - certificate authorization fails with revoked client cert with server-side CRL directory: matches iteration 355 [20:57:07.156](0.172s) ok 709 - certificate authorization fails with revoked client cert with server-side CRL directory [20:57:07.156](0.001s) not ok 710 - certificate authorization fails with revoked client cert with server-side CRL directory: matches [20:57:07.159](0.003s) #   Failed test 'certificate authorization fails with revoked client cert with server-side CRL directory: matches' #   at .../src/test/ssl_1/t/099_rare_ssl_failures.pl line 88. [20:57:07.159](0.000s) #                   'psql: error: connection to server at "127.0.0.1", port 59843 failed: could not receive data from server: Software caused connection abort (0x00002745/10053) # SSL SYSCALL error: Software caused connection abort (0x00002745/10053)' #     doesn't match '(?^:SSL error: sslv3 alert certificate revoked)' ... It seems to me that it can have the same explanation (if openssl can call send() before recv() under the hood), but maybe it should be investigated further. > Review/poking-with-a-stick/trying-to-break-it most welcome. I could not find anything suspicious in the code, except for maybe a typo "The are ...". [1] https://www.postgresql.org/message-id/flat/87k1iy44fd.fsf%40news-spur.riddles.org.uk#ba0c07f13c300d42fd537855dd95dd2b [2] https://www.postgresql.org/message-id/flat/CAEepm%3D2n6Nv%2B5tFfe8YnkUm1fXgvxR0Mm1FoD%2BQKG-vLNGLyKg%40mail.gmail.com [3] https://www.postgresql.org/message-id/flat/E1iaD8h-0004us-K9@gemulon.postgresql.org [4] https://www.postgresql.org/message-id/flat/CALDaNm2tEvr_Kum7SyvFn0%3D6H3P0P-Zkhnd%3DdkkX%2BQ%3DwKutZ%3DA%40mail.gmail.com [5] https://www.postgresql.org/message-id/flat/20200603201242.ofvm4jztpqytwfye%40alap3.anarazel.de [6] https://www.postgresql.org/message-id/16678-253e48d34dc0c376@postgresql.org [7] https://www.postgresql.org/message-id/flat/90b34057-4176-7bb0-0dbb-9822a5f6425b%40greiz-reinsdorf.de [8] https://www.postgresql.org/message-id/flat/af5e0bf3-6a61-bb97-6cba-061ddf22ff6b%40dunslane.net [9] https://www.postgresql.org/message-id/flat/CA%2BhUKG%2BOeoETZQ%3DQw5Ub5h3tmwQhBmDA%3DnuNO3KG%3DzWfUypFAw%40mail.gmail.com [10] https://www.postgresql.org/message-id/flat/17391-304f81bcf724b58b%40postgresql.org Best regards, Alexander --------------fWXqZK07bjQkeLqfDzNNL0Bn Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
Hello Thomas,

10.11.2023 06:31, Thomas Munro wrote:
Here is a new attempt to fix this mess.  Disclaimer: this based
entirely on reading the manual and vicariously hacking a computer I
don't have via CI.

As it also might (and I would like it to) be the final attempt, I decided
to gather information and all the cases that we had on this topic.
At least, for the last 5 years we've seen:

[1] 2019-01-18: Re: BUG #15598: PostgreSQL Error Code is not reported when connection terminated due to idle-in-transaction timeout
    test 099_case_15598 made (in attachment)
no commit

[2] 2019-01-22: Rare SSL failures on eelpout
    references [1]
    test 099_rare_ssl_failures made (in attachment)
commit 2019-03-19 1f39a1c06: Restructure libpq's hqandling of send failures.

[3] 2019-11-28: pgsql: Add tests for '-f' option in dropdb utility.
    test 051_dropdb_force was proposed (included in the attachment)
commit 2019-11-30 98a9b37ba: Revert commits 290acac92b and 8a7e9e9dad.

[4] 2019-12-06: closesocket behavior in different platforms
    references [1], [2], [3]; a documentation change proposed
no commit

[5] 2020-06-03: libpq copy error handling busted
    test 099_pgbench_with_server_off made (in attachment)
commit 2020-06-07 7247e243a: Try to read data from the socket in pqSendSome's write_failed paths. (a fix for 1f39a1c06)

[6] 2020-10-19: BUG #16678: The ecpg connect/test5 test sometimes fails on Windows
no commit

[7] 2021-11-17: Windows: Wrong error message at connection termination
   references [6]
commit: 2021-12-02 6051857fc: On Windows, close the client socket explicitly during backend shutdown.

[8] 2021-12-05 17:03:18: MSVC SSL test failure
commit: 2021-12-07 ed52c3707: On Windows, also call shutdown() while closing the client socket.

[9] 2021-12-30: Why is src/test/modules/committs/t/002_standby.pl flaky?
   additional test 099_postgres_fdw_disconnect made (in attachment)
commit 2022-01-26 75674c7ec: Revert "graceful shutdown" changes for Windows, in back branches only. (REL_14_STABLE)
commit 2022-03-22 29992a6a5: Revert "graceful shutdown" changes for Windows. (master)

[10] 2022-02-02 19:19:22: BUG #17391: While using --with-ssl=openssl and PG_TEST_EXTRA='ssl' options, SSL tests fail on OpenBSD 7.0
commit 2022-02-12 335fa5a26: Fix thinko in PQisBusy(). (a fix for 1f39a1c06)
commit 2022-02-12 faa189c93: Move libpq's write_failed mechanism down to pqsecure_raw_write(). (a fix for 1f39a1c06)

As it becomes difficult to test/check all those cases scattered around, I
decided to retell the whole story by means of tests. Please look at the
script win-sock-tests-01.cmd attached, which can be executed both on
Windows (as regular cmd) and on Linux (bash win-sock-tests-01.cmd).

At the end of the script we can see several things.
First, the last patchset you posted, applied to b282fa88d~1, fixes the
issue discussed in this thread (it eliminates failures of
commit_ts_002_standby (and also 099_postgres_fdw_disconnect)).

Second, with the sleep added (see [6]), I had the same results of
`meson test` on Windows and on Linux.
Namely, there are some tests failing (see win-sock-tests-01.cmd) due to
walsender preventing server stop.
I describe this issue separately (see details in walsender-cannot-exit.txt;
maybe it's worth to discuss it in a separate thread) as it's kind of
off-topic. With the supplementary sleep() added to WalSndLoop(), the
complete `meson test` passes successfully both on Windows and on Linux.

Third, cases [1] and [3] are still broken, due to a Windows peculiarity.
Please see server.c and client.c attached, which demonstrate:
Case "no shutdown/closesocket" on Windows:
C:\src>server
Listening for incoming connections...
                        C:\src>client
Client connected: 127.0.0.1:64395
                        Connection to server established. Enter message: msg
Client message: msg
Sending message...
                        Sleeping...
Exiting...
C:\src>
                        Calling recv()...
                        recv() failed

Case "no shutdown/closesocket" on Linux:
$ server
Listening for incoming connections...
                        $ client
Client connected: 127.0.0.1:33044
                        Connection to server established. Enter message: msg
Client message: msg
Sending message...
                        Sleeping...
Exiting...
$
                        Calling recv()...
                        Server message: MESSAGE

Case "shutdown/closesocket" on Windows:
C:\src>server shutdown closesocket
Listening for incoming connections...
                        C:\src>client
Client connected: 127.0.0.1:64396
                        Connection to server established. Enter message: msg
Client message: msg
Sending message...
                        Sleeping...
Calling shutdown()...
Calling closesocket()...
Exiting...
C:\src>
                        Calling recv()...
                        Server message: MESSAGE

That's okay so far, but what makes cases [1]/[3] different from all cases
in the whole existing test suite, which now performed successfully, is
that psql calls send() before recv() on a socket closed and abandoned by
the server.
Those programs show on Windows:
C:\src>server shutdown closesocket
Listening for incoming connections...
                        C:\src>client send_before_recv
Client connected: 127.0.0.1:64397
                        Connection to server established. Enter message: msg
Client message: msg
Sending message...
                        Sleeping...
Calling shutdown()...
Calling closesocket()...
Exiting...
C:\src>
                        send() returned 4
                        Calling recv()...
                        recv() failed

As known, on Linux the same scenario works just fine.

Fourth, tests 099_rare_ssl_failures (and 001_ssl_tests, though more rarely)
fail for me with the latest patches (only on Windows again):
...
 8/10 postgresql:ssl_1 / ssl_1/099_rare_ssl_failures           ERROR           141.34s   exit status 3
...
 9/10 postgresql:ssl_7 / ssl_7/099_rare_ssl_failures           OK              142.52s   2000 subtests passed
10/10 postgresql:ssl_6 / ssl_6/099_rare_ssl_failures           OK              143.00s   2000 subtests passed

Ok:                 2
Expected Fail:      0
Fail:               8

ssl_1\099_rare_ssl_failures\log\regress_log_099_rare_ssl_failures.txt:
...
iteration 354
[20:57:06.984](0.106s) ok 707 - certificate authorization fails with revoked client cert with server-side CRL directory
[20:57:06.984](0.000s) ok 708 - certificate authorization fails with revoked client cert with server-side CRL directory: matches
iteration 355
[20:57:07.156](0.172s) ok 709 - certificate authorization fails with revoked client cert with server-side CRL directory
[20:57:07.156](0.001s) not ok 710 - certificate authorization fails with revoked client cert with server-side CRL directory: matches
[20:57:07.159](0.003s) #   Failed test 'certificate authorization fails with revoked client cert with server-side CRL directory: matches'
#   at .../src/test/ssl_1/t/099_rare_ssl_failures.pl line 88.
[20:57:07.159](0.000s) #                   'psql: error: connection to server at "127.0.0.1", port 59843 failed: could not receive data from server: Software caused connection abort (0x00002745/10053)
# SSL SYSCALL error: Software caused connection abort (0x00002745/10053)'
#     doesn't match '(?^:SSL error: sslv3 alert certificate revoked)'
...

It seems to me that it can have the same explanation (if openssl can call
send() before recv() under the hood), but maybe it should be investigated
further.

Review/poking-with-a-stick/trying-to-break-it most welcome.

I could not find anything suspicious in the code, except for maybe a typo
"The are ...".

[1] https://www.postgresql.org/message-id/flat/87k1iy44fd.fsf%40news-spur.riddles.org.uk#ba0c07f13c300d42fd537855dd95dd2b
[2] https://www.postgresql.org/message-id/flat/CAEepm%3D2n6Nv%2B5tFfe8YnkUm1fXgvxR0Mm1FoD%2BQKG-vLNGLyKg%40mail.gmail.com
[3] https://www.postgresql.org/message-id/flat/E1iaD8h-0004us-K9@gemulon.postgresql.org
[4] https://www.postgresql.org/message-id/flat/CALDaNm2tEvr_Kum7SyvFn0%3D6H3P0P-Zkhnd%3DdkkX%2BQ%3DwKutZ%3DA%40mail.gmail.com
[5] https://www.postgresql.org/message-id/flat/20200603201242.ofvm4jztpqytwfye%40alap3.anarazel.de
[6] https://www.postgresql.org/message-id/16678-253e48d34dc0c376@postgresql.org
[7] https://www.postgresql.org/message-id/flat/90b34057-4176-7bb0-0dbb-9822a5f6425b%40greiz-reinsdorf.de
[8] https://www.postgresql.org/message-id/flat/af5e0bf3-6a61-bb97-6cba-061ddf22ff6b%40dunslane.net
[9] https://www.postgresql.org/message-id/flat/CA%2BhUKG%2BOeoETZQ%3DQw5Ub5h3tmwQhBmDA%3DnuNO3KG%3DzWfUypFAw%40mail.gmail.com
[10] https://www.postgresql.org/message-id/flat/17391-304f81bcf724b58b%40postgresql.org

Best regards,
Alexander
--------------fWXqZK07bjQkeLqfDzNNL0Bn-- --------------bChBHeIVXDsybeserihlZrKq Content-Type: text/plain; charset=UTF-8; name="walsender-cannot-exit.txt" Content-Disposition: attachment; filename="walsender-cannot-exit.txt" Content-Transfer-Encoding: base64 V2l0aCBwZ191c2xlZXAoMTAwMDBMKSBhZGRlZCBpbiBwcVJlYWREYXRhKCkgeW91IGNhbiBz ZWUgc2V2ZXJhbCB0ZXN0cwpmYWlsZWQgd2hlbiBydW5uaW5nIG1ha2UgY2hlY2std29ybGQv bWVzb24gdGVzdC4KRm9yIGV4YW1wbGU6Cm1lc29uIHRlc3QgcmVjb3ZlcnkvMDE5X3JlcGxz bG90X2xpbWl0IAoKcmVzdWx0cyBpbjoKWzE2OjI1OjE4LjUxMF0oNi43NzFzKSBvayAxNiAt IGNoZWNrIGlmIGNoZWNrcG9pbnQgY29tbWFuZCBpcyBub3QgYmxvY2tlZAojIyMgU3RvcHBp bmcgbm9kZSAicHJpbWFyeTIiIHVzaW5nIG1vZGUgZmFzdAojIFJ1bm5pbmc6IHBnX2N0bCAt RCAuLi4vYnVpbGQvdGVzdHJ1bi9yZWNvdmVyeS8wMTlfcmVwbHNsb3RfbGltaXQvZGF0YS90 XzAxOV9yZXBsc2xvdF9saW1pdF9wcmltYXJ5Ml9kYXRhL3BnZGF0YSAtbSBmYXN0IHN0b3AK d2FpdGluZyBmb3Igc2VydmVyIHRvIHNodXQgZG93bi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBmYWlsZWQKcGdfY3Rs OiBzZXJ2ZXIgZG9lcyBub3Qgc2h1dCBkb3duCiMgcGdfY3RsIHN0b3AgZmFpbGVkOiAyNTYK IyBQb3N0bWFzdGVyIFBJRCBmb3Igbm9kZSAicHJpbWFyeTIiIGlzIDIwOTI1MwpbMTY6MjY6 MTguNTY3XSg2MC4wNTdzKSBCYWlsIG91dCEgIHBnX2N0bCBzdG9wIGZhaWxlZAoKQXMgSSB1 bmRlcnN0YW5kLCBpdCBoYXBwZW5zIGJlY2F1c2UgV2FsU25kTG9vcCgpIHBlcmZvcm1zIHRo aXMgaW4gYSBsb29wOgouLi4KCQkJaWYgKGdvdF9TSUdVU1IyKQoJCQkJV2FsU25kRG9uZShz ZW5kX2RhdGEpOwouLi4KCQkJLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMgb3Ig d2UgdGltZSBvdXQgKi8KCQkJV2FsU25kV2FpdCh3YWtlRXZlbnRzLCBzbGVlcHRpbWUsIFdB SVRfRVZFTlRfV0FMX1NFTkRFUl9NQUlOKTsKLi4uCgp3aGVyZSBXYWxTbmREb25lKCkgZG9l cyB0aGlzOgoJcmVwbGljYXRlZFB0ciA9IFhMb2dSZWNQdHJJc0ludmFsaWQoTXlXYWxTbmQt PmZsdXNoKSA/CgkJTXlXYWxTbmQtPndyaXRlIDogTXlXYWxTbmQtPmZsdXNoOwoJaWYgKFdh bFNuZENhdWdodFVwICYmIHNlbnRQdHIgPT0gcmVwbGljYXRlZFB0ciAmJgoJCSFwcV9pc19z ZW5kX3BlbmRpbmcoKSkKCXsKLi4uCgkJcHJvY19leGl0KDApOwoJfQoJaWYgKCF3YWl0aW5n X2Zvcl9waW5nX3Jlc3BvbnNlKQoJCVdhbFNuZEtlZXBhbGl2ZSh0cnVlLCBJbnZhbGlkWExv Z1JlY1B0cik7CgooV2FsU25kV2FpdCdzIGNhbGwgY2hhaW4gaXM6CldhbFNuZFdhaXQgLT4g V2FpdEV2ZW50U2V0V2FpdCAtPiBXYWl0RXZlbnRTZXRXYWl0QmxvY2sgLT4gZXBvbGxfd2Fp dCkKClNvLCBXYWxTbmREb25lIHdhaXRzIGhlcmUgZm9yIHJlcGxpY2F0ZWRQdHIgdG8gYmVj b21lIGVxdWFsIHRvIHNlbnRQdHIuCkluIG90aGVyIHdvcmRzLCB3YWxzZW5kZXIgc2VuZHMg a2VlcGFsaXZlIHRvIHdhbHJlY2VpdmVyIGFuZCB3YWl0cyBmb3IgYQpuZXcgZmx1c2ggcG9z aXRpb24gZnJvbSBpdC4KQW5kIHRoZSBzdGFuZGJ5IGxvb3AgaXMgYXMgZm9sbG93czoKV2Fs UmVjZWl2ZXJNYWluOgoJCQkJCWZvciAoOzspCgkJCQkJewoJCQkJCQlpZiAobGVuID4gMCkK CQkJCQkJewouLi4KCQkJCQkJCVhMb2dXYWxSY3ZQcm9jZXNzTXNnKGJ1ZlswXSwgJmJ1Zlsx XSwgbGVuIC0gMSwKCQkJCQkJCQkJCQkJIHN0YXJ0cG9pbnRUTEkpOwouLi4KCQkJCQkJfQoJ CQkJCQllbHNlIGlmIChsZW4gPT0gMCkKCQkJCQkJCWJyZWFrOwoJCQkJCX0KLi4uCgkJCQkJ WExvZ1dhbFJjdkZsdXNoKGZhbHNlLCBzdGFydHBvaW50VExJKTsKCndoZXJlIFhMb2dXYWxS Y3ZQcm9jZXNzTXNnKCkgY2FsbHMgWExvZ1dhbFJjdlNlbmRSZXBseSgpIGlmIGEga2VlcGFs aXZlCm1lc3NhZ2UgcmVjZWl2ZWQuCgpTbyBpZiB3YWxyZWNlaXZlciBjb25zdGFudGx5IHJl Y2VpdmVzIHNvbWUgbWVzc2FnZXMgKGtlZXBhbGl2ZSBtZXNzYWdlcyBpbgp0aGlzIGNhc2Up LCBpdCBqdXN0IGNhbid0IGdldCBvdXQgb2YgdGhlIGxvb3AgYW5kIHBlcmZvcm0gWExvZ1dh bFJjdkZsdXNoKCkKL21vdmUgRmx1c2ggcG9zaXRpb24gd2hhdCBwcmltYXJ5IGlzIHdhaXRp bmcgZm9yLgoKQnV0IGlmIHNvbWV0aGluZyBkZWxheXMgd2Fsc2VuZGVyIGZvciBtb3JlIHRo YW4gMTAgbXMgYmV0d2VlbiBlcG9sbF93YWl0KCkKYW5kIFdhbFNuZERvbmUoKSBvbiBhIG5l eHQgaXRlcmF0aW9uLCBzdGFuZGJ5IG1hbmFnZXMgdG8gZ2V0IGxlbiA9IDAgYW5kIHRvCnBl cmZvcm0gRmx1c2guCg== --------------bChBHeIVXDsybeserihlZrKq Content-Type: text/x-csrc; charset=UTF-8; name="server.c" Content-Disposition: attachment; filename="server.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpZiBkZWZpbmVkKF9X SU4zMikKI2luY2x1ZGUgPHdpbnNvY2suaD4KI3ByYWdtYSBjb21tZW50KGxpYiwgIldzMl8z Mi5saWIiKQoKI2RlZmluZSBTRF9TRU5EIDEKI2Vsc2UKI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgojZW5kaWYKCmludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCnsKICAgIGNoYXIgKnNlcnZlcl9tZXNzYWdlID0gIk1FU1NBR0UiOwog ICAgY2hhciBjbGllbnRfbWVzc2FnZVsyMDAwXSA9IHsgMCB9OwoKI2lmIGRlZmluZWQoX1dJ TjMyKQogICAgV1NBREFUQSB3c2FEYXRhOwogICAgaW50IGlSZXN1bHQgPSBXU0FTdGFydHVw KE1BS0VXT1JEKDIsMiksICZ3c2FEYXRhKTsKICAgIGlmIChpUmVzdWx0ICE9IE5PX0VSUk9S KSB7IHByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWQ6ICVkXG4iLCBpUmVzdWx0KTsgcmV0dXJu IDE7IH0KI2VuZGlmCgogICAgaW50IHNvY2tldF9kZXNjID0gc29ja2V0KEFGX0lORVQsIFNP Q0tfU1RSRUFNLCAwKTsgIAogICAgaWYgKHNvY2tldF9kZXNjIDwgMCkge3ByaW50ZigiQ291 bGQgbm90IGNyZWF0ZSBzb2NrZXRcbiIpOyByZXR1cm4gMTt9CgogICAgc3RydWN0IHNvY2th ZGRyX2luIHNlcnZlcl9hZGRyOwogICAgc2VydmVyX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lO RVQ7CiAgICBzZXJ2ZXJfYWRkci5zaW5fcG9ydCA9IGh0b25zKDIwMDApOwogICAgc2VydmVy X2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKCIxMjcuMC4wLjEiKTsKICAgIGlm IChiaW5kKHNvY2tldF9kZXNjLCAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcl9hZGRyLCBz aXplb2Yoc2VydmVyX2FkZHIpKSA8IDApIHsgcHJpbnRmKCJiaW5kKCkgZmFpbGVkXG4iKTsg cmV0dXJuIDE7IH0KCiAgICBpZiAobGlzdGVuKHNvY2tldF9kZXNjLCAxKSA8IDApIHsgcHJp bnRmKCJsaXN0ZW4oKSBmYWlsZWRcbiIpOyByZXR1cm4gMTsgfQogICAgcHJpbnRmKCJMaXN0 ZW5pbmcgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLi4uXG4iKTsKCiAgICBzdHJ1Y3Qgc29j a2FkZHJfaW4gY2xpZW50X2FkZHI7CiAgICBpbnQgY2xpZW50X3NpemUgPSBzaXplb2YoY2xp ZW50X2FkZHIpOwogICAgaW50IGNsaWVudF9zb2NrID0gYWNjZXB0KHNvY2tldF9kZXNjLCAo c3RydWN0IHNvY2thZGRyKikmY2xpZW50X2FkZHIsICZjbGllbnRfc2l6ZSk7CiAgICBpZiAo Y2xpZW50X3NvY2sgPCAwKSB7IHByaW50ZigiYWNjZXB0KCkgZmFpbGVkXG4iKTsgcmV0dXJu IDE7IH0KICAgIHByaW50ZigiQ2xpZW50IGNvbm5lY3RlZDogJXM6JWlcbiIsIGluZXRfbnRv YShjbGllbnRfYWRkci5zaW5fYWRkciksIG50b2hzKGNsaWVudF9hZGRyLnNpbl9wb3J0KSk7 CgogICAgaWYgKHJlY3YoY2xpZW50X3NvY2ssIGNsaWVudF9tZXNzYWdlLCBzaXplb2YoY2xp ZW50X21lc3NhZ2UpLCAwKSA8IDApIHsgcHJpbnRmKCJyZWN2KCkgZmFpbGVkXG4iKTsgcmV0 dXJuIC0xOyB9CiAgICBwcmludGYoIkNsaWVudCBtZXNzYWdlOiAlc1xuIiwgY2xpZW50X21l c3NhZ2UpOwoKICAgIHByaW50ZigiU2VuZGluZyBtZXNzYWdlLi4uXG4iKTsKICAgIGlmIChz ZW5kKGNsaWVudF9zb2NrLCBzZXJ2ZXJfbWVzc2FnZSwgc3RybGVuKHNlcnZlcl9tZXNzYWdl KSwgMCkgPCAwKSB7IHByaW50Zigic2VuZCgpIGZhaWxlZFxuIik7IHJldHVybiAxOyB9Cgoj aWYgZGVmaW5lZChfV0lOMzIpCiAgICBpZiAoYXJnYyA+IDEgJiYgc3RyY21wKGFyZ3ZbMV0s ICJzaHV0ZG93biIpID09IDApCiAgICB7CiAgICAgICAgcHJpbnRmKCJDYWxsaW5nIHNodXRk b3duKCkuLi5cbiIpOwogICAgICAgIHNodXRkb3duKGNsaWVudF9zb2NrLCBTRF9TRU5EKTsK ICAgIH0KICAgIGlmICgoYXJnYyA+IDEgJiYgc3RyY21wKGFyZ3ZbYXJnYyAtIDFdLCAiY2xv c2Vzb2NrZXQiKSA9PSAwKSkKICAgIHsKICAgICAgICBwcmludGYoIkNhbGxpbmcgY2xvc2Vz b2NrZXQoKS4uLlxuIik7CiAgICAgICAgY2xvc2Vzb2NrZXQoY2xpZW50X3NvY2spOwogICAg fQojZW5kaWYKICAgIHByaW50ZigiRXhpdGluZy4uLlxuIik7CiAgICByZXR1cm4gMDsKfQo= --------------bChBHeIVXDsybeserihlZrKq Content-Type: text/x-csrc; charset=UTF-8; name="client.c" Content-Disposition: attachment; filename="client.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpZiBkZWZpbmVkKF9X SU4zMikKI2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHdpbnNvY2suaD4KCiNwcmFn bWEgY29tbWVudCAobGliLCAiV3MyXzMyLmxpYiIpCiNkZWZpbmUgc2xlZXAocykgU2xlZXAo KHMpICogMTAwMCkKI2Vsc2UKI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUgPGFy cGEvaW5ldC5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNlbmRpZgoKaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgY2hhciBzZXJ2ZXJfbWVzc2FnZVsyMDAwXSA9IHsg MCB9OwogICAgY2hhciBjbGllbnRfbWVzc2FnZVsyMDAwXSA9IHsgMCB9OwogICAgCiNpZiBk ZWZpbmVkKF9XSU4zMikKICAgIFdTQURBVEEgd3NhRGF0YTsKICAgIGludCBpUmVzdWx0ID0g V1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSk7CiAgICBpZiAoaVJlc3VsdCAh PSBOT19FUlJPUikgeyBwcmludGYoIldTQVN0YXJ0dXAgZmFpbGVkOiAlZFxuIiwgaVJlc3Vs dCk7IHJldHVybiAxOyB9CiNlbmRpZgoKICAgIGludCBzb2NrZXRfZGVzYyA9IHNvY2tldChB Rl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7ICAKICAgIGlmIChzb2NrZXRfZGVzYyA8IDApIHsg cHJpbnRmKCJDb3VsZCBub3QgY3JlYXRlIHNvY2tldFxuIik7IHJldHVybiAtMTsgfSAgIAog ICAgCiAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyX2FkZHI7CiAgICBzZXJ2ZXJfYWRk ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgIHNlcnZlcl9hZGRyLnNpbl9wb3J0ID0gaHRv bnMoMjAwMCk7CiAgICBzZXJ2ZXJfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIo IjEyNy4wLjAuMSIpOwogICAgCiAgICBpZiAoY29ubmVjdChzb2NrZXRfZGVzYywgKHN0cnVj dCBzb2NrYWRkciopJnNlcnZlcl9hZGRyLCBzaXplb2Yoc2VydmVyX2FkZHIpKSA8IDApIHsg cHJpbnRmKCJDb3VsZCBub3QgY29ubmVjdFxuIik7IHJldHVybiAtMTsgfQogICAgCiAgICBw cmludGYoIkNvbm5lY3Rpb24gdG8gc2VydmVyIGVzdGFibGlzaGVkLiBFbnRlciBtZXNzYWdl OiAiKTsKICAgIGZnZXRzKGNsaWVudF9tZXNzYWdlLCBzaXplb2YoY2xpZW50X21lc3NhZ2Up LCBzdGRpbik7CiAgICAKICAgIGlmIChzZW5kKHNvY2tldF9kZXNjLCBjbGllbnRfbWVzc2Fn ZSwgc3RybGVuKGNsaWVudF9tZXNzYWdlKSwgMCkgPCAwKSB7IHByaW50Zigic2VuZCgpIGZh aWxlZFxuIik7IHJldHVybiAtMTsgfQogICAgcHJpbnRmKCJTbGVlcGluZy4uLlxuIik7CiAg ICBzbGVlcCgzKTsKICAgIGlmIChhcmdjID4gMSAmJiBzdHJjbXAoYXJndlsxXSwgInNlbmRf YmVmb3JlX3JlY3YiKSA9PSAwKQogICAgewogICAgICAgIGludCByID0gc2VuZChzb2NrZXRf ZGVzYywgY2xpZW50X21lc3NhZ2UsIHN0cmxlbihjbGllbnRfbWVzc2FnZSksIDApOwogICAg ICAgIHByaW50Zigic2VuZCgpIHJldHVybmVkICVkXG4iLCByKTsKICAgIH0KICAgIHByaW50 ZigiQ2FsbGluZyByZWN2KCkuLi5cbiIpOwogICAgaWYgKHJlY3Yoc29ja2V0X2Rlc2MsIHNl cnZlcl9tZXNzYWdlLCBzaXplb2Yoc2VydmVyX21lc3NhZ2UpLCAwKSA8IDApIHsgcHJpbnRm KCJyZWN2KCkgZmFpbGVkXG4iKTsgcmV0dXJuIDE7IH0KICAgIAogICAgcHJpbnRmKCJTZXJ2 ZXIgbWVzc2FnZTogJXNcbiIsIHNlcnZlcl9tZXNzYWdlKTsKICAgIHJldHVybiAwOwp9Cg== --------------bChBHeIVXDsybeserihlZrKq Content-Type: text/x-patch; charset=UTF-8; name="win-sock-tests-01.patch" Content-Disposition: attachment; filename="win-sock-tests-01.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L21lc29uLmJ1aWxkIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvbWVzb24uYnVpbGQKaW5kZXggMmI0NTFmMTY1ZS4uNjc0YWIwYTdi OSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvbWVzb24uYnVpbGQKKysrIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvbWVzb24uYnVpbGQKQEAgLTM5LDQgKzM5LDkgQEAgdGVz dHMgKz0gewogICAgIF0sCiAgICAgJ3JlZ3Jlc3NfYXJncyc6IFsnLS1kbHBhdGgnLCBtZXNv bi5idWlsZF9yb290KCkgLyAnc3JjL3Rlc3QvcmVncmVzcyddLAogICB9LAorICAndGFwJzog eworICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzA5OV9wb3N0Z3Jlc19mZHdfZGlzY29ubmVj dC5wbCcsCisgICAgXSwKKyAgfSwKIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3QvMDk5X3Bvc3RncmVzX2Zkd19kaXNjb25uZWN0LnBsIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvdC8wOTlfcG9zdGdyZXNfZmR3X2Rpc2Nvbm5lY3QucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjFiNTFmYjQ0OAotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3QvMDk5X3Bvc3RncmVzX2Zkd19kaXNjb25uZWN0LnBs CkBAIC0wLDAgKzEsODcgQEAKKyMgVGVzdCBwb3N0Z3Jlc19mZHcgcmVhY3Rpb24gb24gdGFy Z2V0IHNlcnZlciBkaXNjb25uZWN0aW9uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlIHRlc3Rz ID0+IDE7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKKwordXNlIFRpbWU6Okhp UmVzIHF3KHRpbWUgdXNsZWVwKTsKK3VzZSBEYXRlVGltZTsKKwordXNlIHRocmVhZHM7Cit1 c2UgdGhyZWFkczo6c2hhcmVkOworCitzdWIgcmVzdGFydF90aHJlYWQgeworCW15IEBhcmdz ID0gQF87CisJbXkgKCRzZXJ2ZXIpID0gQGFyZ3M7CisJJFNJR3snS0lMTCd9ID0gc3ViIHsg dGhyZWFkcy0+ZXhpdCgpOyB9OworCXNsZWVwKDMpOworCWZvciAobXkgJGkgPSAwOyAkaSA8 IDEwMDsgJGkrKykgeworCQlzbGVlcCg1KTsKKwkJJHNlcnZlci0+cmVzdGFydCgpOworCX0K K30KKworbXkgJGZvcmVpZ24gPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2Zv cmVpZ24nKTsKKyRmb3JlaWduLT5pbml0KCk7CisKKyRmb3JlaWduLT5hcHBlbmRfY29uZigK KwkncG9zdGdyZXNxbC5jb25mJywgcXF7Citsb2dfbWluX21lc3NhZ2VzID0gREVCVUcxCits b2dfbWluX2Vycm9yX3N0YXRlbWVudCA9IGxvZworbG9nX2Nvbm5lY3Rpb25zID0gb24KK2xv Z19kaXNjb25uZWN0aW9ucyA9IG9uCitsb2dfbGluZV9wcmVmaXggPSAnJW18JXV8JWR8JWN8 JworbG9nX3N0YXRlbWVudCA9ICdhbGwnCisJfSk7CiskZm9yZWlnbi0+c3RhcnQ7CitteSAk Zm9yZWlnbl9wb3J0ID0gJGZvcmVpZ24tPnBvcnQ7CisKK215ICRsb2NhbCA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbG9jYWwnKTsKKyRsb2NhbC0+aW5pdCgpOworCisk bG9jYWwtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK2xvZ19taW5f bWVzc2FnZXMgPSBERUJVRzEKK2xvZ19taW5fZXJyb3Jfc3RhdGVtZW50ID0gbG9nCitsb2df Y29ubmVjdGlvbnMgPSBvbgorbG9nX2Rpc2Nvbm5lY3Rpb25zID0gb24KK2xvZ19saW5lX3By ZWZpeCA9ICclbXwldXwlZHwlY3wnCitsb2dfc3RhdGVtZW50ID0gJ2FsbCcKKwl9KTsKKyRs b2NhbC0+c3RhcnQoKTsKKworJGZvcmVpZ24tPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsK K0NSRUFURSBUQUJMRSBsYXJnZShhIGludCwgdCB0ZXh0KTsKK0lOU0VSVCBJTlRPIGxhcmdl IFNFTEVDVCB4LCBycGFkKHg6OnRleHQsIDEwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwg OTk5OTk5KSB4OworfSk7CisKKworJGxvY2FsLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7 CitDUkVBVEUgRVhURU5TSU9OIHBvc3RncmVzX2ZkdzsKK0NSRUFURSBTRVJWRVIgZnBnIEZP UkVJR04gREFUQSBXUkFQUEVSIHBvc3RncmVzX2ZkdyBPUFRJT05TIChkYm5hbWUgJ3Bvc3Rn cmVzJywgcG9ydCAnJGZvcmVpZ25fcG9ydCcpOworQ1JFQVRFIFVTRVIgTUFQUElORyBGT1Ig Q1VSUkVOVF9VU0VSIFNFUlZFUiBmcGc7CitDUkVBVEUgRlVOQ1RJT04gZngyKGkgaW50ZWdl cikgUkVUVVJOUyBpbnQgQVMgJ2JlZ2luIHJldHVybiBpICogMjsgZW5kOycgTEFOR1VBR0Ug cGxwZ3NxbDsKK30pOworCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjp0bXBfY2hlY2s7CisKKyRsb2NhbC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdJTVBP UlQgRk9SRUlHTiBTQ0hFTUEgcHVibGljIEZST00gU0VSVkVSIGZwZyBJTlRPIHB1YmxpYzsn KTsKK3ByaW50KCRsb2NhbC0+cHNxbCgncG9zdGdyZXMnLCAnRVhQTEFJTiAoVkVSQk9TRSkg U0VMRUNUICogRlJPTSBsYXJnZSBXSEVSRSBhID0gZngyKGEpJykgLiAiXG4iKTsKK215ICR0 aHJlYWQgPSB0aHJlYWRzLT5jcmVhdGUoJ3Jlc3RhcnRfdGhyZWFkJywgJGZvcmVpZ24pOwor JEVOVntQR0hPU1R9ID0gJGxvY2FsLT5ob3N0OworJEVOVntQR1BPUlR9ID0gJGxvY2FsLT5w b3J0OworJEVOVntQR0NUTFRJTUVPVVR9ID0gMTgwOworZm9yIChteSAkaSA9IDE7ICRpIDw9 IDUwOyAkaSsrKSB7CisJZGlhZygiIGV4ZWN1dGluZyBxdWVyeSAoJGkpLi4uIik7CisjIEF2 b2lkIHVzaW5nIElQQzo6UnVuIGR1ZSB0byBpdCdzIG93biBxdWlya3MKKyMJbXkgKCRyZXQs ICRzdGRvdXQsICRzdGRlcnIpID0gJGxvY2FsLT5wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1Qg KiBGUk9NIGxhcmdlIFdIRVJFIGEgPSBmeDIoYSknKTsKKwlteSAkcmV0ID0gc3lzdGVtKCJw c3FsIHBvc3RncmVzIC1jIFwiU0VMRUNUICRpIGksICogRlJPTSBsYXJnZSBXSEVSRSBhID0g ZngyKGEpXCIgPj5cIiRvdXRwdXRkaXIvcHNxbC5sb2dcIiAyPiYxIik7CisJZGlhZygiIHJl c3VsdDogXHQkcmV0Iik7Cit9CiskdGhyZWFkLT5raWxsKCdLSUxMJyktPmRldGFjaDsKK3Ns ZWVwKDIpOworJGZvcmVpZ24tPl91cGRhdGVfcGlkKDEpOworb2soMSk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCmluZGV4IDkxMTA4NGFjMGYuLmJlZTIyN2Vh YmUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxk CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBAIC0xMCw2 ICsxMCwxMSBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDJfdGFibGVzcGFjZS5wbCcsCiAg ICAgICAndC8wMDNfY2hlY2tfZ3VjLnBsJywKICAgICAgICd0LzAwNF9pb19kaXJlY3QucGwn LAorICAgICAgJ3QvMDk5X2Nhc2VfMTU1OTgucGwnLAorICAgICAgJ3QvMDUxX2Ryb3BkYl9m b3JjZS5wbCcsCisgICAgICAndC8wOTlfcGdiZW5jaF93aXRoX3NlcnZlcl9vZmYucGwnLAor ICAgICAgJ3QvMDk5X2VjcGdfMTY2NzgucGwnLAorICAgICAgJ3QvMDk5X2NvbW1pdF90c18w MDJfc3RhbmRieS5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9taXNjL3QvMDUxX2Ryb3BkYl9mb3JjZS5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9taXNjL3QvMDUxX2Ryb3BkYl9mb3JjZS5wbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi45NGQxNzBmMDgxCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wNTFfZHJvcGRiX2ZvcmNlLnBsCkBAIC0w LDAgKzEsMTA2IEBACisjCisjIFRlc3RzIHRoZSBmb3JjZSBvcHRpb24gb2YgZHJvcCBkYXRh YmFzZSBjb21tYW5kLgorIwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7 Cit1c2UgVGVzdDo6TW9yZTsKKworIyBUbyBhdm9pZCBoYW5naW5nIHdoaWxlIGV4cGVjdGlu ZyBzb21lIHNwZWNpZmljIGlucHV0IGZyb20gYSBwc3FsCisjIGluc3RhbmNlIGJlaW5nIGRy aXZlbiBieSB1cywgYWRkIGEgdGltZW91dCBoaWdoIGVub3VnaCB0aGF0IGl0CisjIHNob3Vs ZCBuZXZlciB0cmlnZ2VyIGV2ZW4gb24gdmVyeSBzbG93IG1hY2hpbmVzLCB1bmxlc3Mgc29t ZXRoaW5nCisjIGlzIHJlYWxseSB3cm9uZy4KK215ICRwc3FsX3RpbWVvdXQgPSBJUEM6OlJ1 bjo6dGltZXIoNjApOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbWFpbicpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKyMgQ3JlYXRl IGEgZGF0YWJhc2UgdGhhdCB3aWxsIGJlIGRyb3BwZWQuICBUaGlzIHdpbGwgdGVzdCB0aGF0 IHRoZSBmb3JjZQorIyBvcHRpb24gd29ya3Mgd2hlbiBubyBvdGhlciBiYWNrZW5kIGlzIGNv bm5lY3RlZCB0byB0aGUgZGF0YWJhc2UgYmVpbmcKKyMgZHJvcHBlZC4KKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBEQVRBQkFTRSBmb29iYXInKTsKKyRub2RlLT5p c3N1ZXNfc3FsX2xpa2UoCisgICAgICAgIFsgJ2Ryb3BkYicsICctLWZvcmNlJywgJ2Zvb2Jh cicgXSwKKyAgICAgICAgcXIvc3RhdGVtZW50OiBEUk9QIERBVEFCQVNFIGZvb2JhciBXSVRI IFwoRk9SQ0VcKTsvLAorICAgICAgICAnU1FMIERST1AgREFUQUJBU0UgKEZPUkNFKSBydW4n KTsKKworIyBkYXRhYmFzZSBmb29iYXIgbXVzdCBub3QgZXhpc3QuCitpcyggJG5vZGUtPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJcXFbU0VMRUNUIEVYSVNUUyhTRUxFQ1QgKiBG Uk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWU9J2Zvb2JhcicpO10KKwkpLAorCSdmJywK KwknZGF0YWJhc2UgZm9vYmFyIHdhcyByZW1vdmVkJyk7CisKKyMgQ3JlYXRlIGEgZGF0YWJh c2UgdGhhdCB3aWxsIGJlIGRyb3BwZWQuICBUaGlzIHdpbGwgdGVzdCB0aGF0IHRoZSBmb3Jj ZQorIyBvcHRpb24gd29ya3Mgd2hlbiBvbmUgb3RoZXIgYmFja2VuZCBpcyBjb25uZWN0ZWQg dG8gdGhlIGRhdGFiYXNlIGJlaW5nCisjIGRyb3BwZWQuCiskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdDUkVBVEUgREFUQUJBU0UgZm9vYmFyMScpOworCisjIFJ1biBwc3FsLCBr ZWVwaW5nIHNlc3Npb24gYWxpdmUsIHNvIHdlIGhhdmUgYW4gYWxpdmUgYmFja2VuZCB0byBr aWxsLgorbXkgKCRraWxsbWVfc3RkaW4sICRraWxsbWVfc3Rkb3V0LCAka2lsbG1lX3N0ZGVy cikgPSAoJycsICcnLCAnJyk7CitteSAka2lsbG1lID0gSVBDOjpSdW46OnN0YXJ0KAorCVsK KwkJJ3BzcWwnLCAnLVgnLCAnLXFBdCcsICctdicsICdPTl9FUlJPUl9TVE9QPTEnLCAnLWYn LCAnLScsICctZCcsCisJCSRub2RlLT5jb25uc3RyKCdmb29iYXIxJykKKwldLAorCSc8JywK KwlcJGtpbGxtZV9zdGRpbiwKKwknPicsCisJXCRraWxsbWVfc3Rkb3V0LAorCScyPicsCisJ XCRraWxsbWVfc3RkZXJyLAorCSRwc3FsX3RpbWVvdXQpOworCisjIEVuc3VyZSBraWxsbWUg cHJvY2VzcyBpcyBhY3RpdmUuCiska2lsbG1lX3N0ZGluIC49IHFbCitTRUxFQ1QgcGdfYmFj a2VuZF9waWQoKTsKK107CitvayggcHVtcF91bnRpbCgKKwkJJGtpbGxtZSwgJHBzcWxfdGlt ZW91dCwgXCRraWxsbWVfc3Rkb3V0LCBxci9bWzpkaWdpdDpdXStbXHJcbl0kL20pLAorCSdh Y3F1aXJlZCBwaWQgZm9yIFNJR1RFUk0nKTsKK215ICRwaWQgPSAka2lsbG1lX3N0ZG91dDsK K2Nob21wKCRwaWQpOworJGtpbGxtZV9zdGRvdXQgPSAnJzsKKyRraWxsbWVfc3RkZXJyID0g Jyc7CisKKyMgQ2hlY2sgdGhlIGNvbm5lY3Rpb25zIG9uIGZvb2JhcjEgZGF0YWJhc2UuCitp cyggJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJcXFbU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgZGF0bmFtZT0nZm9vYmFyMScgQU5EIHBpZCA9 ICRwaWQ7XQorCSksCisJJHBpZCwKKwknZGF0YWJhc2UgZm9vYmFyMSBpcyB1c2VkJyk7CisK KyMgTm93IGRyb3AgZGF0YWJhc2Ugd2l0aCBkcm9wZGIgLS1mb3JjZSBjb21tYW5kLgorJG5v ZGUtPmlzc3Vlc19zcWxfbGlrZSgKKwlbICdkcm9wZGInLCAnLS1mb3JjZScsICdmb29iYXIx JyBdLAorCXFyL3N0YXRlbWVudDogRFJPUCBEQVRBQkFTRSBmb29iYXIxIFdJVEggXChGT1JD RVwpOy8sCisJJ1NRTCBEUk9QIERBVEFCQVNFIChGT1JDRSkgcnVuJyk7CisKKyMgQ2hlY2sg dGhhdCBwc3FsIHNlZXMgdGhlIGtpbGxlZCBiYWNrZW5kIGFzIGhhdmluZyBiZWVuIHRlcm1p bmF0ZWQuCiska2lsbG1lX3N0ZGluIC49IHFbCitTRUxFQ1QgMTsKK107CitvayggcHVtcF91 bnRpbCgKKwkJJGtpbGxtZSwgJHBzcWxfdGltZW91dCwgXCRraWxsbWVfc3RkZXJyLAorCQlx ci9GQVRBTDogIHRlcm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGFkbWluaXN0cmF0b3Ig Y29tbWFuZC9tKSwKKwkicHNxbCBxdWVyeSBkaWVkIHN1Y2Nlc3NmdWxseSBhZnRlciBTSUdU RVJNIik7Ciska2lsbG1lX3N0ZGVyciA9ICcnOworJGtpbGxtZV9zdGRvdXQgPSAnJzsKKyRr aWxsbWUtPmZpbmlzaDsKKworIyBkYXRhYmFzZSBmb29iYXIxIG11c3Qgbm90IGV4aXN0Lgor aXMoICRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsCisJCXFxW1NFTEVDVCBFWElT VFMoU0VMRUNUICogRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lPSdmb29iYXIxJyk7 XQorCSksCisJJ2YnLAorCSdkYXRhYmFzZSBmb29iYXIxIHdhcyByZW1vdmVkJyk7CisKKyRu b2RlLT5zdG9wKCk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvdC8wOTlfY2FzZV8xNTU5OC5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL3QvMDk5X2Nhc2VfMTU1OTgucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNTcyNDNiMDRkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDk5X2Nhc2VfMTU1OTgucGwKQEAgLTAsMCArMSw2 MSBAQAorIyBSdW4gZWNwZyByZWdyZXNzaW9uIHRlc3RzIGluIGEgbG9vcAordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6 QmFzZW5hbWU7CisKKyMgSW5pdGlhbGl6ZSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygncDEnKTsKKyRub2RlLT5pbml0KAorKTsKKworJG5vZGUt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFxeworfSk7CisKKyRub2Rl LT5zdGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnc2VsZWN0IDEnKTsK KworbXkgJHBzcWxfdGltZW91dCA9IElQQzo6UnVuOjp0aW1lcigxMCk7CisjIFJ1biBwc3Fs LCAuLi4KK215ICgkcHNxbF9zdGRpbiwgJHBzcWxfc3Rkb3V0LCAkcHNxbF9zdGRlcnIpID0g KCcnLCAnJywgJycpOworbXkgJHBzcWwgPSBJUEM6OlJ1bjo6c3RhcnQoCisgICAgWworICAg ICAgICAncHNxbCcsICctWCcsICctQXQnLCAnLXYnLCAnT05fRVJST1JfU1RPUD0xJywgJy1m JywgJy0nLCAnLWQnLAorICAgICAgICAkbm9kZS0+Y29ubnN0cigncG9zdGdyZXMnKQorICAg IF0sCisgICAgJzwnLAorICAgIFwkcHNxbF9zdGRpbiwKKyAgICAnPicsCisgICAgXCRwc3Fs X3N0ZG91dCwKKyAgICAnMj4nLAorICAgIFwkcHNxbF9zdGRlcnIsCisgICAgJHBzcWxfdGlt ZW91dCk7CisKKyRwc3FsX3N0ZGluIC49IHFbCitTRVQgaWRsZV9pbl90cmFuc2FjdGlvbl9z ZXNzaW9uX3RpbWVvdXQ9NTAwOworQkVHSU47CitTRUxFQ1QgKiBGUk9NIHBnX2NsYXNzOwor XTsKKworJHBzcWwtPnB1bXBfbmIoKTsKK3NsZWVwKDEpOworCiskcHNxbF9zdGRpbiAuPSBx WworU0VMRUNUICdPSyc7CitdOworCitvayhwdW1wX3VudGlsKAorICAgICAgICAkcHNxbCwg JHBzcWxfdGltZW91dCwgXCRwc3FsX3N0ZGVyciwgcXIvRkFUQUw6ICB0ZXJtaW5hdGluZyBj b25uZWN0aW9uIGR1ZSB0byBpZGxlLWluLXRyYW5zYWN0aW9uIHRpbWVvdXQvbSksICJleHBl Y3RlZCBGQVRBTCBtZXNzYWdlIHJlY2VpdmVkIik7CisKK3ByaW50KCRwc3FsX3N0ZGluIC4g IlxuIik7CitwcmludCgicHNxbCBzdGRvdXQ6ICIuICRwc3FsX3N0ZG91dCAuICJcbnBzcWwg c3RkZXJyOiAiIC4gJHBzcWxfc3RkZXJyLiAiXG4iKTsKKworb2soMSk7Ciskbm9kZS0+c3Rv cDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfbWlzYy90LzA5OV9jb21taXRfdHNfMDAyX3N0YW5kYnkucGwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfbWlzYy90LzA5OV9jb21taXRfdHNfMDAyX3N0YW5kYnkucGwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTljYzJiMTI0NAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDk5X2NvbW1pdF90c18wMDJf c3RhbmRieS5wbApAQCAtMCwwICsxLDY4IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIw MjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBzaW1w bGUgc2NlbmFyaW8gaW52b2x2aW5nIGEgc3RhbmRieQorCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOworCitteSAkYmtwbGFiZWwgPSAn YmFja3VwJzsKK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3 KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOwor CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxeworCXRy YWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvbgorCW1heF93YWxfc2VuZGVycyA9IDUKKwl9KTsK KyRwcmltYXJ5LT5zdGFydDsKKyRwcmltYXJ5LT5iYWNrdXAoJGJrcGxhYmVsKTsKKworbXkg JHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnknKTsK KyRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAkYmtwbGFiZWwsIGhhc19z dHJlYW1pbmcgPT4gMSk7Ciskc3RhbmRieS0+c3RhcnQ7CisKK2ZvciBteSAkaSAoMSAuLiAx MCkKK3sKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJjcmVhdGUgdGFibGUg dCRpKCkiKTsKK30KK215ICRwcmltYXJ5X3RzID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCXFxe1NFTEVDVCB0cy4qIEZST00gcGdfY2xhc3MsIHBnX3hhY3RfY29tbWl0 X3RpbWVzdGFtcCh4bWluKSBBUyB0cyBXSEVSRSByZWxuYW1lID0gJ3QxMCd9CispOworbXkg JHByaW1hcnlfbHNuID0KKyAgJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnc2Vs ZWN0IHBnX2N1cnJlbnRfd2FsX2xzbigpJyk7Ciskc3RhbmRieS0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorCXFxe1NFTEVDVCAnJHByaW1hcnlfbHNuJzo6cGdfbHNuIDw9IHBn X2xhc3Rfd2FsX3JlcGxheV9sc24oKX0pCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBjYXVn aHQgdXAiOworCitteSAkc3RhbmRieV90cyA9ICRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwlxcXtzZWxlY3QgdHMuKiBmcm9tIHBnX2NsYXNzLCBwZ194YWN0X2NvbW1pdF90 aW1lc3RhbXAoeG1pbikgdHMgd2hlcmUgcmVsbmFtZSA9ICd0MTAnfQorKTsKK2lzKCRwcmlt YXJ5X3RzLCAkc3RhbmRieV90cywgInN0YW5kYnkgZ2l2ZXMgc2FtZSB2YWx1ZSBhcyBwcmlt YXJ5Iik7CisKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3Ry YWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvZmYnKTsKKyRwcmltYXJ5LT5yZXN0YXJ0OworJHBy aW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnY2hlY2twb2ludCcpOworJHByaW1hcnlf bHNuID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnc2VsZWN0IHBnX2N1cnJl bnRfd2FsX2xzbigpJyk7Ciskc3RhbmRieS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCXFxe1NFTEVDVCAnJHByaW1hcnlfbHNuJzo6cGdfbHNuIDw9IHBnX2xhc3Rfd2FsX3Jl cGxheV9sc24oKX0pCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBjYXVnaHQgdXAiOworJHN0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnY2hlY2twb2ludCcpOworCisjIFRoaXMg b25lIHNob3VsZCByYWlzZSBhbiBlcnJvciBub3cKK215ICgkcmV0LCAkc3RhbmRieV90c19z dGRvdXQsICRzdGFuZGJ5X3RzX3N0ZGVycikgPSAkc3RhbmRieS0+cHNxbCgncG9zdGdyZXMn LAorCSdzZWxlY3QgdHMuKiBmcm9tIHBnX2NsYXNzLCBwZ194YWN0X2NvbW1pdF90aW1lc3Rh bXAoeG1pbikgdHMgd2hlcmUgcmVsbmFtZSA9IFwndDEwXCcnCispOworaXMoJHJldCwgMywg J3N0YW5kYnkgZXJyb3JzIHdoZW4gcHJpbWFyeSB0dXJuZWQgZmVhdHVyZSBvZmYnKTsKK2lz KCRzdGFuZGJ5X3RzX3N0ZG91dCwgJycsCisJInN0YW5kYnkgZ2l2ZXMgbm8gdmFsdWUgd2hl biBwcmltYXJ5IHR1cm5lZCBmZWF0dXJlIG9mZiIpOworbGlrZSgKKwkkc3RhbmRieV90c19z dGRlcnIsCisJcXIvY291bGQgbm90IGdldCBjb21taXQgdGltZXN0YW1wIGRhdGEvLAorCSdl eHBlY3RlZCBlcnJvciB3aGVuIHByaW1hcnkgdHVybmVkIGZlYXR1cmUgb2ZmJyk7CisKK2Rv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2Mv dC8wOTlfZWNwZ18xNjY3OC5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDk5 X2VjcGdfMTY2NzgucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMC4u NTNkMWFmN2ZlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9t aXNjL3QvMDk5X2VjcGdfMTY2NzgucGwKQEAgLTAsMCArMSw1NiBAQAorIyBSdW4gZWNwZyBy ZWdyZXNzaW9uIHRlc3RzIGluIGEgbG9vcAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKKyMgSW5p dGlhbGl6ZSBwcmltYXJ5IG5vZGUKK215ICRub2RlX3ByaW1hcnkgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3AxJyk7Ciskbm9kZV9wcmltYXJ5LT5pbml0KAorCSdhdXRo X2V4dHJhJyA9PiBbICctLWNyZWF0ZS1yb2xlJywgJ3JlZ3Jlc3NfZWNwZ191c2VyMSxyZWdy ZXNzX2VjcGdfdXNlcjInIF0KKyk7CisKKyRub2RlX3ByaW1hcnktPnN0YXJ0OworCitteSAk b3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CitteSAk TlVNX0lURVJBVElPTlMgPSAyOworCitmb3IgKG15ICRpID0gMDsgJGkgPCAkTlVNX0lURVJB VElPTlM7ICRpKyspCit7CitteSAkZXh0cmFfb3B0cyA9ICRFTlZ7RVhUUkFfUkVHUkVTU19P UFRTfSB8fCAiIjsKKworbXkgJHJjID0KKyAgc3lzdGVtKCJcIiRvdXRwdXRkaXIvLi4vLi4v Li4vLi4vc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3BnX3JlZ3Jlc3NfZWNwZ1wiICIKKwkg IC4gIiAkZXh0cmFfb3B0cyAiCisJICAuICItLWRibmFtZT1lY3BnMV9yZWdyZXNzaW9uLGVj cGcyX3JlZ3Jlc3Npb24gLS1jcmVhdGUtcm9sZT1yZWdyZXNzX2VjcGdfdXNlcjEscmVncmVz c19lY3BnX3VzZXIyICIKKwkgIC4gIi0tYmluZGlyPSAiCisJICAuICItLWhvc3Q9IgorCSAg LiAkbm9kZV9wcmltYXJ5LT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IgorCSAgLiAkbm9k ZV9wcmltYXJ5LT5wb3J0IC4gIiAiCisJICAuICItLW91dHB1dGRpcj0kb3V0cHV0ZGlyICIK KwkgIC4gIi0taW5wdXRkaXI9JG91dHB1dGRpci8uLi8uLi8uLi8uLi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvICIKKwkgIC4gIi0tZXhwZWN0ZWRkaXI9Li4vLi4vLi4vLi4vc3JjL2lu dGVyZmFjZXMvZWNwZy90ZXN0LyAiCisJICAuICggImNvbm5lY3QvdGVzdDUgIiB4IDUwKQor KTsKKworaWYgKCRyYyAhPSAwKQoreworCSMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlm ZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVn cmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVt cGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXBy aW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CitpcygkcmMsIDAsICdlY3BnIHJlZ3Jlc3Np b24gdGVzdHMgcGFzcycpOworKCRyYyA9PSAwKSB8fCBsYXN0OworfQorCiskbm9kZV9wcmlt YXJ5LT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9taXNjL3QvMDk5X3BnYmVuY2hfd2l0aF9zZXJ2ZXJfb2ZmLnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wOTlfcGdiZW5jaF93aXRoX3NlcnZlcl9vZmYu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDA5ZWYxNjIxZgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDk5X3Bn YmVuY2hfd2l0aF9zZXJ2ZXJfb2ZmLnBsCkBAIC0wLDAgKzEsNDggQEAKKworIyBDb3B5cmln aHQgKGMpIDIwMjEtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KworIworIyB0ZXN0IHBnYmVuY2ggd2l0aCBzZXJ2ZXIgc3RvcHBlZCBhYnJ1cHRseSBkdXJp bmcgdGhlIHBnYmVuY2ggcnVuCisjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5pbml0KCk7Ciskbm9kZS0+c3Rh cnQ7CisKK215ICRwYl90aW1lb3V0ID0KKyAgSVBDOjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKK215ICgkcGJfc3RkaW4sICRwYl9z dGRvdXQsICRwYl9zdGRlcnIpID0gKCcnLCAnJywgJycpOworCiskRU5We1BHREFUQUJBU0V9 ID0gJ3Bvc3RncmVzJzsKKyRFTlZ7UEdIT1NUfSA9ICRub2RlLT5ob3N0OworJEVOVntQR1BP UlR9ID0gJG5vZGUtPnBvcnQ7CisKK215ICRwYiA9IElQQzo6UnVuOjpzdGFydCgKKyAgICBb CisgICAgICAgICdwZ2JlbmNoJywKKyAgICAgICAgJy1pJywgJy1zJywgJzEwMDAnCisgICAg XSwKKyAgICAnPCcsCisgICAgXCRwYl9zdGRpbiwKKyAgICAnPicsCisgICAgXCRwYl9zdGRv dXQsCisgICAgJzI+JywKKyAgICBcJHBiX3N0ZGVyciwKKyAgICAkcGJfdGltZW91dCk7Citz bGVlcCg1KTsKKyRub2RlLT5zdG9wKCdpbW1lZGlhdGUnKTsKK29rKCBwdW1wX3VudGlsKAor ICAgICAgICAkcGIsICRwYl90aW1lb3V0LAorICAgICAgICBcJHBiX3N0ZGVyciwgcXIvUFFw dXRsaW5lIGZhaWxlZC8pLAorICAgICdwZ2JlbmNoIHJlYWN0ZWQgdG8gc2VydmVyIHNodXRk b3duIGR1cmluZyBjb3B5Jyk7CiskcGItPmZpbmlzaCgpOworCitkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3NzbC9t ZXNvbi5idWlsZAppbmRleCBhYmIzMGFiMjE0Li45MjI4YWNmNmZiIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9zc2wvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxk CkBAIC0xMyw2ICsxMyw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwMV9zc2x0ZXN0cy5w bCcsCiAgICAgICAndC8wMDJfc2NyYW0ucGwnLAogICAgICAgJ3QvMDAzX3NzbGluZm8ucGwn LAorICAgICAgJ3QvMDk5X3JhcmVfc3NsX2ZhaWx1cmVzLnBsJywKICAgICBdLAogICB9LAog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3NsL3QvMDk5X3JhcmVfc3NsX2ZhaWx1cmVzLXYx Mi5wbCBiL3NyYy90ZXN0L3NzbC90LzA5OV9yYXJlX3NzbF9mYWlsdXJlcy12MTIucGwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMWM0M2YwMDMwMQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC90LzA5OV9yYXJlX3NzbF9mYWlsdXJlcy12MTIu cGwKQEAgLTAsMCArMSw4NCBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQ b3N0Z3Jlc05vZGU7Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDEw MDsKKwordXNlIEZpbGU6OkNvcHk7CisKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJp bjo6UmVhbEJpbjsKKwordXNlIFNTTFNlcnZlcjsKKworIyMjIyBTb21lIGNvbmZpZ3VyYXRp b24KKworIyBUaGlzIGlzIHRoZSBob3N0bmFtZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIHNl cnZlci4gVGhpcyBjYW5ub3QgYmUgYQorIyBob3N0bmFtZSwgYmVjYXVzZSB0aGUgc2VydmVy IGNlcnRpZmljYXRlIGlzIGFsd2F5cyBmb3IgdGhlIGRvbWFpbgorIyBwb3N0Z3Jlc3FsLXNz bC1yZWdyZXNzaW9uLnRlc3QuCitteSAkU0VSVkVSSE9TVEFERFIgPSAnMTI3LjAuMC4xJzsK KworbXkgJGNvbW1vbl9jb25uc3RyOworCitzdWIgY29ubmVjdF9mYWlscworeworCW15ICgk bm9kZSwgJGNvbm5zdHIsICR0ZXN0X25hbWUsICVwYXJhbXMpID0gQF87CisKKwlteSAkY21k ID0gWworCQkncHNxbCcsICctWCcsICctQScsICctdCcsICctYycsICJTRUxFQ1QgJ2Nvbm5l Y3RlZCB3aXRoICRjb25uc3RyJyIsCisJCSctZCcsICIkY29tbW9uX2Nvbm5zdHIgJGNvbm5z dHIiIF07CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVycik7CisKKwlwcmludCgiIyBSdW5uaW5n OiAiIC4gam9pbigiICIsIEB7JGNtZH0pIC4gIlxuIik7CisJbXkgJHJlc3VsdCA9IElQQzo6 UnVuOjpydW4gJGNtZCwgJz4nLCBcJHN0ZG91dCwgJzI+JywgXCRzdGRlcnI7CisKKwlpZiAo ZGVmaW5lZCgkcGFyYW1ze2V4cGVjdGVkX3N0ZGVycn0pKQorCXsKKwkJbGlrZSgkc3RkZXJy LCAkcGFyYW1ze2V4cGVjdGVkX3N0ZGVycn0sICIkdGVzdF9uYW1lOiBtYXRjaGVzIik7CisJ fQorfQorCisjIFRoZSBjbGllbnQncyBwcml2YXRlIGtleSBtdXN0IG5vdCBiZSB3b3JsZC1y ZWFkYWJsZSwgc28gdGFrZSBhIGNvcHkKKyMgb2YgdGhlIGtleSBzdG9yZWQgaW4gdGhlIGNv ZGUgdHJlZSBhbmQgdXBkYXRlIGl0cyBwZXJtaXNzaW9ucy4KK2NvcHkoInNzbC9jbGllbnQu a2V5IiwgInNzbC9jbGllbnRfdG1wLmtleSIpOworY2htb2QgMDYwMCwgInNzbC9jbGllbnRf dG1wLmtleSI7CisKKyMjIyMgUGFydCAwLiBTZXQgdXAgdGhlIHNlcnZlci4KKworbm90ZSAi c2V0dGluZyB1cCBkYXRhIGRpcmVjdG9yeSI7CitteSAkbm9kZSA9IGdldF9uZXdfbm9kZSgn bWFzdGVyJyk7Ciskbm9kZS0+aW5pdDsKKworIyBQR0hPU1QgaXMgZW5mb3JjZWQgaGVyZSB0 byBzZXQgdXAgdGhlIG5vZGUsIHN1YnNlcXVlbnQgY29ubmVjdGlvbnMKKyMgd2lsbCB1c2Ug YSBkZWRpY2F0ZWQgY29ubmVjdGlvbiBzdHJpbmcuCiskRU5We1BHSE9TVH0gPSAkbm9kZS0+ aG9zdDsKKyRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworJG5vZGUtPnN0YXJ0OworY29u ZmlndXJlX3Rlc3Rfc2VydmVyX2Zvcl9zc2woJG5vZGUsICRTRVJWRVJIT1NUQUREUiwgJ3Ry dXN0Jyk7Citzd2l0Y2hfc2VydmVyX2NlcnQoJG5vZGUsICdzZXJ2ZXItY24tb25seScpOwor CisjIyMgUGFydCAxLiBSdW4gY2xpZW50LXNpZGUgdGVzdHMuCisjIyMKKyMjIyBUZXN0IHRo YXQgbGlicHEgYWNjZXB0cy9yZWplY3RzIHRoZSBjb25uZWN0aW9uIGNvcnJlY3RseSwgZGVw ZW5kaW5nCisjIyMgb24gc3NsbW9kZSBhbmQgd2hldGhlciB0aGUgc2VydmVyJ3MgY2VydGlm aWNhdGUgbG9va3MgY29ycmVjdC4gTm8KKyMjIyBjbGllbnQgY2VydGlmaWNhdGUgaXMgdXNl ZCBpbiB0aGVzZSB0ZXN0cy4KKworbm90ZSAicnVubmluZyBjbGllbnQgdGVzdHMiOworCisk Y29tbW9uX2Nvbm5zdHIgPQorInVzZXI9c3NsdGVzdHVzZXIgZGJuYW1lPXRydXN0ZGIgc3Ns Y2VydD1pbnZhbGlkIGhvc3RhZGRyPSRTRVJWRVJIT1NUQUREUiBob3N0PWNvbW1vbi1uYW1l LnBnLXNzbHRlc3QudGVzdCI7CisKKworZm9yIChteSAkaSA9IDE7ICRpIDw9IDEwMDsgJGkr KykgeworcHJpbnQoIml0ZXJhdGlvbiAkaVxuIik7Citjb25uZWN0X2ZhaWxzKAorCSRub2Rl LAorCSJ1c2VyPXNzbHRlc3R1c2VyIHNzbGNlcnQ9c3NsL2NsaWVudC1yZXZva2VkLmNydCBz c2xrZXk9c3NsL2NsaWVudC1yZXZva2VkLmtleSIsCisJImNlcnRpZmljYXRlIGF1dGhvcml6 YXRpb24gZmFpbHMgd2l0aCByZXZva2VkIGNsaWVudCBjZXJ0IiwKKwlleHBlY3RlZF9zdGRl cnIgPT4gcXIvU1NMIGVycm9yOiBzc2x2MyBhbGVydCBjZXJ0aWZpY2F0ZSByZXZva2VkLywK Kyk7Cit9CisKKyMgY2xlYW4gdXAKK3VubGluayAic3NsL2NsaWVudF90bXAua2V5IjsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC90LzA5OV9yYXJlX3NzbF9mYWlsdXJlcy5wbCBiL3Ny Yy90ZXN0L3NzbC90LzA5OV9yYXJlX3NzbF9mYWlsdXJlcy5wbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi4wY2E3MGMwZmY2Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3Qvc3NsL3QvMDk5X3JhcmVfc3NsX2ZhaWx1cmVzLnBsCkBAIC0wLDAgKzEsMTAx IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKKwordXNlIEZpbGU6OkNvcHk7CisKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJp bjo6UmVhbEJpbjsKKwordXNlIFNTTDo6U2VydmVyOworCisjIyMjIFNvbWUgY29uZmlndXJh dGlvbgorCisjIFRoaXMgaXMgdGhlIGhvc3RuYW1lIHVzZWQgdG8gY29ubmVjdCB0byB0aGUg c2VydmVyLiBUaGlzIGNhbm5vdCBiZSBhCisjIGhvc3RuYW1lLCBiZWNhdXNlIHRoZSBzZXJ2 ZXIgY2VydGlmaWNhdGUgaXMgYWx3YXlzIGZvciB0aGUgZG9tYWluCisjIHBvc3RncmVzcWwt c3NsLXJlZ3Jlc3Npb24udGVzdC4KK215ICRTRVJWRVJIT1NUQUREUiA9ICcxMjcuMC4wLjEn OworIyBUaGlzIGlzIHRoZSBwYXR0ZXJuIHRvIHVzZSBpbiBwZ19oYmEuY29uZiB0byBtYXRj aCBpbmNvbWluZyBjb25uZWN0aW9ucy4KK215ICRTRVJWRVJIT1NUQ0lEUiA9ICcxMjcuMC4w LjEvMzInOworCitteSAkY29tbW9uX2Nvbm5zdHI7CisKK3N1YiBjb25uZWN0X2ZhaWxzCit7 CisJbXkgKCRub2RlLCAkY29ubnN0ciwgJHRlc3RfbmFtZSwgJXBhcmFtcykgPSBAXzsKKwor CW15ICRjbWQgPSBbCisJCSdwc3FsJywgJy1YJywgJy1BJywgJy10JywgJy1jJywgIlNFTEVD VCAnY29ubmVjdGVkIHdpdGggJGNvbm5zdHInIiwKKwkJJy1kJywgIiRjb21tb25fY29ubnN0 ciAkY29ubnN0ciIgXTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKTsKKworCXByaW50KCIj IFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQHskY21kfSkgLiAiXG4iKTsKKwlteSAkcmVzdWx0 ID0gSVBDOjpSdW46OnJ1biAkY21kLCAnPicsIFwkc3Rkb3V0LCAnMj4nLCBcJHN0ZGVycjsK KworCWlmIChkZWZpbmVkKCRwYXJhbXN7ZXhwZWN0ZWRfc3RkZXJyfSkpCisJeworCQlsaWtl KCRzdGRlcnIsICRwYXJhbXN7ZXhwZWN0ZWRfc3RkZXJyfSwgIiR0ZXN0X25hbWU6IG1hdGNo ZXMiKTsKKwl9Cit9CisKK215ICRzc2xfc2VydmVyID0gU1NMOjpTZXJ2ZXItPm5ldygpOwor CisjIFRoZSBjbGllbnQncyBwcml2YXRlIGtleSBtdXN0IG5vdCBiZSB3b3JsZC1yZWFkYWJs ZSwgc28gdGFrZSBhIGNvcHkKKyMgb2YgdGhlIGtleSBzdG9yZWQgaW4gdGhlIGNvZGUgdHJl ZSBhbmQgdXBkYXRlIGl0cyBwZXJtaXNzaW9ucy4KK2NvcHkoInNzbC9jbGllbnQua2V5Iiwg InNzbC9jbGllbnRfdG1wLmtleSIpOworY2htb2QgMDYwMCwgInNzbC9jbGllbnRfdG1wLmtl eSI7CisKKyMjIyMgUGFydCAwLiBTZXQgdXAgdGhlIHNlcnZlci4KKworbm90ZSAic2V0dGlu ZyB1cCBkYXRhIGRpcmVjdG9yeSI7CitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGUtPmluaXQ7CisKKyMgUEdIT1NUIGlzIGVu Zm9yY2VkIGhlcmUgdG8gc2V0IHVwIHRoZSBub2RlLCBzdWJzZXF1ZW50IGNvbm5lY3Rpb25z CisjIHdpbGwgdXNlIGEgZGVkaWNhdGVkIGNvbm5lY3Rpb24gc3RyaW5nLgorJEVOVntQR0hP U1R9ID0gJG5vZGUtPmhvc3Q7CiskRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKyRub2Rl LT5zdGFydDsKKworJHNzbF9zZXJ2ZXItPmNvbmZpZ3VyZV90ZXN0X3NlcnZlcl9mb3Jfc3Ns KCRub2RlLCAkU0VSVkVSSE9TVEFERFIsCisgICAgJFNFUlZFUkhPU1RDSURSLCAndHJ1c3Qn KTsKKworJHNzbF9zZXJ2ZXItPnN3aXRjaF9zZXJ2ZXJfY2VydCgKKyAgICAkbm9kZSwKKyAg ICBjZXJ0ZmlsZSA9PiAnc2VydmVyLWNuLW9ubHknLAorICAgIGNybGRpciA9PiAncm9vdCtj bGllbnQtY3JsZGlyJyk7CisKKyMjIyBQYXJ0IDEuIFJ1biBjbGllbnQtc2lkZSB0ZXN0cy4K KyMjIworIyMjIFRlc3QgdGhhdCBsaWJwcSBhY2NlcHRzL3JlamVjdHMgdGhlIGNvbm5lY3Rp b24gY29ycmVjdGx5LCBkZXBlbmRpbmcKKyMjIyBvbiBzc2xtb2RlIGFuZCB3aGV0aGVyIHRo ZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBsb29rcyBjb3JyZWN0LiBObworIyMjIGNsaWVudCBj ZXJ0aWZpY2F0ZSBpcyB1c2VkIGluIHRoZXNlIHRlc3RzLgorCitub3RlICJydW5uaW5nIGNs aWVudCB0ZXN0cyI7CisKKyRjb21tb25fY29ubnN0ciA9CisidXNlcj1zc2x0ZXN0dXNlciBk Ym5hbWU9dHJ1c3RkYiBzc2xjZXJ0PWludmFsaWQgaG9zdGFkZHI9JFNFUlZFUkhPU1RBRERS IGhvc3Q9Y29tbW9uLW5hbWUucGctc3NsdGVzdC50ZXN0IjsKKworCitmb3IgKG15ICRpID0g MTsgJGkgPD0gMTAwMDsgJGkrKykgeworcHJpbnQoIml0ZXJhdGlvbiAkaVxuIik7Ciskbm9k ZS0+Y29ubmVjdF9mYWlscygKKwkiJGNvbW1vbl9jb25uc3RyIHVzZXI9c3NsdGVzdHVzZXIg c3NsY2VydD1zc2wvY2xpZW50LXJldm9rZWQuY3J0ICIKKwkuICRzc2xfc2VydmVyLT5zc2xr ZXkoJ2NsaWVudC1yZXZva2VkLmtleScpLAorCSJjZXJ0aWZpY2F0ZSBhdXRob3JpemF0aW9u IGZhaWxzIHdpdGggcmV2b2tlZCBjbGllbnQgY2VydCB3aXRoIHNlcnZlci1zaWRlIENSTCBk aXJlY3RvcnkiLAorCWV4cGVjdGVkX3N0ZGVyciA9PiBxci9TU0wgZXJyb3I6IHNzbHYzIGFs ZXJ0IGNlcnRpZmljYXRlIHJldm9rZWQvLAorCSMgdGVtcG9yYXJpbHkoPykgc2tpcCB0aGlz IGNoZWNrIGR1ZSB0byB0aW1pbmcgaXNzdWUKKwkjICAgbG9nX2xpa2UgPT4gWworCSMgICAg ICAgcXJ7Q2xpZW50IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgZGVwdGgg MDogY2VydGlmaWNhdGUgcmV2b2tlZH0sCisJIyAgICAgICBxcntGYWlsZWQgY2VydGlmaWNh dGUgZGF0YSBcKHVudmVyaWZpZWRcKTogc3ViamVjdCAiL0NOPXNzbHRlc3R1c2VyIiwgc2Vy aWFsIG51bWJlciAyMzE1MTM0OTk1MjAxNjU2NTc3LCBpc3N1ZXIgIi9DTj1UZXN0IENBIGZv ciBQb3N0Z3JlU1FMIFNTTCByZWdyZXNzaW9uIHRlc3QgY2xpZW50IGNlcnRzIn0sCisJIyAg IF0KKyk7Cit9CisKKyMgY2xlYW4gdXAKK3VubGluayAic3NsL2NsaWVudF90bXAua2V5IjsK KworZG9uZV90ZXN0aW5nKCk7Cg== --------------bChBHeIVXDsybeserihlZrKq Content-Type: text/plain; charset=UTF-8; name="win-sock-tests-01.cmd.txt" Content-Disposition: attachment; filename="win-sock-tests-01.cmd.txt" Content-Transfer-Encoding: base64 OiAjIGdpdCByZXNldCAtLWhhcmQgYjI4MmZhODhkfjEgJiYgZ2l0IGNsZWFuIC1kZngKOiAj IGdpdCBhcHBseSAuLi4vd2luLXNvY2stdGVzdHMtMDEucGF0Y2gKOiAjIGNwIC4uLi92Mi0q LnBhdGNoIC4KCjogIyBTZXR1cCBhbiBhbGlhcyBmb3IgcHl0aG9uMyBvbiBXaW5kb3dzCjog IyBjZCAuXFwuICYmIG1rbGluayBjOlxQeXRob24zXHB5dGhvbjMuZXhlIGM6XFB5dGhvbjNc cHl0aG9uLmV4ZSBSRU0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdAoKY2QgLlxcLiAmJiBAZWNo byBvZmYKCjogIyBNdWx0aXBseSBzc2wgdGVzdHMKcGVybCAtaS5iYWsgLW5lICJwcmludCB1 bmxlc3MgL3NzbF8vIiAic3JjL3Rlc3QvbWVzb24uYnVpbGQiICYmIHB5dGhvbjMgLWMgImZv ciBpIGluIHJhbmdlKDEsMTArMSk6aW1wb3J0IG9zO2ltcG9ydCBzaHV0aWw7c2Q9XCJzcmMv dGVzdC9zc2wvXCI7dGQ9Zlwic3JjL3Rlc3Qvc3NsX3tpfVwiO3NodXRpbC5ybXRyZWUodGQs aWdub3JlX2Vycm9ycz0xKTtzaHV0aWwuY29weXRyZWUoc2QsIHRkKTthc3NlcnQob3Muc3lz dGVtKGYncGVybCAtaS5iYWsgLXBlIFwicyMoICBzdWJkaXIuXCdzc2xcJy4pIyAgc3ViZGly KFwnc3NsX3tpfVwnKXtjaHIoOTIpfW57Y2hyKDkyKX0xI1wiIFwic3JjL3Rlc3QvbWVzb24u YnVpbGRcIicpPT0wKTthc3NlcnQob3Muc3lzdGVtKGYncGVybCAtaS5iYWsgLXBlIFwicyNc J3NzbFwnLCNcJ3NzbF97aX1cJywjXCIgXCJ7dGR9L21lc29uLmJ1aWxkXCInKT09MCkiCgoK OiAjIE11bHRpcGx5IHRlc3RfbWlzYyB0ZXN0cwpwZXJsIC1pLmJhayAtbmUgInByaW50IHVu bGVzcyAvdGVzdF9taXNjXy8iICJzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIiAmJiBw eXRob24zIC1jICJmb3IgaSBpbiByYW5nZSgxLDEwKzEpOmltcG9ydCBvcztpbXBvcnQgc2h1 dGlsO3BkPVwic3JjL3Rlc3QvbW9kdWxlc1wiO209XCJ0ZXN0X21pc2NcIjt0ZD1mXCJ7cGR9 L3ttfV97aX1cIjtzaHV0aWwucm10cmVlKHRkLGlnbm9yZV9lcnJvcnM9MSk7c2h1dGlsLmNv cHl0cmVlKGZcIntwZH0ve219XCIsIHRkKTthc3NlcnQob3Muc3lzdGVtKGYncGVybCAtaS5i YWsgLXBlIFwicyMoc3ViZGlyLlwne219XCcuKSNzdWJkaXIoXCd7bX1fe2l9XCcpe2Nocig5 Mil9bntjaHIoOTIpfTEjXCIgXCJ7cGR9L21lc29uLmJ1aWxkXCInKT09MCk7YXNzZXJ0KG9z LnN5c3RlbShmJ3BlcmwgLWkuYmFrIC1wZSBcInMjKFwnbmFtZVwnOiBcJ3ttfSkje2Nocig5 Mil9MV97aX0jXCIgXCJ7dGR9L21lc29uLmJ1aWxkXCInKT09MCkiCgoKOiAjIE11bHRpcGx5 IHBvc3RncmVzX2ZkdyB0ZXN0cwpwZXJsIC1pLmJhayAtbmUgInByaW50IHVubGVzcyAvcG9z dGdyZXNfZmR3Xy8iICJjb250cmliL21lc29uLmJ1aWxkIiAmJiBweXRob24zIC1jICJmb3Ig aSBpbiByYW5nZSgxLDEwKzEpOmltcG9ydCBvcztpbXBvcnQgc2h1dGlsO3BkPVwiY29udHJp YlwiO209XCJwb3N0Z3Jlc19mZHdcIjt0ZD1mXCJ7cGR9L3ttfV97aX1cIjtzaHV0aWwucm10 cmVlKHRkLGlnbm9yZV9lcnJvcnM9MSk7c2h1dGlsLmNvcHl0cmVlKGZcIntwZH0ve219XCIs IHRkKTthc3NlcnQob3Muc3lzdGVtKGYncGVybCAtaS5iYWsgLXBlIFwicyMoc3ViZGlyLlwn e219XCcuKSNzdWJkaXIoXCd7bX1fe2l9XCcpe2Nocig5Mil9bntjaHIoOTIpfTEjXCIgXCJ7 cGR9L21lc29uLmJ1aWxkXCInKT09MCk7YXNzZXJ0KG9zLnN5c3RlbShmJ3BlcmwgLWkuYmFr IC1wZSBcInMjKFwnbmFtZVwnOiBcJ3ttfSkje2Nocig5Mil9MV97aX0jXCIgXCJ7dGR9L21l c29uLmJ1aWxkXCInKT09MCkiCgoKY2QgLlxcLiAmJiBtZXNvbiBzZXR1cCAtLXdpcGUgYnVp bGQgLURjYXNzZXJ0PXRydWUgLURiX3BjaD10cnVlIC1EZXh0cmFfbGliX2RpcnM9IkM6XFBy b2dyYW0gRmlsZXNcT3BlblNTTC1XaW42NFxsaWIiIC1EZXh0cmFfaW5jbHVkZV9kaXJzPSJD OlxQcm9ncmFtIEZpbGVzXE9wZW5TU0wtV2luNjRcaW5jbHVkZSIgLURQR19URVNUX0VYVFJB PSJzc2wiCjogJiYgbWVzb24gc2V0dXAgYnVpbGQgLURjYXNzZXJ0PXRydWUgLURQR19URVNU X0VYVFJBPSJzc2wiCgpjZCBidWlsZCAmJiBuaW5qYSA+bmluamEubG9nICYmIG1lc29uIHRl c3QgLS1zdWl0ZSBzZXR1cAoKZWNobyAjCmVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQplY2hvIFJlOiBCVUcgMTU1OTg6IFBvc3RncmVTUUwgRXJyb3Ig Q29kZSBpcyBub3QgcmVwb3J0ZWQgd2hlbiBjb25uZWN0aW9uIHRlcm1pbmF0ZWQgZHVlIHRv IGlkbGUtaW4tdHJhbnNhY3Rpb24gdGltZW91dAptZXNvbiB0ZXN0IHRlc3RfbWlzYy8wOTlf Y2FzZV8xNTU5OAo6ICMgdGhpcyB0ZXN0IGZhaWxzIG9uIFdpbmRvd3Mgd2l0aG91dCA2MDUx ODU3ZmMgZHVlIHRvICJwc3FsOjxzdGRpbj46Njogc2VydmVyIGNsb3NlZCB0aGUgY29ubmVj dGlvbiB1bmV4cGVjdGVkbHkiCmdyZXAgLXIgInBzcWwgc3RkZXJyOiIgInRlc3RydW4vdGVz dF9taXNjLzA5OV9jYXNlXzE1NTk4Igo6ICMgdGhpcyB0ZXN0IGZhaWxzIG9uIFdpbmRvd3Mg d2l0aCA2MDUxODU3ZmMgZHVlIHRvICJwc3FsOjxzdGRpbj46NjogY291bGQgbm90IHJlY2Vp dmUgZGF0YSBmcm9tIHNlcnZlcjogU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQg KDB4MDAwMDI3NDUvMTAwNTMpIgoKZWNobyAjCmVjaG8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQplY2hvIFJhcmUgU1NMIGZhaWx1cmVzIG9uIGVlbHBvdXQK cHl0aG9uMyAtYyAiTlVNSVRFUkFUSU9OUz0xMDtOVU1URVNUUz0xMDtpbXBvcnQgb3M7dHN0 cz0nJztleGVjKCdmb3IgaSBpbiByYW5nZSgxLE5VTVRFU1RTKzEpOiB0c3RzKz1mXCJzc2xf e2l9LzA5OV9yYXJlX3NzbF9mYWlsdXJlcyBcIicpOyBleGVjKCdmb3IgaSBpbiByYW5nZSgx LE5VTUlURVJBVElPTlMrMSk6cHJpbnQoZlwiaXRlcmF0aW9uIHtpfVwiKTsgYXNzZXJ0KG9z LnN5c3RlbShmXCJtZXNvbiB0ZXN0IC0tbnVtLXByb2Nlc3NlcyB7TlVNVEVTVFN9IHt0c3Rz fVwiKSA9PSAwKScpIgo6ICMgdGhpcyB0ZXN0IGZhaWxzIG9uIFdpbmRvd3Mgc3BvcmFkaWNh bGx5IHdpdGggInNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IgoK OiAjIHRoaXMgdGVzdCAodjEyLWNvbXBhdGlibGUgdmFyaWF0aW9uKSBmYWlscyBvbiAxZjM5 YTFjMDZ+MSAob24gaXRlcmF0aW9ucyAxLCAxLCAxIGZvciBtZSkKOiAjIFBHX1RFU1RfRVhU UkE9c3NsIG1ha2UgLXMgY2hlY2sgLUMgc3JjL3Rlc3Qvc3NsOyBybSAtcmYgc3JjL3Rlc3Qv c3NsXyo7IGZvciBpIGluIGBzZXEgMjBgOyBkbyBjcCAtciBzcmMvdGVzdC9zc2wvIHNyYy90 ZXN0L3NzbF8kaTsgc2VkICJzfHNyYy90ZXN0L3NzbHxzcmMvdGVzdC9zc2xfJGl8IiAtaSBz cmMvdGVzdC9zc2xfJGkvTWFrZWZpbGU7IGRvbmU7IGZvciAoKGk9MTtpPD0xMDtpKyspKTsg ZG8gZWNobyAiSVRFUkFUSU9OICRpIjsgcGFyYWxsZWwgLS1oYWx0IG5vdyxmYWlsPTEgLWoy MCAtLWxpbmVidWZmZXIgLS10YWcgUEdfVEVTVF9FWFRSQT1zc2wgbWFrZSAtcyBjaGVjayAt QyBzcmMvdGVzdC9zc2xfe30gUFJPVkVfVEVTVFM9InQvMDk5X3JhcmVfc3NsX2ZhaWx1cmVz LXYxMi5wbCIgTk9fVEVNUF9JTlNUQUxMPTEgOjo6IGBzZXEgMjBgIHx8IGJyZWFrOyBkb25l CgplY2hvICMKZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CmVjaG8gcGdzcWw6IEFkZCB0ZXN0cyBmb3IgJy1mJyBvcHRpb24gaW4gZHJvcGRiIHV0aWxp dHkuCm1lc29uIHRlc3QgdGVzdF9taXNjLzA1MV9kcm9wZGJfZm9yY2UKOiAjIHRoaXMgdGVz dCBmYWlscyBvbiBXaW5kb3dzIHdpdGhvdXQgNjA1MTg1N2ZjIGR1ZSB0byAicHNxbDo8c3Rk aW4+OjQ6IHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IgpncmVw IC1yICJwc3FsOjxzdGRpbj46IiAidGVzdHJ1bi90ZXN0X21pc2MvMDUxX2Ryb3BkYl9mb3Jj ZSIKOiAjIHRoaXMgdGVzdCBmYWlscyBvbiBXaW5kb3dzIHdpdGggNjA1MTg1N2ZjIGR1ZSB0 byAicHNxbDo8c3RkaW4+OjQ6IGNvdWxkIG5vdCByZWNlaXZlIGRhdGEgZnJvbSBzZXJ2ZXI6 IFNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0ICgweDAwMDAyNzQ1LzEwMDUzKSIK CmVjaG8gIwplY2hvID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K ZWNobyBsaWJwcSBjb3B5IGVycm9yIGhhbmRsaW5nIGJ1c3RlZAptZXNvbiB0ZXN0IHRlc3Rf bWlzYy8wOTlfcGdiZW5jaF93aXRoX3NlcnZlcl9vZmYKOiAjIHRoaXMgdGVzdCBmYWlscyBi ZWZvcmUgNzI0N2UyNDNhLCB0byByZXZlcnQgdGhhdCBjb21taXQ6CjogIyAgIGdpdCBzaG93 IDAyNDVmOGRiMyBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUuYyB8IGdpdCBhcHBs eSAtUiAmJiBnaXQgc2hvdyBhOWU5YTlmMzIgc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2Vj dXJlLmMgfCBnaXQgYXBwbHkgLVIgJiYgZ2l0IHNob3cgZmFhMTg5YzkzMmQgfCBnaXQgYXBw bHkgLVIKOiAjICAgZ2l0IHNob3cgNzI0N2UyNDNhIHwgZ2l0IGFwcGx5IC1SCjogIyB0aGlz IHRlc3QgcGFzc2VzIGFmdGVyIDcyNDdlMjQzYSwgYWxzbyBzdXJ2aXZlcyA1MCBpdGVyYXRp b25zIHggMTAgcGFyYWxsZWwgcHJvY2Vzc2VzCjogIyBweXRob24zIC1jICJOVU1JVEVSQVRJ T05TPTEwO05VTVRFU1RTPTEwO2ltcG9ydCBvczt0c3RzPScnO2V4ZWMoJ2ZvciBpIGluIHJh bmdlKDEsTlVNVEVTVFMrMSk6IHRzdHMrPWZcInRlc3RfbWlzY197aX0vMDk5X3BnYmVuY2hf d2l0aF9zZXJ2ZXJfb2ZmIFwiJyk7IGV4ZWMoJ2ZvciBpIGluIHJhbmdlKDEsTlVNSVRFUkFU SU9OUysxKTpwcmludChmXCJpdGVyYXRpb24ge2l9XCIpOyBhc3NlcnQob3Muc3lzdGVtKGZc Im1lc29uIHRlc3QgLS1udW0tcHJvY2Vzc2VzIHtOVU1URVNUU30ge3RzdHN9XCIpID09IDAp JykiCgplY2hvICMKZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CmVjaG8gQlVHIDE2Njc4OiBUaGUgZWNwZyBjb25uZWN0L3Rlc3Q1IHRlc3Qgc29tZXRp bWVzIGZhaWxzIG9uIFdpbmRvd3MKcGVybCAtaS5iYWsgLXBlICJzLyguKk9LLCB0cnkgdG8g cmVhZCBzb21lIGRhdGEpL3BnX3VzbGVlcCgxMDAwMEwpO1xuXDEvIiAiLi4vc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtbWlzYy5jIgpwZXJsIC1pLmJhayAtcGUgInMvKC4qV2FsU25kV2Fp dFwod2FrZUV2ZW50cywgc2xlZXB0aW1lLCBXQUlUX0VWRU5UX1dBTF9TRU5ERVJfTUFJTlwp OykvXDFcbnBnX3VzbGVlcCgxMTAwMEwpOy8iICIuLi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi93YWxzZW5kZXIuYyIKOiAjIHNsZWVwIGluIHdhbHNlbmRlci5jIG5lZWRlZCBkdWUgdG8g dGhlIGFub21hbHkgIndhbHNlbmRlciBjYW5ub3QgZXhpdCIKOiAjIFdpdGhvdXQgaXQsIHRo ZXNlIHRlc3RzIGZhaWwgb24gTGludXggYW5kIG9uIFdpbmRvd3M6IHJlY292ZXJ5LzAwMV9z dHJlYW1fcmVwIHJlY292ZXJ5LzAwOV90d29waGFzZSByZWNvdmVyeS8wMTJfc3VidHJhbnNh Y3Rpb25zIHJlY292ZXJ5LzAyMV9yb3dfdmlzaWJpbGl0eSByZWNvdmVyeS8wMzJfcmVsZmls ZW5vZGVfcmV1c2UgcmVjb3ZlcnkvMDM1X3N0YW5kYnlfbG9naWNhbF9kZWNvZGluZyBwZ19y ZXdpbmQvMDA4X21pbl9yZWNvdmVyeV9wb2ludAoKbmluamEgJiYgbWVzb24gdGVzdCAtLXN1 aXRlIHNldHVwCgptZXNvbiB0ZXN0IGVjcGcvZWNwZwptZXNvbiB0ZXN0IHBnX2R1bXAvMDAy X3BnX2R1bXAKOiAjIEZhaWxlZCB0ZXN0cywgZml4ZWQgd2l0aCA2MDUxODU3ZmM6IHBnX3Vw Z3JhZGUvMDAyX3BnX3VwZ3JhZGUgaXNvbGF0aW9uL2lzb2xhdGlvbiByZWNvdmVyeS8wMTlf cmVwbHNsb3RfbGltaXQgcmVjb3ZlcnkvMDM3X2ludmFsaWRfZGF0YWJhc2UgdGVzdF9kZWNv ZGluZy9pc29sYXRpb24gZWNwZy9lY3BnIHBnX2FtY2hlY2svMDAyX25vbmVzdWNoIHBnX2R1 bXAvMDAyX3BnX2R1bXAgcGdiZW5jaC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlciBwc3FsLzAw MV9iYXNpYyBzY3JpcHRzLzAxMV9jbHVzdGVyZGJfYWxsIHNjcmlwdHMvMDkxX3JlaW5kZXhk Yl9hbGwgc2NyaXB0cy8xMDFfdmFjdXVtZGJfYWxsCgpjZCAuLiAmJiBnaXQgc2hvdyA2MDUx ODU3ZmMgfCBnaXQgYXBwbHkgJiYgY2QgYnVpbGQgJiYgbmluamEgJiYgbWVzb24gdGVzdCAt LXN1aXRlIHNldHVwCm1lc29uIHRlc3QgcGdfdXBncmFkZS8wMDJfcGdfdXBncmFkZSBpc29s YXRpb24vaXNvbGF0aW9uIHJlY292ZXJ5LzAxOV9yZXBsc2xvdF9saW1pdCByZWNvdmVyeS8w MzdfaW52YWxpZF9kYXRhYmFzZSB0ZXN0X2RlY29kaW5nL2lzb2xhdGlvbiBlY3BnL2VjcGcg cGdfYW1jaGVjay8wMDJfbm9uZXN1Y2ggcGdfZHVtcC8wMDJfcGdfZHVtcCBwZ2JlbmNoLzAw MV9wZ2JlbmNoX3dpdGhfc2VydmVyIHBzcWwvMDAxX2Jhc2ljIHNjcmlwdHMvMDExX2NsdXN0 ZXJkYl9hbGwgc2NyaXB0cy8wOTFfcmVpbmRleGRiX2FsbCBzY3JpcHRzLzEwMV92YWN1dW1k Yl9hbGwKOiAjIFRlc3QgcmVjb3ZlcnkvMDE5X3JlcGxzbG90X2xpbWl0IGZhaWxzIG9uIExp bnV4IHdpdGggdGhlIGRlbGF5IGFkZGVkLCBidXQgZG9lc24ndCBmYWlsIG9uIFdpbmRvd3Mg KHdpdGggNjA1MTg1N2ZjKQoKZWNobyAjCmVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQplY2hvIE1TVkMgU1NMIHRlc3QgZmFpbHVyZQptZXNvbiB0ZXN0 IHNzbC8wMDFfc3NsdGVzdHMKOiAjIHRoaXMgdGVzdCBmYWlscyAob24gYSBmaXJzdCBydW4s IHdpdGggdGhlIHNsZWVwIGFkZGVkKSBhZnRlciA2MDUxODU3ZmMgd2l0aCBhbiBlcnJvciAi c2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkiCgpjZCAuLiAmJiBn aXQgc2hvdyBlZDUyYzM3MDcgfCBnaXQgYXBwbHkgJiYgY2QgYnVpbGQgJiYgbmluamEgJiYg bWVzb24gdGVzdCAtLXN1aXRlIHNldHVwCm1lc29uIHRlc3Qgc3NsLzAwMV9zc2x0ZXN0cwo6 ICMgdGhpcyB0ZXN0IHBhc3NlcyAod2l0aCB0aGUgc2xlZXAgYWRkZWQpIGFmdGVyIDYwNTE4 NTdmYyArIGVkNTJjMzcwNwoKZWNobyAjCmVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQplY2hvIFdoeSBpcyBzcmMvdGVzdC9tb2R1bGVzL2NvbW1pdHRz L3QvMDAyX3N0YW5kYnkucGwgZmxha3k/CmNkIC4uCmdpdCByZXN0b3JlICJzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1taXNjLmMiICJzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYyIKZ2l0IHNob3cgNjA1MTg1N2ZjIHwgZ2l0IGFwcGx5ICYmIGdpdCBzaG93IGVkNTJj MzcwNyB8IGdpdCBhcHBseQpjZCBidWlsZCAmJiBuaW5qYSA+bmluamEubG9nICYmIG1lc29u IHRlc3QgLS1zdWl0ZSBzZXR1cApweXRob24zIC1jICJOVU1JVEVSQVRJT05TPTEwO05VTVRF U1RTPTEwO2ltcG9ydCBvczt0c3RzPScnO2V4ZWMoJ2ZvciBpIGluIHJhbmdlKDEsTlVNVEVT VFMrMSk6IHRzdHMrPWZcInRlc3RfbWlzY197aX0vMDk5X2NvbW1pdF90c18wMDJfc3RhbmRi eSBcIicpOyBleGVjKCdmb3IgaSBpbiByYW5nZSgxLE5VTUlURVJBVElPTlMrMSk6cHJpbnQo ZlwiaXRlcmF0aW9uIHtpfVwiKTsgYXNzZXJ0KG9zLnN5c3RlbShmXCJtZXNvbiB0ZXN0IC0t bnVtLXByb2Nlc3NlcyB7TlVNVEVTVFN9IHt0c3RzfVwiKSA9PSAwKScpIgo6ICMgdGhpcyB0 ZXN0IGZhaWxlZCBvbiBpdGVyYXRpb25zIDEsIDMsIDEgZm9yIG1lICh3aXRob3V0IHRoZSBz bGVlcCBidXQgd2l0aCA2MDUxODU3ZmMgKyBlZDUyYzM3MDcpCgpweXRob24zIC1jICJOVU1J VEVSQVRJT05TPTEwO05VTVRFU1RTPTE7aW1wb3J0IG9zO3RzdHM9Jyc7ZXhlYygnZm9yIGkg aW4gcmFuZ2UoMSxOVU1URVNUUysxKTogdHN0cys9ZlwicG9zdGdyZXNfZmR3X3tpfS8wOTlf cG9zdGdyZXNfZmR3X2Rpc2Nvbm5lY3QgXCInKTsgZXhlYygnZm9yIGkgaW4gcmFuZ2UoMSxO VU1JVEVSQVRJT05TKzEpOnByaW50KGZcIml0ZXJhdGlvbiB7aX1cIik7IGFzc2VydChvcy5z eXN0ZW0oZlwibWVzb24gdGVzdCAtdCAwLjIgLS1udW0tcHJvY2Vzc2VzIHtOVU1URVNUU30g e3RzdHN9XCIpID09IDApJykiCjogIyB0aGlzIHRlc3QgYWxzbyBmYWlsZWQgKHdpdGggVElN RU9VVCkgb24gaXRlcmF0aW9ucyA0LCA2LCAyIGZvciBtZQoKY2QgLlxcLiAmJiBlY2hvIEtp bGxpbmcgcG9zdGdyZXMgcHJvY2Vzc2VzIGxlZnQgYmVoaW5kIGZhaWxpbmcgdGVzdHMgJiYg dGFza2tpbGwgL0YgL0ZJICJJTUFHRU5BTUUgZXEgcG9zdGdyZXMuZXhlIgoKY2QgLi4gJiYg Z2l0IHNob3cgZWQ1MmMzNzA3IHwgZ2l0IGFwcGx5IC1SICYmIGdpdCBzaG93IDYwNTE4NTdm YyB8IGdpdCBhcHBseSAtUiAmJiBjZCBidWlsZCAmJiBuaW5qYSA+bmluamEubG9nICYmIG1l c29uIHRlc3QgLS1zdWl0ZSBzZXR1cApweXRob24zIC1jICJOVU1JVEVSQVRJT05TPTEwO05V TVRFU1RTPTEwO2ltcG9ydCBvczt0c3RzPScnO2V4ZWMoJ2ZvciBpIGluIHJhbmdlKDEsTlVN VEVTVFMrMSk6IHRzdHMrPWZcInRlc3RfbWlzY197aX0vMDk5X2NvbW1pdF90c18wMDJfc3Rh bmRieSBcIicpOyBleGVjKCdmb3IgaSBpbiByYW5nZSgxLE5VTUlURVJBVElPTlMrMSk6cHJp bnQoZlwiaXRlcmF0aW9uIHtpfVwiKTsgYXNzZXJ0KG9zLnN5c3RlbShmXCJtZXNvbiB0ZXN0 IC0tbnVtLXByb2Nlc3NlcyB7TlVNVEVTVFN9IHt0c3RzfVwiKSA9PSAwKScpIgo6ICMgMTAg aXRlcmF0aW9ucyBzdWNjZWVkZWQgKHdpdGhvdXQgdGhlIHNsZWVwIGFuZCB3aXRob3V0IDYw NTE4NTdmYyArIGVkNTJjMzcwNykKCmVjaG8gIwplY2hvID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KZWNobyBCVUcgMTczOTE6IFdoaWxlIHVzaW5nIC0td2l0 aC1zc2w9b3BlbnNzbCBhbmQgUEdfVEVTVF9FWFRSQT0nc3NsJyBvcHRpb25zLCBTU0wgdGVz dHMgZmFpbCBvbiBPcGVuQlNEIDcuMAo6ICMgTGludXgtb25seSBwYXJ0OyB1c2UgbWFrZSBi ZWNhdXNlIG1lc29uLmJ1aWxkIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggbGlicmVzc2wgZm9y IG5vdwoKOiAmJiBjZCAuLgo6ICMgUmV2ZXJ0IGZhYTE4OWM5MyAod2UgYWxzbyBuZWVkIG5v bi1lc3NlbnRpYWwgY2hhbmdlcyBhOWU5YTlmMzIgYW5kIDAyNDVmOGRiMyBhYm92ZSkKOiAm JiBnaXQgc2hvdyAwMjQ1ZjhkYjMgc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMg fCBnaXQgYXBwbHkgLVIgJiYgZ2l0IHNob3cgYTllOWE5ZjMyIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLXNlY3VyZS5jIHwgZ2l0IGFwcGx5IC1SICYmIGdpdCBzaG93IGZhYTE4OWM5MyB8 IGdpdCBhcHBseSAtUgo6ICYmICggY2QgL3RtcC8gJiYgcm0gLXJmIGxpYnJlc3NsKjsgd2dl dCBodHRwczovL2Z0cC5vcGVuYnNkLm9yZy9wdWIvT3BlbkJTRC9MaWJyZVNTTC9saWJyZXNz bC0zLjQuMS50YXIuZ3ogJiYgdGFyIGZheCBsaWJyZXNzbC0zLjQuMS50YXIuZ3ogJiYgY2Qg bGlicmVzc2wtMy40LjEvICYmIC4vY29uZmlndXJlIC1xIC0tcHJlZml4PS90bXAvbGlicmVz c2wgJiYgbWFrZSAtamBucHJvY2AgPi9kZXYvbnVsbCAmJiBtYWtlIGluc3RhbGwgPi9kZXYv bnVsbCApCjogJiYgUEFUSD0iL3RtcC9saWJyZXNzbC9iaW4vOiRQQVRIIiBzaCAtYyAiLi9j b25maWd1cmUgLS1lbmFibGUtdGFwLXRlc3RzIC0td2l0aC1zc2w9b3BlbnNzbCAtLXdpdGgt aW5jbHVkZXM9L3RtcC9saWJyZXNzbC9pbmNsdWRlIC0td2l0aC1saWJzPS90bXAvbGlicmVz c2wvbGliICYmIG1ha2UgLXMgLWo4Igo6ICYmIFBHX1RFU1RfRVhUUkE9J3NzbCcgIExEX0xJ QlJBUllfUEFUSD0iL3RtcC9saWJyZXNzbC9saWIiIG1ha2UgLXMgY2hlY2sgLUMgc3JjL3Rl c3Qvc3NsIFBST1ZFX1RFU1RTPSJ0LzAwMSoiCjogIyB0aGlzIHRlc3QgZmFpbHMgd2l0aG91 dCBmYWExODljOTMKCjogJiYgZ3JlcCAtciAnIyBza2lwIFNTTF9DRVJUX0ZJTEUgaXMgbm90 IHN1cHBvcnRlZCcgc3JjL3Rlc3Qvc3NsL3RtcF9jaGVjay9sb2cvICMgbWFrZSBzdXJlIHRo YXQgTGlicmVTU0wgaXMgdXNlZAo6ICYmIG1ha2UgLXMgY2xlYW4KCjogIyBVbmRvIGFsbCB0 aGUgY2hhbmdlcwo6ICYmIGdpdCBzaG93IGZhYTE4OWM5MyB8IGdpdCBhcHBseSAmJiBnaXQg c2hvdyBhOWU5YTlmMzIgc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgfCBnaXQg YXBwbHkgJiYgZ2l0IHNob3cgMDI0NWY4ZGIzIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNl Y3VyZS5jIHwgZ2l0IGFwcGx5CjogJiYgUEFUSD0iL3RtcC9saWJyZXNzbC9iaW4vOiRQQVRI IiBzaCAtYyAiLi9jb25maWd1cmUgLS1lbmFibGUtdGFwLXRlc3RzIC0td2l0aC1zc2w9b3Bl bnNzbCAtLXdpdGgtaW5jbHVkZXM9L3RtcC9saWJyZXNzbC9pbmNsdWRlIC0td2l0aC1saWJz PS90bXAvbGlicmVzc2wvbGliICYmIG1ha2UgLXMgLWo4Igo6ICYmIFBHX1RFU1RfRVhUUkE9 J3NzbCcgIExEX0xJQlJBUllfUEFUSD0iL3RtcC9saWJyZXNzbC9saWIiIG1ha2UgLXMgY2hl Y2sgLUMgc3JjL3Rlc3Qvc3NsIFBST1ZFX1RFU1RTPSJ0LzAwMSoiCjogIyB0aGlzIHRlc3Qg cGFzc2VzIHdpdGggZmFhMTg5YzkzIChvbiBjdXJyZW50IG1hc3RlcikKCjogJiYgZ3JlcCAt ciAnIyBza2lwIFNTTF9DRVJUX0ZJTEUgaXMgbm90IHN1cHBvcnRlZCcgc3JjL3Rlc3Qvc3Ns L3RtcF9jaGVjay9sb2cvICMgbWFrZSBzdXJlIHRoYXQgTGlicmVTU0wgaXMgdXNlZAo6ICYm IG1ha2UgLXMgY2xlYW4gJiYgbWFrZSAtcyBkaXN0Y2xlYW4gJiYgY2QgYnVpbGQKCmVjaG8g IwplY2hvID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZWNobyBB cHBseWluZyBhbGwgdGhlIGxhdGVzdCBwYXRjaGVzCmNkIC4uCmdpdCBhcHBseSB2Mi0wMDAx LXNpbXBsZWhhc2gtQWxsb3ctcmF3LW1lbW9yeS10by1iZS1mcmVlZC5wYXRjaCB2Mi0wMDAy LXNpbXBsZWhhc2gtQWxsb3ctcmF3LWFsbG9jYXRpb24tdG8tZmFpbC5wYXRjaApnaXQgYXBw bHkgdjItMDAwMy1SZWRlc2lnbi1XaW5kb3dzLXNvY2tldC1ldmVudC1tYW5hZ2VtZW50LnBh dGNoCmdpdCBhcHBseSB2Mi0wMDA0LVJlbW92ZS1wZ3dpbjMyX3NlbGVjdC5wYXRjaApnaXQg YXBwbHkgdjItMDAwNS1SZWZhY3Rvci1wZ3dpbjMyX3dhaXRmb3JzaW5nbGVzb2NrZXQtdG8t c2hhcmUtZXZlLnBhdGNoCmdpdCBhcHBseSB2Mi0wMDA2LVJlaW5zdGF0ZS1ncmFjZWZ1bC1z aHV0ZG93bi1jaGFuZ2VzLWZvci1XaW5kb3dzLnBhdGNoCmNkIGJ1aWxkICYmIG5pbmphID5u aW5qYS5sb2cgJiYgbWVzb24gdGVzdCAtLXN1aXRlIHNldHVwCgplY2hvICMKZWNobyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmVjaG8gQ2hlY2tpbmcgd2hl dGhlciBjb21taXRfdHNfMDAyX3N0YW5kYnkgaXMgc3RpbGwgZmxha3kuLi4KcHl0aG9uMyAt YyAiTlVNSVRFUkFUSU9OUz0xMDtOVU1URVNUUz0xMDtpbXBvcnQgb3M7dHN0cz0nJztleGVj KCdmb3IgaSBpbiByYW5nZSgxLE5VTVRFU1RTKzEpOiB0c3RzKz1mXCJ0ZXN0X21pc2Nfe2l9 LzA5OV9jb21taXRfdHNfMDAyX3N0YW5kYnkgXCInKTsgZXhlYygnZm9yIGkgaW4gcmFuZ2Uo MSxOVU1JVEVSQVRJT05TKzEpOnByaW50KGZcIml0ZXJhdGlvbiB7aX1cIik7IGFzc2VydChv cy5zeXN0ZW0oZlwibWVzb24gdGVzdCAtLW51bS1wcm9jZXNzZXMge05VTVRFU1RTfSB7dHN0 c31cIikgPT0gMCknKSIKOiAjIG5vIGZhaWx1cmVzIG9uIExpbnV4IGFuZCBXaW5kb3dzCgpl Y2hvIENoZWNraW5nIHdoZXRoZXIgMDk5X3Bvc3RncmVzX2Zkd19kaXNjb25uZWN0IGlzIHN0 aWxsIGZsYWt5Li4uCnB5dGhvbjMgLWMgIk5VTUlURVJBVElPTlM9MTA7TlVNVEVTVFM9MTtp bXBvcnQgb3M7dHN0cz0nJztleGVjKCdmb3IgaSBpbiByYW5nZSgxLE5VTVRFU1RTKzEpOiB0 c3RzKz1mXCJwb3N0Z3Jlc19mZHdfe2l9LzA5OV9wb3N0Z3Jlc19mZHdfZGlzY29ubmVjdCBc IicpOyBleGVjKCdmb3IgaSBpbiByYW5nZSgxLE5VTUlURVJBVElPTlMrMSk6cHJpbnQoZlwi aXRlcmF0aW9uIHtpfVwiKTsgYXNzZXJ0KG9zLnN5c3RlbShmXCJtZXNvbiB0ZXN0IC10IDAu MiAtLW51bS1wcm9jZXNzZXMge05VTVRFU1RTfSB7dHN0c31cIikgPT0gMCknKSIKOiAjIG5v IGZhaWx1cmVzIG9uIExpbnV4IGFuZCBXaW5kb3dzCgo6ICMgdGVzdHMgMDUxX2Ryb3BkYl9m b3JjZSwgMDk5X2Nhc2VfMTU1OTggc3RpbGwgZmFpbCBvbiBXaW5kb3dzIGR1ZSB0byB0aGUg YW5vbWFseSAic2VuZCgpIGJlZm9yZSByZWN2KCkgaW52YWxpZGF0ZXMgYSBjbG9zZWQgc29j a2V0Igo= --------------bChBHeIVXDsybeserihlZrKq--