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 1uq8dZ-000QUs-Ik for pgpool-hackers@arkaria.postgresql.org; Sun, 24 Aug 2025 11:11:51 +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 1uq8dY-0022tG-6B for pgpool-hackers@arkaria.postgresql.org; Sun, 24 Aug 2025 11:11:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uq8dX-0022t7-Hz for pgpool-hackers@lists.postgresql.org; Sun, 24 Aug 2025 11:11:48 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uq8dU-001UY7-22 for pgpool-hackers@lists.postgresql.org; Sun, 24 Aug 2025 11:11:46 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-71d60504bf8so29169717b3.2 for ; Sun, 24 Aug 2025 04:11:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1756033904; x=1756638704; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=XcfLgGo5yaX7qYqGRW8z/K8VEElxhpDMvVQxDsECHXE=; b=DX4GTRYeUUMaueFdtV9wMhFA6ObISQIGyJjhl5SA/J7os8n8OrWj7PrRZRWurmeE5Q uegQgOcOdiC6BBL623cEiNqkMi5OlnnvI8jXmyU8XMKOwxcNbWMoTQuL7foWFmIZmmi9 TTeFn7pL/PV2r2/NNwk/J2EcSlgw+9yZg6hBdVch4eFTVjHyl3Os+6rFnMTtccxsE7YE qZ/9SdItKxVkRLN8F72RPzZsRKLpCRR6mRnZ+OQguPvaIIPIduRb08L2M3LtIce8iF3h QXz+7TCgecv34lROEFGU4FPh1cl1pB8Ph3OFSlhJIqp/l3nrG/Xq1EioqH37uU6gK0jo 7rJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756033904; x=1756638704; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=XcfLgGo5yaX7qYqGRW8z/K8VEElxhpDMvVQxDsECHXE=; b=Kfapv1HZfLZv75RtivJR5GY81lrkUScaUAQWJ2Nusthddfn56kbFOVyKiNSZWlK/FO zXvB8NfAzYFeaebnisYwhyoxAQcYcUbZXrjnsgjR9alrlmeJlmPej2tKAmDF906NieE2 d8CpiccS3x3CfMtNCuj3/K1aKATv4gBf3n1jCsLUxjmtDPwc6jUsKpaDkZlzxmF1SIXd c+1o7n3HrGQa+boZmFrC5MkbTY9YLhyNj81WGALe2SCWZ0+xH8/X2HnOLX2TTcEhYDcg 0OfE50a+/02Wb2y9kaYxzDhuJ9XeQb6gwpicRldDI7kNbRFQEiieNM5Qvt6r76MG/mS6 kqJw== X-Gm-Message-State: AOJu0YyfPmSTji2y8pVb9Hp+UvhWyE7GaBTOZehFpVUAR+0pVX4UdYTK i4R5uQFYWdY3Gf6tw8Kf8N90yDpRrNsEEECL/obV0DJwUIPp2NgYFDI6mQyk05BOqs8JrxW4U6q hGCU4jeIWOQezlbevXdnzVBJ3+uC8GQOKccTDBiYwYg== X-Gm-Gg: ASbGncvFxaRnEsvc5SD4uIkF9ikEcoPN5OcyCs8yfcpd49+pheHIRGkrd1e7yGykXEP XfOekvtdSdn91Jp4o/CIDwXYMPTaA8CepPuHf4JQBak2cLEsjhdKPXN4rg3HNV8qLjAF5kMJ2Fl 1NXeL09sIRIUtAMJ6B8ZM3o+mFX6MnSNCpneczoHsouEjUus1Vl7gNp/iJr3cCjGf7ne1Ny5e6T /g+zs//d9sql5QQ X-Google-Smtp-Source: AGHT+IGo0Vm9ArlVJfYD3r1/xI6t13U8duwEtojrVmvkKoJhjnxaEYKgvyzdpOn9sEndc0hAYizE0jt9AisbtyDfsio= X-Received: by 2002:a05:690c:6c0d:b0:71f:efa8:587a with SMTP id 00721157ae682-71fefa85cb8mr62561057b3.44.1756033903761; Sun, 24 Aug 2025 04:11:43 -0700 (PDT) MIME-Version: 1.0 References: <20250821.140434.533994102324088664.ishii@postgresql.org> <20250821.192332.768193620076940871.ishii@postgresql.org> In-Reply-To: <20250821.192332.768193620076940871.ishii@postgresql.org> From: Nadav Shatz Date: Sun, 24 Aug 2025 14:11:32 +0300 X-Gm-Features: Ac12FXzL2SqOoDVIhd77mhxUrYcJj7GT0mKmLK72dGLiBKqANwkKwPzH--hGRSs Message-ID: Subject: Re: Proposal: recent access based routing for primary-replica setups To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000c79bb063d1a81f3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000c79bb063d1a81f3 Content-Type: multipart/alternative; boundary="0000000000000c79b9063d1a81f1" --0000000000000c79b9063d1a81f1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Here is an initial draft in 2 patches (one for code changes and one for tests implementation). Please let me know what you think. Thank you, On Thu, Aug 21, 2025 at 1:23=E2=80=AFPM Tatsuo Ishii = wrote: > Hi Nadav, > > Thank you for understanding. Please don't hesitate to ask questions > regarding Pgpool-II source code. > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > > > Hi Tatsuo, > > > > I'm fine with all of your comments and suggestions. > > > > I'll work on a patch and we can iterate over it. > > > > Hope that's okay. > > > > Best, > > > > On Thu, Aug 21, 2025 at 8:04=E2=80=AFAM Tatsuo Ishii > wrote: > > > >> Hi Nadav, > >> > >> > Hi Tatsuo, > >> > > >> > Thank you for your reply, I agree with your approach. Better to get > (1) > >> out > >> > of the way first. > >> > > >> > As a simplest approach that we can implement that would support > >> completely > >> > offloading the responsibility of the lag checking we can set it to > =E2=80=9Cfile=E2=80=9D > >> > and add another config for file path. Or just if starts with =E2=80= =9Cfile:=E2=80=9D > >> it=E2=80=99ll > >> > understand. > >> > >> My concern about the "file:" approach is, race condition. What if > >> pgpool reads the file while it is being updated by someone else? Also > >> I think the command approach is more flexible and generic. For > >> example, the "file approch" can be easily simulated by setting the > >> command "/usr/bin/cat path_to_the_file". > >> > >> > Then the internal polling can just read the file on schedule. The > entire > >> > updating mechanism will be left to the external service. > >> > >> Internal polling is a little bit complicated and will not be easily > >> changed to just reading a file. The internal polling has two options: > >> one is checking WAL LSN difference, the other is replication delay in > >> time. The file approch would only replace the latter. I suggest to > >> leave the internal polling code as it is. > >> > >> > Having this as a first step also opens up the door for other > >> > implementations. > >> > > >> > Another classic option would be calling an API endpoint. But that > might > >> > come with a lot more bulk and security concerns. > >> > >> I agree that calling API could bring security concerns. > >> > >> BTW, in the command approch, the command should be executed as > >> sr_check_user. > >> > >> > I suggest I work on a patch for file support. > >> > > >> > What do you think? > >> > >> For the reason above I prefer the command approch, not the file > >> support. > >> > >> > Nadav Shatz > >> > Tailor Brands | CTO > >> > > >> > > >> > On Wed, Aug 20, 2025 at 3:45=E2=80=AFPM Tatsuo Ishii > >> wrote: > >> > > >> >> Hi Nadav, > >> >> > >> >> Thank you for the answer. > >> >> > >> >> I think your proposal actually includes two orthogonal proposals. > >> >> > >> >> (1) "inject" replication delay value from external source (in your > >> >> case from Aurora). > >> >> > >> >> (2) per relation recent access based routing. > >> >> > >> >> I suggest to implement (1) first, then (2). This incremental approa= ch > >> >> would be easier than implementing (1)+(2) at once. > >> >> > >> >> For (1) we could add new pgpool.conf parameter, say > >> >> "replication_delay_source". If it is set to "builtin", then > >> >> replication delay source is PostgreSQL as we already does today. If > >> >> it's set other than "builtin", then it's an external command name (= + > >> >> arguments) to be executed to import replication delay value. The > >> >> command should return replication delay value represented in string= s > >> >> like "0 20 10", which means node 0, 1 and 2 replication delay value= s > >> >> in millisecond (in this case since the node 0 is primary, its > >> >> replication delay is 0). The command will be invoked every > >> >> sr_check_period. > >> >> > >> >> I am not sure if this actually works in Aurora. This is just a quic= k > >> >> idea. > >> >> > >> >> (2) would be probably much harder than (1). So we need more > discussion > >> >> later on. > >> >> > >> >> Best regards, > >> >> -- > >> >> Tatsuo Ishii > >> >> SRA OSS K.K. > >> >> English: http://www.sraoss.co.jp/index_en/ > >> >> Japanese:http://www.sraoss.co.jp > >> >> > >> > > > > > > -- > > Nadav Shatz > > Tailor Brands | CTO > --=20 Nadav Shatz Tailor Brands | CTO --0000000000000c79b9063d1a81f1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Here is an initial draft in = 2 patches (one for code changes and one for tests implementation).

Please let me know what you think.

Thank you,
On Thu, Aug 21, 2025 at 1:23=E2=80= =AFPM Tatsuo Ishii <ishii@postgr= esql.org> wrote:
Hi Nadav,

Thank you for understanding. Please don't hesitate to ask questions
regarding Pgpool-II source code.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp

> Hi Tatsuo,
>
> I'm fine with all of your comments and suggestions.
>
> I'll work on a patch and we can iterate over it.
>
> Hope that's okay.
>
> Best,
>
> On Thu, Aug 21, 2025 at 8:04=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> w= rote:
>
>> Hi Nadav,
>>
>> > Hi Tatsuo,
>> >
>> > Thank you for your reply, I agree with your approach. Better = to get (1)
>> out
>> > of the way first.
>> >
>> > As a simplest approach that we can implement that would suppo= rt
>> completely
>> > offloading the responsibility of the lag checking we can set = it to =E2=80=9Cfile=E2=80=9D
>> > and add another config for file path. Or just if starts with = =E2=80=9Cfile:=E2=80=9D
>> it=E2=80=99ll
>> > understand.
>>
>> My concern about the "file:" approach is, race condition= . What if
>> pgpool reads the file while it is being updated by someone else?= =C2=A0 Also
>> I think the command approach is more flexible and generic. For
>> example, the "file approch" can be easily simulated by s= etting the
>> command "/usr/bin/cat path_to_the_file".
>>
>> > Then the internal polling can just read the file on schedule.= The entire
>> > updating mechanism will be left to the external service.
>>
>> Internal polling is a little bit complicated and will not be easil= y
>> changed to just reading a file. The internal polling has two optio= ns:
>> one is checking WAL LSN difference, the other is replication delay= in
>> time. The file approch would only replace the latter. I suggest to=
>> leave the internal polling code as it is.
>>
>> > Having this as a first step also opens up the door for other<= br> >> > implementations.
>> >
>> > Another classic option would be calling an API endpoint. But = that might
>> > come with a lot more bulk and security concerns.
>>
>> I agree that calling API could bring security concerns.
>>
>> BTW, in the command approch, the command should be executed as
>> sr_check_user.
>>
>> > I suggest I work on a patch for file support.
>> >
>> > What do you think?
>>
>> For the reason above I prefer the command approch, not the file >> support.
>>
>> > Nadav Shatz
>> > Tailor Brands | CTO
>> >
>> >
>> > On Wed, Aug 20, 2025 at 3:45=E2=80=AFPM Tatsuo Ishii <ishii@postgresql.org<= /a>>
>> wrote:
>> >
>> >> Hi Nadav,
>> >>
>> >> Thank you for the answer.
>> >>
>> >> I think your proposal actually includes two orthogonal pr= oposals.
>> >>
>> >> (1) "inject" replication delay value from exter= nal source (in your
>> >> case from Aurora).
>> >>
>> >> (2) per relation recent access based routing.
>> >>
>> >> I suggest to implement (1) first, then (2). This incremen= tal approach
>> >> would be easier than implementing (1)+(2) at once.
>> >>
>> >> For (1) we could add new pgpool.conf parameter, say
>> >> "replication_delay_source". If it is set to &qu= ot;builtin", then
>> >> replication delay source is PostgreSQL as we already does= today. If
>> >> it's set other than "builtin", then it'= s an external command name (+
>> >> arguments) to be executed to import replication delay val= ue. The
>> >> command should return replication delay value represented= in strings
>> >> like "0 20 10", which means node 0, 1 and 2 rep= lication delay values
>> >> in millisecond (in this case since the node 0 is primary,= its
>> >> replication delay is 0). The command will be invoked ever= y
>> >> sr_check_period.
>> >>
>> >> I am not sure if this actually works in Aurora. This is j= ust a quick
>> >> idea.
>> >>
>> >> (2) would be probably much harder than (1). So we need mo= re discussion
>> >> later on.
>> >>
>> >> Best regards,
>> >> --
>> >> Tatsuo Ishii
>> >> SRA OSS K.K.
>> >> English:
http://www.sraoss.co.jp/index_en/ >> >> Japanese:http://www.sraoss.co.jp
>> >>
>>
>
>
> --
> Nadav Shatz
> Tailor Brands | CTO


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000000c79b9063d1a81f1-- --0000000000000c79bb063d1a81f3 Content-Type: application/octet-stream; name="external-lag-feature-implementation.patch" Content-Disposition: attachment; filename="external-lag-feature-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mepl8hj60 RnJvbSA2YTFmZjExMmNlYjVmYTFiNmIzNDQ3NjllZGVkZmFmYTU1ZWI4ZDkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAyNCBBdWcgMjAyNSAxMzo0OTozNiArMDMwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBleHRlcm5hbCBjb21tYW5kIHJlcGxpY2F0aW9uIGRlbGF5IHNvdXJjZSBmZWF0dXJlCgpUaGlz IHBhdGNoIGludHJvZHVjZXMgYSBjb21wcmVoZW5zaXZlIGV4dGVybmFsIGNvbW1hbmQgcmVwbGlj YXRpb24gZGVsYXkKc291cmNlIGZlYXR1cmUgdGhhdCBhbGxvd3MgcGdwb29sIHRvIHJldHJpZXZl IHJlcGxpY2F0aW9uIGRlbGF5IGluZm9ybWF0aW9uCmZyb20gZXh0ZXJuYWwgY29tbWFuZHMgaW5z dGVhZCBvZiBidWlsdC1pbiBkYXRhYmFzZSBxdWVyaWVzLgoKS2V5IEZlYXR1cmVzOgotIEV4dGVy bmFsIGNvbW1hbmQgZXhlY3V0aW9uIHdpdGggY29uZmlndXJhYmxlIHRpbWVvdXQgKDEtMzYwMCBz ZWNvbmRzKQotIFNlY3VyZSBjb21tYW5kIGNvbnN0cnVjdGlvbiB3aXRoIGluamVjdGlvbiBwcm90 ZWN0aW9uCi0gU3VwcG9ydCBmb3IgcnVubmluZyBjb21tYW5kcyBhcyBzcGVjaWZpYyB1c2VycyAo c3JfY2hlY2tfdXNlcikKLSBDb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9y IGhhbmRsaW5nCi0gR3JhY2VmdWwgZmFsbGJhY2sgdG8gYnVpbHQtaW4gbWV0aG9kIG9uIGZhaWx1 cmVzCgpDb25maWd1cmF0aW9uIE9wdGlvbnM6Ci0gcmVwbGljYXRpb25fZGVsYXlfc291cmNlOiAn YnVpbHRpbicgKGRlZmF1bHQpIG9yICdjbWQnCi0gcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2Nt ZDogZXh0ZXJuYWwgY29tbWFuZCB0byBleGVjdXRlCi0gcmVwbGljYXRpb25fZGVsYXlfc291cmNl X3RpbWVvdXQ6IGNvbW1hbmQgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiAxMCkKClNlY3Vy aXR5IEZlYXR1cmVzOgotIENvbW1hbmQgaW5qZWN0aW9uIHByb3RlY3Rpb24gdmlhIHByb3BlciBz aW5nbGUtcXVvdGUgZXNjYXBpbmcKLSBTYWZlIHN1IGNvbW1hbmQgY29uc3RydWN0aW9uIHByZXZl bnRpbmcgbWFsaWNpb3VzIGV4ZWN1dGlvbgotIElucHV0IHZhbGlkYXRpb24gdG8gcHJldmVudCBp bmplY3Rpb24gdGhyb3VnaCBkZWxheSB2YWx1ZXMKLSBDb21wcmVoZW5zaXZlIHJhbmdlIHZhbGlk YXRpb24gZm9yIGRlbGF5IHZhbHVlcwoKUm9idXN0bmVzcyBGZWF0dXJlczoKLSBTSUdBTFJNLWJh c2VkIHRpbWVvdXQgbWVjaGFuaXNtIHdpdGggcHJvcGVyIHNpZ25hbCBoYW5kbGluZwotIER5bmFt aWMgYnVmZmVyIGFsbG9jYXRpb24gKDRLQikgd2l0aCB0cnVuY2F0aW9uIGRldGVjdGlvbgotIFBH X1RSWS9QR19DQVRDSCBibG9ja3MgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51 cAotIE1lbW9yeSBsZWFrIHByZXZlbnRpb24gaW4gYWxsIGVycm9yIHBhdGhzCi0gVG9rZW4gY291 bnQgdmFsaWRhdGlvbiBlbnN1cmluZyBvdXRwdXQgbWF0Y2hlcyBOVU1fQkFDS0VORFMKLSBQcmlt YXJ5IG5vZGUgZGVsYXkgY29ycmVjdGlvbiAoYWx3YXlzIDBtcykKLSBTdXBwb3J0IGZvciBib3Ro IGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IGRlbGF5IHZhbHVlcwoKQ29tbWFuZCBGb3JtYXQ6 CkV4dGVybmFsIGNvbW1hbmRzIHNob3VsZCBvdXRwdXQgc3BhY2Utc2VwYXJhdGVkIGRlbGF5IHZh bHVlcyBpbiBtaWxsaXNlY29uZHM6CiJub2RlMF9kZWxheSBub2RlMV9kZWxheSBub2RlMl9kZWxh eSAuLi4iCkV4YW1wbGU6ICIwIDI1LjUgMTAwIiAocHJpbWFyeTogMG1zLCBzdGFuZGJ5MTogMjUu NW1zLCBzdGFuZGJ5MjogMTAwbXMpCgpUaGlzIGVuYWJsZXMgaW50ZWdyYXRpb24gd2l0aCBjdXN0 b20gbW9uaXRvcmluZyBzb2x1dGlvbnMsIGV4dGVybmFsCnJlcGxpY2F0aW9uIGxhZyBtZWFzdXJl bWVudCB0b29scywgYW5kIGVudGVycHJpc2UgbW9uaXRvcmluZyBzeXN0ZW1zCndoaWxlIG1haW50 YWluaW5nIGZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuCi0tLQogc3Jj L2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYyAgICAgICAgICAgIHwgIDM2ICsrCiBzcmMv aW5jbHVkZS9wb29sX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL3Nh bXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtICAgICAgICAgIHwgIDE2ICsKIHNyYy9zdHJl YW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYyB8IDMzMyArKysrKysrKysrKysr KysrKy0KIDQgZmlsZXMgY2hhbmdlZCwgMzkzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK CmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jIGIvc3JjL2Nv bmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwppbmRleCA1YmJlNDZkM2EuLjIzM2JhZGE4OSAx MDA2NDQKLS0tIGEvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYworKysgYi9zcmMv Y29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCkBAIC0zMTAsNiArMzEwLDEyIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgY2hlY2tfdGVtcF90YWJsZV9vcHRpb25z W10gPSB7CiAJe05VTEwsIDAsIGZhbHNlfQogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjb25m aWdfZW51bV9lbnRyeSByZXBsaWNhdGlvbl9kZWxheV9zb3VyY2Vfb3B0aW9uc1tdID0geworCXsi YnVpbHRpbiIsIFJFUExJQ0FUSU9OX0RFTEFZX0JVSUxUSU4sIGZhbHNlfSwKKwl7ImNtZCIsIFJF UExJQ0FUSU9OX0RFTEFZX0NNRCwgZmFsc2V9LAorCXtOVUxMLCAwLCBmYWxzZX0KK307CisKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgbG9nX2JhY2tlbmRfbWVzc2FnZXNf b3B0aW9uc1tdID0gewogCXsibm9uZSIsIEJHTVNHX05PTkUsIGZhbHNlfSwJLyogdHVybiBvZmYg bG9nZ2luZyAqLwogCXsidGVyc2UiLCBCR01TR19URVJTRSwgZmFsc2V9LAkvKiB0ZXJzZSBsb2dn aW5nIChyZXBlYXRlZCBtZXNzYWdlcyBhcmUKQEAgLTk4MCw2ICs5ODYsMzYgQEAgc3RhdGljIHN0 cnVjdCBjb25maWdfc3RyaW5nIENvbmZpZ3VyZU5hbWVzU3RyaW5nW10gPQogCQlOVUxMLCBOVUxM LCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UiLCBD RkdDWFRfUkVMT0FELCBTVFJFQU1JTkdfUkVQTElDQVRJT05fQ09ORklHLAorCQkJIlNvdXJjZSBv ZiByZXBsaWNhdGlvbiBkZWxheSBpbmZvcm1hdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0VO VU0sIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnJlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZSwKKwkJImJ1aWx0aW4iLAorCQlOVUxMLCBOVUxMLCBOVUxMLCByZXBsaWNhdGlvbl9kZWxh eV9zb3VyY2Vfb3B0aW9ucworCX0sCisKKwl7CisJCXsicmVwbGljYXRpb25fZGVsYXlfc291cmNl X2NtZCIsIENGR0NYVF9SRUxPQUQsIFNUUkVBTUlOR19SRVBMSUNBVElPTl9DT05GSUcsCisJCQki RXh0ZXJuYWwgY29tbWFuZCB0byByZXRyaWV2ZSByZXBsaWNhdGlvbiBkZWxheSBpbmZvcm1hdGlv bi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX1NUUklORywgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9v bF9jb25maWcucmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCwKKwkJIiIsCisJCU5VTEwsIE5V TEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90 aW1lb3V0IiwgQ0ZHQ1hUX1JFTE9BRCwgU1RSRUFNSU5HX1JFUExJQ0FUSU9OX0NPTkZJRywKKwkJ CSJUaW1lb3V0IGZvciBleHRlcm5hbCByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIGV4ZWN1dGlv biBpbiBzZWNvbmRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAor CQkmZ19wb29sX2NvbmZpZy5yZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dCwKKwkJMTAs CisJCTEsIDM2MDAsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImZhaWxiYWNrX2NvbW1hbmQi LCBDRkdDWFRfUkVMT0FELCBGQUlMT1ZFUl9DT05GSUcsCiAJCQkiQ29tbWFuZCB0byBleGVjdXRl IHdoZW4gYmFja2VuZCBub2RlIGlzIGF0dGFjaGVkLiIsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wb29sX2NvbmZpZy5oIGIvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAppbmRleCBiZTgyNzUw ZTUuLjFhODI2MmRkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysg Yi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCkBAIC05NCw2ICs5NCwxMiBAQCB0eXBlZGVmIGVu dW0gTG9nU3RhbmRieURlbGF5TW9kZXMKIAlMU0RfTk9ORQogfSBMb2dTdGFuZGJ5RGVsYXlNb2Rl czsKIAordHlwZWRlZiBlbnVtIFJlcGxpY2F0aW9uRGVsYXlTb3VyY2VNb2RlcworeworCVJFUExJ Q0FUSU9OX0RFTEFZX0JVSUxUSU4gPSAxLAorCVJFUExJQ0FUSU9OX0RFTEFZX0NNRAorfSBSZXBs aWNhdGlvbkRlbGF5U291cmNlTW9kZXM7CisKIAogdHlwZWRlZiBlbnVtIE1lbUNhY2hlTWV0aG9k CiB7CkBAIC0zNzEsNiArMzc3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAljaGFyCSAgICpzcl9jaGVj a19wYXNzd29yZDsJLyogcGFzc3dvcmQgZm9yIHNyX2NoZWNrX3VzZXIgKi8KIAljaGFyCSAgICpz cl9jaGVja19kYXRhYmFzZTsJLyogUG9zdGdyZVNRTCBkYXRhYmFzZSBuYW1lIGZvciBzdHJlYW1p bmcKIAkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGNoZWNrICovCisJaW50CQkJcmVwbGljYXRpb25f ZGVsYXlfc291cmNlOwkvKiByZXBsaWNhdGlvbiBkZWxheSBzb3VyY2U6IGJ1aWx0aW4gb3IgY21k ICovCisJY2hhcgkgICAqcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZDsJLyogZXh0ZXJuYWwg Y29tbWFuZCBmb3IgcmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQlyZXBsaWNhdGlvbl9kZWxh eV9zb3VyY2VfdGltZW91dDsJLyogdGltZW91dCBmb3IgZXh0ZXJuYWwgY29tbWFuZCBpbiBzZWNv bmRzICovCiAJY2hhcgkgICAqZmFpbG92ZXJfY29tbWFuZDsJLyogZXhlY3V0ZSBjb21tYW5kIHdo ZW4gZmFpbG92ZXIgaGFwcGVucyAqLwogCWNoYXIJICAgKmZvbGxvd19wcmltYXJ5X2NvbW1hbmQ7 IC8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGlzCiAJCQkJCQkJCQkJICogZW5kZWQg Ki8KZGlmZiAtLWdpdCBhL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSBiL3Ny Yy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQppbmRleCBhN2ViNTk0YzkuLjc2ZDUx ZTBmYSAxMDA2NDQKLS0tIGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCisr KyBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQpAQCAtNTE5LDYgKzUxOSwy MiBAQCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogCiAj c3JfY2hlY2tfZGF0YWJhc2UgPSAncG9zdGdyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgRGF0YWJhc2UgbmFtZSBmb3Igc3RyZWFtaW5nIHJlcGxpY2F0aW9uIGNoZWNr CisKKyNyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgPSAnYnVpbHRpbicKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBTb3VyY2Ugb2YgcmVwbGljYXRpb24gZGVsYXkgaW5mb3Jt YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAnYnVpbHRpbic6IHVz ZSBidWlsdC1pbiBkYXRhYmFzZSBxdWVyaWVzIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjICdjbWQnOiB1c2UgZXh0ZXJuYWwgY29tbWFuZAorI3JlcGxpY2F0 aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIEV4dGVybmFsIGNvbW1hbmQgdG8gcmV0cmlldmUgcmVwbGljYXRpb24gZGVsYXkgaW5m b3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmx5IHVzZWQg d2hlbiByZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgPSAnY21kJworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIENvbW1hbmQgc2hvdWxkIG91dHB1dCBkZWxheSB2YWx1ZXMgaW4g bWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9ybWF0 OiAiMCAyMCAxMCIgKG5vZGUwIG5vZGUxIG5vZGUyIGRlbGF5cykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBDb21tYW5kIHJ1bnMgd2l0aCBzcl9jaGVja191c2VyIGNyZWRl bnRpYWxzCisjcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1hbmQg ZXhlY3V0aW9uIGluIHNlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBPbmx5IHVzZWQgd2hlbiByZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgPSAnY21kJworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxLTM2MDAgc2Vjb25kcyAoZGVm YXVsdDogMTApCisKICNkZWxheV90aHJlc2hvbGQgPSAwCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgVGhyZXNob2xkIGJlZm9yZSBub3QgZGlzcGF0Y2hpbmcgcXVlcnkgdG8g c3RhbmRieSBub2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVW5pdCBp cyBpbiBieXRlcwpkaWZmIC0tZ2l0IGEvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dv cmtlcl9jaGlsZC5jIGIvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGls ZC5jCmluZGV4IDRmOGY4MjNhMy4uYTgwZGMyN2E0IDEwMDY0NAotLS0gYS9zcmMvc3RyZWFtaW5n X3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKKysrIGIvc3JjL3N0cmVhbWluZ19yZXBs aWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCkBAIC03Niw2ICs3Niw3IEBAIHN0YXRpYyB2b2xh dGlsZSBzaWdfYXRvbWljX3QgcmVzdGFydF9yZXF1ZXN0ID0gMDsKIHN0YXRpYyB2b2lkIGVzdGFi bGlzaF9wZXJzaXN0ZW50X2Nvbm5lY3Rpb24odm9pZCk7CiBzdGF0aWMgdm9pZCBkaXNjYXJkX3Bl cnNpc3RlbnRfY29ubmVjdGlvbih2b2lkKTsKIHN0YXRpYyB2b2lkIGNoZWNrX3JlcGxpY2F0aW9u X3RpbWVfbGFnKHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdf d2l0aF9jbWQodm9pZCk7CiBzdGF0aWMgdm9pZCBDaGVja1JlcGxpY2F0aW9uVGltZUxhZ0Vycm9y Q2Iodm9pZCAqYXJnKTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHRleHRfdG9fbHNu KGNoYXIgKnRleHQpOwogc3RhdGljIFJFVFNJR1RZUEUgbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNp Zyk7CkBAIC0yNTksNyArMjYwLDEwIEBAIGRvX3dvcmtlcl9jaGlsZCh2b2lkKQogCQkJCQlQT09M X05PREVfU1RBVFVTICpub2RlX3N0YXR1czsKIAkJCQkJaW50CQkJaTsKIAotCQkJCQkvKiBEbyBy ZXBsaWNhdGlvbiB0aW1lIGxhZyBjaGVja2luZyAqLworCQkJCQkJCQkJLyogRG8gcmVwbGljYXRp b24gdGltZSBsYWcgY2hlY2tpbmcgKi8KKwkJCQlpZiAocG9vbF9jb25maWctPnJlcGxpY2F0aW9u X2RlbGF5X3NvdXJjZSA9PSBSRVBMSUNBVElPTl9ERUxBWV9DTUQpCisJCQkJCWNoZWNrX3JlcGxp Y2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKCk7CisJCQkJZWxzZQogCQkJCQljaGVja19yZXBsaWNh dGlvbl90aW1lX2xhZygpOwogCiAJCQkJCS8qIENoZWNrIG5vZGUgc3RhdHVzICovCkBAIC02NTks NiArNjYzLDMzMyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZyh2b2lkKQogCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBjYWxsYmFjay5wcmV2aW91czsKIH0KIAorI2RlZmluZSBNQVhfQ01EX09V VFBVVCA0MDk2CisjZGVmaW5lIE1BWF9SRUFTT05BQkxFX0RFTEFZX01TIDM2MDAwMDAuMCAgLyog MSBob3VyIGluIG1pbGxpc2Vjb25kcyAqLworCisvKiBHbG9iYWwgdmFyaWFibGUgdG8gdHJhY2sg Y29tbWFuZCB0aW1lb3V0ICovCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGNvbW1hbmRf dGltZW91dF9vY2N1cnJlZCA9IDA7CisKKy8qCisgKiBTaWduYWwgaGFuZGxlciBmb3IgY29tbWFu ZCB0aW1lb3V0CisgKi8KK3N0YXRpYyB2b2lkCitjb21tYW5kX3RpbWVvdXRfaGFuZGxlcihpbnQg c2lnKQoreworCWNvbW1hbmRfdGltZW91dF9vY2N1cnJlZCA9IDE7Cit9CisKKy8qCisgKiBFc2Nh cGUgc2luZ2xlIHF1b3RlcyBpbiBhIHN0cmluZyBmb3Igc2hlbGwgY29tbWFuZCBzYWZldHkKKyAq Lworc3RhdGljIGNoYXIgKgorZXNjYXBlX3NpbmdsZV9xdW90ZXMoY29uc3QgY2hhciAqaW5wdXQp Cit7CisJY29uc3QgY2hhciAqc3JjOworCWNoYXIgKnJlc3VsdCwgKmRzdDsKKwlpbnQgcXVvdGVf Y291bnQgPSAwOworCWludCBsZW47CisKKwkvKiBDb3VudCBzaW5nbGUgcXVvdGVzIHRvIGRldGVy bWluZSByZXN1bHQgc2l6ZSAqLworCWZvciAoc3JjID0gaW5wdXQ7ICpzcmM7IHNyYysrKQorCXsK KwkJaWYgKCpzcmMgPT0gJ1wnJykKKwkJCXF1b3RlX2NvdW50Kys7CisJfQorCisJLyogQWxsb2Nh dGUgcmVzdWx0OiBvcmlnaW5hbCBsZW5ndGggKyAzIGNoYXJzIHBlciBxdW90ZSAocmVwbGFjZSAn IHdpdGggJ1wnJycpICovCisJbGVuID0gc3RybGVuKGlucHV0KSArIChxdW90ZV9jb3VudCAqIDMp ICsgMTsKKwlyZXN1bHQgPSBwYWxsb2MobGVuKTsKKworCS8qIENvcHkgYW5kIGVzY2FwZSAqLwor CWRzdCA9IHJlc3VsdDsKKwlmb3IgKHNyYyA9IGlucHV0OyAqc3JjOyBzcmMrKykKKwl7CisJCWlm ICgqc3JjID09ICdcJycpCisJCXsKKwkJCS8qIFJlcGxhY2UgJyB3aXRoICdcJycgKi8KKwkJCSpk c3QrKyA9ICdcJyc7CisJCQkqZHN0KysgPSAnXFwnOworCQkJKmRzdCsrID0gJ1wnJzsKKwkJCSpk c3QrKyA9ICdcJyc7CisJCX0KKwkJZWxzZQorCQl7CisJCQkqZHN0KysgPSAqc3JjOworCQl9CisJ fQorCSpkc3QgPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIHJl cGxpY2F0aW9uIHRpbWUgbGFnIHVzaW5nIGV4dGVybmFsIGNvbW1hbmQKKyAqLworc3RhdGljIHZv aWQKK2NoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCit7CisJRklMRQkJ ICAgKmZwOworCWNoYXIJCSAgICpjb21tYW5kID0gTlVMTDsKKwljaGFyCQkgICAqZXNjYXBlZF9j bWQgPSBOVUxMOworCWNoYXIJCSAgICpsaW5lOworCWNoYXIJCSAgICp0b2tlbjsKKwljaGFyCQkg ICAqc2F2ZXB0cjsKKwlpbnQJCQkJbm9kZV9pZDsKKwlkb3VibGUJCQlkZWxheV9tczsKKwl1aW50 NjQJCQlkZWxheTsKKwlpbnQJCQkJdG9rZW5fY291bnQgPSAwOworCUJhY2tlbmRJbmZvCSAgICpi a2luZm87CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgY2FsbGJhY2s7CisJYm9vbAkJCWNtZF9hbGxv Y2F0ZWQgPSBmYWxzZTsKKworCWlmIChOVU1fQkFDS0VORFMgPD0gMSkKKwl7CisJCS8qIElmIHRo ZXJlJ3Mgb25seSBvbmUgbm9kZSwgdGhlcmUncyBubyBwb2ludCB0byBkbyBjaGVja2luZyAqLwor CQlyZXR1cm47CisJfQorCisJaWYgKFJFQUxfUFJJTUFSWV9OT0RFX0lEIDwgMCkKKwl7CisJCS8q IE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBubyBwcmltYXJ5ICovCisJCXJldHVybjsKKwl9 CisKKwlpZiAoIVZBTElEX0JBQ0tFTkQoUkVBTF9QUklNQVJZX05PREVfSUQpKQorCXsKKwkJLyog Tm8gbmVlZCB0byBjaGVjayByZXBsaWNhdGlvbiBkZWxheSBpZiBwcmltYXJ5IGlzIGRvd24gKi8K KwkJcmV0dXJuOworCX0KKworCWlmICghcG9vbF9jb25maWctPnJlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZV9jbWQgfHwKKwkJc3RybGVuKHBvb2xfY29uZmlnLT5yZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfY21kKSA9PSAwKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coInJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZSBpcyBzZXQgdG8gJ2NtZCcgYnV0IHJlcGxpY2F0aW9uX2RlbGF5 X3NvdXJjZV9jbWQgaXMgbm90IGNvbmZpZ3VyZWQiKSwKKwkJCQkgZXJyaGludCgiU2V0IHJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgb3IgY2hhbmdlIHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJj ZSB0byAnYnVpbHRpbiciKSkpOworCQkvKiBGYWxsIGJhY2sgdG8gYnVpbHRpbiBtZXRob2QgKi8K KwkJY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWcoKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFs bG9jYXRlIGJ1ZmZlciBmb3IgY29tbWFuZCBvdXRwdXQgKi8KKwlsaW5lID0gcGFsbG9jKE1BWF9D TURfT1VUUFVUKTsKKworCS8qCisJICogUmVnaXN0ZXIgYSBlcnJvciBjb250ZXh0IGNhbGxiYWNr IHRvIHRocm93IHByb3BlciBjb250ZXh0IG1lc3NhZ2UKKwkgKi8KKwljYWxsYmFjay5jYWxsYmFj ayA9IENoZWNrUmVwbGljYXRpb25UaW1lTGFnRXJyb3JDYjsKKwljYWxsYmFjay5hcmcgPSBOVUxM OworCWNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250 ZXh0X3N0YWNrID0gJmNhbGxiYWNrOworCisJLyogQnVpbGQgY29tbWFuZCB0byBydW4gYXMgc3Jf Y2hlY2tfdXNlciBpZiBzcGVjaWZpZWQgKi8KKwlQR19UUlkoKTsKKwl7CisJCWlmIChwb29sX2Nv bmZpZy0+c3JfY2hlY2tfdXNlciAmJiBzdHJsZW4ocG9vbF9jb25maWctPnNyX2NoZWNrX3VzZXIp ID4gMCkKKwkJeworCQkJY2hhciAqZnVsbF9jb21tYW5kOworCQkJaW50IGNtZF9sZW47CisJCQkK KwkJCS8qIEVzY2FwZSB0aGUgY29tbWFuZCB0byBwcmV2ZW50IGluamVjdGlvbiAqLworCQkJZXNj YXBlZF9jbWQgPSBlc2NhcGVfc2luZ2xlX3F1b3Rlcyhwb29sX2NvbmZpZy0+cmVwbGljYXRpb25f ZGVsYXlfc291cmNlX2NtZCk7CisJCQkKKwkJCWNtZF9sZW4gPSBzdHJsZW4oZXNjYXBlZF9jbWQp ICsgCisJCQkJCSAgc3RybGVuKHBvb2xfY29uZmlnLT5zcl9jaGVja191c2VyKSArIDIwOyAvKiBl eHRyYSBzcGFjZSBmb3IgInN1IC0gdXNlciAtYyAnJyIgKi8KKwkJCQorCQkJZnVsbF9jb21tYW5k ID0gcGFsbG9jKGNtZF9sZW4pOworCQkJc25wcmludGYoZnVsbF9jb21tYW5kLCBjbWRfbGVuLCAi c3UgLSAlcyAtYyAnJXMnIiwgCisJCQkJCSBwb29sX2NvbmZpZy0+c3JfY2hlY2tfdXNlciwgZXNj YXBlZF9jbWQpOworCQkJY29tbWFuZCA9IGZ1bGxfY29tbWFuZDsKKwkJCWNtZF9hbGxvY2F0ZWQg PSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJY29tbWFuZCA9IHBvb2xfY29uZmlnLT5yZXBs aWNhdGlvbl9kZWxheV9zb3VyY2VfY21kOworCQl9CisKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJ KGVycm1zZygiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQ6ICVzIiwgY29tbWFu ZCkpKTsKKworCQkvKiBTZXQgdXAgdGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpb24gKi8KKwkJ Y29tbWFuZF90aW1lb3V0X29jY3VycmVkID0gMDsKKwkJc2lnbmFsKFNJR0FMUk0sIGNvbW1hbmRf dGltZW91dF9oYW5kbGVyKTsKKwkJYWxhcm0ocG9vbF9jb25maWctPnJlcGxpY2F0aW9uX2RlbGF5 X3NvdXJjZV90aW1lb3V0KTsKKworCQlmcCA9IHBvcGVuKGNvbW1hbmQsICJyIik7CisJCWlmIChm cCA9PSBOVUxMKQorCQl7CisJCQlhbGFybSgwKTsgLyogQ2FuY2VsIGFsYXJtICovCisJCQlzaWdu YWwoU0lHQUxSTSwgU0lHX0RGTCk7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJm YWlsZWQgdG8gZXhlY3V0ZSByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kOiAlcyIsIGNvbW1hbmQp LAorCQkJCQkgZXJyZGV0YWlsKCJwb3BlbiBmYWlsZWQ6ICVtIikpKTsKKwkJfQorCisJCWlmIChm Z2V0cyhsaW5lLCBNQVhfQ01EX09VVFBVVCwgZnApID09IE5VTEwpCisJCXsKKwkJCWludCBwY2xv c2VfcmVzdWx0ID0gcGNsb3NlKGZwKTsKKwkJCWZwID0gTlVMTDsKKwkJCWFsYXJtKDApOyAvKiBD YW5jZWwgYWxhcm0gKi8KKwkJCXNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsKKwkJCQorCQkJaWYg KGNvbW1hbmRfdGltZW91dF9vY2N1cnJlZCkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycm1zZygicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJWQg c2Vjb25kczogJXMiLAorCQkJCQkJCQlwb29sX2NvbmZpZy0+cmVwbGljYXRpb25fZGVsYXlfc291 cmNlX3RpbWVvdXQsIGNvbW1hbmQpLAorCQkJCQkJIGVycmhpbnQoIkNvbnNpZGVyIGluY3JlYXNp bmcgcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgb3Igb3B0aW1pemluZyB0aGUgY29t bWFuZCIpKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJtc2coImZhaWxlZCB0byByZWFkIG91dHB1dCBmcm9tIHJlcGxpY2F0aW9uIGRlbGF5IGNv bW1hbmQ6ICVzIiwgY29tbWFuZCksCisJCQkJCQkgZXJyZGV0YWlsKCJjb21tYW5kIGV4aXQgc3Rh dHVzOiAlZCIsIHBjbG9zZV9yZXN1bHQpKSk7CisJCQl9CisJCX0KKworCQlhbGFybSgwKTsgLyog Q2FuY2VsIGFsYXJtICovCisJCXNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsKKworCQkvKiBDaGVj ayBpZiBvdXRwdXQgd2FzIHRydW5jYXRlZCAqLworCQlpZiAoc3RybGVuKGxpbmUpID09IE1BWF9D TURfT1VUUFVUIC0gMSAmJiBsaW5lW01BWF9DTURfT1VUUFVUIC0gMl0gIT0gJ1xuJykKKwkJewor CQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJyZXBsaWNhdGlvbiBkZWxheSBjb21t YW5kIG91dHB1dCBtYXkgaGF2ZSBiZWVuIHRydW5jYXRlZCIpKSk7CisJCX0KKworCQlwY2xvc2Uo ZnApOworCQlmcCA9IE5VTEw7CisKKwkJLyogUGFyc2UgdGhlIG91dHB1dCBmb3JtYXQgIjAgMjAg MTAiIHdoZXJlIGVhY2ggbnVtYmVyIGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBmb3Igbm9kZXMg MCwgMSwgMiBldGMgKi8KKwkJLyogQ291bnQgdG9rZW5zIGZpcnN0IGZvciB2YWxpZGF0aW9uICov CisJCWNoYXIgKmxpbmVfY29weSA9IHBzdHJkdXAobGluZSk7CisJCWNoYXIgKnRlbXBfdG9rZW4g PSBzdHJ0b2sobGluZV9jb3B5LCAiIFx0XG4iKTsKKwkJd2hpbGUgKHRlbXBfdG9rZW4gIT0gTlVM TCkKKwkJeworCQkJdG9rZW5fY291bnQrKzsKKwkJCXRlbXBfdG9rZW4gPSBzdHJ0b2soTlVMTCwg IiBcdFxuIik7CisJCX0KKwkJcGZyZWUobGluZV9jb3B5KTsKKworCQkvKiBOb3cgcGFyc2UgdGhl IGFjdHVhbCB0b2tlbnMgKi8KKwkJdG9rZW4gPSBzdHJ0b2tfcihsaW5lLCAiIFx0XG4iLCAmc2F2 ZXB0cik7CisJCW5vZGVfaWQgPSAwOworCisJCWlmICh0b2tlbl9jb3VudCAhPSBOVU1fQkFDS0VO RFMpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1zZygicmVwbGljYXRpb24g ZGVsYXkgY29tbWFuZCByZXR1cm5lZCAlZCB2YWx1ZXMsIGV4cGVjdGVkICVkIiwKKwkJCQkJCQl0 b2tlbl9jb3VudCwgTlVNX0JBQ0tFTkRTKSwKKwkJCQkJIGVycmhpbnQoIkNvbW1hbmQgc2hvdWxk IG91dHB1dCBvbmUgZGVsYXkgdmFsdWUgcGVyIGJhY2tlbmQgbm9kZSIpKSk7CisJCX0KKworCQl3 aGlsZSAodG9rZW4gIT0gTlVMTCAmJiBub2RlX2lkIDwgTlVNX0JBQ0tFTkRTKQorCQl7CisJCQlp ZiAoIVZBTElEX0JBQ0tFTkQobm9kZV9pZCkpCisJCQl7CisJCQkJbm9kZV9pZCsrOworCQkJCXRv a2VuID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwgJnNhdmVwdHIpOworCQkJCWNvbnRpbnVlOwor CQkJfQorCisJCQljaGFyICplbmRwdHI7CisJCQlkZWxheV9tcyA9IHN0cnRvZCh0b2tlbiwgJmVu ZHB0cik7CisJCQkKKwkJCS8qIFZhbGlkYXRlIHRoZSBjb252ZXJzaW9uICovCisJCQlpZiAoKmVu ZHB0ciAhPSAnXDAnKQorCQkJeworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2co ImludmFsaWQgZGVsYXkgdmFsdWUgJyVzJyBmb3Igbm9kZSAlZCwgdHJlYXRpbmcgYXMgMCIsCisJ CQkJCQkJCXRva2VuLCBub2RlX2lkKSkpOworCQkJCWRlbGF5X21zID0gMDsKKwkJCX0KKwkJCQor CQkJLyogVmFsaWRhdGUgZGVsYXkgdmFsdWUgcmFuZ2UgKi8KKwkJCWlmIChkZWxheV9tcyA8IDAp CisJCQl7CisJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycm1zZygibmVnYXRpdmUgZGVs YXkgdmFsdWUgJS4zZiBmb3Igbm9kZSAlZCwgdHJlYXRpbmcgYXMgMCIsCisJCQkJCQkJCWRlbGF5 X21zLCBub2RlX2lkKSkpOworCQkJCWRlbGF5X21zID0gMDsKKwkJCX0KKwkJCWVsc2UgaWYgKGRl bGF5X21zID4gTUFYX1JFQVNPTkFCTEVfREVMQVlfTVMpCisJCQl7CisJCQkJZXJlcG9ydChXQVJO SU5HLAorCQkJCQkJKGVycm1zZygiZXh0cmVtZWx5IGxhcmdlIGRlbGF5IHZhbHVlICUuM2YgZm9y IG5vZGUgJWQiLAorCQkJCQkJCQlkZWxheV9tcywgbm9kZV9pZCkpKTsKKwkJCX0KKworCQkJYmtp bmZvID0gcG9vbF9nZXRfbm9kZV9pbmZvKG5vZGVfaWQpOworCisJCQlpZiAoUFJJTUFSWV9OT0RF X0lEID09IG5vZGVfaWQpCisJCQl7CisJCQkJLyogUHJpbWFyeSBub2RlIHNob3VsZCBhbHdheXMg aGF2ZSAwIGRlbGF5ICovCisJCQkJYmtpbmZvLT5zdGFuZGJ5X2RlbGF5ID0gMDsKKwkJCQlpZiAo ZGVsYXlfbXMgPiAwKQorCQkJCXsKKwkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJKGVycm1z ZygicHJpbWFyeSBub2RlICVkIHJlcG9ydGVkIG5vbi16ZXJvIGRlbGF5ICUuM2YsIHNldHRpbmcg dG8gMCIsCisJCQkJCQkJCQlub2RlX2lkLCBkZWxheV9tcykpKTsKKwkJCQl9CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJLyogQ29udmVydCBkZWxheSBmcm9tIG1pbGxpc2Vjb25kcyB0byBtaWNy b3NlY29uZHMgZm9yIGludGVybmFsIHN0b3JhZ2UgKi8KKwkJCQlkZWxheSA9ICh1aW50NjQpKGRl bGF5X21zICogMTAwMCk7CisJCQkJYmtpbmZvLT5zdGFuZGJ5X2RlbGF5ID0gZGVsYXk7CisJCQkJ YmtpbmZvLT5zdGFuZGJ5X2RlbGF5X2J5X3RpbWUgPSB0cnVlOworCisJCQkJLyogTG9nIGRlbGF5 IGlmIG5lY2Vzc2FyeSAqLworCQkJCXVpbnQ2NCBkZWxheV90aHJlc2hvbGRfYnlfdGltZSA9IHBv b2xfY29uZmlnLT5kZWxheV90aHJlc2hvbGRfYnlfdGltZSAqIDEwMDA7IC8qIHRocmVzaG9sZCBp cyBpbiBtaWxsaXNlY29uZHMsIGNvbnZlcnQgdG8gbWljcm9zZWNvbmRzICovCisKKwkJCQlpZiAo KHBvb2xfY29uZmlnLT5sb2dfc3RhbmRieV9kZWxheSA9PSBMU0RfQUxXQVlTICYmIGRlbGF5X21z ID4gMCkgfHwKKwkJCQkJKHBvb2xfY29uZmlnLT5sb2dfc3RhbmRieV9kZWxheSA9PSBMU0RfT1ZF Ul9USFJFU0hPTEQgJiYKKwkJCQkJIGJraW5mby0+c3RhbmRieV9kZWxheSA+IGRlbGF5X3RocmVz aG9sZF9ieV90aW1lKSkKKwkJCQl7CisJCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJCShlcnJtc2co IlJlcGxpY2F0aW9uIG9mIG5vZGU6ICVkIGlzIGJlaGluZCAlLjNmIHNlY29uZChzKSBmcm9tIHRo ZSBwcmltYXJ5IHNlcnZlciAobm9kZTogJWQpIFtleHRlcm5hbCBjb21tYW5kXSIsCisJCQkJCQkJ CQlub2RlX2lkLCBkZWxheV9tcyAvIDEwMDAsIFBSSU1BUllfTk9ERV9JRCkpKTsKKwkJCQl9CisJ CQl9CisKKwkJCW5vZGVfaWQrKzsKKwkJCXRva2VuID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwg JnNhdmVwdHIpOworCQl9CisKKwl9CisJfQorCVBHX0NBVENIKCk7CisJeworCQkvKiBDbGVhbnVw IGluIGNhc2Ugb2YgZXJyb3IgKi8KKwkJYWxhcm0oMCk7IC8qIENhbmNlbCBhbnkgcGVuZGluZyBh bGFybSAqLworCQlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CisJCWlmIChmcCkKKwkJeworCQkJ cGNsb3NlKGZwKTsKKwkJCWZwID0gTlVMTDsKKwkJfQorCQlpZiAobGluZSkKKwkJCXBmcmVlKGxp bmUpOworCQlpZiAoZXNjYXBlZF9jbWQpCisJCQlwZnJlZShlc2NhcGVkX2NtZCk7CisJCWlmIChj bWRfYWxsb2NhdGVkICYmIGNvbW1hbmQpCisJCQlwZnJlZShjb21tYW5kKTsKKwkJZXJyb3JfY29u dGV4dF9zdGFjayA9IGNhbGxiYWNrLnByZXZpb3VzOworCQlQR19SRV9USFJPVygpOworCX0KKwlQ R19FTkRfVFJZKCk7CisKKwkvKiBOb3JtYWwgY2xlYW51cCAqLworCWlmIChsaW5lKQorCQlwZnJl ZShsaW5lKTsKKwlpZiAoZXNjYXBlZF9jbWQpCisJCXBmcmVlKGVzY2FwZWRfY21kKTsKKwlpZiAo Y21kX2FsbG9jYXRlZCAmJiBjb21tYW5kKQorCQlwZnJlZShjb21tYW5kKTsKKwkKKwllcnJvcl9j b250ZXh0X3N0YWNrID0gY2FsbGJhY2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBDaGVj a1JlcGxpY2F0aW9uVGltZUxhZ0Vycm9yQ2Iodm9pZCAqYXJnKQogewotLSAKMi41MS4wCgo= --0000000000000c79bb063d1a81f3 Content-Type: application/octet-stream; name="external-lag-feature-tests.patch" Content-Disposition: attachment; filename="external-lag-feature-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mepl8hjb1 RnJvbSA0ZDg0M2U2OWJhY2I2YzE4MDZmZTI0MDlhN2MzMDRmNGZlZDdmMzg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAyNCBBdWcgMjAyNSAxMzo0OTo1NCArMDMwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBjb21wcmVoZW5zaXZlIHRlc3Qgc3VpdGUgZm9yIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5 CiBmZWF0dXJlCgpUaGlzIHBhdGNoIGFkZHMgYSBjb21wbGV0ZSB0ZXN0IHN1aXRlIGZvciB0aGUg ZXh0ZXJuYWwgY29tbWFuZCByZXBsaWNhdGlvbgpkZWxheSBzb3VyY2UgZmVhdHVyZSB3aXRoIGNv bXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgYWxsIGZ1bmN0aW9uYWxpdHkgYW5kCmVkZ2UgY2FzZXMu CgpUZXN0IENvdmVyYWdlOgotIEJhc2ljIGV4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uIHdpdGgg aW50ZWdlciBtaWxsaXNlY29uZCB2YWx1ZXMKLSBGbG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2 YWx1ZSBwYXJzaW5nIGFuZCBoYW5kbGluZwotIERlbGF5IHRocmVzaG9sZCBmdW5jdGlvbmFsaXR5 IHdpdGggZXh0ZXJuYWwgY29tbWFuZHMKLSBVc2VyIHN3aXRjaGluZyB3aXRoIHNyX2NoZWNrX3Vz ZXIgcGFyYW1ldGVyCi0gRXJyb3IgaGFuZGxpbmcgZm9yIG1pc3NpbmcvaW52YWxpZCBjb21tYW5k cyBhbmQgZXhlY3V0aW9uIGZhaWx1cmVzCi0gQ29tbWFuZCB0aW1lb3V0IGhhbmRsaW5nIHdpdGgg Y29uZmlndXJhYmxlIHRpbWVvdXQgdmFsdWVzCi0gSW5wdXQgdmFsaWRhdGlvbiBmb3IgaW52YWxp ZCwgbmVnYXRpdmUsIGFuZCBleHRyZW1lbHkgbGFyZ2UgZGVsYXkgdmFsdWVzCi0gSGFuZGxpbmcg b2Ygd3JvbmcgbnVtYmVyIG9mIG91dHB1dCB2YWx1ZXMgZnJvbSBjb21tYW5kcwotIFByaW1hcnkg bm9kZSBkZWxheSBjb3JyZWN0aW9uIChhbHdheXMgMG1zKQotIE91dHB1dCB0cnVuY2F0aW9uIGRl dGVjdGlvbiBhbmQgd2FybmluZ3MKLSBUaW1lb3V0IGJlaGF2aW9yIHdpdGggYm90aCBzaG9ydCBh bmQgbG9uZyB0aW1lb3V0IHZhbHVlcwoKVGVzdCBGaWxlczoKLSB0ZXN0LnNoOiBNYWluIHJlZ3Jl c3Npb24gdGVzdCB3aXRoIDcgY29tcHJlaGVuc2l2ZSB0ZXN0IHNjZW5hcmlvcwotIHRlc3RfdmFs aWRhdGlvbi5zaDogVmFsaWRhdGlvbiBhbmQgZWRnZSBjYXNlIHRlc3Rpbmcgd2l0aCA2IHRlc3Qg c2NlbmFyaW9zCi0gdGVzdF9wYXJzaW5nLnNoOiBVbml0IHRlc3QgZm9yIHBhcnNpbmcgbG9naWMg YW5kIG91dHB1dCBmb3JtYXQgdmFsaWRhdGlvbgotIFJFQURNRTogQ29tcGxldGUgZG9jdW1lbnRh dGlvbiBvZiB0ZXN0IGNvdmVyYWdlIGFuZCBleHBlY3RlZCBiZWhhdmlvcgoKVGVzdCBJbXByb3Zl bWVudHM6Ci0gSW50ZWxsaWdlbnQgd2FpdCBsb29wcyByZXBsYWNpbmcgZml4ZWQgc2xlZXBzIGZv ciBiZXR0ZXIgcmVsaWFiaWxpdHkKLSBQcm9wZXIgZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRp bmcgbWVjaGFuaXNtcwotIENvbXByZWhlbnNpdmUgbG9nIGFuYWx5c2lzIGFuZCB2YWxpZGF0aW9u Ci0gQmV0dGVyIHByb2dyZXNzIHJlcG9ydGluZyBkdXJpbmcgdGVzdCBleGVjdXRpb24KLSBEZXRl cm1pbmlzdGljIHRpbWluZyB0byByZWR1Y2UgdGVzdCBmbGFraW5lc3MKClRoZSB0ZXN0IHN1aXRl IGVuc3VyZXMgdGhlIGV4dGVybmFsIGNvbW1hbmQgZmVhdHVyZSBpbnRlZ3JhdGVzIHByb3Blcmx5 IHdpdGgKZXhpc3RpbmcgcGdwb29sIGZ1bmN0aW9uYWxpdHkgYW5kIGhhbmRsZXMgdmFyaW91cyBl ZGdlIGNhc2VzIGdyYWNlZnVsbHkuClRlc3RzIGZvbGxvdyBleGlzdGluZyBwZ3Bvb2wgcmVncmVz c2lvbiB0ZXN0IHBhdHRlcm5zIGFuZCB3aWxsIGJlCmF1dG9tYXRpY2FsbHkgZGlzY292ZXJlZCBi eSB0aGUgdGVzdCBydW5uZXIuCgpFeHBlY3RlZCBCZWhhdmlvcjoKLSBFeHRlcm5hbCBjb21tYW5k cyBzaG91bGQgYmUgZXhlY3V0ZWQgYXMgY29uZmlndXJlZAotIERlbGF5IHZhbHVlcyBzaG91bGQg YmUgcGFyc2VkIGNvcnJlY3RseSAoYm90aCBpbnQgYW5kIGZsb2F0KQotIFRocmVzaG9sZCBjb21w YXJpc29ucyBzaG91bGQgd29yayBwcm9wZXJseSB3aXRoIGV4dGVybmFsIGRlbGF5cwotIEVycm9y IGNvbmRpdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSB3aXRoIHByb3BlciBmYWxs YmFja3MKLSBDb21tYW5kcyBzaG91bGQgdGltZW91dCBhcHByb3ByaWF0ZWx5IGJhc2VkIG9uIGNv bmZpZ3VyYXRpb24KLSBUaW1lb3V0IGVycm9ycyBzaG91bGQgcHJvdmlkZSBoZWxwZnVsIG1lc3Nh Z2VzIGFuZCBoaW50cwotLS0KIC4uLi8wODMuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvUkVB RE1FICAgICB8ICA0MyArKysKIC4uLi8wODMuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVz dC5zaCAgICB8IDMwNCArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X3BhcnNpbmcuc2ggICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA1NCArKysrCiAuLi4vdGVzdF92YWxpZGF0aW9uLnNo ICAgICAgICAgICAgICAgICAgICAgICAgfCAyODUgKysrKysrKysrKysrKysrKwogNCBmaWxlcyBj aGFuZ2VkLCA2ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3Jl Z3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L1JFQURNRQogY3Jl YXRlIG1vZGUgMTAwNzU1IHNyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3Jl cGxpY2F0aW9uX2RlbGF5L3Rlc3Quc2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdy ZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0X3BhcnNpbmcu c2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRl cm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0X3ZhbGlkYXRpb24uc2gKCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS9S RUFETUUgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlv bl9kZWxheS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4xODA4 YmE4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5l eHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS9SRUFETUUKQEAgLTAsMCArMSw0MyBAQAorRXh0ZXJu YWwgUmVwbGljYXRpb24gRGVsYXkgQ29tbWFuZCBUZXN0Cis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGUgZXh0ZXJuYWwgY29t bWFuZCByZXBsaWNhdGlvbiBkZWxheSBzb3VyY2UgZmVhdHVyZS4KKworVGVzdCBDb3ZlcmFnZToK Ky0gQmFzaWMgZXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24gd2l0aCBpbnRlZ2VyIG1pbGxpc2Vj b25kIHZhbHVlcworLSBGbG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2YWx1ZSBwYXJzaW5nCist IERlbGF5IHRocmVzaG9sZCBmdW5jdGlvbmFsaXR5IHdpdGggZXh0ZXJuYWwgY29tbWFuZHMKKy0g VXNlciBzd2l0Y2hpbmcgd2l0aCBzcl9jaGVja191c2VyIHBhcmFtZXRlcgorLSBFcnJvciBoYW5k bGluZyBmb3IgbWlzc2luZy9pbnZhbGlkIGNvbW1hbmRzCistIENvbW1hbmQgZXhlY3V0aW9uIGZh aWx1cmUgc2NlbmFyaW9zCistIENvbW1hbmQgdGltZW91dCBoYW5kbGluZyB3aXRoIGNvbmZpZ3Vy YWJsZSB0aW1lb3V0IHZhbHVlcworLSBJbnB1dCB2YWxpZGF0aW9uIGZvciBpbnZhbGlkLCBuZWdh dGl2ZSwgYW5kIGV4dHJlbWVseSBsYXJnZSBkZWxheSB2YWx1ZXMKKy0gSGFuZGxpbmcgb2Ygd3Jv bmcgbnVtYmVyIG9mIG91dHB1dCB2YWx1ZXMKKy0gUHJpbWFyeSBub2RlIGRlbGF5IGNvcnJlY3Rp b24KKy0gT3V0cHV0IHRydW5jYXRpb24gZGV0ZWN0aW9uCistIFRpbWVvdXQgYmVoYXZpb3Igd2l0 aCBib3RoIHNob3J0IGFuZCBsb25nIHRpbWVvdXQgdmFsdWVzCisKK0ZpbGVzOgorLSB0ZXN0LnNo OiBNYWluIHRlc3Qgc2NyaXB0CistIHRlc3RfcGFyc2luZy5zaDogVW5pdCB0ZXN0IGZvciBwYXJz aW5nIGxvZ2ljICAKKy0gdGVzdF92YWxpZGF0aW9uLnNoOiBWYWxpZGF0aW9uIGFuZCBlZGdlIGNh c2UgdGVzdGluZworLSBSRUFETUU6IFRoaXMgZG9jdW1lbnRhdGlvbgorCitUaGUgdGVzdCBjcmVh dGVzIHRlbXBvcmFyeSBjb21tYW5kIHNjcmlwdHMgdGhhdCBvdXRwdXQgZGVsYXkgdmFsdWVzIGlu IHRoZSBmb3JtYXQ6Cisibm9kZTBfZGVsYXkgbm9kZTFfZGVsYXkgbm9kZTJfZGVsYXkiCisKK1do ZXJlIGRlbGF5cyBhcmUgaW4gbWlsbGlzZWNvbmRzIGFuZCBjYW4gYmUgaW50ZWdlciBvciBmbG9h dGluZy1wb2ludCB2YWx1ZXMuCisKK1Rlc3QgRW52aXJvbm1lbnQ6CistIFVzZXMgc3RyZWFtaW5n IHJlcGxpY2F0aW9uIG1vZGUgd2l0aCAzIG5vZGVzCistIENvbmZpZ3VyZXMgc3JfY2hlY2tfcGVy aW9kID0gMSBzZWNvbmQgZm9yIGZhc3RlciB0ZXN0aW5nCistIFRlc3RzIHZhcmlvdXMgZGVsYXkg c2NlbmFyaW9zIGFuZCB0aHJlc2hvbGQgYmVoYXZpb3JzCisKK0V4cGVjdGVkIEJlaGF2aW9yOgor LSBFeHRlcm5hbCBjb21tYW5kcyBzaG91bGQgYmUgZXhlY3V0ZWQgYXMgY29uZmlndXJlZAorLSBE ZWxheSB2YWx1ZXMgc2hvdWxkIGJlIHBhcnNlZCBjb3JyZWN0bHkgKGJvdGggaW50IGFuZCBmbG9h dCkKKy0gVGhyZXNob2xkIGNvbXBhcmlzb25zIHNob3VsZCB3b3JrIHByb3Blcmx5CistIEVycm9y IGNvbmRpdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgZ3JhY2VmdWxseQorLSBDb21tYW5kcyBzaG91 bGQgdGltZW91dCBhcHByb3ByaWF0ZWx5IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24KKy0gVGltZW91 dCBlcnJvcnMgc2hvdWxkIHByb3ZpZGUgaGVscGZ1bCBtZXNzYWdlcyBhbmQgaGludHMKKy0gVGVz dHMgc2hvdWxkIGJlIHJlbGlhYmxlIHdpdGggcHJvcGVyIHdhaXQgbWVjaGFuaXNtcyBpbnN0ZWFk IG9mIGZpeGVkIHNsZWVwcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5 L3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNh dGlvbl9kZWxheS90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4u MDQ0ZWYzNDFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8w ODMuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVzdC5zaApAQCAtMCwwICsxLDMwNCBAQAor IyEvdXNyL2Jpbi9lbnYgYmFzaAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBzY3JpcHQgZm9yIGV4dGVy bmFsIGNvbW1hbmQgcmVwbGljYXRpb24gZGVsYXkgc291cmNlCisjCitzb3VyY2UgJFRFU1RMSUJT CitURVNURElSPXRlc3RkaXIKK1BHX0NUTD0kUEdCSU4vcGdfY3RsCitQU1FMPSIkUEdCSU4vcHNx bCAtWCAiCisKK3JtIC1mciAkVEVTVERJUgorbWtkaXIgJFRFU1RESVIKK2NkICRURVNURElSCisK KyMgY3JlYXRlIHRlc3QgZW52aXJvbm1lbnQKK2VjaG8gLW4gImNyZWF0aW5nIHRlc3QgZW52aXJv bm1lbnQuLi4iCiskUEdQT09MX1NFVFVQIC1tIHMgLW4gMyB8fCBleGl0IDEKK2VjaG8gImRvbmUu Igorc291cmNlIC4vYmFzaHJjLnBvcnRzCitleHBvcnQgUEdQT1JUPSRQR1BPT0xfUE9SVAorCisj IENyZWF0ZSBleHRlcm5hbCBjb21tYW5kIHNjcmlwdHMgZm9yIHRlc3RpbmcKK2NhdCA+IGRlbGF5 X2NtZF9zdGF0aWMuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIFN0YXRpYyBkZWxheSB2YWx1 ZXM6IG5vZGUwPTBtcywgbm9kZTE9MjVtcywgbm9kZTI9NTBtcworZWNobyAiMCAyNSA1MCIKK0VP RgorY2htb2QgK3ggZGVsYXlfY21kX3N0YXRpYy5zaAorCitjYXQgPiBkZWxheV9jbWRfZmxvYXQu c2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIEZsb2F0IGRlbGF5IHZhbHVlczogbm9kZTA9MG1z LCBub2RlMT0yNS41bXMsIG5vZGUyPTEwMC43NW1zCitlY2hvICIwIDI1LjUgMTAwLjc1IgorRU9G CitjaG1vZCAreCBkZWxheV9jbWRfZmxvYXQuc2gKKworY2F0ID4gZGVsYXlfY21kX2hpZ2guc2gg PDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIEhpZ2ggZGVsYXkgdmFsdWVzIHRvIHRlc3QgdGhyZXNo b2xkOiBub2RlMD0wbXMsIG5vZGUxPTIwMDBtcywgbm9kZTI9MzAwMG1zCitlY2hvICIwIDIwMDAg MzAwMCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX2hpZ2guc2gKKworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0MTogQmFzaWMgZXh0ZXJuYWwgY29tbWFu ZCB3aXRoIGludGVnZXIgbWlsbGlzZWNvbmQgdmFsdWVzID09PQorIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgPSAnY21kJyIg Pj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0g Jy4vZGVsYXlfY21kX3N0YXRpYy5zaCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAic3JfY2hl Y2tfcGVyaW9kID0gMSIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJsb2dfc3RhbmRieV9kZWxh eSA9ICdhbHdheXMnIiA+PiBldGMvcGdwb29sLmNvbmYKK2VjaG8gImxvZ19taW5fbWVzc2FnZXMg PSAnREVCVUcxJyIgPj4gZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3Bn cG9vbF9zdGFydHVwCisKKyRQU1FMIHRlc3QgPDxFT0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVH RVIpOworRU9GCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuIGFuZCBwb3B1bGF0ZSBkZWxh eSB2YWx1ZXMKKyMgc3JfY2hlY2tfcGVyaW9kIGlzIDEgc2Vjb25kLCBzbyB3YWl0IGEgYml0IGxv bmdlciB0byBlbnN1cmUgaXQgcnVucworZWNobyAiV2FpdGluZyBmb3Igc3JfY2hlY2sgdG8gcnVu Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJleGVjdXRpbmcgcmVw bGljYXRpb24gZGVsYXkgY29tbWFuZCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4K KyAgICAgICAgZWNobyAiQ29tbWFuZCBleGVjdXRlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAg ICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyRQU1FMIHRlc3QgPDxFT0YK K1NIT1cgUE9PTF9OT0RFUzsKK0VPRgorCisjIENoZWNrIHRoYXQgZGVsYXkgdmFsdWVzIGFyZSBw b3B1bGF0ZWQgaW4gdGhlIGxvZworZ3JlcCAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNv bW1hbmQiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhl bgorICAgIGVjaG8gZmFpbDogZXh0ZXJuYWwgY29tbWFuZCB3YXMgbm90IGV4ZWN1dGVkCisgICAg ZWNobyAiTG9nIGNvbnRlbnRzOiIKKyAgICB0YWlsIC0yMCBsb2cvcGdwb29sLmxvZworICAgIC4v c2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKKyMgVmVyaWZ5IGFjdHVhbCBkZWxheSB2YWx1 ZXMgd2VyZSBwYXJzZWQKK2lmICEgJFBTUUwgLXQgLWMgIlNIT1cgUE9PTF9OT0RFUyIgdGVzdCB8 IGdyZXAgLUUgIlswLTldK1wuWzAtOV0rIiA+L2Rldi9udWxsOyB0aGVuCisgICAgZWNobyAiV2Fy bmluZzogTm8gZGVsYXkgdmFsdWVzIGZvdW5kIGluIFBPT0xfTk9ERVMgb3V0cHV0IgorZmkKKwor IyBDaGVjayBmb3IgZGVsYXkgbG9nIG1lc3NhZ2VzCitncmVwICJSZXBsaWNhdGlvbiBvZiBub2Rl LipleHRlcm5hbCBjb21tYW5kIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsg JD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGV4dGVybmFsIGNvbW1hbmQgZGVsYXkgbG9n Z2luZyBub3QgZm91bmQKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hv IG9rOiBiYXNpYyBleHRlcm5hbCBjb21tYW5kIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxs CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDI6IEV4 dGVybmFsIGNvbW1hbmQgd2l0aCBmbG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2YWx1ZXMgPT09 CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVXBkYXRlIGNvbmZpZ3VyYXRp b24gdG8gdXNlIGZsb2F0IGNvbW1hbmQKK3NlZCAtaS5iYWsgInN8ZGVsYXlfY21kX3N0YXRpYy5z aHxkZWxheV9jbWRfZmxvYXQuc2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2Fp dF9mb3JfcGdwb29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4gd2l0aCBm bG9hdCB2YWx1ZXMKK2VjaG8gIldhaXRpbmcgZm9yIHNyX2NoZWNrIHdpdGggZmxvYXQgdmFsdWVz Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJleGVjdXRpbmcgcmVw bGljYXRpb24gZGVsYXkgY29tbWFuZC4qZGVsYXlfY21kX2Zsb2F0LnNoIiBsb2cvcGdwb29sLmxv ZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJGbG9hdCBjb21tYW5kIGV4ZWN1dGVk IGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEK K2RvbmUKKworJFBTUUwgdGVzdCA8PEVPRgorU0hPVyBQT09MX05PREVTOworRU9GCisKKyMgQ2hl Y2sgdGhhdCBmbG9hdCB2YWx1ZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5CitncmVwICJleGVjdXRp bmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4qZGVsYXlfY21kX2Zsb2F0LnNoIiBsb2cvcGdw b29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZh aWw6IGZsb2F0IGNvbW1hbmQgd2FzIG5vdCBleGVjdXRlZAorICAgIC4vc2h1dGRvd25hbGwKKyAg ICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGZsb2F0aW5nLXBvaW50IHZhbHVlcyB0ZXN0IHN1Y2Nl ZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K2VjaG8gPT09IFRlc3QzOiBFeHRlcm5hbCBjb21tYW5kIHdpdGggZGVsYXkgdGhyZXNob2xkID09 PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVwZGF0ZSBjb25maWd1cmF0 aW9uIHRvIHVzZSBoaWdoIGRlbGF5IGNvbW1hbmQgYW5kIHNldCB0aHJlc2hvbGQKK3NlZCAtaS5i YWsgInN8ZGVsYXlfY21kX2Zsb2F0LnNofGRlbGF5X2NtZF9oaWdoLnNofCIgZXRjL3BncG9vbC5j b25mCitlY2hvICJkZWxheV90aHJlc2hvbGRfYnlfdGltZSA9IDEwMDAiID4+IGV0Yy9wZ3Bvb2wu Y29uZgorZWNobyAiYmFja2VuZF93ZWlnaHQwID0gMCIgPj4gZXRjL3BncG9vbC5jb25mICAjIEZv cmNlIHF1ZXJpZXMgdG8gc3RhbmRieSBub3JtYWxseQorZWNobyAiYmFja2VuZF93ZWlnaHQyID0g MCIgPj4gZXRjL3BncG9vbC5jb25mICAjIE9ubHkgdXNlIG5vZGUgMSBhcyBzdGFuZGJ5CisKKy4v c3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sg dG8gcnVuIGFuZCBkZXRlY3QgaGlnaCBkZWxheXMKK2VjaG8gIldhaXRpbmcgZm9yIHNyX2NoZWNr IHdpdGggaGlnaCBkZWxheSB2YWx1ZXMuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlm IGdyZXAgLXEgImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kLipkZWxheV9jbWRf aGlnaC5zaCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAi SGlnaCBkZWxheSBjb21tYW5kIGV4ZWN1dGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAg YnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworJFBTUUwgdGVzdCA8PEVPRgorU0VM RUNUICogRlJPTSB0MSBMSU1JVCAxOworRU9GCisKKyMgV2l0aCBoaWdoIGRlbGF5cyAoMjAwMG1z ID4gMTAwMG1zIHRocmVzaG9sZCksIHF1ZXJ5IHNob3VsZCBnbyB0byBwcmltYXJ5IChub2RlIDAp CitncmVwICJTRUxFQ1QgXCogRlJPTSB0MSBMSU1JVCAxLipEQiBub2RlIGlkOiAwIiBsb2cvcGdw b29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZh aWw6IHF1ZXJ5IHdhcyBub3Qgc2VudCB0byBwcmltYXJ5IG5vZGUgZGVzcGl0ZSBoaWdoIGRlbGF5 CisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogZGVsYXkgdGhy ZXNob2xkIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDQ6IEV4dGVybmFsIGNvbW1hbmQgd2l0aCBz cl9jaGVja191c2VyID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRl c3QgcnVubmluZyBjb21tYW5kIGFzIHNwZWNpZmljIHVzZXIgKHVzaW5nIGN1cnJlbnQgdXNlciBm b3IgdGVzdCkKK0NVUlJFTlRfVVNFUj0kKHdob2FtaSkKK2VjaG8gInNyX2NoZWNrX3VzZXIgPSAn JENVUlJFTlRfVVNFUiciID4+IGV0Yy9wZ3Bvb2wuY29uZgorc2VkIC1pLmJhayAic3xkZWxheV9j bWRfaGlnaC5zaHxkZWxheV9jbWRfc3RhdGljLnNofCIgZXRjL3BncG9vbC5jb25mCisKKy4vc3Rh cnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8g cnVuIHdpdGggdXNlciBzd2l0Y2hpbmcKK2VjaG8gIldhaXRpbmcgZm9yIHNyX2NoZWNrIHdpdGgg dXNlciBzd2l0Y2hpbmcuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEg ImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kLipzdS4qJENVUlJFTlRfVVNFUiIg bG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiVXNlciBzd2l0 Y2hpbmcgY29tbWFuZCBleGVjdXRlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAgICAgIGJyZWFr CisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sgdGhhdCBjb21tYW5kIHdhcyBl eGVjdXRlZCB3aXRoIHN1CitncmVwICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFu ZC4qc3UuKiRDVVJSRU5UX1VTRVIuKmRlbGF5X2NtZF9zdGF0aWMuc2giIGxvZy9wZ3Bvb2wubG9n ID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogY29t bWFuZCB3YXMgbm90IGV4ZWN1dGVkIHdpdGggc3JfY2hlY2tfdXNlcgorICAgIC4vc2h1dGRvd25h bGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IHNyX2NoZWNrX3VzZXIgdGVzdCBzdWNjZWVk ZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitl Y2hvID09PSBUZXN0NTogRXJyb3IgaGFuZGxpbmcgLSBtaXNzaW5nIGNvbW1hbmQgPT09CisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBlcnJvciBoYW5kbGluZyB3aGVu IGNvbW1hbmQgaXMgbm90IGNvbmZpZ3VyZWQKK3NlZCAtaS5iYWsgInN8cmVwbGljYXRpb25fZGVs YXlfc291cmNlX2NtZCA9ICcuL2RlbGF5X2NtZF9zdGF0aWMuc2gnfHJlcGxpY2F0aW9uX2RlbGF5 X3NvdXJjZV9jbWQgPSAnJ3wiIGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zv cl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1biB3aXRoIG1pc3Np bmcgY29tbWFuZAorZWNobyAiV2FpdGluZyBmb3Igc3JfY2hlY2sgd2l0aCBtaXNzaW5nIGNvbW1h bmQuLi4iCitmb3IgaSBpbiB7MS4uNX07IGRvCisgICAgaWYgZ3JlcCAtcSAicmVwbGljYXRpb25f ZGVsYXlfc291cmNlX2NtZCBpcyBub3QgY29uZmlndXJlZCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2 L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiTWlzc2luZyBjb21tYW5kIGVycm9yIGRldGVjdGVk IGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEK K2RvbmUKKworIyBDaGVjayBmb3IgZXJyb3IgbWVzc2FnZSBhYm91dCBtaXNzaW5nIGNvbW1hbmQK K2dyZXAgInJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgaXMgbm90IGNvbmZpZ3VyZWQiIGxv Zy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVj aG8gZmFpbDogbWlzc2luZyBjb21tYW5kIGVycm9yIG5vdCBkZXRlY3RlZAorICAgIC4vc2h1dGRv d25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGVycm9yIGhhbmRsaW5nIHRlc3Qgc3Vj Y2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorZWNobyA9PT0gVGVzdDY6IEVycm9yIGhhbmRsaW5nIC0gY29tbWFuZCBleGVjdXRpb24gZmFp bHVyZSA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGVycm9y IGhhbmRsaW5nIHdoZW4gY29tbWFuZCBmYWlscworZWNobyAicmVwbGljYXRpb25fZGVsYXlfc291 cmNlX2NtZCA9ICcuL25vbmV4aXN0ZW50X2NvbW1hbmQuc2gnIiA+PiBldGMvcGdwb29sLmNvbmYK KworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9j aGVjayB0byBydW4gd2l0aCBmYWlsaW5nIGNvbW1hbmQKK2VjaG8gIldhaXRpbmcgZm9yIHNyX2No ZWNrIHdpdGggZmFpbGluZyBjb21tYW5kLi4uIgorZm9yIGkgaW4gezEuLjV9OyBkbworICAgIGlm IGdyZXAgLXEgImZhaWxlZCB0byBleGVjdXRlIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQiIGxv Zy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkNvbW1hbmQgZmFp bHVyZSBkZXRlY3RlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkK KyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sgZm9yIGVycm9yIG1lc3NhZ2UgYWJvdXQgY29t bWFuZCBleGVjdXRpb24gZmFpbHVyZQorZ3JlcCAiZmFpbGVkIHRvIGV4ZWN1dGUgcmVwbGljYXRp b24gZGVsYXkgY29tbWFuZCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBjb21tYW5kIGV4ZWN1dGlvbiBmYWlsdXJlIG5v dCBkZXRlY3RlZAorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6 IGNvbW1hbmQgZmFpbHVyZSB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3Q3OiBDb21tYW5kIHRpbWVv dXQgaGFuZGxpbmcgPT09CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ3Jl YXRlIGEgY29tbWFuZCB0aGF0IHRha2VzIGxvbmdlciB0aGFuIHRoZSB0aW1lb3V0CitjYXQgPiBk ZWxheV9jbWRfc2xvdy5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgU2xvdyBjb21tYW5kIHRo YXQgdGFrZXMgMTUgc2Vjb25kcyAobG9uZ2VyIHRoYW4gZGVmYXVsdCAxMHMgdGltZW91dCkKK3Ns ZWVwIDE1CitlY2hvICIwIDI1IDUwIgorRU9GCitjaG1vZCAreCBkZWxheV9jbWRfc2xvdy5zaAor CisjIFNldCBhIHNob3J0IHRpbWVvdXQgYW5kIHVzZSB0aGUgc2xvdyBjb21tYW5kCitzZWQgLWku YmFrICJzfHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnLi9ub25leGlzdGVudF9jb21t YW5kLnNoJ3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy4vZGVsYXlfY21kX3Nsb3cu c2gnfCIgZXRjL3BncG9vbC5jb25mCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGlt ZW91dCA9IDMiID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bv b2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1biBhbmQgdGltZW91dAorZWNo byAiV2FpdGluZyBmb3IgY29tbWFuZCB0aW1lb3V0Li4uIgorZm9yIGkgaW4gezEuLjE1fTsgZG8K KyAgICBpZiBncmVwIC1xICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCIgbG9n L3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiQ29tbWFuZCB0aW1l b3V0IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQor ICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgdGltZW91dCBlcnJvciBtZXNzYWdlCitn cmVwICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAzIHNlY29uZHMi IGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAg IGVjaG8gZmFpbDogY29tbWFuZCB0aW1lb3V0IG5vdCBkZXRlY3RlZAorICAgIC4vc2h1dGRvd25h bGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGNvbW1hbmQgdGltZW91dCB0ZXN0IHN1Y2Nl ZWRlZAorLi9zaHV0ZG93bmFsbAorCitlY2hvICJBbGwgZXh0ZXJuYWwgcmVwbGljYXRpb24gZGVs YXkgdGVzdHMgcGFzc2VkISIKK2V4aXQgMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0 aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgz LmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaApuZXcgZmlsZSBtb2Rl IDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLjE0M2RhMzM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rl c3RfcGFyc2luZy5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vYmFzaAorIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyMgVW5pdCB0ZXN0IGZvciBleHRlcm5hbCBjb21tYW5kIHBhcnNpbmcgbG9naWMKKyMgVGhpcyB0 ZXN0cyB0aGUgcGFyc2luZyB3aXRob3V0IG5lZWRpbmcgYSBmdWxsIHBncG9vbCBzZXR1cAorIwor CitlY2hvICI9PT0gVGVzdGluZyBleHRlcm5hbCBjb21tYW5kIG91dHB1dCBwYXJzaW5nID09PSIK KworIyBUZXN0IDE6IEludGVnZXIgdmFsdWVzCitlY2hvICJUZXN0IDE6IEludGVnZXIgbWlsbGlz ZWNvbmQgdmFsdWVzIgorZWNobyAiMCAyNSA1MCIgPiB0ZXN0X291dHB1dC50eHQKK2VjaG8gIkV4 cGVjdGVkOiAwbXMsIDI1bXMsIDUwbXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRlc3Rfb3V0cHV0 LnR4dCkiCitlY2hvICIiCisKKyMgVGVzdCAyOiBGbG9hdCB2YWx1ZXMgIAorZWNobyAiVGVzdCAy OiBGbG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2YWx1ZXMiCitlY2hvICIwIDI1LjUgMTAwLjc1 IiA+IHRlc3Rfb3V0cHV0X2Zsb2F0LnR4dAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMjUuNW1zLCAx MDAuNzVtcyIKK2VjaG8gIk91dHB1dDogJChjYXQgdGVzdF9vdXRwdXRfZmxvYXQudHh0KSIKK2Vj aG8gIiIKKworIyBUZXN0IDM6IEhpZ2ggcHJlY2lzaW9uIGZsb2F0IHZhbHVlcworZWNobyAiVGVz dCAzOiBIaWdoIHByZWNpc2lvbiB2YWx1ZXMiCitlY2hvICIwIDAuMDAxIDk5OS45OTkiID4gdGVz dF9vdXRwdXRfcHJlY2lzaW9uLnR4dAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMC4wMDFtcywgOTk5 Ljk5OW1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0X291dHB1dF9wcmVjaXNpb24udHh0KSIK K2VjaG8gIiIKKworIyBUZXN0IDQ6IEVkZ2UgY2FzZSAtIHplcm8gdmFsdWVzCitlY2hvICJUZXN0 IDQ6IEFsbCB6ZXJvIHZhbHVlcyIKK2VjaG8gIjAgMCAwIiA+IHRlc3Rfb3V0cHV0X3plcm9zLnR4 dAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMG1zLCAwbXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRl c3Rfb3V0cHV0X3plcm9zLnR4dCkiCitlY2hvICIiCisKKyMgVGVzdCA1OiBFZGdlIGNhc2UgLSBs YXJnZSB2YWx1ZXMKK2VjaG8gIlRlc3QgNTogTGFyZ2UgZGVsYXkgdmFsdWVzIgorZWNobyAiMCA1 MDAwIDEwMDAwIiA+IHRlc3Rfb3V0cHV0X2xhcmdlLnR4dAorZWNobyAiRXhwZWN0ZWQ6IDBtcywg NTAwMG1zLCAxMDAwMG1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0X291dHB1dF9sYXJnZS50 eHQpIgorZWNobyAiIgorCisjIFRlc3QgNjogTWl4ZWQgaW50ZWdlciBhbmQgZmxvYXQKK2VjaG8g IlRlc3QgNjogTWl4ZWQgaW50ZWdlciBhbmQgZmxvYXQgdmFsdWVzIgorZWNobyAiMCAyNSA1MC41 IiA+IHRlc3Rfb3V0cHV0X21peGVkLnR4dAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMjVtcywgNTAu NW1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0X291dHB1dF9taXhlZC50eHQpIgorZWNobyAi IgorCisjIENsZWFudXAKK3JtIC1mIHRlc3Rfb3V0cHV0Ki50eHQKKworZWNobyAiQWxsIHBhcnNp bmcgdGVzdHMgY29tcGxldGVkLiBUaGVzZSBvdXRwdXRzIHNob3VsZCBiZSBwYXJzZWFibGUgYnkg dGhlIGV4dGVybmFsIGNvbW1hbmQgZmVhdHVyZS4iClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wODMuZXh0ZXJuYWxfcmVw bGljYXRpb25fZGVsYXkvdGVzdF92YWxpZGF0aW9uLnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wODMuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVzdF92YWxpZGF0aW9uLnNoCm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uNGJlODg0YzRlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wODMuZXh0ZXJuYWxfcmVwbGljYXRp b25fZGVsYXkvdGVzdF92YWxpZGF0aW9uLnNoCkBAIC0wLDAgKzEsMjg1IEBACisjIS91c3IvYmlu L2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgZXh0ZXJuYWwgY29tbWFu ZCB2YWxpZGF0aW9uIGFuZCBlZGdlIGNhc2VzCisjCitzb3VyY2UgJFRFU1RMSUJTCitURVNURElS PXRlc3RkaXJfdmFsaWRhdGlvbgorUEdfQ1RMPSRQR0JJTi9wZ19jdGwKK1BTUUw9IiRQR0JJTi9w c3FsIC1YICIKKworcm0gLWZyICRURVNURElSCitta2RpciAkVEVTVERJUgorY2QgJFRFU1RESVIK KworIyBjcmVhdGUgdGVzdCBlbnZpcm9ubWVudAorZWNobyAtbiAiY3JlYXRpbmcgdGVzdCBlbnZp cm9ubWVudC4uLiIKKyRQR1BPT0xfU0VUVVAgLW0gcyAtbiAzIHx8IGV4aXQgMQorZWNobyAiZG9u ZS4iCitzb3VyY2UgLi9iYXNocmMucG9ydHMKK2V4cG9ydCBQR1BPUlQ9JFBHUE9PTF9QT1JUCisK KyMgQ3JlYXRlIHRlc3QgY29tbWFuZCBzY3JpcHRzCitjYXQgPiBkZWxheV9jbWRfdmFsaWRhdGlv bi5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCB2YWxpZGF0aW9uOiBvdXRwdXQgd2l0 aCBpbnZhbGlkIHZhbHVlcworZWNobyAiMCBpbnZhbGlkX3ZhbHVlIDUwLjUiCitFT0YKK2NobW9k ICt4IGRlbGF5X2NtZF92YWxpZGF0aW9uLnNoCisKK2NhdCA+IGRlbGF5X2NtZF9uZWdhdGl2ZS5z aCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCBuZWdhdGl2ZSB2YWx1ZXMKK2VjaG8gIjAg LTI1IDUwIgorRU9GCitjaG1vZCAreCBkZWxheV9jbWRfbmVnYXRpdmUuc2gKKworY2F0ID4gZGVs YXlfY21kX2xhcmdlLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBUZXN0IGV4dHJlbWVseSBs YXJnZSB2YWx1ZXMKK2VjaG8gIjAgOTk5OTk5OSA1MCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21k X2xhcmdlLnNoCisKK2NhdCA+IGRlbGF5X2NtZF93cm9uZ19jb3VudC5zaCA8PCAnRU9GJworIyEv YmluL2Jhc2gKKyMgVGVzdCB3cm9uZyBudW1iZXIgb2YgdmFsdWVzIChvbmx5IDIgaW5zdGVhZCBv ZiAzKQorZWNobyAiMCAyNSIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX3dyb25nX2NvdW50LnNo CisKK2NhdCA+IGRlbGF5X2NtZF90cnVuY2F0ZWQuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisj IFRlc3Qgb3V0cHV0IHRoYXQgbWlnaHQgYmUgdHJ1bmNhdGVkICh2ZXJ5IGxvbmcgbGluZSkKK3By aW50ZiAiMCAyNSAiCitmb3IgaSBpbiB7MS4uMTAwMH07IGRvIHByaW50ZiAidmVyeV9sb25nX291 dHB1dF8iOyBkb25lCitlY2hvICI1MCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX3RydW5jYXRl ZC5zaAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3Qx OiBWYWxpZGF0aW9uIG9mIGludmFsaWQgZGVsYXkgdmFsdWVzID09PQorIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgPSAnY21k JyIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21k ID0gJy4vZGVsYXlfY21kX3ZhbGlkYXRpb24uc2gnIiA+PiBldGMvcGdwb29sLmNvbmYKK2VjaG8g InNyX2NoZWNrX3BlcmlvZCA9IDEiID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAibG9nX3N0YW5k YnlfZGVsYXkgPSAnYWx3YXlzJyIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJsb2dfbWluX21l c3NhZ2VzID0gJ0RFQlVHMSciID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0 X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCiskUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUgVEFCTEUgdDEo aSBJTlRFR0VSKTsKK0VPRgorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1bgorZWNobyAiV2Fp dGluZyBmb3IgdmFsaWRhdGlvbiB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBp ZiBncmVwIC1xICJpbnZhbGlkIGRlbGF5IHZhbHVlIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVs bDsgdGhlbgorICAgICAgICBlY2hvICJWYWxpZGF0aW9uIGVycm9yIGRldGVjdGVkIGFmdGVyICR7 aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKwor IyBDaGVjayBmb3IgdmFsaWRhdGlvbiB3YXJuaW5nCitncmVwICJpbnZhbGlkIGRlbGF5IHZhbHVl ICdpbnZhbGlkX3ZhbHVlJyBmb3Igbm9kZSIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYx CitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiB2YWxpZGF0aW9uIHdhcm5pbmcg bm90IGZvdW5kCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazog aW52YWxpZCB2YWx1ZSB2YWxpZGF0aW9uIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisK KyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDI6IE5lZ2F0 aXZlIGRlbGF5IHZhbHVlcyA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor c2VkIC1pLmJhayAic3xkZWxheV9jbWRfdmFsaWRhdGlvbi5zaHxkZWxheV9jbWRfbmVnYXRpdmUu c2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0 dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRpbmcgZm9yIG5lZ2F0 aXZlIHZhbHVlIHRlc3QuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEg Im5lZ2F0aXZlIGRlbGF5IHZhbHVlIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgor ICAgICAgICBlY2hvICJOZWdhdGl2ZSB2YWx1ZSB3YXJuaW5nIGRldGVjdGVkIGFmdGVyICR7aX0g c2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBD aGVjayBmb3IgbmVnYXRpdmUgdmFsdWUgd2FybmluZworZ3JlcCAibmVnYXRpdmUgZGVsYXkgdmFs dWUuKmZvciBub2RlIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0g MCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IG5lZ2F0aXZlIHZhbHVlIHdhcm5pbmcgbm90IGZvdW5k CisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogbmVnYXRpdmUg dmFsdWUgdmFsaWRhdGlvbiB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3QzOiBFeHRyZW1lbHkgbGFy Z2UgZGVsYXkgdmFsdWVzID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitz ZWQgLWkuYmFrICJzfGRlbGF5X2NtZF9uZWdhdGl2ZS5zaHxkZWxheV9jbWRfbGFyZ2Uuc2h8IiBl dGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKwor IyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRpbmcgZm9yIGxhcmdlIHZhbHVl IHRlc3QuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgImV4dHJlbWVs eSBsYXJnZSBkZWxheSB2YWx1ZSIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAg ICAgICAgZWNobyAiTGFyZ2UgdmFsdWUgd2FybmluZyBkZXRlY3RlZCBhZnRlciAke2l9IHNlY29u ZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sg Zm9yIGxhcmdlIHZhbHVlIHdhcm5pbmcKK2dyZXAgImV4dHJlbWVseSBsYXJnZSBkZWxheSB2YWx1 ZS4qZm9yIG5vZGUiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAw IF07dGhlbgorICAgIGVjaG8gZmFpbDogbGFyZ2UgdmFsdWUgd2FybmluZyBub3QgZm91bmQKKyAg ICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiBsYXJnZSB2YWx1ZSB2 YWxpZGF0aW9uIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDQ6IFdyb25nIG51bWJlciBvZiBvdXRw dXQgdmFsdWVzID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzZWQgLWku YmFrICJzfGRlbGF5X2NtZF9sYXJnZS5zaHxkZWxheV9jbWRfd3JvbmdfY291bnQuc2h8IiBldGMv cGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworIyBX YWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRpbmcgZm9yIHdyb25nIGNvdW50IHRl c3QuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgInJldHVybmVkLip2 YWx1ZXMsIGV4cGVjdGVkIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAg ICBlY2hvICJXcm9uZyBjb3VudCB3YXJuaW5nIGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIK KyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3Ig d3JvbmcgY291bnQgd2FybmluZworZ3JlcCAicmV0dXJuZWQuKnZhbHVlcywgZXhwZWN0ZWQuKkNv bW1hbmQgc2hvdWxkIG91dHB1dCBvbmUgZGVsYXkgdmFsdWUgcGVyIGJhY2tlbmQgbm9kZSIgbG9n L3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNo byBmYWlsOiB3cm9uZyBjb3VudCB3YXJuaW5nIG5vdCBmb3VuZAorICAgIC4vc2h1dGRvd25hbGwK KyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IHdyb25nIGNvdW50IHZhbGlkYXRpb24gdGVzdCBz dWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitlY2hvID09PSBUZXN0NTogUHJpbWFyeSBub2RlIG5vbi16ZXJvIGRlbGF5IGhhbmRsaW5n ID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjYXQgPiBkZWxheV9jbWRf cHJpbWFyeV9ub256ZXJvLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBUZXN0IHByaW1hcnkg bm9kZSB3aXRoIG5vbi16ZXJvIGRlbGF5IChzaG91bGQgYmUgY29ycmVjdGVkIHRvIDApCitlY2hv ICIxMDAgMjUgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9wcmltYXJ5X25vbnplcm8uc2gK Kworc2VkIC1pLmJhayAic3xkZWxheV9jbWRfd3JvbmdfY291bnQuc2h8ZGVsYXlfY21kX3ByaW1h cnlfbm9uemVyby5zaHwiIGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9w Z3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1bgorZWNobyAiV2FpdGlu ZyBmb3IgcHJpbWFyeSBub24temVybyBkZWxheSB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsg ZG8KKyAgICBpZiBncmVwIC1xICJwcmltYXJ5IG5vZGUuKnJlcG9ydGVkIG5vbi16ZXJvIGRlbGF5 IiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJQcmltYXJ5 IG5vbi16ZXJvIGRlbGF5IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJl YWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgcHJpbWFyeSBub2Rl IGNvcnJlY3Rpb24KK2dyZXAgInByaW1hcnkgbm9kZS4qcmVwb3J0ZWQgbm9uLXplcm8gZGVsYXku KnNldHRpbmcgdG8gMCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9 IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBwcmltYXJ5IG5vZGUgZGVsYXkgY29ycmVjdGlvbiBu b3QgZm91bmQKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiBw cmltYXJ5IG5vZGUgZGVsYXkgY29ycmVjdGlvbiB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFs bAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3Q2OiBD b21tYW5kIHRpbWVvdXQgd2l0aCBkaWZmZXJlbnQgdGltZW91dCB2YWx1ZXMgPT09CisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NhdCA+IGRlbGF5X2NtZF90aW1lb3V0LnNoIDw8 ICdFT0YnCisjIS9iaW4vYmFzaAorIyBDb21tYW5kIHRoYXQgdGFrZXMgNSBzZWNvbmRzCitzbGVl cCA1CitlY2hvICIwIDI1IDUwIgorRU9GCitjaG1vZCAreCBkZWxheV9jbWRfdGltZW91dC5zaAor CisjIFRlc3Qgd2l0aCB0aW1lb3V0IHNob3J0ZXIgdGhhbiBjb21tYW5kIGR1cmF0aW9uCitzZWQg LWkuYmFrICJzfGRlbGF5X2NtZF9wcmltYXJ5X25vbnplcm8uc2h8ZGVsYXlfY21kX3RpbWVvdXQu c2h8IiBldGMvcGdwb29sLmNvbmYKK2VjaG8gInJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1l b3V0ID0gMiIgPj4gZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9v bF9zdGFydHVwCisKKyMgV2FpdCBmb3IgdGltZW91dAorZWNobyAiV2FpdGluZyBmb3IgdGltZW91 dCB0ZXN0ICgycyB0aW1lb3V0LCA1cyBjb21tYW5kKS4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRv CisgICAgaWYgZ3JlcCAtcSAicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCB0aW1lZCBvdXQgYWZ0 ZXIgMiBzZWNvbmRzIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBl Y2hvICJUaW1lb3V0IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsK KyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgdGltZW91dCBtZXNzYWdl CitncmVwICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAyIHNlY29u ZHMiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgor ICAgIGVjaG8gZmFpbDogdGltZW91dCBub3QgZGV0ZWN0ZWQKKyAgICAuL3NodXRkb3duYWxsCisg ICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiB0aW1lb3V0IHRlc3Qgc3VjY2VlZGVkCisuL3NodXRk b3duYWxsCisKKyMgVGVzdCB3aXRoIHRpbWVvdXQgbG9uZ2VyIHRoYW4gY29tbWFuZCBkdXJhdGlv bgorc2VkIC1pLmJhayAic3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dCA9IDJ8cmVw bGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMHwiIGV0Yy9wZ3Bvb2wuY29uZgorCisu L3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHN1Y2Nlc3Nm dWwgZXhlY3V0aW9uCitlY2hvICJXYWl0aW5nIGZvciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAoMTBz IHRpbWVvdXQsIDVzIGNvbW1hbmQpLi4uIgorZm9yIGkgaW4gezEuLjE1fTsgZG8KKyAgICBpZiBn cmVwIC1xICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4qZGVsYXlfY21kX3Rp bWVvdXQuc2giIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8g IkNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAg ICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBTaG91bGQgbm90IHRpbWVv dXQgdGhpcyB0aW1lCitpZiBncmVwIC1xICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVk IG91dCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvIGZhaWw6IGNv bW1hbmQgc2hvdWxkIG5vdCBoYXZlIHRpbWVkIG91dCB3aXRoIDEwcyB0aW1lb3V0CisgICAgLi9z aHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogZXh0ZW5kZWQgdGltZW91dCB0 ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCitlY2hvICJBbGwgdmFsaWRhdGlvbiB0ZXN0 cyBwYXNzZWQhIgorZXhpdCAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi41MS4w Cgo= --0000000000000c79bb063d1a81f3--