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 1tUDnn-00F153-FL for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Jan 2025 23:43:32 +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 1tUDnl-00EGD2-64 for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Jan 2025 23:43:28 +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 1tUDnk-00EGCu-5O for pgsql-hackers@lists.postgresql.org; Sat, 04 Jan 2025 23:43:28 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tUDnd-0027Vt-10 for pgsql-hackers@postgresql.org; Sat, 04 Jan 2025 23:43:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736034200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=S6hlLm7KRJfsWQW5DpwGvUneNoxKBcqrhQGSExvk5sc=; b=BO8oxiKrpjMKPnbOLBbDnEQ2GutE9+1GTH9V3erS/XODFjbTALjtWLwB1CHPIMrRlpY9Ta zvBOaOTEo6ukm7AWA7ZzPl2NW7h/VnG3yeurl5xWr1P7JrVA2vBEOdESHVNaMYzXsqZ+bt YAsbq1JnQtfHVZ1eNzylWRegyfZIeXo= Received: from mail-il1-f198.google.com (mail-il1-f198.google.com [209.85.166.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-655-NRX943EiNJW434exuWFHfg-1; Sat, 04 Jan 2025 18:43:17 -0500 X-MC-Unique: NRX943EiNJW434exuWFHfg-1 X-Mimecast-MFC-AGG-ID: NRX943EiNJW434exuWFHfg Received: by mail-il1-f198.google.com with SMTP id e9e14a558f8ab-3a9d303a5ccso268954465ab.3 for ; Sat, 04 Jan 2025 15:43:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736034197; x=1736638997; 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=RmhaYtYIRu2WtI/L77cQSNxll9o7njuUbqqVsH0XypY=; b=rqRRg81j7aIcCPTdRygKa64snXq3RwrQxjRq8Ay0gxmR1XMbWJlYvz/K2u0A6oAOse rw/3nf4HJgkSGxlXBwCOVp+oKavpQ1i8XHG9Zp8hkXuuYyg7WLqqwv3EVCUBujG/HukV IaJyVLUzo5fm3cidJkuIPZAk1zMAjt14yJGb2SGSpamodygIUY2embS6ML5m89C3xfyV Jsc24mdGX5Zugu9NUL2azRS12EAy/Ug9Hs0gP+H1IlNmmsDzqf1Y4V54SBfd0WWCBuud lRzc3JzItxKrBTpTurxXvKetuv2yeSnVW1J3IsFsDY0ijzOtUqM8JUeCYri2kqT/xOec MxZg== X-Gm-Message-State: AOJu0Yz9vMZnzat+yF+2/T8KkK6Q3pOihlCRWB8O24M8AOSL7KdX3mPo UMLn0VusjKK69AUvdn8j2fy9liTrClzr3OY4al1fZ8AP0bEPzXxTkNRCaxlZDIeYGC+DNFu5VXY Noeb6QbSNgTFn+yRnzPmCkJXpkCcdRQrDXsO3jWoIOsPIXCS7S4JnWaD+BGG8lL0iyazhbTQVfu h5oS7tL3+9ZmdJQHBoAVcEdrGNbEF5amdscIj8 X-Gm-Gg: ASbGncvaf1EL/SDa1++fVihmps3tu4mvZa+eeZTSwMhoj770/DBtLndsYGujA9Sjg1o hPlKXMYmpcXrjo14SiVaA5gmjtoMOBDQ0qnGAqg== X-Received: by 2002:a05:6e02:1fcd:b0:3a7:7ad4:fe78 with SMTP id e9e14a558f8ab-3c2d524776fmr566618315ab.19.1736034196878; Sat, 04 Jan 2025 15:43:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IG05Tpi4z1CFDUkgxyPhPLykWGDskzdWgPSjH9pctZY9DX2iemXBefzhMicrtIWaEEIOXtDgyQSq+HiYMwMNKw= X-Received: by 2002:a05:6e02:1fcd:b0:3a7:7ad4:fe78 with SMTP id e9e14a558f8ab-3c2d524776fmr566618175ab.19.1736034196435; Sat, 04 Jan 2025 15:43:16 -0800 (PST) MIME-Version: 1.0 References: <29c87c10-fdbc-4d0f-b0f4-15e14dd36bce@vondra.me> In-Reply-To: From: Filip Janus Date: Sun, 5 Jan 2025 00:43:05 +0100 Message-ID: Subject: Re: Proposal: Adding compression of temporary files To: Tomas Vondra Cc: pgsql-hackers@postgresql.org X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: dRwi1W2NK_a9uzFHViwra3iz2AGyN98uWWklWbubT2E_1736034197 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000009907cb062ae9f593" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009907cb062ae9f593 Content-Type: multipart/alternative; boundary="0000000000009907c9062ae9f591" --0000000000009907c9062ae9f591 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I apologize for multiple messages, but I found a small bug in the previous version. -Filip- so 4. 1. 2025 v 23:40 odes=C3=ADlatel Filip Janus napsa= l: > Even though i started with lz4, I added also pglz support and enhanced > memory management based on provided review. > > > > -Filip- > > > =C4=8Dt 28. 11. 2024 v 12:32 odes=C3=ADlatel Filip Janus napsal: > >> >> I've added a regression test for lz4 compression if the server is >> compiled with the "--with-lz4" option. >> >> -Filip- >> >> >> ne 24. 11. 2024 v 15:53 odes=C3=ADlatel Filip Janus >> napsal: >> >>> >>> >>> -Filip- >>> >>> >>> st 20. 11. 2024 v 1:35 odes=C3=ADlatel Tomas Vondra n= apsal: >>> >>>> Hi, >>>> >>>> On 11/18/24 22:58, Filip Janus wrote: >>>> > ... >>>> > Hi all, >>>> > Postgresql supports data compression nowadays, but the >>>> compression of >>>> > temporary files has not been implemented yet. The huge queries >>>> can >>>> > produce a significant amount of temporary data that needs to >>>> > be stored on disk >>>> > and cause many expensive I/O operations. >>>> > I am attaching a proposal of the patch to enable temporary files >>>> > compression for >>>> > hashjoins for now. Initially, I've chosen the LZ4 compression >>>> > algorithm. It would >>>> > probably make better sense to start with pglz, but I realized it >>>> late. >>>> > >>>> >>>> Thanks for the idea & patch. I agree this might be quite useful for >>>> workloads generating a lot of temporary files for stuff like sorts etc= . >>>> I think it will be interesting to think about the trade offs, i.e. how >>>> to pick the compression level - at some point the compression ratio >>>> stops improving while paying more and more CPU time. Not sure what the >>>> right choice is, so using default seems fine. >>>> >>>> I agree it'd be better to start with pglz, and only then add lz4 etc. >>>> Firstly, pglz is simply the built-in compression, supported everywhere= . >>>> And it's also simpler to implement, I think. >>>> >>>> > # Future possible improvements >>>> > Reducing the number of memory allocations within the dumping and >>>> > loading of >>>> > the buffer. I have two ideas for solving this problem. I would >>>> > either add a buffer into >>>> > struct BufFile or provide the buffer as an argument from the >>>> caller. >>>> > For the sequential >>>> > execution, I would prefer the second option. >>>> > >>>> >>>> Yes, this would be good. Doing a palloc+pfree for each compression is >>>> going to be expensive, especially because these buffers are going to b= e >>>> large - likely larger than 8kB. Which means it's not cached in the >>>> memory context, etc. >>>> >>>> Adding it to the BufFile is not going to fly, because that doubles the >>>> amount of memory per file. And we already have major issues with hash >>>> joins consuming massive amounts of memory. But at the same time the >>>> buffer is only needed during compression, and there's only one at a >>>> time. So I agree with passing a single buffer as an argument. >>>> >>>> > # Future plan/open questions >>>> > In the future, I would like to add support for pglz and zstd. >>>> > Further, I plan to >>>> > extend the support of the temporary file compression also for >>>> > sorting, gist index creation, etc. >>>> > >>>> > Experimenting with the stream mode of compression algorithms. Th= e >>>> > compression >>>> > ratio of LZ4 in block mode seems to be satisfying, but the strea= m >>>> > mode could >>>> > produce a better ratio, but it would consume more memory due to >>>> the >>>> > requirement to store >>>> > context for LZ4 stream compression. >>>> > >>>> >>>> One thing I realized is that this only enables temp file compression f= or >>>> a single place - hash join spill files. AFAIK this is because compress= ed >>>> files don't support random access, and the other places might need tha= t. >>>> >>>> Is that correct? The patch does not explain this anywhere. If that's >>>> correct, the patch probably should mention this in a comment for the >>>> 'compress' argument added to BufFileCreateTemp(), so that it's clear >>>> when it's legal to set compress=3Dtrue. >>>> >>> >>> I will add the description there. >>> >>> >>>> Which other places might compress temp files? Surely hash joins are no= t >>>> the only place that could benefit from this, right? >>>> >>> >>> Yes, you are definitely right. I have chosen the hash joins as a POC >>> because >>> there are no seeks besides seeks at the beginning of the buffer. >>> I have focused on hashjoins, but there are definitely also other places >>> where >>> the compression could be used. I want to add support in other places >>> in the feature. >>> >>> >>>> Another thing is testing. If I run regression tests, it won't use >>>> compression at all, because the GUC has "none" by default, right? But = we >>>> need some testing, so how would we do that? One option would be to add= a >>>> regression test that explicitly sets the GUC and does a hash join, but >>>> that won't work with lz4 (because that may not be enabled). >>> >>> >>> Right, it's "none" by default. My opinion is that we would like to test >>> every supported compression method, so I will try to add environment >>> variable as >>> you recommended. >>> >>> >>>> >>>> Another option might be to add a PG_TEST_xxx environment variable that >>>> determines compression to use. Something like PG_TEST_USE_UNIX_SOCKETS= . >>>> But perhaps there's a simpler way. >>>> >>>> > # Benchmark >>>> > I prepared three different databases to check expectations. Each >>>> > dataset is described below. My testing demonstrates that my patc= h >>>> > improves the execution time of huge hash joins. >>>> > Also, my implementation should not >>>> > negatively affect performance within smaller queries. >>>> > The usage of memory needed for temporary files was reduced in >>>> every >>>> > execution without a significant impact on execution time. >>>> > >>>> > *## Dataset A:* >>>> > Tables* >>>> > * >>>> > table_a(bigint id,text data_text,integer data_number) - 10000000 >>>> rows >>>> > table_b(bigint id, integer ref_id, numeric data_value, bytea >>>> > data_blob) - 10000000 rows >>>> > Query: SELECT * FROM table_a a JOIN table_b b ON a.id >>> > a.id> =3D b.id ; >>>> > >>>> > The tables contain highly compressible data. >>>> > The query demonstrated a reduction in the usage of the temporary >>>> > files ~20GB -> 3GB, based on this reduction also caused the >>>> execution >>>> > time of the query to be reduced by about ~10s. >>>> > >>>> > >>>> > *## Dataset B:* >>>> > Tables:* >>>> > * >>>> > table_a(integer id, text data_blob) - 1110000 rows >>>> > table_b(integer id, text data_blob) - 10000000 rows >>>> > Query: SELECT * FROM table_a a JOIN table_b b ON a.id >>> > a.id> =3D b.id ; >>>> > >>>> > The tables contain less compressible data. data_blob was generat= ed >>>> > by a pseudo-random generator. >>>> > In this case, the data reduction was only ~50%. Also, the >>>> execution >>>> > time was reduced >>>> > only slightly with the enabled compression. >>>> > >>>> > The second scenario demonstrates no overhead in the case of >>>> enabled >>>> > compression and extended work_mem to avoid temp file usage. >>>> > >>>> > *## Dataset C:* >>>> > Tables >>>> > customers (integer,text,text,text,text) >>>> > order_items(integer,integer,integer,integer,numeric(10,2)) >>>> > orders(integer,integer,timestamp,numeric(10,2)) >>>> > products(integer,text,text,numeric(10,2),integer) >>>> > >>>> > Query: SELECT p.product_id, p.name , p.price, >>>> > SUM(oi.quantity) AS total_quantity, AVG(oi.price) AS >>>> avg_item_price >>>> > FROM eshop.products p JOIN eshop.order_items oi ON p.product_id = =3D >>>> > oi.product_id JOIN >>>> > eshop.orders o ON oi.order_id =3D o.order_id WHERE o.order_date = > >>>> > '2020-01-01' AND p.price > 50 >>>> > GROUP BY p.product_id, p.name , p.price HAVING >>>> > SUM(oi.quantity) > 1000 >>>> > ORDER BY total_quantity DESC LIMIT 100; >>>> > >>>> > This scenario should demonstrate a more realistic usage of the >>>> database. >>>> > Enabled compression slightly reduced the temporary memory usage, >>>> but >>>> > the execution >>>> > time wasn't affected by compression. >>>> > >>>> > >>>> > +------------+-------------------------+----------------------- >>>> > +------------------------------+ >>>> > | Dataset | Compression. | temp_bytes | Executi= on >>>> > Time (ms) | >>>> > +------------+-------------------------+----------------------- >>>> > +----------------------------- + >>>> > | A | Yes | 3.09 GiB >>>> >>>> > | 22s586ms | work_mem =3D 4MB >>>> > | | No | 21.89 GiB >>>> >>>> > | 35s | work_mem =3D 4MB >>>> > +------------+-------------------------+----------------------- >>>> > +---------------------------------------- >>>> > | B | Yes | 333 MB >>>> >>>> > | 1815.545 ms | work_mem =3D 4MB >>>> > | | No | 146 MB >>>> >>>> > | 1500.460 ms | work_mem =3D 4MB >>>> > | | Yes | 0 MB >>>> >>>> > | 3262.305 ms | work_mem =3D 80MB >>>> > | | No | 0 MB >>>> >>>> > | 3174.725 ms | work_mem =3D 80MB >>>> > +-------------+------------------------+------------------------ >>>> > +------------------------------------- >>>> > | C | Yes | 40 >>>> MB >>>> > | 1011.020 ms | work_mem =3D 1MB >>>> > | | No | 53 >>>> > MB | 1034.142 ms | work_mem =3D 1MB >>>> > +------------+------------------------+------------------------ >>>> > +-------------------------------------- >>>> > >>>> > >>>> >>>> Thanks. I'll try to do some benchmarks on my own. >>>> >>>> Are these results fro ma single run, or an average of multiple runs? >>> >>> >>> It is average from multiple runs. >>> >>> Do >>>> you maybe have a script to reproduce this, including the data >>>> generation? >>> >>> >>> I am attaching my SQL file for database preparation. I also did further >>> testing >>> with two other machines( see attachment huge_tables.rtf ). >>> >>>> >>>> Also, can you share some information about the machine used for this? = I >>>> expect the impact to strongly depends on memory pressure - if the temp >>>> file fits into page cache (and stays there), it may not benefit from t= he >>>> compression, right? >>>> >>> >>> If it fits into the page cache due to compression, I would consider it >>> as a benefit from compression. >>> I performed further testing on machines with different memory sizes. >>> Both experiments showed that compression was beneficial for execution >>> time. >>> The execution time reduction was more significant in the case of the >>> machine that had >>> less memory available. >>> >>> Tests were performed on: >>> MacBook PRO M3 36GB - MacOs >>> Virtual machine ARM64 10GB/ 6CPU - Fedora 39 >>> >>> >>>> >>>> regards >>>> >>>> -- >>>> Tomas Vondra >>>> >>>> --0000000000009907c9062ae9f591 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I apologize for multiple messages, but I found a smal= l bug in the previous version.

=C2=A0 =C2=A0 -Filip-
=


=
so 4. 1. 2025 v=C2=A023:40 odes=C3=AD= latel Filip Janus <fjanus@redhat.co= m> napsal:
Even though i started with lz4, I = added also pglz support and enhanced memory management based on provided re= view.



=C2=A0 =C2=A0 -Filip-

<= /div>
= =C4=8Dt 28. 11. 2024 v=C2=A012:32 odes=C3=ADlatel Filip Janus <fjanus@redhat.com> n= apsal:

I've added a regression test for = lz4 compression if the server is compiled with the "--with-lz4" o= ption.

=C2=A0 =C2=A0 -Filip-


ne 24. 11. 2024 v=C2=A015:53 odes=C3=ADlatel Filip = Janus <fjanus@red= hat.com> napsal:


=C2=A0 =C2=A0 -Filip-=


st 20. 11. 2024 v=C2=A01:35 odes=C3=ADlat= el Tomas Vondra <to= mas@vondra.me> napsal:
Hi,

On 11/18/24 22:58, Filip Janus wrote:
> ...
>=C2=A0 =C2=A0 =C2=A0Hi all,
>=C2=A0 =C2=A0 =C2=A0Postgresql supports data compression nowadays, but = the compression of
>=C2=A0 =C2=A0 =C2=A0temporary files has not been implemented yet. The h= uge queries can=C2=A0
>=C2=A0 =C2=A0 =C2=A0produce a significant amount of temporary data that= needs to
>=C2=A0 =C2=A0 =C2=A0be=C2=A0stored on disk=C2=A0
>=C2=A0 =C2=A0 =C2=A0and cause many expensive I/O operations.
>=C2=A0 =C2=A0 =C2=A0I am attaching a proposal of the patch to enable te= mporary files
>=C2=A0 =C2=A0 =C2=A0compression for
>=C2=A0 =C2=A0 =C2=A0hashjoins for now. Initially, I've chosen the L= Z4 compression
>=C2=A0 =C2=A0 =C2=A0algorithm. It would
>=C2=A0 =C2=A0 =C2=A0probably make better sense to start with pglz, but = I realized it late.
>

Thanks for the idea & patch. I agree this might be quite useful for
workloads generating a lot of temporary files for stuff like sorts etc.
I think it will be interesting to think about the trade offs, i.e. how
to pick the compression level - at some point the compression ratio
stops improving while paying more and more CPU time. Not sure what the
right choice is, so using default seems fine.

I agree it'd be better to start with pglz, and only then add lz4 etc. Firstly, pglz is simply the built-in compression, supported everywhere.
And it's also simpler to implement, I think.

>=C2=A0 =C2=A0 =C2=A0# Future possible improvements
>=C2=A0 =C2=A0 =C2=A0Reducing the number of memory allocations within th= e dumping and
>=C2=A0 =C2=A0 =C2=A0loading of
>=C2=A0 =C2=A0 =C2=A0the buffer. I have two ideas for solving this probl= em. I would
>=C2=A0 =C2=A0 =C2=A0either add a buffer into
>=C2=A0 =C2=A0 =C2=A0struct BufFile or provide the buffer as an argument= from the caller.
>=C2=A0 =C2=A0 =C2=A0For the sequential=C2=A0
>=C2=A0 =C2=A0 =C2=A0execution, I would prefer the second option.
>

Yes, this would be good. Doing a palloc+pfree for each compression is
going to be expensive, especially because these buffers are going to be
large - likely larger than 8kB. Which means it's not cached in the
memory context, etc.

Adding it to the BufFile is not going to fly, because that doubles the
amount of memory per file. And we already have major issues with hash
joins consuming massive amounts of memory. But at the same time the
buffer is only needed during compression, and there's only one at a
time. So I agree with passing a single buffer as an argument.

>=C2=A0 =C2=A0 =C2=A0# Future plan/open questions
>=C2=A0 =C2=A0 =C2=A0In the future, I would like to add support for pglz= and zstd.
>=C2=A0 =C2=A0 =C2=A0Further, I plan to
>=C2=A0 =C2=A0 =C2=A0extend the support of the temporary file compressio= n also for
>=C2=A0 =C2=A0 =C2=A0sorting, gist index creation, etc.
>
>=C2=A0 =C2=A0 =C2=A0Experimenting with the stream mode of compression a= lgorithms. The
>=C2=A0 =C2=A0 =C2=A0compression=C2=A0
>=C2=A0 =C2=A0 =C2=A0ratio of LZ4 in block mode seems to be satisfying, = but the stream
>=C2=A0 =C2=A0 =C2=A0mode could=C2=A0
>=C2=A0 =C2=A0 =C2=A0produce a better ratio, but it would consume more m= emory due to the
>=C2=A0 =C2=A0 =C2=A0requirement to store
>=C2=A0 =C2=A0 =C2=A0context for LZ4 stream compression.
>

One thing I realized is that this only enables temp file compression for a single place - hash join spill files. AFAIK this is because compressed files don't support random access, and the other places might need that= .

Is that correct? The patch does not explain this anywhere. If that's correct, the patch probably should mention this in a comment for the
'compress' argument added to BufFileCreateTemp(), so that it's = clear
when it's legal to set compress=3Dtrue.
=C2=A0
I will add the description there.
=C2=A0
Which other places might compress= temp files? Surely hash joins are not
the only place that could benefit from this, right?
Yes, you are definitely right. I have=C2=A0chosen the hash joi= ns as a POC because=C2=A0
there are no seeks besides seeks at the= beginning of the buffer.=C2=A0
I have focused on hashjoins, but = there are definitely also other places where
the compression coul= d be used. I want to add support in other places
in the feature.<= br>
=C2=A0
Another thing is testing. If I run regression tests, it won't use
compression at all, because the GUC has "none" by default, right?= But we
need some testing, so how would we do that? One option would be to add a regression test that explicitly sets the GUC and does a hash join, but
that won't work with lz4 (because that may not be enabled).
=C2=A0
Right, it's "none" by default. My opin= ion is that we would like to test
every supported compression met= hod, so I will try to add environment variable as
you recommended= .
=C2=A0

Another option might be to add a PG_TEST_xxx environment variable that
determines compression to use. Something like PG_TEST_USE_UNIX_SOCKETS.
But perhaps there's a simpler way.

>=C2=A0 =C2=A0 =C2=A0# Benchmark
>=C2=A0 =C2=A0 =C2=A0I prepared three different databases to check expec= tations. Each=C2=A0
>=C2=A0 =C2=A0 =C2=A0dataset is described below. My testing demonstrates= that my patch=C2=A0
>=C2=A0 =C2=A0 =C2=A0improves the execution time of huge hash joins.=C2= =A0
>=C2=A0 =C2=A0 =C2=A0Also, my implementation should not
>=C2=A0 =C2=A0 =C2=A0negatively affect performance within smaller querie= s.=C2=A0
>=C2=A0 =C2=A0 =C2=A0The usage of memory needed for temporary files was = reduced in every
>=C2=A0 =C2=A0 =C2=A0=C2=A0execution without a significant impact on exe= cution time.
>
>=C2=A0 =C2=A0 =C2=A0*## Dataset A:*
>=C2=A0 =C2=A0 =C2=A0Tables*
>=C2=A0 =C2=A0 =C2=A0*
>=C2=A0 =C2=A0 =C2=A0table_a(bigint id,text data_text,integer data_numbe= r) - 10000000 rows
>=C2=A0 =C2=A0 =C2=A0table_b(bigint id, integer ref_id, numeric data_val= ue, bytea
>=C2=A0 =C2=A0 =C2=A0data_blob) - 10000000 rows
>=C2=A0 =C2=A0 =C2=A0Query:=C2=A0 SELECT *=C2=A0 FROM table_a a JOIN tab= le_b b ON a.id= <http://
>=C2=A0 =C2=A0 =C2=A0a.id> =3D b.id <http://b.id>;
>
>=C2=A0 =C2=A0 =C2=A0The tables contain highly compressible data.
>=C2=A0 =C2=A0 =C2=A0The query demonstrated a reduction in the usage of = the temporary=C2=A0
>=C2=A0 =C2=A0 =C2=A0files ~20GB -> 3GB, based on this reduction also= caused the execution=C2=A0
>=C2=A0 =C2=A0 =C2=A0time of the query to be reduced by about ~10s.
>
>
>=C2=A0 =C2=A0 =C2=A0*## Dataset B:*
>=C2=A0 =C2=A0 =C2=A0Tables:*
>=C2=A0 =C2=A0 =C2=A0*
>=C2=A0 =C2=A0 =C2=A0table_a(integer id, text data_blob) - 1110000 rows<= br> >=C2=A0 =C2=A0 =C2=A0table_b(integer id, text data_blob) - 10000000 rows=
>=C2=A0 =C2=A0 =C2=A0Query:=C2=A0 SELECT *=C2=A0 FROM table_a a JOIN tab= le_b b ON a.id= <http://
>=C2=A0 =C2=A0 =C2=A0a.id> =3D b.id <http://b.id>;
>
>=C2=A0 =C2=A0 =C2=A0The tables contain less compressible data. data_blo= b was generated
>=C2=A0 =C2=A0 =C2=A0by a pseudo-random generator.
>=C2=A0 =C2=A0 =C2=A0In this case, the data reduction was only ~50%. Als= o, the execution
>=C2=A0 =C2=A0 =C2=A0time was reduced=C2=A0
>=C2=A0 =C2=A0 =C2=A0only slightly with the enabled compression.
>
>=C2=A0 =C2=A0 =C2=A0The second scenario demonstrates no overhead in the= case of enabled=C2=A0
>=C2=A0 =C2=A0 =C2=A0compression and extended work_mem to avoid temp fil= e usage.
>
>=C2=A0 =C2=A0 =C2=A0*## Dataset C:*
>=C2=A0 =C2=A0 =C2=A0Tables
>=C2=A0 =C2=A0 =C2=A0customers (integer,text,text,text,text)
>=C2=A0 =C2=A0 =C2=A0order_items(integer,integer,integer,integer,numeric= (10,2))
>=C2=A0 =C2=A0 =C2=A0orders(integer,integer,timestamp,numeric(10,2))
>=C2=A0 =C2=A0 =C2=A0products(integer,text,text,numeric(10,2),integer) >
>=C2=A0 =C2=A0 =C2=A0Query: SELECT p.product_id, p.name <http://p.name>, p.price,<= br> >=C2=A0 =C2=A0 =C2=A0SUM(oi.quantity) AS total_quantity, AVG(oi.price) A= S avg_item_price
>=C2=A0 =C2=A0 =C2=A0FROM eshop.products p JOIN eshop.order_items oi ON = p.product_id =3D
>=C2=A0 =C2=A0 =C2=A0oi.product_id JOIN=C2=A0
>=C2=A0 =C2=A0 =C2=A0eshop.orders o ON oi.order_id =3D o.order_id WHERE = o.order_date >
>=C2=A0 =C2=A0 =C2=A0'2020-01-01' AND p.price > 50
>=C2=A0 =C2=A0 =C2=A0GROUP BY p.product_id, p.name <http://p.name>, p.price HAVING=
>=C2=A0 =C2=A0 =C2=A0SUM(oi.quantity) > 1000
>=C2=A0 =C2=A0 =C2=A0ORDER BY total_quantity DESC LIMIT 100;
>
>=C2=A0 =C2=A0 =C2=A0This scenario should demonstrate a more realistic u= sage of the database.
>=C2=A0 =C2=A0 =C2=A0Enabled compression slightly reduced the temporary = memory usage, but
>=C2=A0 =C2=A0 =C2=A0the execution
>=C2=A0 =C2=A0 =C2=A0time wasn't affected by compression.
>
>
>=C2=A0 =C2=A0 =C2=A0+------------+-------------------------+-----------= ------------
>=C2=A0 =C2=A0 =C2=A0+------------------------------+
>=C2=A0 =C2=A0 =C2=A0| =C2=A0Dataset =C2=A0 | Compression. =C2=A0 =C2=A0= =C2=A0 | temp_bytes =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 | Execution
>=C2=A0 =C2=A0 =C2=A0Time (ms)=C2=A0=C2=A0 | =C2=A0 =C2=A0 =C2=A0
>=C2=A0 =C2=A0 =C2=A0+------------+-------------------------+-----------= ------------
>=C2=A0 =C2=A0 =C2=A0+----------------------------- +
>=C2=A0 =C2=A0 =C2=A0| A =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | Yes= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 |=C2=A0 3.09 GiB =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 >=C2=A0 =C2=A0 =C2=A0| 22s586ms=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 | work_mem=C2=A0 =3D 4MB
>=C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 | No=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A0 =C2=A0 |=C2=A0 21.89 GiB =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2= =A0
>=C2=A0 =C2=A0 =C2=A0| 35s=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 | work_mem=C2=A0 =3D 4MB
>=C2=A0 =C2=A0 =C2=A0+------------+-------------------------+-----------= ------------
>=C2=A0 =C2=A0 =C2=A0+----------------------------------------
>=C2=A0 =C2=A0 =C2=A0| B=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 | Yes=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0333 MB =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
>=C2=A0 =C2=A0 =C2=A0| 1815.545 ms=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |= work_mem =3D 4MB
>=C2=A0 =C2=A0 =C2=A0|=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | No=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 146=C2=A0 MB =C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
>=C2=A0 =C2=A0 =C2=A0=C2=A0 | 1500.460 ms=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 | work_mem =3D 4MB
>=C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 = =C2=A0=C2=A0 | Yes=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= |=C2=A0 0 MB =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 =C2=A0
>=C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 |=C2=A03262.305 ms=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 | work_mem =3D 80MB
>=C2=A0 =C2=A0 =C2=A0|=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | No=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 0 MB =C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A0
>=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 |=C2=A03174.725 ms=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | work_mem =3D 80MB
>=C2=A0 =C2=A0 =C2=A0+-------------+------------------------+-----------= -------------
>=C2=A0 =C2=A0 =C2=A0+-------------------------------------
>=C2=A0 =C2=A0 =C2=A0| C=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = | Yes=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 40 MB=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0
>=C2=A0 =C2=A0 =C2=A0|=C2=A01011.020 ms=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 | work_mem =3D 1MB
>=C2=A0 =C2=A0 =C2=A0|=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | No=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 53
>=C2=A0 =C2=A0 =C2=A0MB=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 1034.142 ms=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | work_mem =3D 1MB
>=C2=A0 =C2=A0 =C2=A0+------------+------------------------+------------= ------------
>=C2=A0 =C2=A0 =C2=A0+--------------------------------------
>
>

Thanks. I'll try to do some benchmarks on my own.

Are these results fro ma single run, or an average of multiple runs?
=C2=A0
It is average from multiple runs.

Do
you maybe have a script to reproduce this, including the data generation?
=C2=A0
I am attaching my SQL file for database pr= eparation. I also did further testing
with two other machines( se= e attachment huge_tables.rtf ).

Also, can you share some information about the machine used for this? I
expect the impact to strongly depends on memory pressure - if the temp
file fits into page cache (and stays there), it may not benefit from the compression, right?
=C2=A0
If it fits=C2=A0i= nto the page cache due to compression, I would consider it as a benefit fro= m compression.
I performed further testing on machines with diffe= rent memory sizes.
Both experiments showed that compression was b= eneficial for execution time.=C2=A0
The execution time reduction = was more significant in the case of the machine that had
less mem= ory available.

Tests were performed on:
= MacBook PRO M3 36GB - MacOs
Virtual machine ARM64 10GB/ 6CPU - Fe= dora 39



regards

--
Tomas Vondra

--0000000000009907c9062ae9f591-- --0000000000009907cb062ae9f593 Content-Type: application/octet-stream; name="0001-This-commit-adds-support-for-temporary-files-compres.patch" Content-Disposition: attachment; filename="0001-This-commit-adds-support-for-temporary-files-compres.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5itp4us0 RnJvbSBmZDRlNDJjODMwYmRmODIzMWFjN2I2YWUyMTMyNmMzOGJhYWNkYzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGaWxpcCA8ZmphbnVzQHJlZGhhdC5jb20+CkRhdGU6IFRodSwg MjQgT2N0IDIwMjQgMTI6MTU6MTAgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvM10gVGhpcyBjb21t aXQgYWRkcyBzdXBwb3J0IGZvciB0ZW1wb3JhcnkgZmlsZXMgY29tcHJlc3Npb24sCiBpdCBjYW4g YmUgdXNlZCBvbmx5IGZvciBoYXNoam9pbnMgbm93LgoKSXQgYWxzbyBhZGRzIEdVQyBwYXJhbWV0 ZXIgdGVtcF9maWxlX2NvbXByZXNzaW9uIHRoYXQgZW5hYmxlcyB0aGlzIGZ1bmN0aW9uYWxpdHku CkZvciBub3csIGl0IHN1cHBvcnRzIGp1c3QgbHo0IGFsZ29yaXRobXMuIEluIHRoZSBmdXR1cmUs IGl0CmNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgcGdseiBhbmQgenN0ZCBzdXBwb3J0LgotLS0K IHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkYnVmZmVycy5jICAgIHwgICAgMiArLQog c3JjL2JhY2tlbmQvYmFja3VwL2JhY2t1cF9tYW5pZmVzdC5jICAgICAgICAgIHwgICAgMiArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMgICAgICAgICAgIHwgICAgMiArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUuYyAgICAgICAgICAgIHwgIDE3NiArKy0K IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMjMgKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBz cmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYyAgICAgICAgICAgICAgfCAgICAyICstCiBz cmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUuYyAgICAgICAgICAgfCAgICAyICstCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2J1ZmZpbGUuaCAgICAgICAgICAgICAgICAgfCAgIDEzICstCiBz cmMvdGVzdC9yZWdyZXNzL0dOVW1ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoX2x6NC5vdXQgICB8IDExNjYgKysrKysr KysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0 ICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaF9sejQuc3FsICAgICAg ICB8ICA2MjYgKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAyMDA2IGluc2VydGlvbnMoKyks IDE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvam9pbl9oYXNoX2x6NC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9qb2luX2hhc2hfbHo0LnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5nbG9i YWwuaW4gYi9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCmluZGV4IDQyZjUwYjQ5NzYuLjA2ZTcwMWZl OWMgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KKysrIGIvc3JjL01ha2VmaWxl Lmdsb2JhbC5pbgpAQCAtMTkzLDYgKzE5Myw3IEBAIHdpdGhfbGRhcAk9IEB3aXRoX2xkYXBACiB3 aXRoX2xpYnhtbAk9IEB3aXRoX2xpYnhtbEAKIHdpdGhfbGlieHNsdAk9IEB3aXRoX2xpYnhzbHRA CiB3aXRoX2xsdm0JPSBAd2l0aF9sbHZtQAord2l0aF9sejQJPSBAd2l0aF9sejRACiB3aXRoX3N5 c3RlbV90emRhdGEgPSBAd2l0aF9zeXN0ZW1fdHpkYXRhQAogd2l0aF91dWlkCT0gQHdpdGhfdXVp ZEAKIHdpdGhfemxpYgk9IEB3aXRoX3psaWJACmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0YnVpbGRidWZmZXJzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 YnVpbGRidWZmZXJzLmMKaW5kZXggNGMyMzAxZGEwMC4uOWIzYjAwMTQyYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkYnVmZmVycy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZGJ1ZmZlcnMuYwpAQCAtNTQsNyArNTQsNyBAQCBnaXN0 SW5pdEJ1aWxkQnVmZmVycyhpbnQgcGFnZXNQZXJCdWZmZXIsIGludCBsZXZlbFN0ZXAsIGludCBt YXhMZXZlbCkKIAkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB0byBob2xkIGJ1ZmZlciBwYWdl cyB0aGF0IGFyZSBzd2FwcGVkIG91dCBvZgogCSAqIG1lbW9yeS4KIAkgKi8KLQlnZmJiLT5wZmls ZSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKGZhbHNlKTsKKwlnZmJiLT5wZmlsZSA9IEJ1ZkZpbGVDcmVh dGVUZW1wKGZhbHNlLCBmYWxzZSk7CiAJZ2ZiYi0+bkZpbGVCbG9ja3MgPSAwOwogCiAJLyogSW5p dGlhbGl6ZSBmcmVlIHBhZ2UgbWFuYWdlbWVudC4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2JhY2t1cC9iYWNrdXBfbWFuaWZlc3QuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYWNrdXBfbWFu aWZlc3QuYwppbmRleCBhMmUyZjg2MzMyLi5mOGEzZTFmMGY0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9iYWNrdXAvYmFja3VwX21hbmlmZXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jh Y2t1cF9tYW5pZmVzdC5jCkBAIC02NSw3ICs2NSw3IEBAIEluaXRpYWxpemVCYWNrdXBNYW5pZmVz dChiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QsCiAJCW1hbmlmZXN0LT5idWZmaWxlID0g TlVMTDsKIAllbHNlCiAJewotCQltYW5pZmVzdC0+YnVmZmlsZSA9IEJ1ZkZpbGVDcmVhdGVUZW1w KGZhbHNlKTsKKwkJbWFuaWZlc3QtPmJ1ZmZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSwg ZmFsc2UpOwogCQltYW5pZmVzdC0+bWFuaWZlc3RfY3R4ID0gcGdfY3J5cHRvaGFzaF9jcmVhdGUo UEdfU0hBMjU2KTsKIAkJaWYgKHBnX2NyeXB0b2hhc2hfaW5pdChtYW5pZmVzdC0+bWFuaWZlc3Rf Y3R4KSA8IDApCiAJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgY2hlY2tzdW0g b2YgYmFja3VwIG1hbmlmZXN0OiAlcyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSGFzaGpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jCmlu ZGV4IDJmNzE3MDYwNGQuLjFiNWM2NDQ4ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVIYXNoam9pbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9p bi5jCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBFeGVjSGFzaEpvaW5TYXZlVHVwbGUoTWluaW1hbFR1 cGxlIHR1cGxlLCB1aW50MzIgaGFzaHZhbHVlLAogCXsKIAkJTWVtb3J5Q29udGV4dCBvbGRjdHgg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRhYmxlLT5zcGlsbEN4dCk7CiAKLQkJZmlsZSA9 IEJ1ZkZpbGVDcmVhdGVUZW1wKGZhbHNlKTsKKwkJZmlsZSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKGZh bHNlLCB0cnVlKTsKIAkJKmZpbGVwdHIgPSBmaWxlOwogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjdHgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMKaW5kZXggYTI3ZjUxZjYyMi4u ODE4ZWYzOWQ1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvYnVmZmlsZS5jCkBAIC01NCw2ICs1NCwx NiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5o IgogCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2VuZGlmCisKKyNkZWZpbmUg Tk9fTFo0X1NVUFBPUlQoKSBcCisJZXJlcG9ydChFUlJPUiwgXAorCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBcCisJCQkgZXJybXNnKCJjb21wcmVzc2lvbiBtZXRo b2QgbHo0IG5vdCBzdXBwb3J0ZWQiKSwgXAorCQkJIGVycmRldGFpbCgiVGhpcyBmdW5jdGlvbmFs aXR5IHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYnVpbHQgd2l0aCBsejQgc3VwcG9ydC4iKSkp CisKIC8qCiAgKiBXZSBicmVhayBCdWZGaWxlcyBpbnRvIGdpZ2FieXRlLXNpemVkIHNlZ21lbnRz LCByZWdhcmRsZXNzIG9mIFJFTFNFR19TSVpFLgogICogVGhlIHJlYXNvbiBpcyB0aGF0IHdlJ2Qg bGlrZSBsYXJnZSBCdWZGaWxlcyB0byBiZSBzcHJlYWQgYWNyb3NzIG11bHRpcGxlCkBAIC02Miw2 ICs3Miw4IEBACiAjZGVmaW5lIE1BWF9QSFlTSUNBTF9GSUxFU0laRQkweDQwMDAwMDAwCiAjZGVm aW5lIEJVRkZJTEVfU0VHX1NJWkUJCShNQVhfUEhZU0lDQUxfRklMRVNJWkUgLyBCTENLU1opCiAK K2ludCB0ZW1wX2ZpbGVfY29tcHJlc3Npb24gPSBURU1QX05PTkVfQ09NUFJFU1NJT047CisKIC8q CiAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBidWZmZXJlZCBmaWxlIHRoYXQg Y29uc2lzdHMgb2Ygb25lIG9yCiAgKiBtb3JlIHBoeXNpY2FsIGZpbGVzIChlYWNoIGFjY2Vzc2Vk IHRocm91Z2ggYSB2aXJ0dWFsIGZpbGUgZGVzY3JpcHRvcgpAQCAtOTUsNyArMTA3LDcgQEAgc3Ry dWN0IEJ1ZkZpbGUKIAlvZmZfdAkJY3VyT2Zmc2V0OwkJLyogb2Zmc2V0IHBhcnQgb2YgY3VycmVu dCBwb3MgKi8KIAlpbnQJCQlwb3M7CQkJLyogbmV4dCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIGJ1 ZmZlciAqLwogCWludAkJCW5ieXRlczsJCQkvKiB0b3RhbCAjIG9mIHZhbGlkIGJ5dGVzIGluIGJ1 ZmZlciAqLwotCisJYm9vbAkJCWNvbXByZXNzOyAvKsKgU3RhdGUgb2YgdXNlZ2UgZmlsZSBjb21w cmVzc2lvbiAqLwogCS8qCiAJICogWFhYIFNob3VsZCBpZGVhbGx5IHVzIFBHSU9BbGlnbmVkQmxv Y2ssIGJ1dCBtaWdodCBuZWVkIGEgd2F5IHRvIGF2b2lkCiAJICogd2FzdGluZyBwZXItZmlsZSBh bGlnbm1lbnQgcGFkZGluZyB3aGVuIHNvbWUgdXNlcnMgY3JlYXRlIG1hbnkgZmlsZXMuCkBAIC0x MjcsNiArMTM5LDcgQEAgbWFrZUJ1ZkZpbGVDb21tb24oaW50IG5maWxlcykKIAlmaWxlLT5jdXJP ZmZzZXQgPSAwOwogCWZpbGUtPnBvcyA9IDA7CiAJZmlsZS0+bmJ5dGVzID0gMDsKKwlmaWxlLT5j b21wcmVzcyA9IGZhbHNlOwogCiAJcmV0dXJuIGZpbGU7CiB9CkBAIC0xODgsOSArMjAxLDE3IEBA IGV4dGVuZEJ1ZkZpbGUoQnVmRmlsZSAqZmlsZSkKICAqIE5vdGU6IGlmIGludGVyWGFjdCBpcyB0 cnVlLCB0aGUgY2FsbGVyIGhhZCBiZXR0ZXIgYmUgY2FsbGluZyB1cyBpbiBhCiAgKiBtZW1vcnkg Y29udGV4dCwgYW5kIHdpdGggYSByZXNvdXJjZSBvd25lciwgdGhhdCB3aWxsIHN1cnZpdmUgYWNy b3NzCiAgKiB0cmFuc2FjdGlvbiBib3VuZGFyaWVzLgorICoKKyAqIElmIGNvbXByZXNzIGlzIHRy dWUgdGhlIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIGNvbXByZXNzZWQgYmVmb3JlCisgKiB3cml0 aW5nIG9uIGRpc2suCisgKgorICogTm90ZTogVGhlIGNvbXByZXNzaW9uIGRvZXMgbm90IHN1cHBv cnQgcmFuZG9tIGFjY2Vzcy4gT25seSB0aGUgaGFzaCBqb2lucworICogdXNlIGl0IGZvciBub3cu IFRoZSBzZWVrIG9wZXJhdGlvbiBvdGhlciB0aGFuIHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0 aGUKKyAqIGJ1ZmZpbGUgd2lsbCBjb3JydXB0IHRlbXBvcmFyeSBkYXRhIG9mZnNldHMuCisgKgog ICovCiBCdWZGaWxlICoKLUJ1ZkZpbGVDcmVhdGVUZW1wKGJvb2wgaW50ZXJYYWN0KQorQnVmRmls ZUNyZWF0ZVRlbXAoYm9vbCBpbnRlclhhY3QsIGJvb2wgY29tcHJlc3MpCiB7CiAJQnVmRmlsZSAg ICAqZmlsZTsKIAlGaWxlCQlwZmlsZTsKQEAgLTIxMiw2ICsyMzMsMTUgQEAgQnVmRmlsZUNyZWF0 ZVRlbXAoYm9vbCBpbnRlclhhY3QpCiAJZmlsZSA9IG1ha2VCdWZGaWxlKHBmaWxlKTsKIAlmaWxl LT5pc0ludGVyWGFjdCA9IGludGVyWGFjdDsKIAorCWlmICh0ZW1wX2ZpbGVfY29tcHJlc3Npb24g IT0gVEVNUF9OT05FX0NPTVBSRVNTSU9OKQorCXsKKyNpZmRlZiBVU0VfTFo0CisJCWZpbGUtPmNv bXByZXNzID0gY29tcHJlc3M7CisjZWxzZQorCQlOT19MWjRfU1VQUE9SVCgpOworI2VuZGlmCisJ fQorCiAJcmV0dXJuIGZpbGU7CiB9CiAKQEAgLTI3NSw2ICszMDUsNyBAQCBCdWZGaWxlQ3JlYXRl RmlsZVNldChGaWxlU2V0ICpmaWxlc2V0LCBjb25zdCBjaGFyICpuYW1lKQogCWZpbGUtPmZpbGVz WzBdID0gTWFrZU5ld0ZpbGVTZXRTZWdtZW50KGZpbGUsIDApOwogCWZpbGUtPnJlYWRPbmx5ID0g ZmFsc2U7CiAKKwogCXJldHVybiBmaWxlOwogfQogCkBAIC00NTUsMTMgKzQ4Niw3MiBAQCBCdWZG aWxlTG9hZEJ1ZmZlcihCdWZGaWxlICpmaWxlKQogCQlJTlNUUl9USU1FX1NFVF9aRVJPKGlvX3N0 YXJ0KTsKIAogCS8qCi0JICogUmVhZCB3aGF0ZXZlciB3ZSBjYW4gZ2V0LCB1cCB0byBhIGZ1bGwg YnVmZmVybG9hZC4KKwkgKiBMb2FkIGRhdGEgYXMgaXQgaXMgc3RvcmVkIGluIHRoZSB0ZW1wb3Jh cnkgZmlsZQogCSAqLwotCWZpbGUtPm5ieXRlcyA9IEZpbGVSZWFkKHRoaXNmaWxlLAorCWlmICgh ZmlsZS0+Y29tcHJlc3MpCisJeworCisJCS8qCisJIAkqIFJlYWQgd2hhdGV2ZXIgd2UgY2FuIGdl dCwgdXAgdG8gYSBmdWxsIGJ1ZmZlcmxvYWQuCisJIAkqLworCQlmaWxlLT5uYnl0ZXMgPSBGaWxl UmVhZCh0aGlzZmlsZSwKIAkJCQkJCQlmaWxlLT5idWZmZXIuZGF0YSwKIAkJCQkJCQlzaXplb2Yo ZmlsZS0+YnVmZmVyKSwKIAkJCQkJCQlmaWxlLT5jdXJPZmZzZXQsCiAJCQkJCQkJV0FJVF9FVkVO VF9CVUZGSUxFX1JFQUQpOworCS8qCisJICogUmVhZCBhbmQgZGVjb21wcmVzcyBkYXRhIGZyb20g dGhlIHRlbXBvcmFyeSBmaWxlCisJICogVGhlIGZpcnN0IHJlYWRpbmcgbG9hZHMgc2l6ZSBvZiB0 aGUgY29tcHJlc3NlZCBibG9jaworCSAqIFNlY29uZCByZWFkaW5nIGxvYWRzIGNvbXByZXNzZWQg ZGF0YQorCSAqLworCX0gZWxzZSB7CisJCWludCBucmVhZDsKKwkJaW50IG5ieXRlczsKKworCQlu cmVhZCA9IEZpbGVSZWFkKHRoaXNmaWxlLAorCQkJCQkJCSZuYnl0ZXMsCisJCQkJCQkJc2l6ZW9m KG5ieXRlcyksCisJCQkJCQkJZmlsZS0+Y3VyT2Zmc2V0LAorCQkJCQkJCVdBSVRfRVZFTlRfQlVG RklMRV9SRUFEKTsKKwkJLyogaWYgbm90IEVPRiBsZXQncyBjb250aW51ZSAqLworCQlpZiAobnJl YWQgPiAwKQorCQl7CisJCQkvKgorCQkJICogQSBsb25nIGxpZmUgYnVmZmVyIHdvdWxkIG1ha2Ug c2VuY2UgdG8gbGltaXQgbnVtYmVyIG9mCisJCQkgKiBtZW1vcnkgYWxsb2NhdGlvbnMKKwkJCSAq LworCQkJY2hhciAqIGJ1ZmY7CisKKwkJCS8qCisJCQkgKiBSZWFkIGNvbXByZXNzZWQgZGF0YSwg Y3VyT2Zmc2V0IGRpZmZlcnMgd2l0aCBwb3MKKwkJCSAqIEl0IHJlYWRzIGxlc3MgZGF0YSB0aGFu IGl0IHJldHVybnMgdG8gY2FsbGVyCisJCQkgKiBTbyB0aGUgY3VyT2Zmc2V0IG11c3QgYmUgYWR2 YW5jZWQgaGVyZSBiYXNlZCBvbiBjb21wcmVzc2VkIHNpemUKKwkJCSAqLworCQkJZmlsZS0+Y3Vy T2Zmc2V0Kz1zaXplb2YobmJ5dGVzKTsKKworCQkJYnVmZiA9IHBhbGxvYyhuYnl0ZXMpOworCisJ CQlucmVhZCA9IEZpbGVSZWFkKHRoaXNmaWxlLAorCQkJCQkJCWJ1ZmYsCisJCQkJCQkJbmJ5dGVz LAorCQkJCQkJCWZpbGUtPmN1ck9mZnNldCwKKwkJCQkJCQlXQUlUX0VWRU5UX0JVRkZJTEVfUkVB RCk7CisKKyNpZmRlZiBVU0VfTFo0CisJCQlmaWxlLT5uYnl0ZXMgPSBMWjRfZGVjb21wcmVzc19z YWZlKGJ1ZmYsCisJCQkJZmlsZS0+YnVmZmVyLmRhdGEsbmJ5dGVzLHNpemVvZihmaWxlLT5idWZm ZXIpKTsKKwkJCWZpbGUtPmN1ck9mZnNldCArPSBucmVhZDsKKyNlbmRpZgorCisJCQlpZiAoZmls ZS0+bmJ5dGVzIDwgMCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9EQVRBX0NPUlJVUFRFRCksCisJCQkJCQkgZXJybXNnX2ludGVybmFsKCJjb21wcmVzc2VkIGx6 NCBkYXRhIGlzIGNvcnJ1cHQiKSkpOworCQkJcGZyZWUoYnVmZik7CisJCX0KKworCX0KKwogCWlm IChmaWxlLT5uYnl0ZXMgPCAwKQogCXsKIAkJZmlsZS0+bmJ5dGVzID0gMDsKQEAgLTQ5NCw5ICs1 ODQsNTYgQEAgc3RhdGljIHZvaWQKIEJ1ZkZpbGVEdW1wQnVmZmVyKEJ1ZkZpbGUgKmZpbGUpCiB7 CiAJaW50CQkJd3BvcyA9IDA7Ci0JaW50CQkJYnl0ZXN0b3dyaXRlOworCWludAkJCWJ5dGVzdG93 cml0ZSA9IDA7CiAJRmlsZQkJdGhpc2ZpbGU7CiAKKworCS8qIFNhdmUgbmJ5dGVzIHZhbHVlIGJl Y2F1c2UgdGhlIHNpemUgY2hhbmdlcyBkdWUgdG8gY29tcHJlc3Npb24gKi8KKwlpbnQgbmJ5dGVz T3JpZ2luYWwgPSBmaWxlLT5uYnl0ZXM7CisKKwlib29sIGNvbXByZXNzaW9uID0gZmFsc2U7CisK KwljaGFyICogRGF0YVRvV3JpdGU7CisJRGF0YVRvV3JpdGUgPSBmaWxlLT5idWZmZXIuZGF0YTsK KworCS8qCisJICogUHJlcGFyZSBjb21wcmVzc2VkIGRhdGEgdG8gd3JpdGUKKwkgKiBzaXplIG9m IGNvbXByZXNzZWQgYmxvY2sgbmVlZHMgdG8gYmUgYWRkZWQgYXQgdGhlIGJlZ2dpbmluZyBvZiB0 aGUKKwkgKiBjb21wcmVzc2VkIGRhdGEKKwkgKi8KKworCisJaWYgKGZpbGUtPmNvbXByZXNzKSB7 CisJCWludCBjQnVmZmVyU2l6ZSA9IDA7CisJCWNoYXIgKiBjRGF0YTsKKwkJaW50IGNTaXplID0g MDsKKyNpZmRlZiBVU0VfTFo0CisJCWNCdWZmZXJTaXplID0gTFo0X2NvbXByZXNzQm91bmQoZmls ZS0+bmJ5dGVzKTsKKyNlbmRpZgorCQkvKgorCQkgKiBBIGxvbmcgbGlmZSBidWZmZXIgd291bGQg bWFrZSBzZW5jZSB0byBsaW1pdCBudW1iZXIgb2YKKwkJICogbWVtb3J5IGFsbG9jYXRpb25zCisJ CSAqLworCQljb21wcmVzc2lvbiA9IHRydWU7CisJCWNEYXRhID0gcGFsbG9jKGNCdWZmZXJTaXpl ICsgc2l6ZW9mKGludCkpOworI2lmZGVmIFVTRV9MWjQKKwkJLyoKKwkJICogVXNpbmcgc3RyZWFt IGNvbXByZXNzaW9uIHdvdWxkIGxlYWQgdG8gdGhlIHNsaWdodCBpbXByb3ZlbWVudCBpbgorCQkg KiBjb21wcmVzc2lvbiByYXRpbworCQkgKi8KKwkJY1NpemUgPSBMWjRfY29tcHJlc3NfZGVmYXVs dChmaWxlLT5idWZmZXIuZGF0YSwKKwkJCQljRGF0YSArIHNpemVvZihpbnQpLGZpbGUtPm5ieXRl cywgY0J1ZmZlclNpemUpOworI2VuZGlmCisKKwkJLyogV3JpdGUgc2l6ZSBvZiBjb21wcmVzc2Vk IGJsb2NrIGluIGZyb250IG9mIGNvbXByZXNzZWQgZGF0YQorCQkgKiBJdCdzIHVzZWQgdG8gZGV0 ZXJtaW5lIGFtb3VudCBvZiBkYXRhIHRvIHJlYWQgd2l0aGluCisJCSAqIGRlY29tcHJlc3Npb24g cHJvY2VzcworCQkgKi8KKwkJbWVtY3B5KGNEYXRhLCZjU2l6ZSxzaXplb2YoaW50KSk7CisJCWZp bGUtPm5ieXRlcz1jU2l6ZSArIHNpemVvZihpbnQpOworCQlEYXRhVG9Xcml0ZSA9IGNEYXRhOwor CX0KKwogCS8qCiAJICogVW5saWtlIEJ1ZkZpbGVMb2FkQnVmZmVyLCB3ZSBtdXN0IGR1bXAgdGhl IHdob2xlIGJ1ZmZlciBldmVuIGlmIGl0CiAJICogY3Jvc3NlcyBhIGNvbXBvbmVudC1maWxlIGJv dW5kYXJ5OyBzbyB3ZSBuZWVkIGEgbG9vcC4KQEAgLTUzNSw3ICs2NzIsNyBAQCBCdWZGaWxlRHVt cEJ1ZmZlcihCdWZGaWxlICpmaWxlKQogCQkJSU5TVFJfVElNRV9TRVRfWkVSTyhpb19zdGFydCk7 CiAKIAkJYnl0ZXN0b3dyaXRlID0gRmlsZVdyaXRlKHRoaXNmaWxlLAotCQkJCQkJCQkgZmlsZS0+ YnVmZmVyLmRhdGEgKyB3cG9zLAorCQkJCQkJCQkgRGF0YVRvV3JpdGUgKyB3cG9zLAogCQkJCQkJ CQkgYnl0ZXN0b3dyaXRlLAogCQkJCQkJCQkgZmlsZS0+Y3VyT2Zmc2V0LAogCQkJCQkJCQkgV0FJ VF9FVkVOVF9CVUZGSUxFX1dSSVRFKTsKQEAgLTU2NCw3ICs3MDEsMTkgQEAgQnVmRmlsZUR1bXBC dWZmZXIoQnVmRmlsZSAqZmlsZSkKIAkgKiBsb2dpY2FsIGZpbGUgcG9zaXRpb24sIGllLCBvcmln aW5hbCB2YWx1ZSArIHBvcywgaW4gY2FzZSB0aGF0IGlzIGxlc3MKIAkgKiAoYXMgY291bGQgaGFw cGVuIGR1ZSB0byBhIHNtYWxsIGJhY2t3YXJkcyBzZWVrIGluIGEgZGlydHkgYnVmZmVyISkKIAkg Ki8KLQlmaWxlLT5jdXJPZmZzZXQgLT0gKGZpbGUtPm5ieXRlcyAtIGZpbGUtPnBvcyk7CisKKwor CWlmICghZmlsZS0+Y29tcHJlc3MpCisJCWZpbGUtPmN1ck9mZnNldCAtPSAoZmlsZS0+bmJ5dGVz IC0gZmlsZS0+cG9zKTsKKwllbHNlCisJCWlmIChuYnl0ZXNPcmlnaW5hbCAtIGZpbGUtPnBvcyAh PSAwKQorCQkJLyogY3VyT2Zmc2V0IG11c3QgYmUgY29ycmVjdGVkIGFsc28gaWYgY29tcHJlc3Np b24gaXMKKwkJCSAqIGVuYWJsZWQsIG5ieXRlcyB3YXMgY2hhbmdlZCBieSBjb21wcmVzc2lvbiBi dXQgd2UKKwkJCSAqIGhhdmUgdG8gdXNlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBuYnl0ZXMKKwkJ CSAqLworCQkJZmlsZS0+Y3VyT2Zmc2V0LT1ieXRlc3Rvd3JpdGU7CisKKwogCWlmIChmaWxlLT5j dXJPZmZzZXQgPCAwKQkvKiBoYW5kbGUgcG9zc2libGUgc2VnbWVudCBjcm9zc2luZyAqLwogCXsK IAkJZmlsZS0+Y3VyRmlsZS0tOwpAQCAtNTc3LDYgKzcyNiw5IEBAIEJ1ZkZpbGVEdW1wQnVmZmVy KEJ1ZkZpbGUgKmZpbGUpCiAJICovCiAJZmlsZS0+cG9zID0gMDsKIAlmaWxlLT5uYnl0ZXMgPSAw OworCisJaWYgKGNvbXByZXNzaW9uKQorCQlwZnJlZShEYXRhVG9Xcml0ZSk7CiB9CiAKIC8qCkBA IC02MDIsOCArNzU0LDE0IEBAIEJ1ZkZpbGVSZWFkQ29tbW9uKEJ1ZkZpbGUgKmZpbGUsIHZvaWQg KnB0ciwgc2l6ZV90IHNpemUsIGJvb2wgZXhhY3QsIGJvb2wgZW9mT0spCiAJewogCQlpZiAoZmls ZS0+cG9zID49IGZpbGUtPm5ieXRlcykKIAkJewotCQkJLyogVHJ5IHRvIGxvYWQgbW9yZSBkYXRh IGludG8gYnVmZmVyLiAqLwotCQkJZmlsZS0+Y3VyT2Zmc2V0ICs9IGZpbGUtPnBvczsKKwkJCS8q IFRyeSB0byBsb2FkIG1vcmUgZGF0YSBpbnRvIGJ1ZmZlci4KKwkJCSAqCisJCQkgKiBjdXJPZmZz ZXQgaXMgbW92ZWQgd2l0aGluIEJ1ZkZpbGVMb2FkQnVmZmVyCisJCQkgKiBiZWNhdXNlIHN0b3Jl ZCBkYXRhIHNpemUgZGlmZmVycyBmcm9tIGxvYWRlZC8KKwkJCSAqIGRlY29tcHJlc3NlZCBzaXpl CisJCQkgKiAqLworCQkJaWYgKCFmaWxlLT5jb21wcmVzcykKKwkJCQlmaWxlLT5jdXJPZmZzZXQg Kz0gZmlsZS0+cG9zOwogCQkJZmlsZS0+cG9zID0gMDsKIAkJCWZpbGUtPm5ieXRlcyA9IDA7CiAJ CQlCdWZGaWxlTG9hZEJ1ZmZlcihmaWxlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMK aW5kZXggNjg2MzA5ZGI1OC4uMzgyMWNhZjc2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVwLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2Uu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdl X29iamVjdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL3ByZWRpY2F0ZS5oIgpAQCAtNDU0LDYgKzQ1NSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNvbmZpZ19lbnVtX2VudHJ5IGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb25fb3B0aW9uc1tdID0g ewogI2VuZGlmCiAJe05VTEwsIDAsIGZhbHNlfQogfTsKKy8qCisgKiBwZ2x6IGFuZCB6c3RkIHN1 cHBvcnQgc2hvdWxkIGJlIGFkZGVkIGFzIGZ1dHVyZSBlbmhhbmNlbWVudAorICoKKyAqLworc3Rh dGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSB0ZW1wX2ZpbGVfY29tcHJlc3Npb25f b3B0aW9uc1tdID0geworCXsibm8iLCBURU1QX05PTkVfQ09NUFJFU1NJT04sIGZhbHNlfSwKKyNp ZmRlZiAgVVNFX0xaNAorCXsibHo0IiwgVEVNUF9MWjRfQ09NUFJFU1NJT04sIGZhbHNlfSwKKyNl bmRpZgorCXtOVUxMLCAwLCBmYWxzZX0KK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmln X2VudW1fZW50cnkgd2FsX2NvbXByZXNzaW9uX29wdGlvbnNbXSA9IHsKIAl7InBnbHoiLCBXQUxf Q09NUFJFU1NJT05fUEdMWiwgZmFsc2V9LApAQCAtNDg1Niw2ICs0ODY4LDE3IEBAIHN0cnVjdCBj b25maWdfZW51bSBDb25maWd1cmVOYW1lc0VudW1bXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAogCisJeworCQl7InRlbXBfZmlsZV9jb21wcmVzc2lvbiIsIFBHQ19VU0VSU0VULCBDTElFTlRf Q09OTl9TVEFURU1FTlQsCisJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGRlZmF1bHQgY29tcHJl c3Npb24gbWV0aG9kIGZvciBjb21wcmVzc2libGUgdmFsdWVzLiIpLAorCQkJTlVMTAorCQl9LAor CQkmdGVtcF9maWxlX2NvbXByZXNzaW9uLAorCQlURU1QX05PTkVfQ09NUFJFU1NJT04sCisJCXRl bXBfZmlsZV9jb21wcmVzc2lvbl9vcHRpb25zLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwog CXsKIAkJeyJkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbiIsIFBHQ19VU0VSU0VULCBDTElF TlRfQ09OTl9TVEFURU1FTlQsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIHRyYW5zYWN0aW9u IGlzb2xhdGlvbiBsZXZlbCBvZiBlYWNoIG5ldyB0cmFuc2FjdGlvbi4iKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCA2NjdlMGRjNDBhLi5l OWMwYjM2MzUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCkBAIC0xNzcsNiArMTc3LDcgQEAKIAogI21heF9ub3RpZnlfcXVldWVfcGFnZXMgPSAx MDQ4NTc2CSMgbGltaXRzIHRoZSBudW1iZXIgb2YgU0xSVSBwYWdlcyBhbGxvY2F0ZWQKIAkJCQkJ IyBmb3IgTk9USUZZIC8gTElTVEVOIHF1ZXVlCisjdGVtcF9maWxlX2NvbXByZXNzaW9uID0gJ25v JwkjIGVuYWJsZXMgdGVtcG9yYXJ5IGZpbGVzIGNvbXByZXNzaW9uCiAKICMgLSBLZXJuZWwgUmVz b3VyY2VzIC0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMg Yi9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwppbmRleCA0NGIzMGU4NmFkLi5hZjQz YjNlYmIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwpAQCAtNTkyLDcgKzU5Miw3IEBAIExv Z2ljYWxUYXBlU2V0Q3JlYXRlKGJvb2wgcHJlYWxsb2NhdGUsIFNoYXJlZEZpbGVTZXQgKmZpbGVz ZXQsIGludCB3b3JrZXIpCiAJCWx0cy0+cGZpbGUgPSBCdWZGaWxlQ3JlYXRlRmlsZVNldCgmZmls ZXNldC0+ZnMsIGZpbGVuYW1lKTsKIAl9CiAJZWxzZQotCQlsdHMtPnBmaWxlID0gQnVmRmlsZUNy ZWF0ZVRlbXAoZmFsc2UpOworCQlsdHMtPnBmaWxlID0gQnVmRmlsZUNyZWF0ZVRlbXAoZmFsc2Us IGZhbHNlKTsKIAogCXJldHVybiBsdHM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9zb3J0L3R1cGxlc3RvcmUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzdG9yZS5j CmluZGV4IGE3MjBkNzAyMDAuLmE5NTJmMGY0ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL3NvcnQvdHVwbGVzdG9yZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVz dG9yZS5jCkBAIC04NjAsNyArODYwLDcgQEAgdHVwbGVzdG9yZV9wdXR0dXBsZV9jb21tb24oVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVwbGUpCiAJCQkgKi8KIAkJCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+Y29udGV4dC0+cGFyZW50KTsKIAotCQkJc3RhdGUt Pm15ZmlsZSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKHN0YXRlLT5pbnRlclhhY3QpOworCQkJc3RhdGUt Pm15ZmlsZSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKHN0YXRlLT5pbnRlclhhY3QsIGZhbHNlKTsKIAog CQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmZmlsZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZmaWxlLmgKaW5k ZXggNWY2ZDdjOGUzZi4uNDg2YjU1MmUzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZmaWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZmaWxlLmgKQEAgLTMyLDEx ICszMiwyMiBAQAogCiB0eXBlZGVmIHN0cnVjdCBCdWZGaWxlIEJ1ZkZpbGU7CiAKK3R5cGVkZWYg ZW51bQoreworCVRFTVBfTk9ORV9DT01QUkVTU0lPTiwKKyNpZmRlZiBVU0VfTFo0CisJVEVNUF9M WjRfQ09NUFJFU1NJT04KKyNlbmRpZgorfSBUZW1wQ29tcHJlc3Npb247CisKK2V4dGVybiBQR0RM TElNUE9SVCBpbnQgdGVtcF9maWxlX2NvbXByZXNzaW9uOworCisKIC8qCiAgKiBwcm90b3R5cGVz IGZvciBmdW5jdGlvbnMgaW4gYnVmZmlsZS5jCiAgKi8KIAotZXh0ZXJuIEJ1ZkZpbGUgKkJ1ZkZp bGVDcmVhdGVUZW1wKGJvb2wgaW50ZXJYYWN0KTsKK2V4dGVybiBCdWZGaWxlICpCdWZGaWxlQ3Jl YXRlVGVtcChib29sIGludGVyWGFjdCwgYm9vbCBjb21wcmVzcyk7CiBleHRlcm4gdm9pZCBCdWZG aWxlQ2xvc2UoQnVmRmlsZSAqZmlsZSk7CiBleHRlcm4gcGdfbm9kaXNjYXJkIHNpemVfdCBCdWZG aWxlUmVhZChCdWZGaWxlICpmaWxlLCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKIGV4dGVybiB2 b2lkIEJ1ZkZpbGVSZWFkRXhhY3QoQnVmRmlsZSAqZmlsZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL0dOVW1ha2VmaWxlIGIvc3JjL3Rlc3Qv cmVncmVzcy9HTlVtYWtlZmlsZQppbmRleCA5MDAzNDM1YWFiLi44NTllYjc5YmQ3IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL0dOVW1ha2VmaWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv R05VbWFrZWZpbGUKQEAgLTExNCw2ICsxMTQsMTAgQEAgc3VibWFrZS1jb250cmliLXNwaTogfCBz dWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWdlbmVyYXRlZC1oZWFkZXJzCiBSRUdSRVNTX09QVFMg PSAtLWRscGF0aD0uIC0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgXAogCSQoRVhUUkFfUkVHUkVT U19PUFRTKQogCitpZmVxICgkKHdpdGhfbHo0KSx5ZXMpCitvdmVycmlkZSBFWFRSQV9URVNUUyA6 PSBqb2luX2hhc2hfbHo0ICQoRVhUUkFfVEVTVFMpCitlbmRpZgorCiBjaGVjazogYWxsCiAJJChw Z19yZWdyZXNzX2NoZWNrKSAkKFJFR1JFU1NfT1BUUykgLS1zY2hlZHVsZT0kKHNyY2RpcikvcGFy YWxsZWxfc2NoZWR1bGUgJChNQVhDT05OT1BUKSAkKEVYVFJBX1RFU1RTKQogCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaF9sejQub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2hfbHo0Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45NjZhNWNkOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2hfbHo0Lm91dApAQCAtMCwwICsxLDExNjYgQEAKKy0t CistLSBleGVyY2lzZXMgZm9yIHRoZSBoYXNoIGpvaW4gY29kZQorLS0KK2JlZ2luOworc2V0IGxv Y2FsIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IGxvY2FsIHBhcmFsbGVs X3NldHVwX2Nvc3QgPSAwOworc2V0IGxvY2FsIGVuYWJsZV9oYXNoam9pbiA9IG9uOworc2V0IGxv Y2FsIHRlbXBfZmlsZV9jb21wcmVzc2lvbiA9ICdsejQnOworLS0gRXh0cmFjdCBidWNrZXQgYW5k IGJhdGNoIGNvdW50cyBmcm9tIGFuIGV4cGxhaW4gYW5hbHl6ZSBwbGFuLiAgSW4KKy0tIGdlbmVy YWwgd2UgY2FuJ3QgbWFrZSBhc3NlcnRpb25zIGFib3V0IGhvdyBtYW55IGJhdGNoZXMgKG9yCist LSBidWNrZXRzKSB3aWxsIGJlIHJlcXVpcmVkIGJlY2F1c2UgaXQgY2FuIHZhcnksIGJ1dCB3ZSBj YW4gaW4gc29tZQorLS0gc3BlY2lhbCBjYXNlcyBhbmQgd2UgY2FuIGNoZWNrIGZvciBncm93dGgu CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBmaW5kX2hhc2gobm9kZSBqc29uKQorcmV0dXJu cyBqc29uIGxhbmd1YWdlIHBscGdzcWwKK2FzCiskJAorZGVjbGFyZQorICB4IGpzb247CisgIGNo aWxkIGpzb247CitiZWdpbgorICBpZiBub2RlLT4+J05vZGUgVHlwZScgPSAnSGFzaCcgdGhlbgor ICAgIHJldHVybiBub2RlOworICBlbHNlCisgICAgZm9yIGNoaWxkIGluIHNlbGVjdCBqc29uX2Fy cmF5X2VsZW1lbnRzKG5vZGUtPidQbGFucycpCisgICAgbG9vcAorICAgICAgeCA6PSBmaW5kX2hh c2goY2hpbGQpOworICAgICAgaWYgeCBpcyBub3QgbnVsbCB0aGVuCisgICAgICAgIHJldHVybiB4 OworICAgICAgZW5kIGlmOworICAgIGVuZCBsb29wOworICAgIHJldHVybiBudWxsOworICBlbmQg aWY7CitlbmQ7CiskJDsKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGhhc2hfam9pbl9iYXRj aGVzKHF1ZXJ5IHRleHQpCityZXR1cm5zIHRhYmxlIChvcmlnaW5hbCBpbnQsIGZpbmFsIGludCkg bGFuZ3VhZ2UgcGxwZ3NxbAorYXMKKyQkCitkZWNsYXJlCisgIHdob2xlX3BsYW4ganNvbjsKKyAg aGFzaF9ub2RlIGpzb247CitiZWdpbgorICBmb3Igd2hvbGVfcGxhbiBpbgorICAgIGV4ZWN1dGUg J2V4cGxhaW4gKGFuYWx5emUsIGZvcm1hdCAnJ2pzb24nJykgJyB8fCBxdWVyeQorICBsb29wCisg ICAgaGFzaF9ub2RlIDo9IGZpbmRfaGFzaChqc29uX2V4dHJhY3RfcGF0aCh3aG9sZV9wbGFuLCAn MCcsICdQbGFuJykpOworICAgIG9yaWdpbmFsIDo9IGhhc2hfbm9kZS0+PidPcmlnaW5hbCBIYXNo IEJhdGNoZXMnOworICAgIGZpbmFsIDo9IGhhc2hfbm9kZS0+PidIYXNoIEJhdGNoZXMnOworICAg IHJldHVybiBuZXh0OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworLS0gTWFrZSBhIHNpbXBsZSBy ZWxhdGlvbiB3aXRoIHdlbGwgZGlzdHJpYnV0ZWQga2V5cyBhbmQgY29ycmVjdGx5CistLSBlc3Rp bWF0ZWQgc2l6ZS4KK2NyZWF0ZSB0YWJsZSBzaW1wbGUgYXMKKyAgc2VsZWN0IGdlbmVyYXRlX3Nl cmllcygxLCAyMDAwMCkgQVMgaWQsICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh JzsKK2FsdGVyIHRhYmxlIHNpbXBsZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5 emUgc2ltcGxlOworLS0gTWFrZSBhIHJlbGF0aW9uIHdob3NlIHNpemUgd2Ugd2lsbCB1bmRlci1l c3RpbWF0ZS4gIFdlIHdhbnQgc3RhdHMKKy0tIHRvIHNheSAxMDAwIHJvd3MsIGJ1dCBhY3R1YWxs eSB0aGVyZSBhcmUgMjAsMDAwIHJvd3MuCitjcmVhdGUgdGFibGUgYmlnZ2VyX3RoYW5faXRfbG9v a3MgYXMKKyAgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgYXMgaWQsICdhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJzsKK2FsdGVyIHRhYmxlIGJpZ2dlcl90aGFuX2l0 X2xvb2tzIHNldCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CithbHRlciB0YWJsZSBi aWdnZXJfdGhhbl9pdF9sb29rcyBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5emUg YmlnZ2VyX3RoYW5faXRfbG9va3M7Cit1cGRhdGUgcGdfY2xhc3Mgc2V0IHJlbHR1cGxlcyA9IDEw MDAgd2hlcmUgcmVsbmFtZSA9ICdiaWdnZXJfdGhhbl9pdF9sb29rcyc7CistLSBNYWtlIGEgcmVs YXRpb24gd2hvc2Ugc2l6ZSB3ZSB1bmRlcmVzdGltYXRlIGFuZCB0aGF0IGFsc28gaGFzIGEKKy0t IGtpbmQgb2Ygc2tldyB0aGF0IGJyZWFrcyBvdXIgYmF0Y2hpbmcgc2NoZW1lLiAgV2Ugd2FudCBz dGF0cyB0byBzYXkKKy0tIDIgcm93cywgYnV0IGFjdHVhbGx5IHRoZXJlIGFyZSAyMCwwMDAgcm93 cyB3aXRoIHRoZSBzYW1lIGtleS4KK2NyZWF0ZSB0YWJsZSBleHRyZW1lbHlfc2tld2VkIChpZCBp bnQsIHQgdGV4dCk7CithbHRlciB0YWJsZSBleHRyZW1lbHlfc2tld2VkIHNldCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gJ2ZhbHNlJyk7CithbHRlciB0YWJsZSBleHRyZW1lbHlfc2tld2VkIHNldCAo cGFyYWxsZWxfd29ya2VycyA9IDIpOworYW5hbHl6ZSBleHRyZW1lbHlfc2tld2VkOworaW5zZXJ0 IGludG8gZXh0cmVtZWx5X3NrZXdlZAorICBzZWxlY3QgNDIgYXMgaWQsICdhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhJworICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCk7 Cit1cGRhdGUgcGdfY2xhc3MKKyAgc2V0IHJlbHR1cGxlcyA9IDIsIHJlbHBhZ2VzID0gcGdfcmVs YXRpb25fc2l6ZSgnZXh0cmVtZWx5X3NrZXdlZCcpIC8gODE5MgorICB3aGVyZSByZWxuYW1lID0g J2V4dHJlbWVseV9za2V3ZWQnOworLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2Yg ZW5vcm1vdXMgdHVwbGVzLgorY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3Nl cmllcygxLCAyKSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CithbHRlciB0YWJs ZSB3aWRlIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworLS0gVGhlICJvcHRpbWFsIiBjYXNl OiB0aGUgaGFzaCB0YWJsZSBmaXRzIGluIG1lbW9yeTsgd2UgcGxhbiBmb3IgMQorLS0gYmF0Y2gs IHdlIHN0aWNrIHRvIHRoYXQgbnVtYmVyLCBhbmQgcGVhayBtZW1vcnkgdXNhZ2Ugc3RheXMgd2l0 aGluCistLSBvdXIgd29ya19tZW0gYnVkZ2V0CistLSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBz ZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsK K3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxp ZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNp bXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHIu aWQgPSBzLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSBzCisoNiByb3dz KQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChp ZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygxIHJvdykKKworc2VsZWN0IG9yaWdpbmFs ID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFz ZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50 KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworIGluaXRp YWxseV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2JhdGNoZXMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmICAgICAgICAgICAgICAgICAgICB8IGYKKygxIHJv dykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9i bGl2aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUIn Oworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxl X3BhcmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBB Z2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAg ICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRlCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBzaW1wbGUgcworKDkgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxl IHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCiso MSByb3cpCisKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZp bmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0 Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMg dXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVsdGliYXRjaCB8IGluY3JlYXNlZF9iYXRj aGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgZiAgICAg ICAgICAgICAgICAgICAgfCBmCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0g cGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5n czsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBs b2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAx LjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3Rz IG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2lu ZyAoaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEFnZ3JlZ2F0ZQorICAgLT4gIEdhdGhlcgor ICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAtPiAgUGFydGlhbCBBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHIuaWQgPSBzLmlkKQorICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNl cSBTY2FuIG9uIHNpbXBsZSBzCisoOSByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAK KygxIHJvdykKKworc2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwg ZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9i YXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUg cyB1c2luZyAoaWQpOworJCQpOworIGluaXRpYWxseV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2Jh dGNoZXMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmICAg ICAgICAgICAgICAgICAgICB8IGYKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7Cist LSBUaGUgImdvb2QiIGNhc2U6IGJhdGNoZXMgcmVxdWlyZWQsIGJ1dCB3ZSBwbGFuIHRoZSByaWdo dCBudW1iZXI7IHdlCistLSBwbGFuIGZvciBzb21lIG51bWJlciBvZiBiYXRjaGVzLCBhbmQgd2Ug c3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZAorLS0gcGVhayBtZW1vcnkgdXNhZ2Ugc2F5cyB3aXRo aW4gb3VyIHdvcmtfbWVtIGJ1ZGdldAorLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGlu Z3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQg bG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIg PSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBs ZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHIuaWQg PSBzLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSBzCisoNiByb3dzKQor CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7 CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygxIHJvdykKKworc2VsZWN0IG9yaWdpbmFsID4g MSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRf YmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworIGluaXRpYWxs eV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2JhdGNoZXMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgICAgICAgICB8IGYKKygxIHJvdykK Kworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2 aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7 CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVf cGFyYWxsZWxfaGFzaCA9IG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50 KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEFn Z3JlZ2F0ZQorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAg ICAgICAtPiAgUGFydGlhbCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHIuaWQgPSBzLmlkKQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHNpbXBsZSBzCisoOSByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygx IHJvdykKKworc2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmlu YWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRj aGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1 c2luZyAoaWQpOworJCQpOworIGluaXRpYWxseV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2JhdGNo ZXMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgICAgICAgICAgICB8IGYKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBw YXJhbGxlbCB3aXRoIHBhcmFsbGVsLWF3YXJlIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdz Oworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGxv Y2FsIHdvcmtfbWVtID0gJzE5MmtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0g MS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0 cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNp bmcgKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIK KyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwgQWdncmVn YXRlCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiBzaW1wbGUgcworKDkgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gc2lt cGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAw CisoMSByb3cpCisKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gs IGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5f YmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxl IHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVsdGliYXRjaCB8IGluY3JlYXNlZF9i YXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICAgICAgICAgICAgfCBmCisoMSByb3cpCisKKy0tIHBhcmFsbGVsIGZ1bGwgbXVsdGkt YmF0Y2ggaGFzaCBqb2luCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVy IGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAwMAorKDEg cm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIFRoZSAiYmFkIiBjYXNlOiBkdXJpbmcg ZXhlY3V0aW9uIHdlIG5lZWQgdG8gaW5jcmVhc2UgbnVtYmVyIG9mCistLSBiYXRjaGVzOyBpbiB0 aGlzIGNhc2Ugd2UgcGxhbiBmb3IgMSBiYXRjaCwgYW5kIGluY3JlYXNlIGF0IGxlYXN0IGEKKy0t IGNvdXBsZSBvZiB0aW1lcywgYW5kIHBlYWsgbWVtb3J5IHVzYWdlIHN0YXlzIHdpdGhpbiBvdXIg d29ya19tZW0KKy0tIGJ1ZGdldAorLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7 CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9j YWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAx LjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBGUk9NIHNpbXBsZSBy IEpPSU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBVU0lORyAoaWQpOworICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHIuaWQgPSBzLmlkKQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMKKyg2IHJvd3MpCisKK3Nl bGVjdCBjb3VudCgqKSBGUk9NIHNpbXBsZSByIEpPSU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBV U0lORyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBv cmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMg aW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVj dCBjb3VudCgqKSBGUk9NIHNpbXBsZSByIEpPSU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBVU0lO RyAoaWQpOworJCQpOworIGluaXRpYWxseV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2JhdGNoZXMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmICAgICAgICAg ICAgICAgICAgICB8IHQKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJh bGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5n czsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBs b2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9 IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK2V4cGxhaW4gKGNv c3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhh bl9pdF9sb29rcyBzIHVzaW5nIChpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXpl IEFnZ3JlZ2F0ZQorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisg ICAgICAgICAtPiAgUGFydGlhbCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHIuaWQgPSBzLmlkKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHNpbXBsZSByCisgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMKKyg5IHJvd3MpCisKK3NlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQp OworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBvcmlnaW5hbCA+ IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2Vk X2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQpOwor JCQpOworIGluaXRpYWxseV9tdWx0aWJhdGNoIHwgaW5jcmVhc2VkX2JhdGNoZXMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmICAgICAgICAgICAgICAgICAg ICB8IHQKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJhbGxlbCB3aXRo IHBhcmFsbGVsLWF3YXJlIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2Fs IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworc2V0IGxvY2FsIHdvcmtfbWVt ID0gJzE5MmtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxv Y2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1 c2luZyAoaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5h bGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRlCisgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0g cy5pZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1w bGUgcgorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBiaWdnZXJfdGhhbl9pdF9s b29rcyBzCisoOSByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJp Z2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAw MAorKDEgcm93KQorCitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNo LCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJpZ2dl cl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVsdGliYXRj aCB8IGluY3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tCisgZiAgICAgICAgICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworLS0gVGhlICJ1Z2x5IiBjYXNlOiBpbmNyZWFzaW5nIHRoZSBudW1iZXIg b2YgYmF0Y2hlcyBkdXJpbmcgZXhlY3V0aW9uCistLSBkb2Vzbid0IGhlbHAsIHNvIHN0b3AgdHJ5 aW5nIHRvIGZpdCBpbiB3b3JrX21lbSBhbmQgaG9wZSBmb3IgdGhlCistLSBiZXN0OyBpbiB0aGlz IGNhc2Ugd2UgcGxhbiBmb3IgMSBiYXRjaCwgaW5jcmVhc2VzIGp1c3Qgb25jZSBhbmQKKy0tIHRo ZW4gc3RvcCBpbmNyZWFzaW5nIGJlY2F1c2UgdGhhdCBkaWRuJ3QgaGVscCBhdCBhbGwsIHNvIHdl IGJsb3cKKy0tIHJpZ2h0IHRocm91Z2ggdGhlIHdvcmtfbWVtIGJ1ZGdldCBhbmQgaG9wZSBmb3Ig dGhlIGJlc3QuLi4KKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxv Y2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtf bWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhw bGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4 dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1w bGUgcgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBl eHRyZW1lbHlfc2tld2VkIHMKKyg2IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBs ZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0t CisgMjAwMDAKKygxIHJvdykKKworc2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQk CisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBz IHVzaW5nIChpZCk7CiskJCk7Cisgb3JpZ2luYWwgfCBmaW5hbCAKKy0tLS0tLS0tLS0rLS0tLS0t LQorICAgICAgICAxIHwgICAgIDIKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7Cist LSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBz ZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsK K3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlw bGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK2V4cGxh aW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRy ZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEdhdGhlcgor ICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBleHRyZW1lbHlfc2tld2VkIHMKKyg4 IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3Nr ZXdlZCBzIHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygxIHJvdykKKwor c2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CiskJCk7Cisg b3JpZ2luYWwgfCBmaW5hbCAKKy0tLS0tLS0tLS0rLS0tLS0tLQorICAgICAgICAxIHwgICAgIDIK KygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJhbGxlbCB3aXRoIHBhcmFs bGVsLWF3YXJlIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEy OGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVu YWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAg IFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAoci5pZCA9IHMuaWQpCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxlIHIKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZXh0 cmVtZWx5X3NrZXdlZCBzCisoOCByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQor IDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAor ICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1 c2luZyAoaWQpOworJCQpOworIG9yaWdpbmFsIHwgZmluYWwgCistLS0tLS0tLS0tKy0tLS0tLS0K KyAgICAgICAgMSB8ICAgICA0CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0g QSBjb3VwbGUgb2Ygb3RoZXIgaGFzaCBqb2luIHRlc3RzIHVucmVsYXRlZCB0byB3b3JrX21lbSBt YW5hZ2VtZW50LgorLS0gQ2hlY2sgdGhhdCBFWFBMQUlOIEFOQUxZWkUgaGFzIGRhdGEgZXZlbiBp ZiB0aGUgbGVhZGVyIGRvZXNuJ3QgcGFydGljaXBhdGUKK3NhdmVwb2ludCBzZXR0aW5nczsKK3Nl dCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3 b3JrX21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7Citz ZXQgbG9jYWwgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZWxlY3QgKiBm cm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxl IHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworIG9yaWdpbmFsIHwgZmluYWwgCist LS0tLS0tLS0tKy0tLS0tLS0KKyAgICAgICAgMSB8ICAgICAxCisoMSByb3cpCisKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworLS0gRXhlcmNpc2UgcmVzY2Fucy4gIFdlJ2xsIHR1cm4gb2ZmIHBhcmFs bGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uIHNvCistLSB0aGF0IHdlIGNhbiBjaGVjayB0aGF0IGlu c3RydW1lbnRhdGlvbiBjb21lcyBiYWNrIGNvcnJlY3RseS4KK2NyZWF0ZSB0YWJsZSBqb2luX2Zv byBhcyBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGFzIGlkLCAneHh4eHgnOjp0ZXh0IGFz IHQ7CithbHRlciB0YWJsZSBqb2luX2ZvbyBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKK2Ny ZWF0ZSB0YWJsZSBqb2luX2JhciBhcyBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSBh cyBpZCwgJ3h4eHh4Jzo6dGV4dCBhcyB0OworYWx0ZXIgdGFibGUgam9pbl9iYXIgc2V0IChwYXJh bGxlbF93b3JrZXJzID0gMik7CistLSBtdWx0aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwt b2JsaXZpb3VzCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2gg PSBvZmY7CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWlu X3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9 IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJs ZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNjRrQic7CitzZXQgaGFzaF9tZW1f bXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpv aW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zv by5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0 ZQorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6ICgo am9pbl9mb28uaWQgPCAoYjEuaWQgKyAxKSkgQU5EIChqb2luX2Zvby5pZCA+IChiMS5pZCAtIDEp KSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZvbworICAgICAgICAgLT4gIEdhdGhl cgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiMS5pZCA9IGIyLmlk KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGpvaW5fYmFy IGIxCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fYmFyIGIyCisoMTEgcm93cykKKworc2VsZWN0IGNv dW50KCopIGZyb20gam9pbl9mb28KKyAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJv bSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgIG9uIGpvaW5f Zm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAgMworKDEgcm93KQorCitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0 Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9t IGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2Jh ciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQg PCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworIG11bHRpYmF0 Y2ggCistLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOwor LS0gc2luZ2xlLWJhdGNoIHdpdGggcmVzY2FuLCBwYXJhbGxlbC1vYmxpdmlvdXMKK3NhdmVwb2lu dCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK3NldCBwYXJhbGxl bF9sZWFkZXJfcGFydGljaXBhdGlvbiA9IG9mZjsKK3NldCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nh bl9zaXplID0gMDsKK3NldCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK3NldCBwYXJhbGxlbF90 dXBsZV9jb3N0ID0gMDsKK3NldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsK K3NldCBlbmFibGVfbWF0ZXJpYWwgPSBvZmY7CitzZXQgZW5hYmxlX21lcmdlam9pbiA9IG9mZjsK K3NldCB3b3JrX21lbSA9ICc0TUInOworc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7Citl eHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAg bGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5f YmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5k IGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0ZWQgTG9v cCBMZWZ0IEpvaW4KKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoKGpvaW5fZm9vLmlkIDwgKGIxLmlk ICsgMSkpIEFORCAoam9pbl9mb28uaWQgPiAoYjEuaWQgLSAxKSkpCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mb28KKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAoYjEuaWQgPSBiMi5pZCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBqb2luX2JhciBiMQorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb2luX2JhciBiMgorKDExIHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9v CisgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBq b2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBh bmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CisgY291bnQgCistLS0tLS0tCisgICAgIDMKKygx IHJvdykKKworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQg am9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBi MiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2lu X2Zvby5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKKyBtdWx0aWJhdGNoIAorLS0tLS0tLS0tLS0tCisg ZgorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIG11bHRpLWJhdGNoIHdpdGgg cmVzY2FuLCBwYXJhbGxlbC1hd2FyZQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9w YXJhbGxlbF9oYXNoID0gb247CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBv ZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxf c2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2Zm Oworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNjRrQic7Citz ZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2Vs ZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwg YjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAg ICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9p biBGaWx0ZXI6ICgoam9pbl9mb28uaWQgPCAoYjEuaWQgKyAxKSkgQU5EIChqb2luX2Zvby5pZCA+ IChiMS5pZCAtIDEpKSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZvbworICAgICAg ICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6IChiMS5pZCA9IGIyLmlkKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIGpvaW5fYmFyIGIxCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGpvaW5fYmFyIGIyCisoMTEgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9m b28KKyAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2lu IGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAx IGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMwor KDEgcm93KQorCitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pv aW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVm dCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFy IGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpv aW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworIG11bHRpYmF0Y2ggCistLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gc2luZ2xlLWJhdGNoIHdp dGggcmVzY2FuLCBwYXJhbGxlbC1hd2FyZQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJs ZV9wYXJhbGxlbF9oYXNoID0gb247CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24g PSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxs ZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0g b2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNE1CJzsK K3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBz ZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlk LCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcwor ICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICBK b2luIEZpbHRlcjogKChqb2luX2Zvby5pZCA8IChiMS5pZCArIDEpKSBBTkQgKGpvaW5fZm9vLmlk ID4gKGIxLmlkIC0gMSkpKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZm9vCisgICAg ICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKKyAgICAg ICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKGIxLmlkID0gYjIuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gam9pbl9iYXIgYjEKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gam9pbl9iYXIgYjIKKygxMSByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBqb2lu X2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpv aW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCAr IDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworIGNvdW50IAorLS0tLS0tLQorICAgICAz CisoMSByb3cpCisKK3NlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hf am9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBs ZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9i YXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQg am9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CiskJCk7CisgbXVsdGliYXRjaCAKKy0tLS0tLS0tLS0t LQorIGYKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBBIGZ1bGwgb3V0ZXIg am9pbiB3aGVyZSBldmVyeSByZWNvcmQgaXMgbWF0Y2hlZC4KKy0tIG5vbi1wYXJhbGxlbAorc2F2 ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAwOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20g c2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgSGFzaCBGdWxsIEpvaW4KKyAgICAg ICAgIEhhc2ggQ29uZDogKHIuaWQgPSBzLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNp bXBsZSByCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHNpbXBsZSBzCisoNiByb3dzKQorCitzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVs bCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAw MDAKKygxIHJvdykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBwYXJhbGxlbGlzbSBub3Qg cG9zc2libGUgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgZnVsbCBoYXNoIGpvaW4KK3NhdmVwb2lu dCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK3NldCBsb2NhbCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikK KyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1w bGUgcyB1c2luZyAoaWQpOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQor ICAgLT4gIEhhc2ggRnVsbCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDYgcm93cykKKworc2VsZWN0 ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAo aWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworLS0gcGFyYWxsZWxpc20gaXMgcG9zc2libGUgd2l0aCBwYXJhbGxlbC1hd2FyZSBm dWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxl Y3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5n IChpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAgR2F0aGVyCisg ICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggRnVsbCBKb2luCisgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDkgcm93cykKKworc2VsZWN0ICBjb3VudCgqKSBmcm9t IHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworIGNvdW50IAor LS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gQSBm dWxsIG91dGVyIGpvaW4gd2hlcmUgZXZlcnkgcmVjb3JkIGlzIG5vdCBtYXRjaGVkLgorLS0gbm9u LXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAg Y291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQg PSAwIC0gcy5pZCk7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAt PiAgSGFzaCBGdWxsIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKCgwIC0gcy5pZCkgPSByLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSBzCisgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSByCisoNiByb3dzKQorCitzZWxl Y3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChy LmlkID0gMCAtIHMuaWQpOworIGNvdW50IAorLS0tLS0tLQorIDQwMDAwCisoMSByb3cpCisKK3Jv bGxiYWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWxpc20gbm90IHBvc3NpYmxlIHdpdGggcGFy YWxsZWwtb2JsaXZpb3VzIGZ1bGwgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQg ZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAgY291 bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAw IC0gcy5pZCk7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAg SGFzaCBGdWxsIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKCgwIC0gcy5pZCkgPSByLmlkKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSBzCisgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNpbXBsZSByCisoNiByb3dzKQorCitzZWxlY3Qg IGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlk ID0gMCAtIHMuaWQpOworIGNvdW50IAorLS0tLS0tLQorIDQwMDAwCisoMSByb3cpCisKK3JvbGxi YWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWxpc20gaXMgcG9zc2libGUgd2l0aCBwYXJhbGxl bC1hd2FyZSBmdWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBs ZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEFnZ3JlZ2F0 ZQorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAt PiAgUGFydGlhbCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEZ1 bGwgSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoKDAgLSBzLmlkKSA9IHIu aWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxl IHMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxlIHIKKyg5IHJvd3Mp CisKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxl IHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7CisgY291bnQgCistLS0tLS0tCisgNDAwMDAKKygxIHJv dykKKworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CistLSBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0 aHMgZm9yIGh1Z2UgdHVwbGVzIChub3RlIHVzZSBvZiBub24tc3RyaWN0CistLSBleHByZXNzaW9u IGFuZCBsZWZ0IGpvaW4gcmVxdWlyZWQgdG8gZ2V0IHRoZSBkZXRvYXN0ZWQgdHVwbGUgaW50bwor LS0gdGhlIGhhc2ggdGFibGUpCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLWF3YXJlIGhhc2gg am9pbiAoaGl0cyBFeGVjUGFyYWxsZWxIYXNoTG9hZFR1cGxlIGFuZAorLS0gc3RzX3B1dHR1cGxl IG92ZXJzaXplZCB0dXBsZSBjYXNlcyBiZWNhdXNlIGl0J3MgbXVsdGktYmF0Y2gpCitzYXZlcG9p bnQgc2V0dGluZ3M7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7Citz ZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK3NldCB3b3JrX21lbSA9ICcxMjhrQic7Citz ZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2Vs ZWN0IGxlbmd0aChtYXgocy50KSkKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBj b2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAg IFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRlCisgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHdpZGUuaWQgPSB3aWRlXzEuaWQpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZQorICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiB3aWRlIHdpZGVfMQorKDkgcm93cykKKworc2VsZWN0IGxlbmd0aChtYXgocy50 KSkKK2Zyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcn IGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgbGVuZ3RoIAorLS0tLS0tLS0KKyAzMjAw MDAKKygxIHJvdykKKworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFz aF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgbGVuZ3RoKG1heChzLnQpKQorICBmcm9tIHdp ZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20g d2lkZSkgcyB1c2luZyAoaWQpOworJCQpOworIG11bHRpYmF0Y2ggCistLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gSGFzaCBqb2luIHJldXNlcyB0 aGUgSE9UIHN0YXR1cyBiaXQgdG8gaW5kaWNhdGUgbWF0Y2ggc3RhdHVzLiBUaGlzIGNhbiBvbmx5 CistLSBiZSBndWFyYW50ZWVkIHRvIHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGlmIGFsbCB0aGUg aGFzaCBqb2luIHR1cGxlIG1hdGNoCistLSBiaXRzIGFyZSByZXNldCBiZWZvcmUgcmV1c2UuIFRo aXMgaXMgZG9uZSB1cG9uIGxvYWRpbmcgdGhlbSBpbnRvIHRoZQorLS0gaGFzaHRhYmxlLgorU0FW RVBPSU5UIHNldHRpbmdzOworU0VUIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitTRVQgbWlu X3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9 IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgaGp0ZXN0X21h dGNoYml0c190MShpZCBpbnQpOworQ1JFQVRFIFRBQkxFIGhqdGVzdF9tYXRjaGJpdHNfdDIoaWQg aW50KTsKK0lOU0VSVCBJTlRPIGhqdGVzdF9tYXRjaGJpdHNfdDEgVkFMVUVTICgxKTsKK0lOU0VS VCBJTlRPIGhqdGVzdF9tYXRjaGJpdHNfdDIgVkFMVUVTICgyKTsKKy0tIFVwZGF0ZSBzaG91bGQg Y3JlYXRlIGEgSE9UIHR1cGxlLiBJZiB0aGlzIHN0YXR1cyBiaXQgaXNuJ3QgY2xlYXJlZCwgd2Ug d29uJ3QKKy0tIGNvcnJlY3RseSBlbWl0IHRoZSBOVUxMLWV4dGVuZGVkIHVubWF0Y2hpbmcgdHVw bGUgaW4gZnVsbCBoYXNoIGpvaW4uCitVUERBVEUgaGp0ZXN0X21hdGNoYml0c190MiBzZXQgaWQg PSAyOworU0VMRUNUICogRlJPTSBoanRlc3RfbWF0Y2hiaXRzX3QxIHQxIEZVTEwgSk9JTiBoanRl c3RfbWF0Y2hiaXRzX3QyIHQyIE9OIHQxLmlkID0gdDIuaWQKKyAgT1JERVIgQlkgdDEuaWQ7Cisg aWQgfCBpZCAKKy0tLS0rLS0tLQorICAxIHwgICAKKyAgICB8ICAyCisoMiByb3dzKQorCistLSBU ZXN0IHNlcmlhbCBmdWxsIGhhc2ggam9pbi4KKy0tIFJlc2V0dGluZyBwYXJhbGxlbF9zZXR1cF9j b3N0IHNob3VsZCBmb3JjZSBhIHNlcmlhbCBwbGFuLgorLS0gSnVzdCB0byBiZSBzYWZlLCBob3dl dmVyLCBzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggdG8gb2ZmLCBhcyBwYXJhbGxlbCBmdWxsCist LSBoYXNoIGpvaW5zIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIHNoYXJlZCBoYXNodGFibGVzLgor UkVTRVQgcGFyYWxsZWxfc2V0dXBfY29zdDsKK1NFVCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9m ZjsKK1NFTEVDVCAqIEZST00gaGp0ZXN0X21hdGNoYml0c190MSB0MSBGVUxMIEpPSU4gaGp0ZXN0 X21hdGNoYml0c190MiB0MiBPTiB0MS5pZCA9IHQyLmlkOworIGlkIHwgaWQgCistLS0tKy0tLS0K KyAgMSB8ICAgCisgICAgfCAgMgorKDIgcm93cykKKworUk9MTEJBQ0sgVE8gc2V0dGluZ3M7City b2xsYmFjazsKKy0tIFZlcmlmeSB0aGF0IGhhc2gga2V5IGV4cHJlc3Npb25zIHJlZmVyZW5jZSB0 aGUgY29ycmVjdAorLS0gbm9kZXMuIEhhc2hqb2luJ3MgaGFzaGtleXMgbmVlZCB0byByZWZlcmVu Y2UgaXRzIG91dGVyIHBsYW4sIEhhc2gncworLS0gbmVlZCB0byByZWZlcmVuY2UgSGFzaCdzIG91 dGVyIHBsYW4gKHdoaWNoIGlzIGJlbG93IEhhc2hKb2luJ3MKKy0tIGlubmVyIHBsYW4pLiBJdCdz IG5vdCB0cml2aWFsIHRvIHZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2VzIGFyZQorLS0gY29ycmVj dCAod2UgZG9uJ3QgZGlzcGxheSB0aGUgaGFzaGtleXMgdGhlbXNlbHZlcyksIGJ1dCBpZiB0aGUK Ky0tIGhhc2hrZXlzIGNvbnRhaW4gc3VicGxhbiByZWZlcmVuY2VzLCB0aG9zZSB3aWxsIGJlIGRp c3BsYXllZC4gRm9yY2UKKy0tIHN1YnBsYW5zIHRvIGFwcGVhciBqdXN0IGFib3V0IGV2ZXJ5d2hl cmUuCistLQorLS0gQnVnIHJlcG9ydDoKKy0tIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvQ0FQcEhmZHZHVmVnRl9US0tSaUJyU21hdEpMMmRSOXV3RkN1UiUyQnRlUV84dEVY VThteGclNDBtYWlsLmdtYWlsLmNvbQorLS0KK0JFR0lOOworU0VUIExPQ0FMIGVuYWJsZV9zb3J0 ID0gT0ZGOyAtLSBhdm9pZCBtZXJnZWpvaW5zCitTRVQgTE9DQUwgZnJvbV9jb2xsYXBzZV9saW1p dCA9IDE7IC0tIGFsbG93cyBlYXN5IGNoYW5naW5nIG9mIGpvaW4gb3JkZXIKK0NSRUFURSBUQUJM RSBoanRlc3RfMSAoYSB0ZXh0LCBiIGludCwgaWQgaW50LCBjIGJvb2wpOworQ1JFQVRFIFRBQkxF IGhqdGVzdF8yIChhIGJvb2wsIGlkIGludCwgYiB0ZXh0LCBjIGludCk7CitJTlNFUlQgSU5UTyBo anRlc3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDIsIDEsIGZhbHNlKTsgLS0gbWF0 Y2hlcworSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAx LCAyLCBmYWxzZSk7IC0tIGZhaWxzIGlkIGpvaW4gY29uZGl0aW9uCitJTlNFUlQgSU5UTyBoanRl c3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDIwLCAxLCBmYWxzZSk7IC0tIGZhaWxz IDwgNTAKK0lOU0VSVCBJTlRPIGhqdGVzdF8xKGEsIGIsIGlkLCBjKSBWQUxVRVMgKCd0ZXh0Jywg MSwgMSwgZmFsc2UpOyAtLSBmYWlscyAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA9IChTRUxFQ1Qg aGp0ZXN0XzIuYyo1KQorSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAo dHJ1ZSwgMSwgJ2Fub3RoZXInLCAyKTsgLS0gbWF0Y2hlcworSU5TRVJUIElOVE8gaGp0ZXN0XzIo YSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMywgJ2Fub3RoZXInLCA3KTsgLS0gZmFpbHMgaWQg am9pbiBjb25kaXRpb24KK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMg KHRydWUsIDEsICdhbm90aGVyJywgOTApOyAgLS0gZmFpbHMgPCA1NQorSU5TRVJUIElOVE8gaGp0 ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ2Fub3RoZXInLCAzKTsgLS0gZmFp bHMgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKK0lOU0VS VCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUsIDEsICd0ZXh0JywgMSk7 IC0tICBmYWlscyBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CitFWFBMQUlOIChDT1NUUyBPRkYs IFZFUkJPU0UpCitTRUxFQ1QgaGp0ZXN0XzEuYSBhMSwgaGp0ZXN0XzIuYSBhMixoanRlc3RfMS50 YWJsZW9pZDo6cmVnY2xhc3MgdDEsIGhqdGVzdF8yLnRhYmxlb2lkOjpyZWdjbGFzcyB0MgorRlJP TSBoanRlc3RfMSwgaGp0ZXN0XzIKK1dIRVJFCisgICAgaGp0ZXN0XzEuaWQgPSAoU0VMRUNUIDEg V0hFUkUgaGp0ZXN0XzIuaWQgPSAxKQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA9 IChTRUxFQ1QgaGp0ZXN0XzIuYyo1KQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA8 IDUwCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzIuYyAqIDUpIDwgNTUKKyAgICBBTkQgaGp0ZXN0 XzEuYSA8PiBoanRlc3RfMi5iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4K KyAgIE91dHB1dDogaGp0ZXN0XzEuYSwgaGp0ZXN0XzIuYSwgKGhqdGVzdF8xLnRhYmxlb2lkKTo6 cmVnY2xhc3MsIChoanRlc3RfMi50YWJsZW9pZCk6OnJlZ2NsYXNzCisgICBIYXNoIENvbmQ6ICgo aGp0ZXN0XzEuaWQgPSAoU3ViUGxhbiAxKSkgQU5EICgoU3ViUGxhbiAyKSA9IChTdWJQbGFuIDMp KSkKKyAgIEpvaW4gRmlsdGVyOiAoaGp0ZXN0XzEuYSA8PiBoanRlc3RfMi5iKQorICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5oanRlc3RfMQorICAgICAgICAgT3V0cHV0OiBoanRlc3RfMS5hLCBo anRlc3RfMS50YWJsZW9pZCwgaGp0ZXN0XzEuaWQsIGhqdGVzdF8xLmIKKyAgICAgICAgIEZpbHRl cjogKChTdWJQbGFuIDQpIDwgNTApCisgICAgICAgICBTdWJQbGFuIDQKKyAgICAgICAgICAgLT4g IFJlc3VsdAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IChoanRlc3RfMS5iICogNSkKKyAgIC0+ ICBIYXNoCisgICAgICAgICBPdXRwdXQ6IGhqdGVzdF8yLmEsIGhqdGVzdF8yLnRhYmxlb2lkLCBo anRlc3RfMi5pZCwgaGp0ZXN0XzIuYywgaGp0ZXN0XzIuYgorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5oanRlc3RfMgorICAgICAgICAgICAgICAgT3V0cHV0OiBoanRlc3RfMi5hLCBo anRlc3RfMi50YWJsZW9pZCwgaGp0ZXN0XzIuaWQsIGhqdGVzdF8yLmMsIGhqdGVzdF8yLmIKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKChTdWJQbGFuIDUpIDwgNTUpCisgICAgICAgICAgICAgICBT dWJQbGFuIDUKKyAgICAgICAgICAgICAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IChoanRlc3RfMi5jICogNSkKKyAgICAgICAgIFN1YlBsYW4gMQorICAgICAg ICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgICAgICAgIE91dHB1dDogMQorICAgICAgICAgICAg ICAgICBPbmUtVGltZSBGaWx0ZXI6IChoanRlc3RfMi5pZCA9IDEpCisgICAgICAgICBTdWJQbGFu IDMKKyAgICAgICAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IChoanRl c3RfMi5jICogNSkKKyAgIFN1YlBsYW4gMgorICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgIE91 dHB1dDogKGhqdGVzdF8xLmIgKiA1KQorKDI4IHJvd3MpCisKK1NFTEVDVCBoanRlc3RfMS5hIGEx LCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIu dGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8xLCBoanRlc3RfMgorV0hFUkUKKyAg ICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5E IChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5E IChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5j ICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisgIGExICB8IGEy IHwgICAgdDEgICAgfCAgICB0MiAgICAKKy0tLS0tLSstLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LQorIHRleHQgfCB0ICB8IGhqdGVzdF8xIHwgaGp0ZXN0XzIKKygxIHJvdykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUIGhqdGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEgYTIs aGp0ZXN0XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQxLCBoanRlc3RfMi50YWJsZW9pZDo6cmVnY2xh c3MgdDIKK0ZST00gaGp0ZXN0XzIsIGhqdGVzdF8xCitXSEVSRQorICAgIGhqdGVzdF8xLmlkID0g KFNFTEVDVCAxIFdIRVJFIGhqdGVzdF8yLmlkID0gMSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3Rf MS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3Rf MS5iICogNSkgPCA1MAorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8yLmMgKiA1KSA8IDU1CisgICAg QU5EIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SGFzaCBKb2luCisgICBPdXRwdXQ6IGhqdGVzdF8xLmEsIGhqdGVzdF8yLmEsIChoanRlc3RfMS50 YWJsZW9pZCk6OnJlZ2NsYXNzLCAoaGp0ZXN0XzIudGFibGVvaWQpOjpyZWdjbGFzcworICAgSGFz aCBDb25kOiAoKChTdWJQbGFuIDEpID0gaGp0ZXN0XzEuaWQpIEFORCAoKFN1YlBsYW4gMykgPSAo U3ViUGxhbiAyKSkpCisgICBKb2luIEZpbHRlcjogKGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYikK KyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuaGp0ZXN0XzIKKyAgICAgICAgIE91dHB1dDogaGp0 ZXN0XzIuYSwgaGp0ZXN0XzIudGFibGVvaWQsIGhqdGVzdF8yLmlkLCBoanRlc3RfMi5jLCBoanRl c3RfMi5iCisgICAgICAgICBGaWx0ZXI6ICgoU3ViUGxhbiA1KSA8IDU1KQorICAgICAgICAgU3Vi UGxhbiA1CisgICAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgICAgICAgT3V0cHV0OiAo aGp0ZXN0XzIuYyAqIDUpCisgICAtPiAgSGFzaAorICAgICAgICAgT3V0cHV0OiBoanRlc3RfMS5h LCBoanRlc3RfMS50YWJsZW9pZCwgaGp0ZXN0XzEuaWQsIGhqdGVzdF8xLmIKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuaGp0ZXN0XzEKKyAgICAgICAgICAgICAgIE91dHB1dDogaGp0 ZXN0XzEuYSwgaGp0ZXN0XzEudGFibGVvaWQsIGhqdGVzdF8xLmlkLCBoanRlc3RfMS5iCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoU3ViUGxhbiA0KSA8IDUwKQorICAgICAgICAgICAgICAgU3Vi UGxhbiA0CisgICAgICAgICAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiAoaGp0ZXN0XzEuYiAqIDUpCisgICAgICAgICBTdWJQbGFuIDIKKyAgICAgICAg ICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IChoanRlc3RfMS5iICogNSkK KyAgIFN1YlBsYW4gMQorICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgIE91dHB1dDogMQorICAg ICAgICAgICBPbmUtVGltZSBGaWx0ZXI6IChoanRlc3RfMi5pZCA9IDEpCisgICBTdWJQbGFuIDMK KyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPdXRwdXQ6IChoanRlc3RfMi5jICogNSkKKygy OCByb3dzKQorCitTRUxFQ1QgaGp0ZXN0XzEuYSBhMSwgaGp0ZXN0XzIuYSBhMixoanRlc3RfMS50 YWJsZW9pZDo6cmVnY2xhc3MgdDEsIGhqdGVzdF8yLnRhYmxlb2lkOjpyZWdjbGFzcyB0MgorRlJP TSBoanRlc3RfMiwgaGp0ZXN0XzEKK1dIRVJFCisgICAgaGp0ZXN0XzEuaWQgPSAoU0VMRUNUIDEg V0hFUkUgaGp0ZXN0XzIuaWQgPSAxKQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA9 IChTRUxFQ1QgaGp0ZXN0XzIuYyo1KQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA8 IDUwCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzIuYyAqIDUpIDwgNTUKKyAgICBBTkQgaGp0ZXN0 XzEuYSA8PiBoanRlc3RfMi5iOworICBhMSAgfCBhMiB8ICAgIHQxICAgIHwgICAgdDIgICAgCist LS0tLS0rLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXh0IHwgdCAgfCBoanRlc3RfMSB8 IGhqdGVzdF8yCisoMSByb3cpCisKK1JPTExCQUNLOworLS0gVmVyaWZ5IHRoYXQgd2UgYmVoYXZl IHNhbmVseSB3aGVuIHRoZSBpbm5lciBoYXNoIGtleXMgY29udGFpbiBwYXJhbWV0ZXJzCistLSAo dGhhdCBpcywgb3V0ZXIgb3IgbGF0ZXJhbCByZWZlcmVuY2VzKS4gIFRoaXMgc2l0dWF0aW9uIGhh cyB0byBkZWZlYXQKKy0tIHJlLXVzZSBvZiB0aGUgaW5uZXIgaGFzaCB0YWJsZSBhY3Jvc3MgcmVz Y2Fucy4KK2JlZ2luOworc2V0IGxvY2FsIGVuYWJsZV9oYXNoam9pbiA9IG9uOworZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0IGk4LnEyLCBzcy4qIGZyb20KK2ludDhfdGJsIGk4LAorbGF0ZXJh bCAoc2VsZWN0IHQxLmZpdmV0aG91cywgaTQuZjEgZnJvbSB0ZW5rMSB0MSBqb2luIGludDRfdGJs IGk0CisgICAgICAgICBvbiB0MS5maXZldGhvdXMgPSBpNC5mMStpOC5xMiBvcmRlciBieSAxLDIp IHNzOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3RibCBp OAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5maXZldGhvdXMsIGk0LmYxCisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5maXZl dGhvdXMgPSAoaTQuZjEgKyBpOC5xMikpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g dGVuazEgdDEKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gaW50NF90YmwgaTQKKyg5IHJvd3MpCisKK3NlbGVjdCBpOC5xMiwgc3Mu KiBmcm9tCitpbnQ4X3RibCBpOCwKK2xhdGVyYWwgKHNlbGVjdCB0MS5maXZldGhvdXMsIGk0LmYx IGZyb20gdGVuazEgdDEgam9pbiBpbnQ0X3RibCBpNAorICAgICAgICAgb24gdDEuZml2ZXRob3Vz ID0gaTQuZjEraTgucTIgb3JkZXIgYnkgMSwyKSBzczsKKyBxMiAgfCBmaXZldGhvdXMgfCBmMSAK Ky0tLS0tKy0tLS0tLS0tLS0tKy0tLS0KKyA0NTYgfCAgICAgICA0NTYgfCAgMAorIDQ1NiB8ICAg ICAgIDQ1NiB8ICAwCisgMTIzIHwgICAgICAgMTIzIHwgIDAKKyAxMjMgfCAgICAgICAxMjMgfCAg MAorKDQgcm93cykKKworcm9sbGJhY2s7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bmJfanNvbnBhdGgub3V0CmluZGV4IGFjZGY3ZTQzNmYuLmIzMWIzMjQ5MGQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0CkBAIC0yNjg3LDcgKzI2ODcs NyBAQCBzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIjEyOjM0OjU2ICs1OjMwIicsICckLnRpbWVf dHooKS5zdHJpbmcoKScpOwogc2VsZWN0IGpzb25iX3BhdGhfcXVlcnlfdHooJyIxMjozNDo1NiIn LCAnJC50aW1lX3R6KCkuc3RyaW5nKCknKTsKICBqc29uYl9wYXRoX3F1ZXJ5X3R6IAogLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0gIjEyOjM0OjU2LTA3OjAwIgorICIxMjozNDo1Ni0wODowMCIKICgx IHJvdykKIAogc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxMjozNDo1NiInLCAnJC50aW1lKCku c3RyaW5nKCknKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaF9s ejQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoX2x6NC5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMWQxOWMxOTgwZQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaF9sejQuc3FsCkBAIC0wLDAgKzEsNjI2 IEBACistLQorLS0gZXhlcmNpc2VzIGZvciB0aGUgaGFzaCBqb2luIGNvZGUKKy0tCisKK2JlZ2lu OworCitzZXQgbG9jYWwgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgbG9j YWwgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgbG9jYWwgZW5hYmxlX2hhc2hqb2luID0g b247CitzZXQgbG9jYWwgdGVtcF9maWxlX2NvbXByZXNzaW9uID0gJ2x6NCc7CisKKy0tIEV4dHJh Y3QgYnVja2V0IGFuZCBiYXRjaCBjb3VudHMgZnJvbSBhbiBleHBsYWluIGFuYWx5emUgcGxhbi4g IEluCistLSBnZW5lcmFsIHdlIGNhbid0IG1ha2UgYXNzZXJ0aW9ucyBhYm91dCBob3cgbWFueSBi YXRjaGVzIChvcgorLS0gYnVja2V0cykgd2lsbCBiZSByZXF1aXJlZCBiZWNhdXNlIGl0IGNhbiB2 YXJ5LCBidXQgd2UgY2FuIGluIHNvbWUKKy0tIHNwZWNpYWwgY2FzZXMgYW5kIHdlIGNhbiBjaGVj ayBmb3IgZ3Jvd3RoLgorY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZmluZF9oYXNoKG5vZGUg anNvbikKK3JldHVybnMganNvbiBsYW5ndWFnZSBwbHBnc3FsCithcworJCQKK2RlY2xhcmUKKyAg eCBqc29uOworICBjaGlsZCBqc29uOworYmVnaW4KKyAgaWYgbm9kZS0+PidOb2RlIFR5cGUnID0g J0hhc2gnIHRoZW4KKyAgICByZXR1cm4gbm9kZTsKKyAgZWxzZQorICAgIGZvciBjaGlsZCBpbiBz ZWxlY3QganNvbl9hcnJheV9lbGVtZW50cyhub2RlLT4nUGxhbnMnKQorICAgIGxvb3AKKyAgICAg IHggOj0gZmluZF9oYXNoKGNoaWxkKTsKKyAgICAgIGlmIHggaXMgbm90IG51bGwgdGhlbgorICAg ICAgICByZXR1cm4geDsKKyAgICAgIGVuZCBpZjsKKyAgICBlbmQgbG9vcDsKKyAgICByZXR1cm4g bnVsbDsKKyAgZW5kIGlmOworZW5kOworJCQ7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBo YXNoX2pvaW5fYmF0Y2hlcyhxdWVyeSB0ZXh0KQorcmV0dXJucyB0YWJsZSAob3JpZ2luYWwgaW50 LCBmaW5hbCBpbnQpIGxhbmd1YWdlIHBscGdzcWwKK2FzCiskJAorZGVjbGFyZQorICB3aG9sZV9w bGFuIGpzb247CisgIGhhc2hfbm9kZSBqc29uOworYmVnaW4KKyAgZm9yIHdob2xlX3BsYW4gaW4K KyAgICBleGVjdXRlICdleHBsYWluIChhbmFseXplLCBmb3JtYXQgJydqc29uJycpICcgfHwgcXVl cnkKKyAgbG9vcAorICAgIGhhc2hfbm9kZSA6PSBmaW5kX2hhc2goanNvbl9leHRyYWN0X3BhdGgo d2hvbGVfcGxhbiwgJzAnLCAnUGxhbicpKTsKKyAgICBvcmlnaW5hbCA6PSBoYXNoX25vZGUtPj4n T3JpZ2luYWwgSGFzaCBCYXRjaGVzJzsKKyAgICBmaW5hbCA6PSBoYXNoX25vZGUtPj4nSGFzaCBC YXRjaGVzJzsKKyAgICByZXR1cm4gbmV4dDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0g TWFrZSBhIHNpbXBsZSByZWxhdGlvbiB3aXRoIHdlbGwgZGlzdHJpYnV0ZWQga2V5cyBhbmQgY29y cmVjdGx5CistLSBlc3RpbWF0ZWQgc2l6ZS4KK2NyZWF0ZSB0YWJsZSBzaW1wbGUgYXMKKyAgc2Vs ZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgQVMgaWQsICdhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhJzsKK2FsdGVyIHRhYmxlIHNpbXBsZSBzZXQgKHBhcmFsbGVsX3dvcmtl cnMgPSAyKTsKK2FuYWx5emUgc2ltcGxlOworCistLSBNYWtlIGEgcmVsYXRpb24gd2hvc2Ugc2l6 ZSB3ZSB3aWxsIHVuZGVyLWVzdGltYXRlLiAgV2Ugd2FudCBzdGF0cworLS0gdG8gc2F5IDEwMDAg cm93cywgYnV0IGFjdHVhbGx5IHRoZXJlIGFyZSAyMCwwMDAgcm93cy4KK2NyZWF0ZSB0YWJsZSBi aWdnZXJfdGhhbl9pdF9sb29rcyBhcworICBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAw KSBhcyBpZCwgJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnOworYWx0ZXIgdGFi bGUgYmlnZ2VyX3RoYW5faXRfbG9va3Mgc2V0IChhdXRvdmFjdXVtX2VuYWJsZWQgPSAnZmFsc2Un KTsKK2FsdGVyIHRhYmxlIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHNldCAocGFyYWxsZWxfd29ya2Vy cyA9IDIpOworYW5hbHl6ZSBiaWdnZXJfdGhhbl9pdF9sb29rczsKK3VwZGF0ZSBwZ19jbGFzcyBz ZXQgcmVsdHVwbGVzID0gMTAwMCB3aGVyZSByZWxuYW1lID0gJ2JpZ2dlcl90aGFuX2l0X2xvb2tz JzsKKworLS0gTWFrZSBhIHJlbGF0aW9uIHdob3NlIHNpemUgd2UgdW5kZXJlc3RpbWF0ZSBhbmQg dGhhdCBhbHNvIGhhcyBhCistLSBraW5kIG9mIHNrZXcgdGhhdCBicmVha3Mgb3VyIGJhdGNoaW5n IHNjaGVtZS4gIFdlIHdhbnQgc3RhdHMgdG8gc2F5CistLSAyIHJvd3MsIGJ1dCBhY3R1YWxseSB0 aGVyZSBhcmUgMjAsMDAwIHJvd3Mgd2l0aCB0aGUgc2FtZSBrZXkuCitjcmVhdGUgdGFibGUgZXh0 cmVtZWx5X3NrZXdlZCAoaWQgaW50LCB0IHRleHQpOworYWx0ZXIgdGFibGUgZXh0cmVtZWx5X3Nr ZXdlZCBzZXQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOworYWx0ZXIgdGFibGUgZXh0 cmVtZWx5X3NrZXdlZCBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5emUgZXh0cmVt ZWx5X3NrZXdlZDsKK2luc2VydCBpbnRvIGV4dHJlbWVseV9za2V3ZWQKKyAgc2VsZWN0IDQyIGFz IGlkLCAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScKKyAgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjAwMDApOwordXBkYXRlIHBnX2NsYXNzCisgIHNldCByZWx0dXBsZXMgPSAy LCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIK KyAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKKworLS0gTWFrZSBhIHJlbGF0 aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMgdHVwbGVzLgorY3JlYXRlIHRhYmxlIHdpZGUg YXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyKSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAn eCcpIGFzIHQ7CithbHRlciB0YWJsZSB3aWRlIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOwor CistLSBUaGUgIm9wdGltYWwiIGNhc2U6IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3 ZSBwbGFuIGZvciAxCistLSBiYXRjaCwgd2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFr IG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRoaW4KKy0tIG91ciB3b3JrX21lbSBidWRnZXQKKworLS0g bm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3Nl dCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7 CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7 CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9y aWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCisk JAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChp ZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJh bGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0g PSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2Fs IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxl Y3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFs IGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cisk JCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1h d2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOwor c2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3Bh cmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IG9yaWdpbmFs ID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFz ZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50 KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJh Y2sgdG8gc2V0dGluZ3M7CisKKy0tIFRoZSAiZ29vZCIgY2FzZTogYmF0Y2hlcyByZXF1aXJlZCwg YnV0IHdlIHBsYW4gdGhlIHJpZ2h0IG51bWJlcjsgd2UKKy0tIHBsYW4gZm9yIHNvbWUgbnVtYmVy IG9mIGJhdGNoZXMsIGFuZCB3ZSBzdGljayB0byB0aGF0IG51bWJlciwgYW5kCistLSBwZWFrIG1l bW9yeSB1c2FnZSBzYXlzIHdpdGhpbiBvdXIgd29ya19tZW0gYnVkZ2V0CisKKy0tIG5vbi1wYXJh bGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2Nh bCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxl Y3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFs IGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cisk JCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1v YmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4 a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBv cmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMg aW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVj dCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsK K3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLWF3YXJl IGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzE5MmtCJzsKK3Nl dCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJh bGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+ IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2Vk X2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKKy0tIHBhcmFs bGVsIGZ1bGwgbXVsdGktYmF0Y2ggaGFzaCBqb2luCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworCistLSBUaGUgImJhZCIgY2FzZTogZHVyaW5nIGV4ZWN1dGlvbiB3ZSBuZWVkIHRv IGluY3JlYXNlIG51bWJlciBvZgorLS0gYmF0Y2hlczsgaW4gdGhpcyBjYXNlIHdlIHBsYW4gZm9y IDEgYmF0Y2gsIGFuZCBpbmNyZWFzZSBhdCBsZWFzdCBhCistLSBjb3VwbGUgb2YgdGltZXMsIGFu ZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRoaW4gb3VyIHdvcmtfbWVtCistLSBidWRnZXQK KworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4 a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0 cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBGUk9NIHNpbXBsZSByIEpPSU4gYmlnZ2VyX3RoYW5f aXRfbG9va3MgcyBVU0lORyAoaWQpOworc2VsZWN0IGNvdW50KCopIEZST00gc2ltcGxlIHIgSk9J TiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIFVTSU5HIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAx IGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9i YXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikg RlJPTSBzaW1wbGUgciBKT0lOIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgVVNJTkcgKGlkKTsKKyQk KTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9i bGl2aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhr Qic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFi bGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNv dW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVzaW5nIChp ZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xv b2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRp YmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4g YmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0 dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDE7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTkya0InOworc2V0IGxvY2FsIGhhc2hfbWVt X211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsK K2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9p biBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJv bSBzaW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVj dCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwg YXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1 c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIFRoZSAidWdseSIg Y2FzZTogaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgZHVyaW5nIGV4ZWN1dGlvbgor LS0gZG9lc24ndCBoZWxwLCBzbyBzdG9wIHRyeWluZyB0byBmaXQgaW4gd29ya19tZW0gYW5kIGhv cGUgZm9yIHRoZQorLS0gYmVzdDsgaW4gdGhpcyBjYXNlIHdlIHBsYW4gZm9yIDEgYmF0Y2gsIGlu Y3JlYXNlcyBqdXN0IG9uY2UgYW5kCistLSB0aGVuIHN0b3AgaW5jcmVhc2luZyBiZWNhdXNlIHRo YXQgZGlkbid0IGhlbHAgYXQgYWxsLCBzbyB3ZSBibG93CistLSByaWdodCB0aHJvdWdoIHRoZSB3 b3JrX21lbSBidWRnZXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0Li4uCisKKy0tIG5vbi1wYXJhbGxl bAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBo YXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3Qg Y291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQp Oworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMg dXNpbmcgKGlkKTsKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAo aWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFy YWxsZWwtb2JsaXZpb3VzIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2Fs IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVt ID0gJzEyOGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxv Y2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBz ZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2lu ZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tl d2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAor ICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1 c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdp dGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9j YWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitzZXQgbG9jYWwgd29ya19t ZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQg bG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAg c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNp bmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3Nr ZXdlZCBzIHVzaW5nIChpZCk7CitzZWxlY3QgKiBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQK KyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMg dXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBBIGNvdXBsZSBv ZiBvdGhlciBoYXNoIGpvaW4gdGVzdHMgdW5yZWxhdGVkIHRvIHdvcmtfbWVtIG1hbmFnZW1lbnQu CisKKy0tIENoZWNrIHRoYXQgRVhQTEFJTiBBTkFMWVpFIGhhcyBkYXRhIGV2ZW4gaWYgdGhlIGxl YWRlciBkb2Vzbid0IHBhcnRpY2lwYXRlCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0g PSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2Fs IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2VsZWN0ICogZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4g c2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBF eGVyY2lzZSByZXNjYW5zLiAgV2UnbGwgdHVybiBvZmYgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lw YXRpb24gc28KKy0tIHRoYXQgd2UgY2FuIGNoZWNrIHRoYXQgaW5zdHJ1bWVudGF0aW9uIGNvbWVz IGJhY2sgY29ycmVjdGx5LgorCitjcmVhdGUgdGFibGUgam9pbl9mb28gYXMgc2VsZWN0IGdlbmVy YXRlX3NlcmllcygxLCAzKSBhcyBpZCwgJ3h4eHh4Jzo6dGV4dCBhcyB0OworYWx0ZXIgdGFibGUg am9pbl9mb28gc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMCk7CitjcmVhdGUgdGFibGUgam9pbl9i YXIgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgYXMgaWQsICd4eHh4eCc6OnRl eHQgYXMgdDsKK2FsdGVyIHRhYmxlIGpvaW5fYmFyIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIp OworCistLSBtdWx0aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwtb2JsaXZpb3VzCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgcGFy YWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxl X3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxs ZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBv ZmY7CitzZXQgd29ya19tZW0gPSAnNjRrQic7CitzZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEu MDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28K KyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4g am9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsg MSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgY291bnQoKikgZnJvbSBqb2lu X2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpv aW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCAr IDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0 aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikg ZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9p bl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9v LmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKK3JvbGxi YWNrIHRvIHNldHRpbmdzOworCistLSBzaW5nbGUtYmF0Y2ggd2l0aCByZXNjYW4sIHBhcmFsbGVs LW9ibGl2aW91cworc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNo ID0gb2ZmOworc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1p bl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3Qg PSAwOworc2V0IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFi bGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IHdvcmtfbWVtID0gJzRNQic7CitzZXQgaGFzaF9tZW1f bXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpv aW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zv by5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgY291 bnQoKikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9t IGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9m b28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGZp bmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlk LCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcwor ICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0g MTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBtdWx0aS1iYXRjaCB3aXRoIHJl c2NhbiwgcGFyYWxsZWwtYXdhcmUKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFy YWxsZWxfaGFzaCA9IG9uOworc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2Zm Oworc2V0IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3Nl dHVwX2Nvc3QgPSAwOworc2V0IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsK K3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IHdvcmtfbWVtID0gJzY0a0InOworc2V0 IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVj dCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIx LnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAg b24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOwor c2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQs IGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisg IG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsK K3NlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVz KAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNl bGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcg KGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQg PiBzcy5pZCAtIDE7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gc2luZ2xlLWJh dGNoIHdpdGggcmVzY2FuLCBwYXJhbGxlbC1hd2FyZQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0 IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lw YXRpb24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQg cGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7Citz ZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVy aWFsID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAn NE1CJzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2Zm KQorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0 IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQp KSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNz LmlkIC0gMTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgIGxlZnQgam9pbiAoc2Vs ZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAo aWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBz cy5pZCAtIDE7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pv aW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVm dCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFy IGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpv aW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0t IEEgZnVsbCBvdXRlciBqb2luIHdoZXJlIGV2ZXJ5IHJlY29yZCBpcyBtYXRjaGVkLgorCistLSBu b24tcGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0 ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAo aWQpOworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1w bGUgcyB1c2luZyAoaWQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsaXNt IG5vdCBwb3NzaWJsZSB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBmdWxsIGhhc2ggam9pbgorc2F2 ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworc2V0IGxv Y2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMg b2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2lu IHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVs bCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsK KworLS0gcGFyYWxsZWxpc20gaXMgcG9zc2libGUgd2l0aCBwYXJhbGxlbC1hd2FyZSBmdWxsIGhh c2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNv dW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7 CitzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBz IHVzaW5nIChpZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gQSBmdWxsIG91dGVyIGpv aW4gd2hlcmUgZXZlcnkgcmVjb3JkIGlzIG5vdCBtYXRjaGVkLgorCistLSBub24tcGFyYWxsZWwK K3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlk KTsKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxl IHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFy YWxsZWxpc20gbm90IHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtb2JsaXZpb3VzIGZ1bGwgaGFzaCBq b2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7 CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitleHBsYWlu IChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91 dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7CitzZWxlY3QgIGNvdW50KCop IGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMu aWQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsaXNtIGlzIHBvc3NpYmxl IHdpdGggcGFyYWxsZWwtYXdhcmUgZnVsbCBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsK K3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK2V4cGxhaW4g KGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0 ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKK3NlbGVjdCAgY291bnQoKikg ZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5p ZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworCistLSBleGVyY2lzZSBzcGVjaWFsIGNvZGUg cGF0aHMgZm9yIGh1Z2UgdHVwbGVzIChub3RlIHVzZSBvZiBub24tc3RyaWN0CistLSBleHByZXNz aW9uIGFuZCBsZWZ0IGpvaW4gcmVxdWlyZWQgdG8gZ2V0IHRoZSBkZXRvYXN0ZWQgdHVwbGUgaW50 bworLS0gdGhlIGhhc2ggdGFibGUpCisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUg aGFzaCBqb2luIChoaXRzIEV4ZWNQYXJhbGxlbEhhc2hMb2FkVHVwbGUgYW5kCistLSBzdHNfcHV0 dHVwbGUgb3ZlcnNpemVkIHR1cGxlIGNhc2VzIGJlY2F1c2UgaXQncyBtdWx0aS1iYXRjaCkKK3Nh dmVwb2ludCBzZXR0aW5nczsKK3NldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0g MjsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworc2V0IHdvcmtfbWVtID0gJzEyOGtC JzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICBzZWxlY3QgbGVuZ3RoKG1heChzLnQpKQorICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3Qg aWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOwor c2VsZWN0IGxlbmd0aChtYXgocy50KSkKK2Zyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwg Y29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CitzZWxl Y3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQk CisgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVj dCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7 CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworCistLSBIYXNoIGpvaW4gcmV1c2VzIHRo ZSBIT1Qgc3RhdHVzIGJpdCB0byBpbmRpY2F0ZSBtYXRjaCBzdGF0dXMuIFRoaXMgY2FuIG9ubHkK Ky0tIGJlIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMgaWYgYWxsIHRoZSBo YXNoIGpvaW4gdHVwbGUgbWF0Y2gKKy0tIGJpdHMgYXJlIHJlc2V0IGJlZm9yZSByZXVzZS4gVGhp cyBpcyBkb25lIHVwb24gbG9hZGluZyB0aGVtIGludG8gdGhlCistLSBoYXNodGFibGUuCitTQVZF UE9JTlQgc2V0dGluZ3M7CitTRVQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK1NFVCBtaW5f cGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0g MDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBoanRlc3RfbWF0 Y2hiaXRzX3QxKGlkIGludCk7CitDUkVBVEUgVEFCTEUgaGp0ZXN0X21hdGNoYml0c190MihpZCBp bnQpOworSU5TRVJUIElOVE8gaGp0ZXN0X21hdGNoYml0c190MSBWQUxVRVMgKDEpOworSU5TRVJU IElOVE8gaGp0ZXN0X21hdGNoYml0c190MiBWQUxVRVMgKDIpOworLS0gVXBkYXRlIHNob3VsZCBj cmVhdGUgYSBIT1QgdHVwbGUuIElmIHRoaXMgc3RhdHVzIGJpdCBpc24ndCBjbGVhcmVkLCB3ZSB3 b24ndAorLS0gY29ycmVjdGx5IGVtaXQgdGhlIE5VTEwtZXh0ZW5kZWQgdW5tYXRjaGluZyB0dXBs ZSBpbiBmdWxsIGhhc2ggam9pbi4KK1VQREFURSBoanRlc3RfbWF0Y2hiaXRzX3QyIHNldCBpZCA9 IDI7CitTRUxFQ1QgKiBGUk9NIGhqdGVzdF9tYXRjaGJpdHNfdDEgdDEgRlVMTCBKT0lOIGhqdGVz dF9tYXRjaGJpdHNfdDIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICBPUkRFUiBCWSB0MS5pZDsKKy0t IFRlc3Qgc2VyaWFsIGZ1bGwgaGFzaCBqb2luLgorLS0gUmVzZXR0aW5nIHBhcmFsbGVsX3NldHVw X2Nvc3Qgc2hvdWxkIGZvcmNlIGEgc2VyaWFsIHBsYW4uCistLSBKdXN0IHRvIGJlIHNhZmUsIGhv d2V2ZXIsIHNldCBlbmFibGVfcGFyYWxsZWxfaGFzaCB0byBvZmYsIGFzIHBhcmFsbGVsIGZ1bGwK Ky0tIGhhc2ggam9pbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdpdGggc2hhcmVkIGhhc2h0YWJsZXMu CitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0OworU0VUIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0g b2ZmOworU0VMRUNUICogRlJPTSBoanRlc3RfbWF0Y2hiaXRzX3QxIHQxIEZVTEwgSk9JTiBoanRl c3RfbWF0Y2hiaXRzX3QyIHQyIE9OIHQxLmlkID0gdDIuaWQ7CitST0xMQkFDSyBUTyBzZXR0aW5n czsKKworcm9sbGJhY2s7CisKKy0tIFZlcmlmeSB0aGF0IGhhc2gga2V5IGV4cHJlc3Npb25zIHJl ZmVyZW5jZSB0aGUgY29ycmVjdAorLS0gbm9kZXMuIEhhc2hqb2luJ3MgaGFzaGtleXMgbmVlZCB0 byByZWZlcmVuY2UgaXRzIG91dGVyIHBsYW4sIEhhc2gncworLS0gbmVlZCB0byByZWZlcmVuY2Ug SGFzaCdzIG91dGVyIHBsYW4gKHdoaWNoIGlzIGJlbG93IEhhc2hKb2luJ3MKKy0tIGlubmVyIHBs YW4pLiBJdCdzIG5vdCB0cml2aWFsIHRvIHZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2VzIGFyZQor LS0gY29ycmVjdCAod2UgZG9uJ3QgZGlzcGxheSB0aGUgaGFzaGtleXMgdGhlbXNlbHZlcyksIGJ1 dCBpZiB0aGUKKy0tIGhhc2hrZXlzIGNvbnRhaW4gc3VicGxhbiByZWZlcmVuY2VzLCB0aG9zZSB3 aWxsIGJlIGRpc3BsYXllZC4gRm9yY2UKKy0tIHN1YnBsYW5zIHRvIGFwcGVhciBqdXN0IGFib3V0 IGV2ZXJ5d2hlcmUuCistLQorLS0gQnVnIHJlcG9ydDoKKy0tIGh0dHBzOi8vd3d3LnBvc3RncmVz cWwub3JnL21lc3NhZ2UtaWQvQ0FQcEhmZHZHVmVnRl9US0tSaUJyU21hdEpMMmRSOXV3RkN1UiUy QnRlUV84dEVYVThteGclNDBtYWlsLmdtYWlsLmNvbQorLS0KK0JFR0lOOworU0VUIExPQ0FMIGVu YWJsZV9zb3J0ID0gT0ZGOyAtLSBhdm9pZCBtZXJnZWpvaW5zCitTRVQgTE9DQUwgZnJvbV9jb2xs YXBzZV9saW1pdCA9IDE7IC0tIGFsbG93cyBlYXN5IGNoYW5naW5nIG9mIGpvaW4gb3JkZXIKKwor Q1JFQVRFIFRBQkxFIGhqdGVzdF8xIChhIHRleHQsIGIgaW50LCBpZCBpbnQsIGMgYm9vbCk7CitD UkVBVEUgVEFCTEUgaGp0ZXN0XzIgKGEgYm9vbCwgaWQgaW50LCBiIHRleHQsIGMgaW50KTsKKwor SU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAyLCAxLCBm YWxzZSk7IC0tIG1hdGNoZXMKK0lOU0VSVCBJTlRPIGhqdGVzdF8xKGEsIGIsIGlkLCBjKSBWQUxV RVMgKCd0ZXh0JywgMSwgMiwgZmFsc2UpOyAtLSBmYWlscyBpZCBqb2luIGNvbmRpdGlvbgorSU5T RVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAyMCwgMSwgZmFs c2UpOyAtLSBmYWlscyA8IDUwCitJTlNFUlQgSU5UTyBoanRlc3RfMShhLCBiLCBpZCwgYykgVkFM VUVTICgndGV4dCcsIDEsIDEsIGZhbHNlKTsgLS0gZmFpbHMgKFNFTEVDVCBoanRlc3RfMS5iICog NSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKworSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQs IGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ2Fub3RoZXInLCAyKTsgLS0gbWF0Y2hlcworSU5TRVJU IElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMywgJ2Fub3RoZXInLCA3 KTsgLS0gZmFpbHMgaWQgam9pbiBjb25kaXRpb24KK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlk LCBiLCBjKSBWQUxVRVMgKHRydWUsIDEsICdhbm90aGVyJywgOTApOyAgLS0gZmFpbHMgPCA1NQor SU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ2Fub3Ro ZXInLCAzKTsgLS0gZmFpbHMgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVz dF8yLmMqNSkKK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUs IDEsICd0ZXh0JywgMSk7IC0tICBmYWlscyBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK0VY UExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3Rf Mi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6 OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8xLCBoanRlc3RfMgorV0hFUkUKKyAgICBoanRlc3Rf MS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1Qg aGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1Qg aGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1 NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1NFTEVDVCBoanRlc3RfMS5h IGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0 XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8xLCBoanRlc3RfMgorV0hFUkUK KyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAg QU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAg QU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3Rf Mi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK0VYUExB SU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5h IGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJl Z2NsYXNzIHQyCitGUk9NIGhqdGVzdF8yLCBoanRlc3RfMQorV0hFUkUKKyAgICBoanRlc3RfMS5p ZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0 ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0 ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQor ICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1NFTEVDVCBoanRlc3RfMS5hIGEx LCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIu dGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8yLCBoanRlc3RfMQorV0hFUkUKKyAg ICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5E IChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5E IChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5j ICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1JPTExCQUNL OworCistLSBWZXJpZnkgdGhhdCB3ZSBiZWhhdmUgc2FuZWx5IHdoZW4gdGhlIGlubmVyIGhhc2gg a2V5cyBjb250YWluIHBhcmFtZXRlcnMKKy0tICh0aGF0IGlzLCBvdXRlciBvciBsYXRlcmFsIHJl ZmVyZW5jZXMpLiAgVGhpcyBzaXR1YXRpb24gaGFzIHRvIGRlZmVhdAorLS0gcmUtdXNlIG9mIHRo ZSBpbm5lciBoYXNoIHRhYmxlIGFjcm9zcyByZXNjYW5zLgorYmVnaW47CitzZXQgbG9jYWwgZW5h YmxlX2hhc2hqb2luID0gb247CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBpOC5xMiwg c3MuKiBmcm9tCitpbnQ4X3RibCBpOCwKK2xhdGVyYWwgKHNlbGVjdCB0MS5maXZldGhvdXMsIGk0 LmYxIGZyb20gdGVuazEgdDEgam9pbiBpbnQ0X3RibCBpNAorICAgICAgICAgb24gdDEuZml2ZXRo b3VzID0gaTQuZjEraTgucTIgb3JkZXIgYnkgMSwyKSBzczsKKworc2VsZWN0IGk4LnEyLCBzcy4q IGZyb20KK2ludDhfdGJsIGk4LAorbGF0ZXJhbCAoc2VsZWN0IHQxLmZpdmV0aG91cywgaTQuZjEg ZnJvbSB0ZW5rMSB0MSBqb2luIGludDRfdGJsIGk0CisgICAgICAgICBvbiB0MS5maXZldGhvdXMg PSBpNC5mMStpOC5xMiBvcmRlciBieSAxLDIpIHNzOworCityb2xsYmFjazsKLS0gCjIuMzkuNSAo QXBwbGUgR2l0LTE1NCkKCg== --0000000000009907cb062ae9f593 Content-Type: application/octet-stream; name="0002-This-commit-enhance-temporary-file-compression.patch" Content-Disposition: attachment; filename="0002-This-commit-enhance-temporary-file-compression.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5itp4v11 RnJvbSAwMDg3YjMzYmI4MGI2N2FlNGY3ZDQ5MDFiMDQ3ZGE1ZTJjOTEzZDcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGaWxpcCBKYW51cyA8ZmphbnVzQHJlZGhhdC5jb20+CkRhdGU6 IFN1biwgMSBEZWMgMjAyNCAxNzo0MzoyNyArMDEwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlz IGNvbW1pdCBlbmhhbmNlIHRlbXBvcmFyeSBmaWxlIGNvbXByZXNzaW9uIEl0CiBpbXBsZW1lbnRz IGp1c3Qgb25lIHdvcmtpbmcgYnVmZmVyIGZvciBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lv biB0byBhdm9pZAogbWVtb3J5IHdhc3RpbmcuIFRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIGluIHRo ZSB0b3AgbWVtb3J5IGNvbnRleHQuCgpBbHNvLCBpdCBhZGRzIHBnbHogc3VwcG9ydCBhbmQgZW5o YW5jZXMgdGhlIGNvZGUgc3RydWN0dXJlIHRvIGJlIGFibGUKdG8gYWRkIG90aGVyIGNvbXByZXNz aW9uIG1ldGhvZCBzaW1wbHkuCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2lu LmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMgIHwgMTExICsr KysrKysrKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmZmlsZS5oICAgICAgIHwgICA0 ICstCiA0IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKaW5kZXggMWI1YzY0NDhlZi4uMzJjZGI2M2Zm OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKQEAgLTE0MzQsNyArMTQzNCw3IEBA IEV4ZWNIYXNoSm9pblNhdmVUdXBsZShNaW5pbWFsVHVwbGUgdHVwbGUsIHVpbnQzMiBoYXNodmFs dWUsCiAJewogCQlNZW1vcnlDb250ZXh0IG9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyho YXNodGFibGUtPnNwaWxsQ3h0KTsKIAotCQlmaWxlID0gQnVmRmlsZUNyZWF0ZVRlbXAoZmFsc2Us IHRydWUpOworCQlmaWxlID0gQnVmRmlsZUNyZWF0ZUNvbXByZXNzVGVtcChmYWxzZSk7CiAJCSpm aWxlcHRyID0gZmlsZTsKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2ZpbGUvYnVmZmlsZS5jCmluZGV4IDgxOGVmMzlkNWMuLjJiMjcwMjExY2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUuYwpAQCAtNTMsNyArNTMsOSBAQAogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInV0aWxz L3Jlc293bmVyLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAorI2luY2x1ZGUgImNv bW1vbi9wZ19semNvbXByZXNzLmgiCiAjaWZkZWYgVVNFX0xaNAogI2luY2x1ZGUgPGx6NC5oPgog I2VuZGlmCkBAIC0xMDgsNiArMTEwLDcgQEAgc3RydWN0IEJ1ZkZpbGUKIAlpbnQJCQlwb3M7CQkJ LyogbmV4dCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIGJ1ZmZlciAqLwogCWludAkJCW5ieXRlczsJ CQkvKiB0b3RhbCAjIG9mIHZhbGlkIGJ5dGVzIGluIGJ1ZmZlciAqLwogCWJvb2wJCQljb21wcmVz czsgLyrCoFN0YXRlIG9mIHVzZWdlIGZpbGUgY29tcHJlc3Npb24gKi8KKyAgICBjaGFyICAgICAg ICAqY0J1ZmZlcjsKIAkvKgogCSAqIFhYWCBTaG91bGQgaWRlYWxseSB1cyBQR0lPQWxpZ25lZEJs b2NrLCBidXQgbWlnaHQgbmVlZCBhIHdheSB0byBhdm9pZAogCSAqIHdhc3RpbmcgcGVyLWZpbGUg YWxpZ25tZW50IHBhZGRpbmcgd2hlbiBzb21lIHVzZXJzIGNyZWF0ZSBtYW55IGZpbGVzLgpAQCAt MTQwLDYgKzE0Myw3IEBAIG1ha2VCdWZGaWxlQ29tbW9uKGludCBuZmlsZXMpCiAJZmlsZS0+cG9z ID0gMDsKIAlmaWxlLT5uYnl0ZXMgPSAwOwogCWZpbGUtPmNvbXByZXNzID0gZmFsc2U7CisgICAg ZmlsZS0+Y0J1ZmZlciA9IE5VTEw7CiAKIAlyZXR1cm4gZmlsZTsKIH0KQEAgLTIzNSwxNiArMjM5 LDQ1IEBAIEJ1ZkZpbGVDcmVhdGVUZW1wKGJvb2wgaW50ZXJYYWN0LCBib29sIGNvbXByZXNzKQog CiAJaWYgKHRlbXBfZmlsZV9jb21wcmVzc2lvbiAhPSBURU1QX05PTkVfQ09NUFJFU1NJT04pCiAJ ewotI2lmZGVmIFVTRV9MWjQKIAkJZmlsZS0+Y29tcHJlc3MgPSBjb21wcmVzczsKLSNlbHNlCi0J CU5PX0xaNF9TVVBQT1JUKCk7Ci0jZW5kaWYKIAl9CiAKIAlyZXR1cm4gZmlsZTsKKwogfQorLyoK KyAqIFdyYXBwZXIgZm9yIEJ1ZmZpbGVDcmVhdGVUZW1wCisgKiBXZSB3YW50IHRvIGxpbWl0IHRo ZSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25zIGZvciB0aGUgY29tcHJlc3Npb24gYnVmZmVy LAorICogb25seSBvbmUgYnVmZmVyIGZvciBhbGwgY29tcHJlc3Npb24gb3BlcmF0aW9ucyBpcyBl bm91Z2gKKyAqLworQnVmRmlsZSAqCitCdWZGaWxlQ3JlYXRlQ29tcHJlc3NUZW1wKGJvb2wgaW50 ZXJYYWN0KXsKKyAgICBzdGF0aWMgY2hhciAqIGJ1ZmYgPSBOVUxMOworICAgIEJ1ZkZpbGUgKnRt cEJ1ZkZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChpbnRlclhhY3QsIHRydWUpOworCisgICAgaWYg KGJ1ZmYgPT0gTlVMTCAmJiB0ZW1wX2ZpbGVfY29tcHJlc3Npb24gIT0gVEVNUF9OT05FX0NPTVBS RVNTSU9OKQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSAwOwogCisgICAgICAgIHN3aXRjaCAo dGVtcF9maWxlX2NvbXByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRFTVBf TFo0X0NPTVBSRVNTSU9OOgorI2lmZGVmIFVTRV9MWjQKKyAgICAgICAgICAgICAgICBzaXplID0g TFo0X2NvbXByZXNzQm91bmQoQkxDS1NaKStzaXplb2YoaW50KTsKKyNlbmRpZgorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBURU1QX1BHTFpfQ09NUFJFU1NJT046Cisg ICAgICAgICAgICAgICAgc2l6ZSA9IHBnbHpfbWF4aW11bV9jb21wcmVzc2VkX3NpemUoQkxDS1Na LCBCTENLU1opK3NpemVvZihpbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIC8qCisgICAgICAgICAqIFBlcnNpc3RlbnQgYnVmZmVyIGZvciBhbGwgdGVtcG9y YXJ5IGZpbGUgY29tcHJlc3Npb25zCisgICAgICAgICAqLworICAgICAgICBidWZmID0gTWVtb3J5 Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemUpOworICAgIH0KKyAgICB0bXBCdWZG aWxlLT5jQnVmZmVyID0gYnVmZjsKKyAgICByZXR1cm4gdG1wQnVmRmlsZTsKK30KIC8qCiAgKiBC dWlsZCB0aGUgbmFtZSBmb3IgYSBnaXZlbiBzZWdtZW50IG9mIGEgZ2l2ZW4gQnVmRmlsZS4KICAq LwpAQCAtNTE2LDEyICs1NDksMTAgQEAgQnVmRmlsZUxvYWRCdWZmZXIoQnVmRmlsZSAqZmlsZSkK IAkJLyogaWYgbm90IEVPRiBsZXQncyBjb250aW51ZSAqLwogCQlpZiAobnJlYWQgPiAwKQogCQl7 Ci0JCQkvKgotCQkJICogQSBsb25nIGxpZmUgYnVmZmVyIHdvdWxkIG1ha2Ugc2VuY2UgdG8gbGlt aXQgbnVtYmVyIG9mCi0JCQkgKiBtZW1vcnkgYWxsb2NhdGlvbnMKLQkJCSAqLwotCQkJY2hhciAq IGJ1ZmY7CisJCQkvKiBBIGxvbmcgbGlmZSBidWZmZXIgbGltaXRzIG51bWJlciBvZiBtZW1vcnkg YWxsb2NhdGlvbnMgKi8KKwkJCWNoYXIgKiBidWZmID0gZmlsZS0+Y0J1ZmZlcjsKIAorICAgICAg ICAgICAgQXNzZXJ0KGZpbGUtPmNCdWZmZXIgIT0gTlVMTCk7CiAJCQkvKgogCQkJICogUmVhZCBj b21wcmVzc2VkIGRhdGEsIGN1ck9mZnNldCBkaWZmZXJzIHdpdGggcG9zCiAJCQkgKiBJdCByZWFk cyBsZXNzIGRhdGEgdGhhbiBpdCByZXR1cm5zIHRvIGNhbGxlcgpAQCAtNTI5LDI1ICs1NjAsMzIg QEAgQnVmRmlsZUxvYWRCdWZmZXIoQnVmRmlsZSAqZmlsZSkKIAkJCSAqLwogCQkJZmlsZS0+Y3Vy T2Zmc2V0Kz1zaXplb2YobmJ5dGVzKTsKIAotCQkJYnVmZiA9IHBhbGxvYyhuYnl0ZXMpOwotCiAJ CQlucmVhZCA9IEZpbGVSZWFkKHRoaXNmaWxlLAogCQkJCQkJCWJ1ZmYsCiAJCQkJCQkJbmJ5dGVz LAogCQkJCQkJCWZpbGUtPmN1ck9mZnNldCwKIAkJCQkJCQlXQUlUX0VWRU5UX0JVRkZJTEVfUkVB RCk7CiAKKyAgICAgICAgICAgIHN3aXRjaCAodGVtcF9maWxlX2NvbXByZXNzaW9uKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVEVNUF9MWjRfQ09NUFJFU1NJT046CiAjaWZk ZWYgVVNFX0xaNAotCQkJZmlsZS0+bmJ5dGVzID0gTFo0X2RlY29tcHJlc3Nfc2FmZShidWZmLAot CQkJCWZpbGUtPmJ1ZmZlci5kYXRhLG5ieXRlcyxzaXplb2YoZmlsZS0+YnVmZmVyKSk7Ci0JCQlm aWxlLT5jdXJPZmZzZXQgKz0gbnJlYWQ7CisJCQkgICAgICAgIGZpbGUtPm5ieXRlcyA9IExaNF9k ZWNvbXByZXNzX3NhZmUoYnVmZiwKKwkJCQkgICAgICAgIGZpbGUtPmJ1ZmZlci5kYXRhLG5ieXRl cyxzaXplb2YoZmlsZS0+YnVmZmVyKSk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFRFTVBfUEdMWl9DT01QUkVTU0lPTjoKKyAgICAg ICAgICAgICAgICAgICAgZmlsZS0+bmJ5dGVzID0gcGdsel9kZWNvbXByZXNzKGJ1ZmYsbmJ5dGVz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPmJ1ZmZlci5kYXRhLHNpemVvZihm aWxlLT5idWZmZXIpLGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisJCQlmaWxlLT5jdXJPZmZzZXQgKz0gbnJlYWQ7CiAKIAkJCWlmIChmaWxlLT5uYnl0 ZXMgPCAwKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFf Q09SUlVQVEVEKSwKIAkJCQkJCSBlcnJtc2dfaW50ZXJuYWwoImNvbXByZXNzZWQgbHo0IGRhdGEg aXMgY29ycnVwdCIpKSk7Ci0JCQlwZnJlZShidWZmKTsKIAkJfQogCiAJfQpAQCAtNTkxLDggKzYy OSw2IEBAIEJ1ZkZpbGVEdW1wQnVmZmVyKEJ1ZkZpbGUgKmZpbGUpCiAJLyogU2F2ZSBuYnl0ZXMg dmFsdWUgYmVjYXVzZSB0aGUgc2l6ZSBjaGFuZ2VzIGR1ZSB0byBjb21wcmVzc2lvbiAqLwogCWlu dCBuYnl0ZXNPcmlnaW5hbCA9IGZpbGUtPm5ieXRlczsKIAotCWJvb2wgY29tcHJlc3Npb24gPSBm YWxzZTsKLQogCWNoYXIgKiBEYXRhVG9Xcml0ZTsKIAlEYXRhVG9Xcml0ZSA9IGZpbGUtPmJ1ZmZl ci5kYXRhOwogCkBAIC02MDQsMjYgKzY0MCwzMyBAQCBCdWZGaWxlRHVtcEJ1ZmZlcihCdWZGaWxl ICpmaWxlKQogCiAKIAlpZiAoZmlsZS0+Y29tcHJlc3MpIHsKLQkJaW50IGNCdWZmZXJTaXplID0g MDsKIAkJY2hhciAqIGNEYXRhOwogCQlpbnQgY1NpemUgPSAwOworCisgICAgICAgIEFzc2VydChm aWxlLT5jQnVmZmVyICE9IE5VTEwpOworCQljRGF0YSA9IGZpbGUtPmNCdWZmZXI7CisKKyAgICAg ICAgc3dpdGNoICh0ZW1wX2ZpbGVfY29tcHJlc3Npb24pCisgICAgICAgICAgICB7CisgICAgICAg ICAgICBjYXNlIFRFTVBfTFo0X0NPTVBSRVNTSU9OOgorICAgICAgICAgICAgICAgIHsKICNpZmRl ZiBVU0VfTFo0Ci0JCWNCdWZmZXJTaXplID0gTFo0X2NvbXByZXNzQm91bmQoZmlsZS0+bmJ5dGVz KTsKLSNlbmRpZgotCQkvKgotCQkgKiBBIGxvbmcgbGlmZSBidWZmZXIgd291bGQgbWFrZSBzZW5j ZSB0byBsaW1pdCBudW1iZXIgb2YKLQkJICogbWVtb3J5IGFsbG9jYXRpb25zCi0JCSAqLwotCQlj b21wcmVzc2lvbiA9IHRydWU7Ci0JCWNEYXRhID0gcGFsbG9jKGNCdWZmZXJTaXplICsgc2l6ZW9m KGludCkpOwotI2lmZGVmIFVTRV9MWjQKLQkJLyoKLQkJICogVXNpbmcgc3RyZWFtIGNvbXByZXNz aW9uIHdvdWxkIGxlYWQgdG8gdGhlIHNsaWdodCBpbXByb3ZlbWVudCBpbgotCQkgKiBjb21wcmVz c2lvbiByYXRpbwotCQkgKi8KLQkJY1NpemUgPSBMWjRfY29tcHJlc3NfZGVmYXVsdChmaWxlLT5i dWZmZXIuZGF0YSwKLQkJCQljRGF0YSArIHNpemVvZihpbnQpLGZpbGUtPm5ieXRlcywgY0J1ZmZl clNpemUpOworICAgICAgICAgICAgICAgIGludCBjQnVmZmVyU2l6ZSA9IExaNF9jb21wcmVzc0Jv dW5kKGZpbGUtPm5ieXRlcyk7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAg KiBVc2luZyBzdHJlYW0gY29tcHJlc3Npb24gd291bGQgbGVhZCB0byB0aGUgc2xpZ2h0IGltcHJv dmVtZW50IGluCisgICAgICAgICAgICAgICAgICogY29tcHJlc3Npb24gcmF0aW8KKyAgICAgICAg ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjU2l6ZSA9IExaNF9jb21wcmVzc19kZWZhdWx0 KGZpbGUtPmJ1ZmZlci5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgY0RhdGEgKyBzaXpl b2YoaW50KSxmaWxlLT5uYnl0ZXMsIGNCdWZmZXJTaXplKTsKICNlbmRpZgorICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVEVNUF9QR0xa X0NPTVBSRVNTSU9OOgorICAgICAgICAgICAgICAgIGNTaXplID0gcGdsel9jb21wcmVzcyhmaWxl LT5idWZmZXIuZGF0YSxmaWxlLT5uYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBjRGF0 YSArIHNpemVvZihpbnQpLFBHTFpfc3RyYXRlZ3lfYWx3YXlzKTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKwogCiAJCS8qIFdyaXRlIHNpemUgb2YgY29tcHJlc3NlZCBi bG9jayBpbiBmcm9udCBvZiBjb21wcmVzc2VkIGRhdGEKIAkJICogSXQncyB1c2VkIHRvIGRldGVy bWluZSBhbW91bnQgb2YgZGF0YSB0byByZWFkIHdpdGhpbgpAQCAtNzI3LDggKzc3MCw2IEBAIEJ1 ZkZpbGVEdW1wQnVmZmVyKEJ1ZkZpbGUgKmZpbGUpCiAJZmlsZS0+cG9zID0gMDsKIAlmaWxlLT5u Ynl0ZXMgPSAwOwogCi0JaWYgKGNvbXByZXNzaW9uKQotCQlwZnJlZShEYXRhVG9Xcml0ZSk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDM4MjFjYWY3NjMuLmU0 YTk4ZDExOTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC00NjEsNiArNDYx LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBkZWZhdWx0X3RvYXN0 X2NvbXByZXNzaW9uX29wdGlvbnNbXSA9IHsKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25m aWdfZW51bV9lbnRyeSB0ZW1wX2ZpbGVfY29tcHJlc3Npb25fb3B0aW9uc1tdID0gewogCXsibm8i LCBURU1QX05PTkVfQ09NUFJFU1NJT04sIGZhbHNlfSwKKwl7InBnbHoiLCBURU1QX1BHTFpfQ09N UFJFU1NJT04sIGZhbHNlfSwKICNpZmRlZiAgVVNFX0xaNAogCXsibHo0IiwgVEVNUF9MWjRfQ09N UFJFU1NJT04sIGZhbHNlfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZmaWxlLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZmZpbGUuaAppbmRleCA0ODZiNTUy ZTMxLi5iOGNlMTY0ZTRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZmZpbGUu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZmZpbGUuaApAQCAtMzUsOSArMzUsOCBAQCB0 eXBlZGVmIHN0cnVjdCBCdWZGaWxlIEJ1ZkZpbGU7CiB0eXBlZGVmIGVudW0KIHsKIAlURU1QX05P TkVfQ09NUFJFU1NJT04sCi0jaWZkZWYgVVNFX0xaNAorCVRFTVBfUEdMWl9DT01QUkVTU0lPTiwK IAlURU1QX0xaNF9DT01QUkVTU0lPTgotI2VuZGlmCiB9IFRlbXBDb21wcmVzc2lvbjsKIAogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCB0ZW1wX2ZpbGVfY29tcHJlc3Npb247CkBAIC00Nyw2ICs0Niw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgdGVtcF9maWxlX2NvbXByZXNzaW9uOwogICogcHJv dG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIGJ1ZmZpbGUuYwogICovCiAKK2V4dGVybiBCdWZGaWxl ICpCdWZGaWxlQ3JlYXRlQ29tcHJlc3NUZW1wKGJvb2wgaW50ZXJYYWN0KTsKIGV4dGVybiBCdWZG aWxlICpCdWZGaWxlQ3JlYXRlVGVtcChib29sIGludGVyWGFjdCwgYm9vbCBjb21wcmVzcyk7CiBl eHRlcm4gdm9pZCBCdWZGaWxlQ2xvc2UoQnVmRmlsZSAqZmlsZSk7CiBleHRlcm4gcGdfbm9kaXNj YXJkIHNpemVfdCBCdWZGaWxlUmVhZChCdWZGaWxlICpmaWxlLCB2b2lkICpwdHIsIHNpemVfdCBz aXplKTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --0000000000009907cb062ae9f593 Content-Type: application/octet-stream; name="0003-Add-test-for-pglz-compression-of-temporary-files.patch" Content-Disposition: attachment; filename="0003-Add-test-for-pglz-compression-of-temporary-files.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5itp4v52 RnJvbSA3NjVlNWVlYmI2NjY5NzJmNWYzZjY3Yjc1NDJhMWNlMzRiYmNkNWNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGaWxpcCBKYW51cyA8ZmphbnVzQHJlZGhhdC5jb20+CkRhdGU6 IFRodSwgMjYgRGVjIDIwMjQgMTg6Mzk6MDcgKzAxMDAKU3ViamVjdDogW1BBVENIIDMvM10gQWRk IHRlc3QgZm9yIHBnbHogY29tcHJlc3Npb24gb2YgdGVtcG9yYXJ5IGZpbGVzCgotLS0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoX3BnbHoub3V0IHwgMTE2NiArKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgIHwg ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoX3BnbHouc3FsICAgICAgfCAg NjI2ICsrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTc5NSBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q b2luX2hhc2hfcGdsei5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luX2hhc2hfcGdsei5zcWwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pvaW5faGFzaF9wZ2x6Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9o YXNoX3BnbHoub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5YzY3 Zjk4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5f aGFzaF9wZ2x6Lm91dApAQCAtMCwwICsxLDExNjYgQEAKKy0tCistLSBleGVyY2lzZXMgZm9yIHRo ZSBoYXNoIGpvaW4gY29kZQorLS0KK2JlZ2luOworc2V0IGxvY2FsIG1pbl9wYXJhbGxlbF90YWJs ZV9zY2FuX3NpemUgPSAwOworc2V0IGxvY2FsIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0 IGxvY2FsIGVuYWJsZV9oYXNoam9pbiA9IG9uOworc2V0IGxvY2FsIHRlbXBfZmlsZV9jb21wcmVz c2lvbiA9ICdwZ2x6JzsKKy0tIEV4dHJhY3QgYnVja2V0IGFuZCBiYXRjaCBjb3VudHMgZnJvbSBh biBleHBsYWluIGFuYWx5emUgcGxhbi4gIEluCistLSBnZW5lcmFsIHdlIGNhbid0IG1ha2UgYXNz ZXJ0aW9ucyBhYm91dCBob3cgbWFueSBiYXRjaGVzIChvcgorLS0gYnVja2V0cykgd2lsbCBiZSBy ZXF1aXJlZCBiZWNhdXNlIGl0IGNhbiB2YXJ5LCBidXQgd2UgY2FuIGluIHNvbWUKKy0tIHNwZWNp YWwgY2FzZXMgYW5kIHdlIGNhbiBjaGVjayBmb3IgZ3Jvd3RoLgorY3JlYXRlIG9yIHJlcGxhY2Ug ZnVuY3Rpb24gZmluZF9oYXNoKG5vZGUganNvbikKK3JldHVybnMganNvbiBsYW5ndWFnZSBwbHBn c3FsCithcworJCQKK2RlY2xhcmUKKyAgeCBqc29uOworICBjaGlsZCBqc29uOworYmVnaW4KKyAg aWYgbm9kZS0+PidOb2RlIFR5cGUnID0gJ0hhc2gnIHRoZW4KKyAgICByZXR1cm4gbm9kZTsKKyAg ZWxzZQorICAgIGZvciBjaGlsZCBpbiBzZWxlY3QganNvbl9hcnJheV9lbGVtZW50cyhub2RlLT4n UGxhbnMnKQorICAgIGxvb3AKKyAgICAgIHggOj0gZmluZF9oYXNoKGNoaWxkKTsKKyAgICAgIGlm IHggaXMgbm90IG51bGwgdGhlbgorICAgICAgICByZXR1cm4geDsKKyAgICAgIGVuZCBpZjsKKyAg ICBlbmQgbG9vcDsKKyAgICByZXR1cm4gbnVsbDsKKyAgZW5kIGlmOworZW5kOworJCQ7CitjcmVh dGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBoYXNoX2pvaW5fYmF0Y2hlcyhxdWVyeSB0ZXh0KQorcmV0 dXJucyB0YWJsZSAob3JpZ2luYWwgaW50LCBmaW5hbCBpbnQpIGxhbmd1YWdlIHBscGdzcWwKK2Fz CiskJAorZGVjbGFyZQorICB3aG9sZV9wbGFuIGpzb247CisgIGhhc2hfbm9kZSBqc29uOworYmVn aW4KKyAgZm9yIHdob2xlX3BsYW4gaW4KKyAgICBleGVjdXRlICdleHBsYWluIChhbmFseXplLCBm b3JtYXQgJydqc29uJycpICcgfHwgcXVlcnkKKyAgbG9vcAorICAgIGhhc2hfbm9kZSA6PSBmaW5k X2hhc2goanNvbl9leHRyYWN0X3BhdGgod2hvbGVfcGxhbiwgJzAnLCAnUGxhbicpKTsKKyAgICBv cmlnaW5hbCA6PSBoYXNoX25vZGUtPj4nT3JpZ2luYWwgSGFzaCBCYXRjaGVzJzsKKyAgICBmaW5h bCA6PSBoYXNoX25vZGUtPj4nSGFzaCBCYXRjaGVzJzsKKyAgICByZXR1cm4gbmV4dDsKKyAgZW5k IGxvb3A7CitlbmQ7CiskJDsKKy0tIE1ha2UgYSBzaW1wbGUgcmVsYXRpb24gd2l0aCB3ZWxsIGRp c3RyaWJ1dGVkIGtleXMgYW5kIGNvcnJlY3RseQorLS0gZXN0aW1hdGVkIHNpemUuCitjcmVhdGUg dGFibGUgc2ltcGxlIGFzCisgIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIEFTIGlk LCAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSc7CithbHRlciB0YWJsZSBzaW1w bGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CithbmFseXplIHNpbXBsZTsKKy0tIE1ha2Ug YSByZWxhdGlvbiB3aG9zZSBzaXplIHdlIHdpbGwgdW5kZXItZXN0aW1hdGUuICBXZSB3YW50IHN0 YXRzCistLSB0byBzYXkgMTAwMCByb3dzLCBidXQgYWN0dWFsbHkgdGhlcmUgYXJlIDIwLDAwMCBy b3dzLgorY3JlYXRlIHRhYmxlIGJpZ2dlcl90aGFuX2l0X2xvb2tzIGFzCisgIHNlbGVjdCBnZW5l cmF0ZV9zZXJpZXMoMSwgMjAwMDApIGFzIGlkLCAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYSc7CithbHRlciB0YWJsZSBiaWdnZXJfdGhhbl9pdF9sb29rcyBzZXQgKGF1dG92YWN1 dW1fZW5hYmxlZCA9ICdmYWxzZScpOworYWx0ZXIgdGFibGUgYmlnZ2VyX3RoYW5faXRfbG9va3Mg c2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CithbmFseXplIGJpZ2dlcl90aGFuX2l0X2xvb2tz OwordXBkYXRlIHBnX2NsYXNzIHNldCByZWx0dXBsZXMgPSAxMDAwIHdoZXJlIHJlbG5hbWUgPSAn YmlnZ2VyX3RoYW5faXRfbG9va3MnOworLS0gTWFrZSBhIHJlbGF0aW9uIHdob3NlIHNpemUgd2Ug dW5kZXJlc3RpbWF0ZSBhbmQgdGhhdCBhbHNvIGhhcyBhCistLSBraW5kIG9mIHNrZXcgdGhhdCBi cmVha3Mgb3VyIGJhdGNoaW5nIHNjaGVtZS4gIFdlIHdhbnQgc3RhdHMgdG8gc2F5CistLSAyIHJv d3MsIGJ1dCBhY3R1YWxseSB0aGVyZSBhcmUgMjAsMDAwIHJvd3Mgd2l0aCB0aGUgc2FtZSBrZXku CitjcmVhdGUgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCAoaWQgaW50LCB0IHRleHQpOworYWx0ZXIg dGFibGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScp OworYWx0ZXIgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAy KTsKK2FuYWx5emUgZXh0cmVtZWx5X3NrZXdlZDsKK2luc2VydCBpbnRvIGV4dHJlbWVseV9za2V3 ZWQKKyAgc2VsZWN0IDQyIGFzIGlkLCAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YScKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApOwordXBkYXRlIHBnX2NsYXNzCisg IHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVs eV9za2V3ZWQnKSAvIDgxOTIKKyAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsK Ky0tIE1ha2UgYSByZWxhdGlvbiB3aXRoIGEgY291cGxlIG9mIGVub3Jtb3VzIHR1cGxlcy4KK2Ny ZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgYXMgaWQsIHJw YWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0OworYWx0ZXIgdGFibGUgd2lkZSBzZXQgKHBhcmFsbGVs X3dvcmtlcnMgPSAyKTsKKy0tIFRoZSAib3B0aW1hbCIgY2FzZTogdGhlIGhhc2ggdGFibGUgZml0 cyBpbiBtZW1vcnk7IHdlIHBsYW4gZm9yIDEKKy0tIGJhdGNoLCB3ZSBzdGljayB0byB0aGF0IG51 bWJlciwgYW5kIHBlYWsgbWVtb3J5IHVzYWdlIHN0YXlzIHdpdGhpbgorLS0gb3VyIHdvcmtfbWVt IGJ1ZGdldAorLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9jYWwgd29ya19tZW0g PSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAo Y29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBz IHVzaW5nIChpZCk7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAt PiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDYgcm93cykKKworc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0t LQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211 bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBo YXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVsdGliYXRjaCB8IGlu Y3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tCisgZiAgICAgICAgICAgICAgICAgICAgfCBmCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitz YXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21l bV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2Zm OworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBq b2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAgR2F0 aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAoci5pZCA9IHMuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gc2ltcGxlIHIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ltcGxlIHMKKyg5 IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNp bmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAwMAorKDEgcm93KQorCitzZWxlY3Qgb3Jp Z2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGlu Y3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3Qg Y291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cisg aW5pdGlhbGx5X211bHRpYmF0Y2ggfCBpbmNyZWFzZWRfYmF0Y2hlcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYgICAgICAgICAgICAgICAgICAgIHwgZgor KDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxs ZWwtYXdhcmUgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1C JzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJs ZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxh bm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRlCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChy LmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBv biBzaW1wbGUgcgorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcwor KDkgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1 c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBv cmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMg aW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVj dCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsK KyBpbml0aWFsbHlfbXVsdGliYXRjaCB8IGluY3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgZiAgICAgICAgICAgICAgICAgICAgfCBm CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gVGhlICJnb29kIiBjYXNlOiBi YXRjaGVzIHJlcXVpcmVkLCBidXQgd2UgcGxhbiB0aGUgcmlnaHQgbnVtYmVyOyB3ZQorLS0gcGxh biBmb3Igc29tZSBudW1iZXIgb2YgYmF0Y2hlcywgYW5kIHdlIHN0aWNrIHRvIHRoYXQgbnVtYmVy LCBhbmQKKy0tIHBlYWsgbWVtb3J5IHVzYWdlIHNheXMgd2l0aGluIG91ciB3b3JrX21lbSBidWRn ZXQKKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEy OGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29z dHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAg SGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDYgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZy b20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQor IDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRp YmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4g c2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVsdGliYXRjaCB8IGluY3Jl YXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICAgICAgICAgICAgfCBmCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRp bmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVt X211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7 CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRo ZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwgQWdn cmVnYXRlCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDkg cm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2lu ZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCBvcmln aW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5j cmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBp bml0aWFsbHlfbXVsdGliYXRjaCB8IGluY3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgICAgICAgICAgfCBmCiso MSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxl bC1hd2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxOTJr Qic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFi bGVfcGFyYWxsZWxfaGFzaCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291 bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBs YW5uZWQ6IDIKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo ci5pZCA9IHMuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gc2ltcGxlIHIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxlIHMK Kyg5IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMg dXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAwMAorKDEgcm93KQorCitzZWxlY3Qg b3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFz IGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7 CisgaW5pdGlhbGx5X211bHRpYmF0Y2ggfCBpbmNyZWFzZWRfYmF0Y2hlcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICAgICAgICAgIHwg ZgorKDEgcm93KQorCistLSBwYXJhbGxlbCBmdWxsIG11bHRpLWJhdGNoIGhhc2ggam9pbgorc2Vs ZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5n IChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygxIHJvdykKKworcm9sbGJhY2sgdG8g c2V0dGluZ3M7CistLSBUaGUgImJhZCIgY2FzZTogZHVyaW5nIGV4ZWN1dGlvbiB3ZSBuZWVkIHRv IGluY3JlYXNlIG51bWJlciBvZgorLS0gYmF0Y2hlczsgaW4gdGhpcyBjYXNlIHdlIHBsYW4gZm9y IDEgYmF0Y2gsIGFuZCBpbmNyZWFzZSBhdCBsZWFzdCBhCistLSBjb3VwbGUgb2YgdGltZXMsIGFu ZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRoaW4gb3VyIHdvcmtfbWVtCistLSBidWRnZXQK Ky0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtC JzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMg b2ZmKQorICBzZWxlY3QgY291bnQoKikgRlJPTSBzaW1wbGUgciBKT0lOIGJpZ2dlcl90aGFuX2l0 X2xvb2tzIHMgVVNJTkcgKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1w bGUgcgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBi aWdnZXJfdGhhbl9pdF9sb29rcyBzCisoNiByb3dzKQorCitzZWxlY3QgY291bnQoKikgRlJPTSBz aW1wbGUgciBKT0lOIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgVVNJTkcgKGlkKTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAyMDAwMAorKDEgcm93KQorCitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRp YWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisg IGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgRlJPTSBzaW1w bGUgciBKT0lOIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgVVNJTkcgKGlkKTsKKyQkKTsKKyBpbml0 aWFsbHlfbXVsdGliYXRjaCB8IGluY3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgZiAgICAgICAgICAgICAgICAgICAgfCB0CisoMSBy b3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1v YmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4 a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAo aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBH YXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwg QWdncmVnYXRlCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6IChyLmlkID0gcy5pZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBiaWdnZXJfdGhh bl9pdF9sb29rcyBzCisoOSByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBq b2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0K KyAyMDAwMAorKDEgcm93KQorCitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0 aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFz aF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2lu IGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBpbml0aWFsbHlfbXVs dGliYXRjaCB8IGluY3JlYXNlZF9iYXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tCisgZiAgICAgICAgICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK3Jv bGxiYWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNo IGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMTsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxOTJrQic7CitzZXQgbG9j YWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxf aGFzaCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBz aW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgQWdncmVnYXRlCisgICAt PiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJ0 aWFsIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoci5pZCA9IHMuaWQpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxlIHIKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gYmlnZ2VyX3RoYW5faXRfbG9va3MgcworKDkgcm93cykKKwor c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBz IHVzaW5nIChpZCk7CisgY291bnQgCistLS0tLS0tCisgMjAwMDAKKygxIHJvdykKKworc2VsZWN0 IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBh cyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2Vs ZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVz aW5nIChpZCk7CiskJCk7CisgaW5pdGlhbGx5X211bHRpYmF0Y2ggfCBpbmNyZWFzZWRfYmF0Y2hl cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYgICAgICAg ICAgICAgICAgICAgIHwgdAorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIFRo ZSAidWdseSIgY2FzZTogaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgZHVyaW5nIGV4 ZWN1dGlvbgorLS0gZG9lc24ndCBoZWxwLCBzbyBzdG9wIHRyeWluZyB0byBmaXQgaW4gd29ya19t ZW0gYW5kIGhvcGUgZm9yIHRoZQorLS0gYmVzdDsgaW4gdGhpcyBjYXNlIHdlIHBsYW4gZm9yIDEg YmF0Y2gsIGluY3JlYXNlcyBqdXN0IG9uY2UgYW5kCistLSB0aGVuIHN0b3AgaW5jcmVhc2luZyBi ZWNhdXNlIHRoYXQgZGlkbid0IGhlbHAgYXQgYWxsLCBzbyB3ZSBibG93CistLSByaWdodCB0aHJv dWdoIHRoZSB3b3JrX21lbSBidWRnZXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0Li4uCistLSBub24t cGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMDsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQg bG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAg c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNp bmcgKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFnZ3JlZ2F0ZQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoci5pZCA9 IHMuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ltcGxlIHIKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZXh0cmVtZWx5X3NrZXdlZCBzCiso NiByb3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9z a2V3ZWQgcyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisK K3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikg ZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOwor IG9yaWdpbmFsIHwgZmluYWwgCistLS0tLS0tLS0tKy0tLS0tLS0KKyAgICAgICAgMSB8ICAgICAy CisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJh bGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0g PSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9j YWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5n IChpZCk7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxh bm5lZDogMgorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAoci5pZCA9IHMuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g c2ltcGxlIHIKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZXh0cmVtZWx5X3NrZXdlZCBzCisoOCByb3dzKQorCitzZWxlY3QgY291 bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOwor IGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3NlbGVjdCAqIGZyb20gaGFzaF9q b2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4 dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOworIG9yaWdpbmFsIHwgZmluYWwgCist LS0tLS0tLS0tKy0tLS0tLS0KKyAgICAgICAgMSB8ICAgICAyCisoMSByb3cpCisKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4K K3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMTsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwgaGFz aF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9 IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQWdncmVnYXRlCisgICAtPiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHIuaWQgPSBzLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IHNpbXBsZSByCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGV4dHJlbWVseV9za2V3ZWQgcworKDgg cm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tl d2VkIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAwMAorKDEgcm93KQorCitz ZWxlY3QgKiBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZy b20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKKyQkKTsKKyBv cmlnaW5hbCB8IGZpbmFsIAorLS0tLS0tLS0tLSstLS0tLS0tCisgICAgICAgIDEgfCAgICAgNAor KDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIEEgY291cGxlIG9mIG90aGVyIGhh c2ggam9pbiB0ZXN0cyB1bnJlbGF0ZWQgdG8gd29ya19tZW0gbWFuYWdlbWVudC4KKy0tIENoZWNr IHRoYXQgRVhQTEFJTiBBTkFMWVpFIGhhcyBkYXRhIGV2ZW4gaWYgdGhlIGxlYWRlciBkb2Vzbid0 IHBhcnRpY2lwYXRlCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3Nl dCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIHBhcmFsbGVsX2xl YWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hl cygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNp bmcgKGlkKTsKKyQkKTsKKyBvcmlnaW5hbCB8IGZpbmFsIAorLS0tLS0tLS0tLSstLS0tLS0tCisg ICAgICAgIDEgfCAgICAgMQorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIEV4 ZXJjaXNlIHJlc2NhbnMuICBXZSdsbCB0dXJuIG9mZiBwYXJhbGxlbF9sZWFkZXJfcGFydGljaXBh dGlvbiBzbworLS0gdGhhdCB3ZSBjYW4gY2hlY2sgdGhhdCBpbnN0cnVtZW50YXRpb24gY29tZXMg YmFjayBjb3JyZWN0bHkuCitjcmVhdGUgdGFibGUgam9pbl9mb28gYXMgc2VsZWN0IGdlbmVyYXRl X3NlcmllcygxLCAzKSBhcyBpZCwgJ3h4eHh4Jzo6dGV4dCBhcyB0OworYWx0ZXIgdGFibGUgam9p bl9mb28gc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMCk7CitjcmVhdGUgdGFibGUgam9pbl9iYXIg YXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgYXMgaWQsICd4eHh4eCc6OnRleHQg YXMgdDsKK2FsdGVyIHRhYmxlIGpvaW5fYmFyIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOwor LS0gbXVsdGktYmF0Y2ggd2l0aCByZXNjYW4sIHBhcmFsbGVsLW9ibGl2aW91cworc2F2ZXBvaW50 IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworc2V0IHBhcmFsbGVs X2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJhbGxlbF90YWJsZV9zY2Fu X3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0IHBhcmFsbGVsX3R1 cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwor c2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOwor c2V0IHdvcmtfbWVtID0gJzY0a0InOworc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7Citl eHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAg bGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5f YmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5k IGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0ZWQgTG9v cCBMZWZ0IEpvaW4KKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoKGpvaW5fZm9vLmlkIDwgKGIxLmlk ICsgMSkpIEFORCAoam9pbl9mb28uaWQgPiAoYjEuaWQgLSAxKSkpCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mb28KKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdv cmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAoYjEuaWQgPSBiMi5pZCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBqb2luX2JhciBiMQorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb2luX2JhciBiMgorKDExIHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9v CisgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBq b2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBh bmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CisgY291bnQgCistLS0tLS0tCisgICAgIDMKKygx IHJvdykKKworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQg am9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBi MiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2lu X2Zvby5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKKyBtdWx0aWJhdGNoIAorLS0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIHNpbmdsZS1iYXRjaCB3aXRo IHJlc2NhbiwgcGFyYWxsZWwtb2JsaXZpb3VzCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRp b24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFy YWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFs ID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNE1C JzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIx LmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBz cworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlk IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAg ICBKb2luIEZpbHRlcjogKChqb2luX2Zvby5pZCA8IChiMS5pZCArIDEpKSBBTkQgKGpvaW5fZm9v LmlkID4gKGIxLmlkIC0gMSkpKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZm9vCisg ICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKGIxLmlkID0gYjIuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gam9pbl9iYXIgYjEKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9iYXIgYjIKKygxMSBy b3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVj dCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlk KSkgc3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3Mu aWQgLSAxOworIGNvdW50IAorLS0tLS0tLQorICAgICAzCisoMSByb3cpCisKK3NlbGVjdCBmaW5h bCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2Vs ZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwg YjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAg ICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7 CiskJCk7CisgbXVsdGliYXRjaCAKKy0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworcm9sbGJh Y2sgdG8gc2V0dGluZ3M7CistLSBtdWx0aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwtYXdh cmUKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOwor c2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJhbGxl bF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0 IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vq b2luID0gb2ZmOworc2V0IHdvcmtfbWVtID0gJzY0a0InOworc2V0IGhhc2hfbWVtX211bHRpcGxp ZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpv aW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBi MSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBz cy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoKGpvaW5fZm9v LmlkIDwgKGIxLmlkICsgMSkpIEFORCAoam9pbl9mb28uaWQgPiAoYjEuaWQgLSAxKSkpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mb28KKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAg ICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoYjEuaWQgPSBiMi5p ZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBqb2luX2Jh ciBiMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBqb2luX2JhciBiMgorKDEx IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgIGxlZnQgam9pbiAoc2Vs ZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAo aWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBz cy5pZCAtIDE7CisgY291bnQgCistLS0tLS0tCisgICAgIDMKKygxIHJvdykKKworc2VsZWN0IGZp bmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlk LCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcwor ICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0g MTsKKyQkKTsKKyBtdWx0aWJhdGNoIAorLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCityb2xs YmFjayB0byBzZXR0aW5nczsKKy0tIHNpbmdsZS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwt YXdhcmUKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9u Oworc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJh bGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOwor c2V0IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVy Z2Vqb2luID0gb2ZmOworc2V0IHdvcmtfbWVtID0gJzRNQic7CitzZXQgaGFzaF9tZW1fbXVsdGlw bGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20g am9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFy IGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8 IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAg LT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6ICgoam9pbl9m b28uaWQgPCAoYjEuaWQgKyAxKSkgQU5EIChqb2luX2Zvby5pZCA+IChiMS5pZCAtIDEpKSkKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZvbworICAgICAgICAgLT4gIEdhdGhlcgorICAg ICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiMS5pZCA9IGIy LmlkKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGpvaW5f YmFyIGIxCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGpvaW5fYmFyIGIyCiso MTEgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgbGVmdCBqb2luIChz ZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5n IChpZCkpIHNzCisgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+ IHNzLmlkIC0gMTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMworKDEgcm93KQorCitzZWxlY3Qg ZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisg IHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEu aWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNz CisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQg LSAxOworJCQpOworIG11bHRpYmF0Y2ggCistLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK3Jv bGxiYWNrIHRvIHNldHRpbmdzOworLS0gQSBmdWxsIG91dGVyIGpvaW4gd2hlcmUgZXZlcnkgcmVj b3JkIGlzIG1hdGNoZWQuCistLSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3Nl dCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK2V4cGxhaW4gKGNv c3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIg am9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFn Z3JlZ2F0ZQorICAgLT4gIEhhc2ggRnVsbCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChyLmlk ID0gcy5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcgorICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaW1wbGUgcworKDYgcm93cykK Kworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUg cyB1c2luZyAoaWQpOworIGNvdW50IAorLS0tLS0tLQorIDIwMDAwCisoMSByb3cpCisKK3JvbGxi YWNrIHRvIHNldHRpbmdzOworLS0gcGFyYWxsZWxpc20gbm90IHBvc3NpYmxlIHdpdGggcGFyYWxs ZWwtb2JsaXZpb3VzIGZ1bGwgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAgY291bnQo KikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoIEZ1bGwgSm9p bgorICAgICAgICAgSGFzaCBDb25kOiAoci5pZCA9IHMuaWQpCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gc2ltcGxlIHIKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2ltcGxlIHMKKyg2IHJvd3MpCisKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1w bGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0t LS0KKyAyMDAwMAorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIHBhcmFsbGVs aXNtIGlzIHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtYXdhcmUgZnVsbCBoYXNoIGpvaW4KK3NhdmVw b2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNp bXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEZpbmFsaXplIEFnZ3JlZ2F0ZQorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFu bmVkOiAyCisgICAgICAgICAtPiAgUGFydGlhbCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBIYXNoIEZ1bGwgSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAoci5pZCA9IHMuaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gc2ltcGxlIHIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gc2ltcGxl IHMKKyg5IHJvd3MpCisKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVy IGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAyMDAwMAorKDEg cm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0tIEEgZnVsbCBvdXRlciBqb2luIHdoZXJl IGV2ZXJ5IHJlY29yZCBpcyBub3QgbWF0Y2hlZC4KKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50 IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxl IHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEhhc2ggRnVsbCBKb2luCisg ICAgICAgICBIYXNoIENvbmQ6ICgoMCAtIHMuaWQpID0gci5pZCkKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBzaW1wbGUgcworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBzaW1wbGUgcgorKDYgcm93cykKKworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNp bXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKKyBj b3VudCAKKy0tLS0tLS0KKyA0MDAwMAorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsK Ky0tIHBhcmFsbGVsaXNtIG5vdCBwb3NzaWJsZSB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBmdWxs IGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNo ID0gb2ZmOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIg ZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEhhc2ggRnVsbCBKb2luCisgICAg ICAgICBIYXNoIENvbmQ6ICgoMCAtIHMuaWQpID0gci5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBzaW1wbGUgcworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBzaW1wbGUgcgorKDYgcm93cykKKworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBs ZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKKyBjb3Vu dCAKKy0tLS0tLS0KKyA0MDAwMAorKDEgcm93KQorCityb2xsYmFjayB0byBzZXR0aW5nczsKKy0t IHBhcmFsbGVsaXNtIGlzIHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtYXdhcmUgZnVsbCBoYXNoIGpv aW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBz LmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBBZ2dyZWdhdGUKKyAgIC0+ICBHYXRoZXIKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFBhcnRpYWwgQWdncmVnYXRl CisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBGdWxsIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKCgwIC0gcy5pZCkgPSByLmlkKQorICAgICAgICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHNpbXBsZSBzCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIFNlcSBTY2FuIG9uIHNpbXBsZSByCisoOSByb3dzKQorCitzZWxlY3QgIGNvdW50KCop IGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMu aWQpOworIGNvdW50IAorLS0tLS0tLQorIDQwMDAwCisoMSByb3cpCisKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworLS0gZXhlcmNpc2Ugc3BlY2lhbCBjb2RlIHBhdGhzIGZvciBodWdlIHR1cGxlcyAo bm90ZSB1c2Ugb2Ygbm9uLXN0cmljdAorLS0gZXhwcmVzc2lvbiBhbmQgbGVmdCBqb2luIHJlcXVp cmVkIHRvIGdldCB0aGUgZGV0b2FzdGVkIHR1cGxlIGludG8KKy0tIHRoZSBoYXNoIHRhYmxlKQor LS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4gKGhpdHMgRXhlY1BhcmFs bGVsSGFzaExvYWRUdXBsZSBhbmQKKy0tIHN0c19wdXR0dXBsZSBvdmVyc2l6ZWQgdHVwbGUgY2Fz ZXMgYmVjYXVzZSBpdCdzIG11bHRpLWJhdGNoKQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9wYXJhbGxlbF9o YXNoID0gb247CitzZXQgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGhhc2hfbWVtX211bHRpcGxp ZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkp CisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcn IGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxp emUgQWdncmVnYXRlCisgICAtPiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIK KyAgICAgICAgIC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2ggTGVmdCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh3aWRl LmlkID0gd2lkZV8xLmlkKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIHdpZGUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZSB3aWRl XzEKKyg5IHJvd3MpCisKK3NlbGVjdCBsZW5ndGgobWF4KHMudCkpCitmcm9tIHdpZGUgbGVmdCBq b2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1 c2luZyAoaWQpOworIGxlbmd0aCAKKy0tLS0tLS0tCisgMzIwMDAwCisoMSByb3cpCisKK3NlbGVj dCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQK KyAgc2VsZWN0IGxlbmd0aChtYXgocy50KSkKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0 IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsK KyQkKTsKKyBtdWx0aWJhdGNoIAorLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCityb2xsYmFj ayB0byBzZXR0aW5nczsKKy0tIEhhc2ggam9pbiByZXVzZXMgdGhlIEhPVCBzdGF0dXMgYml0IHRv IGluZGljYXRlIG1hdGNoIHN0YXR1cy4gVGhpcyBjYW4gb25seQorLS0gYmUgZ3VhcmFudGVlZCB0 byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpZiBhbGwgdGhlIGhhc2ggam9pbiB0dXBsZSBtYXRj aAorLS0gYml0cyBhcmUgcmVzZXQgYmVmb3JlIHJldXNlLiBUaGlzIGlzIGRvbmUgdXBvbiBsb2Fk aW5nIHRoZW0gaW50byB0aGUKKy0tIGhhc2h0YWJsZS4KK1NBVkVQT0lOVCBzZXR0aW5nczsKK1NF VCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2Fu X3NpemUgPSAwOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVsX3R1 cGxlX2Nvc3QgPSAwOworQ1JFQVRFIFRBQkxFIGhqdGVzdF9tYXRjaGJpdHNfdDEoaWQgaW50KTsK K0NSRUFURSBUQUJMRSBoanRlc3RfbWF0Y2hiaXRzX3QyKGlkIGludCk7CitJTlNFUlQgSU5UTyBo anRlc3RfbWF0Y2hiaXRzX3QxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBoanRlc3RfbWF0Y2hi aXRzX3QyIFZBTFVFUyAoMik7CistLSBVcGRhdGUgc2hvdWxkIGNyZWF0ZSBhIEhPVCB0dXBsZS4g SWYgdGhpcyBzdGF0dXMgYml0IGlzbid0IGNsZWFyZWQsIHdlIHdvbid0CistLSBjb3JyZWN0bHkg ZW1pdCB0aGUgTlVMTC1leHRlbmRlZCB1bm1hdGNoaW5nIHR1cGxlIGluIGZ1bGwgaGFzaCBqb2lu LgorVVBEQVRFIGhqdGVzdF9tYXRjaGJpdHNfdDIgc2V0IGlkID0gMjsKK1NFTEVDVCAqIEZST00g aGp0ZXN0X21hdGNoYml0c190MSB0MSBGVUxMIEpPSU4gaGp0ZXN0X21hdGNoYml0c190MiB0MiBP TiB0MS5pZCA9IHQyLmlkCisgIE9SREVSIEJZIHQxLmlkOworIGlkIHwgaWQgCistLS0tKy0tLS0K KyAgMSB8ICAgCisgICAgfCAgMgorKDIgcm93cykKKworLS0gVGVzdCBzZXJpYWwgZnVsbCBoYXNo IGpvaW4uCistLSBSZXNldHRpbmcgcGFyYWxsZWxfc2V0dXBfY29zdCBzaG91bGQgZm9yY2UgYSBz ZXJpYWwgcGxhbi4KKy0tIEp1c3QgdG8gYmUgc2FmZSwgaG93ZXZlciwgc2V0IGVuYWJsZV9wYXJh bGxlbF9oYXNoIHRvIG9mZiwgYXMgcGFyYWxsZWwgZnVsbAorLS0gaGFzaCBqb2lucyBhcmUgb25s eSBzdXBwb3J0ZWQgd2l0aCBzaGFyZWQgaGFzaHRhYmxlcy4KK1JFU0VUIHBhcmFsbGVsX3NldHVw X2Nvc3Q7CitTRVQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitTRUxFQ1QgKiBGUk9NIGhq dGVzdF9tYXRjaGJpdHNfdDEgdDEgRlVMTCBKT0lOIGhqdGVzdF9tYXRjaGJpdHNfdDIgdDIgT04g dDEuaWQgPSB0Mi5pZDsKKyBpZCB8IGlkIAorLS0tLSstLS0tCisgIDEgfCAgIAorICAgIHwgIDIK KygyIHJvd3MpCisKK1JPTExCQUNLIFRPIHNldHRpbmdzOworcm9sbGJhY2s7CistLSBWZXJpZnkg dGhhdCBoYXNoIGtleSBleHByZXNzaW9ucyByZWZlcmVuY2UgdGhlIGNvcnJlY3QKKy0tIG5vZGVz LiBIYXNoam9pbidzIGhhc2hrZXlzIG5lZWQgdG8gcmVmZXJlbmNlIGl0cyBvdXRlciBwbGFuLCBI YXNoJ3MKKy0tIG5lZWQgdG8gcmVmZXJlbmNlIEhhc2gncyBvdXRlciBwbGFuICh3aGljaCBpcyBi ZWxvdyBIYXNoSm9pbidzCistLSBpbm5lciBwbGFuKS4gSXQncyBub3QgdHJpdmlhbCB0byB2ZXJp ZnkgdGhhdCB0aGUgcmVmZXJlbmNlcyBhcmUKKy0tIGNvcnJlY3QgKHdlIGRvbid0IGRpc3BsYXkg dGhlIGhhc2hrZXlzIHRoZW1zZWx2ZXMpLCBidXQgaWYgdGhlCistLSBoYXNoa2V5cyBjb250YWlu IHN1YnBsYW4gcmVmZXJlbmNlcywgdGhvc2Ugd2lsbCBiZSBkaXNwbGF5ZWQuIEZvcmNlCistLSBz dWJwbGFucyB0byBhcHBlYXIganVzdCBhYm91dCBldmVyeXdoZXJlLgorLS0KKy0tIEJ1ZyByZXBv cnQ6CistLSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBUHBIZmR2R1Zl Z0ZfVEtLUmlCclNtYXRKTDJkUjl1d0ZDdVIlMkJ0ZVFfOHRFWFU4bXhnJTQwbWFpbC5nbWFpbC5j b20KKy0tCitCRUdJTjsKK1NFVCBMT0NBTCBlbmFibGVfc29ydCA9IE9GRjsgLS0gYXZvaWQgbWVy Z2Vqb2lucworU0VUIExPQ0FMIGZyb21fY29sbGFwc2VfbGltaXQgPSAxOyAtLSBhbGxvd3MgZWFz eSBjaGFuZ2luZyBvZiBqb2luIG9yZGVyCitDUkVBVEUgVEFCTEUgaGp0ZXN0XzEgKGEgdGV4dCwg YiBpbnQsIGlkIGludCwgYyBib29sKTsKK0NSRUFURSBUQUJMRSBoanRlc3RfMiAoYSBib29sLCBp ZCBpbnQsIGIgdGV4dCwgYyBpbnQpOworSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMp IFZBTFVFUyAoJ3RleHQnLCAyLCAxLCBmYWxzZSk7IC0tIG1hdGNoZXMKK0lOU0VSVCBJTlRPIGhq dGVzdF8xKGEsIGIsIGlkLCBjKSBWQUxVRVMgKCd0ZXh0JywgMSwgMiwgZmFsc2UpOyAtLSBmYWls cyBpZCBqb2luIGNvbmRpdGlvbgorSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZB TFVFUyAoJ3RleHQnLCAyMCwgMSwgZmFsc2UpOyAtLSBmYWlscyA8IDUwCitJTlNFUlQgSU5UTyBo anRlc3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDEsIDEsIGZhbHNlKTsgLS0gZmFp bHMgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKK0lOU0VS VCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUsIDEsICdhbm90aGVyJywg Mik7IC0tIG1hdGNoZXMKK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMg KHRydWUsIDMsICdhbm90aGVyJywgNyk7IC0tIGZhaWxzIGlkIGpvaW4gY29uZGl0aW9uCitJTlNF UlQgSU5UTyBoanRlc3RfMihhLCBpZCwgYiwgYykgVkFMVUVTICh0cnVlLCAxLCAnYW5vdGhlcics IDkwKTsgIC0tIGZhaWxzIDwgNTUKK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBW QUxVRVMgKHRydWUsIDEsICdhbm90aGVyJywgMyk7IC0tIGZhaWxzIChTRUxFQ1QgaGp0ZXN0XzEu YiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCitJTlNFUlQgSU5UTyBoanRlc3RfMihhLCBp ZCwgYiwgYykgVkFMVUVTICh0cnVlLCAxLCAndGV4dCcsIDEpOyAtLSAgZmFpbHMgaGp0ZXN0XzEu YSA8PiBoanRlc3RfMi5iOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUIGhq dGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEgYTIsaGp0ZXN0XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQx LCBoanRlc3RfMi50YWJsZW9pZDo6cmVnY2xhc3MgdDIKK0ZST00gaGp0ZXN0XzEsIGhqdGVzdF8y CitXSEVSRQorICAgIGhqdGVzdF8xLmlkID0gKFNFTEVDVCAxIFdIRVJFIGhqdGVzdF8yLmlkID0g MSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMq NSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPCA1MAorICAgIEFORCAoU0VMRUNU IGhqdGVzdF8yLmMgKiA1KSA8IDU1CisgICAgQU5EIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBPdXRwdXQ6IGhqdGVzdF8x LmEsIGhqdGVzdF8yLmEsIChoanRlc3RfMS50YWJsZW9pZCk6OnJlZ2NsYXNzLCAoaGp0ZXN0XzIu dGFibGVvaWQpOjpyZWdjbGFzcworICAgSGFzaCBDb25kOiAoKGhqdGVzdF8xLmlkID0gKFN1YlBs YW4gMSkpIEFORCAoKFN1YlBsYW4gMikgPSAoU3ViUGxhbiAzKSkpCisgICBKb2luIEZpbHRlcjog KGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuaGp0 ZXN0XzEKKyAgICAgICAgIE91dHB1dDogaGp0ZXN0XzEuYSwgaGp0ZXN0XzEudGFibGVvaWQsIGhq dGVzdF8xLmlkLCBoanRlc3RfMS5iCisgICAgICAgICBGaWx0ZXI6ICgoU3ViUGxhbiA0KSA8IDUw KQorICAgICAgICAgU3ViUGxhbiA0CisgICAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAg ICAgICAgT3V0cHV0OiAoaGp0ZXN0XzEuYiAqIDUpCisgICAtPiAgSGFzaAorICAgICAgICAgT3V0 cHV0OiBoanRlc3RfMi5hLCBoanRlc3RfMi50YWJsZW9pZCwgaGp0ZXN0XzIuaWQsIGhqdGVzdF8y LmMsIGhqdGVzdF8yLmIKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuaGp0ZXN0XzIK KyAgICAgICAgICAgICAgIE91dHB1dDogaGp0ZXN0XzIuYSwgaGp0ZXN0XzIudGFibGVvaWQsIGhq dGVzdF8yLmlkLCBoanRlc3RfMi5jLCBoanRlc3RfMi5iCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICgoU3ViUGxhbiA1KSA8IDU1KQorICAgICAgICAgICAgICAgU3ViUGxhbiA1CisgICAgICAgICAg ICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoaGp0ZXN0 XzIuYyAqIDUpCisgICAgICAgICBTdWJQbGFuIDEKKyAgICAgICAgICAgLT4gIFJlc3VsdAorICAg ICAgICAgICAgICAgICBPdXRwdXQ6IDEKKyAgICAgICAgICAgICAgICAgT25lLVRpbWUgRmlsdGVy OiAoaGp0ZXN0XzIuaWQgPSAxKQorICAgICAgICAgU3ViUGxhbiAzCisgICAgICAgICAgIC0+ICBS ZXN1bHQKKyAgICAgICAgICAgICAgICAgT3V0cHV0OiAoaGp0ZXN0XzIuYyAqIDUpCisgICBTdWJQ bGFuIDIKKyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPdXRwdXQ6IChoanRlc3RfMS5iICog NSkKKygyOCByb3dzKQorCitTRUxFQ1QgaGp0ZXN0XzEuYSBhMSwgaGp0ZXN0XzIuYSBhMixoanRl c3RfMS50YWJsZW9pZDo6cmVnY2xhc3MgdDEsIGhqdGVzdF8yLnRhYmxlb2lkOjpyZWdjbGFzcyB0 MgorRlJPTSBoanRlc3RfMSwgaGp0ZXN0XzIKK1dIRVJFCisgICAgaGp0ZXN0XzEuaWQgPSAoU0VM RUNUIDEgV0hFUkUgaGp0ZXN0XzIuaWQgPSAxKQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIg KiA1KSA9IChTRUxFQ1QgaGp0ZXN0XzIuYyo1KQorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8xLmIg KiA1KSA8IDUwCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzIuYyAqIDUpIDwgNTUKKyAgICBBTkQg aGp0ZXN0XzEuYSA8PiBoanRlc3RfMi5iOworICBhMSAgfCBhMiB8ICAgIHQxICAgIHwgICAgdDIg ICAgCistLS0tLS0rLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXh0IHwgdCAgfCBoanRl c3RfMSB8IGhqdGVzdF8yCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkK K1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpy ZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8y LCBoanRlc3RfMQorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRl c3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBo anRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBB TkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhq dGVzdF8yLmI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgT3V0cHV0 OiBoanRlc3RfMS5hLCBoanRlc3RfMi5hLCAoaGp0ZXN0XzEudGFibGVvaWQpOjpyZWdjbGFzcywg KGhqdGVzdF8yLnRhYmxlb2lkKTo6cmVnY2xhc3MKKyAgIEhhc2ggQ29uZDogKCgoU3ViUGxhbiAx KSA9IGhqdGVzdF8xLmlkKSBBTkQgKChTdWJQbGFuIDMpID0gKFN1YlBsYW4gMikpKQorICAgSm9p biBGaWx0ZXI6IChoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmIpCisgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmhqdGVzdF8yCisgICAgICAgICBPdXRwdXQ6IGhqdGVzdF8yLmEsIGhqdGVzdF8yLnRh Ymxlb2lkLCBoanRlc3RfMi5pZCwgaGp0ZXN0XzIuYywgaGp0ZXN0XzIuYgorICAgICAgICAgRmls dGVyOiAoKFN1YlBsYW4gNSkgPCA1NSkKKyAgICAgICAgIFN1YlBsYW4gNQorICAgICAgICAgICAt PiAgUmVzdWx0CisgICAgICAgICAgICAgICAgIE91dHB1dDogKGhqdGVzdF8yLmMgKiA1KQorICAg LT4gIEhhc2gKKyAgICAgICAgIE91dHB1dDogaGp0ZXN0XzEuYSwgaGp0ZXN0XzEudGFibGVvaWQs IGhqdGVzdF8xLmlkLCBoanRlc3RfMS5iCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmhqdGVzdF8xCisgICAgICAgICAgICAgICBPdXRwdXQ6IGhqdGVzdF8xLmEsIGhqdGVzdF8xLnRh Ymxlb2lkLCBoanRlc3RfMS5pZCwgaGp0ZXN0XzEuYgorICAgICAgICAgICAgICAgRmlsdGVyOiAo KFN1YlBsYW4gNCkgPCA1MCkKKyAgICAgICAgICAgICAgIFN1YlBsYW4gNAorICAgICAgICAgICAg ICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKGhqdGVzdF8x LmIgKiA1KQorICAgICAgICAgU3ViUGxhbiAyCisgICAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAg ICAgICAgICAgICAgT3V0cHV0OiAoaGp0ZXN0XzEuYiAqIDUpCisgICBTdWJQbGFuIDEKKyAgICAg LT4gIFJlc3VsdAorICAgICAgICAgICBPdXRwdXQ6IDEKKyAgICAgICAgICAgT25lLVRpbWUgRmls dGVyOiAoaGp0ZXN0XzIuaWQgPSAxKQorICAgU3ViUGxhbiAzCisgICAgIC0+ICBSZXN1bHQKKyAg ICAgICAgICAgT3V0cHV0OiAoaGp0ZXN0XzIuYyAqIDUpCisoMjggcm93cykKKworU0VMRUNUIGhq dGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEgYTIsaGp0ZXN0XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQx LCBoanRlc3RfMi50YWJsZW9pZDo6cmVnY2xhc3MgdDIKK0ZST00gaGp0ZXN0XzIsIGhqdGVzdF8x CitXSEVSRQorICAgIGhqdGVzdF8xLmlkID0gKFNFTEVDVCAxIFdIRVJFIGhqdGVzdF8yLmlkID0g MSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMq NSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPCA1MAorICAgIEFORCAoU0VMRUNU IGhqdGVzdF8yLmMgKiA1KSA8IDU1CisgICAgQU5EIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsK KyAgYTEgIHwgYTIgfCAgICB0MSAgICB8ICAgIHQyICAgIAorLS0tLS0tKy0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgdGV4dCB8IHQgIHwgaGp0ZXN0XzEgfCBoanRlc3RfMgorKDEgcm93KQor CitST0xMQkFDSzsKKy0tIFZlcmlmeSB0aGF0IHdlIGJlaGF2ZSBzYW5lbHkgd2hlbiB0aGUgaW5u ZXIgaGFzaCBrZXlzIGNvbnRhaW4gcGFyYW1ldGVycworLS0gKHRoYXQgaXMsIG91dGVyIG9yIGxh dGVyYWwgcmVmZXJlbmNlcykuICBUaGlzIHNpdHVhdGlvbiBoYXMgdG8gZGVmZWF0CistLSByZS11 c2Ugb2YgdGhlIGlubmVyIGhhc2ggdGFibGUgYWNyb3NzIHJlc2NhbnMuCitiZWdpbjsKK3NldCBs b2NhbCBlbmFibGVfaGFzaGpvaW4gPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBp OC5xMiwgc3MuKiBmcm9tCitpbnQ4X3RibCBpOCwKK2xhdGVyYWwgKHNlbGVjdCB0MS5maXZldGhv dXMsIGk0LmYxIGZyb20gdGVuazEgdDEgam9pbiBpbnQ0X3RibCBpNAorICAgICAgICAgb24gdDEu Zml2ZXRob3VzID0gaTQuZjEraTgucTIgb3JkZXIgYnkgMSwyKSBzczsKKyAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgaTgKKyAgIC0+ICBTb3J0CisgICAg ICAgICBTb3J0IEtleTogdDEuZml2ZXRob3VzLCBpNC5mMQorICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuZml2ZXRob3VzID0gKGk0LmYxICsgaTgu cTIpKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlbmsxIHQxCisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDRf dGJsIGk0CisoOSByb3dzKQorCitzZWxlY3QgaTgucTIsIHNzLiogZnJvbQoraW50OF90YmwgaTgs CitsYXRlcmFsIChzZWxlY3QgdDEuZml2ZXRob3VzLCBpNC5mMSBmcm9tIHRlbmsxIHQxIGpvaW4g aW50NF90YmwgaTQKKyAgICAgICAgIG9uIHQxLmZpdmV0aG91cyA9IGk0LmYxK2k4LnEyIG9yZGVy IGJ5IDEsMikgc3M7CisgcTIgIHwgZml2ZXRob3VzIHwgZjEgCistLS0tLSstLS0tLS0tLS0tLSst LS0tCisgNDU2IHwgICAgICAgNDU2IHwgIDAKKyA0NTYgfCAgICAgICA0NTYgfCAgMAorIDEyMyB8 ICAgICAgIDEyMyB8ICAwCisgMTIzIHwgICAgICAgMTIzIHwgIDAKKyg0IHJvd3MpCisKK3JvbGxi YWNrOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggNGYzODEwNGJhMC4uNmUxZWQ3 MGU4NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xNSw3ICsxNSw2IEBAIHRl c3Q6IHRlc3Rfc2V0dXAKICMgVGhlIGZpcnN0IGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIC0t LS0tLS0tLS0KIHRlc3Q6IGJvb2xlYW4gY2hhciBuYW1lIHZhcmNoYXIgdGV4dCBpbnQyIGludDQg aW50OCBvaWQgZmxvYXQ0IGZsb2F0OCBiaXQgbnVtZXJpYyB0eGlkIHV1aWQgZW51bSBtb25leSBy YW5nZXR5cGVzIHBnX2xzbiByZWdwcm9jCi0KICMgLS0tLS0tLS0tLQogIyBUaGUgc2Vjb25kIGdy b3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIG11bHRpcmFuZ2V0eXBlcyBkZXBlbmRzIG9uIHJhbmdl dHlwZXMKQEAgLTEzNiwzICsxMzUsNiBAQCB0ZXN0OiBmYXN0X2RlZmF1bHQKICMgcnVuIHRhYmxl c3BhY2UgdGVzdCBhdCB0aGUgZW5kIGJlY2F1c2UgaXQgZHJvcHMgdGhlIHRhYmxlc3BhY2UgY3Jl YXRlZCBkdXJpbmcKICMgc2V0dXAgdGhhdCBvdGhlciB0ZXN0cyBtYXkgdXNlLgogdGVzdDogdGFi bGVzcGFjZQorCisjIHRoaXMgdGVzdCBpcyBlcXVpdmFsZW50IHRvIGpvaW5faGFzaCB0ZXN0IGp1 c3QgdGhlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQKK3Rlc3Q6IGpvaW5faGFzaF9wZ2x6CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2hfcGdsei5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luX2hhc2hfcGdsei5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMjY4NmFmYWIyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pvaW5faGFzaF9wZ2x6LnNxbApAQCAtMCwwICsxLDYyNiBAQAorLS0KKy0tIGV4 ZXJjaXNlcyBmb3IgdGhlIGhhc2ggam9pbiBjb2RlCistLQorCitiZWdpbjsKKworc2V0IGxvY2Fs IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IGxvY2FsIHBhcmFsbGVsX3Nl dHVwX2Nvc3QgPSAwOworc2V0IGxvY2FsIGVuYWJsZV9oYXNoam9pbiA9IG9uOworc2V0IGxvY2Fs IHRlbXBfZmlsZV9jb21wcmVzc2lvbiA9ICdwZ2x6JzsKKworLS0gRXh0cmFjdCBidWNrZXQgYW5k IGJhdGNoIGNvdW50cyBmcm9tIGFuIGV4cGxhaW4gYW5hbHl6ZSBwbGFuLiAgSW4KKy0tIGdlbmVy YWwgd2UgY2FuJ3QgbWFrZSBhc3NlcnRpb25zIGFib3V0IGhvdyBtYW55IGJhdGNoZXMgKG9yCist LSBidWNrZXRzKSB3aWxsIGJlIHJlcXVpcmVkIGJlY2F1c2UgaXQgY2FuIHZhcnksIGJ1dCB3ZSBj YW4gaW4gc29tZQorLS0gc3BlY2lhbCBjYXNlcyBhbmQgd2UgY2FuIGNoZWNrIGZvciBncm93dGgu CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBmaW5kX2hhc2gobm9kZSBqc29uKQorcmV0dXJu cyBqc29uIGxhbmd1YWdlIHBscGdzcWwKK2FzCiskJAorZGVjbGFyZQorICB4IGpzb247CisgIGNo aWxkIGpzb247CitiZWdpbgorICBpZiBub2RlLT4+J05vZGUgVHlwZScgPSAnSGFzaCcgdGhlbgor ICAgIHJldHVybiBub2RlOworICBlbHNlCisgICAgZm9yIGNoaWxkIGluIHNlbGVjdCBqc29uX2Fy cmF5X2VsZW1lbnRzKG5vZGUtPidQbGFucycpCisgICAgbG9vcAorICAgICAgeCA6PSBmaW5kX2hh c2goY2hpbGQpOworICAgICAgaWYgeCBpcyBub3QgbnVsbCB0aGVuCisgICAgICAgIHJldHVybiB4 OworICAgICAgZW5kIGlmOworICAgIGVuZCBsb29wOworICAgIHJldHVybiBudWxsOworICBlbmQg aWY7CitlbmQ7CiskJDsKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGhhc2hfam9pbl9iYXRj aGVzKHF1ZXJ5IHRleHQpCityZXR1cm5zIHRhYmxlIChvcmlnaW5hbCBpbnQsIGZpbmFsIGludCkg bGFuZ3VhZ2UgcGxwZ3NxbAorYXMKKyQkCitkZWNsYXJlCisgIHdob2xlX3BsYW4ganNvbjsKKyAg aGFzaF9ub2RlIGpzb247CitiZWdpbgorICBmb3Igd2hvbGVfcGxhbiBpbgorICAgIGV4ZWN1dGUg J2V4cGxhaW4gKGFuYWx5emUsIGZvcm1hdCAnJ2pzb24nJykgJyB8fCBxdWVyeQorICBsb29wCisg ICAgaGFzaF9ub2RlIDo9IGZpbmRfaGFzaChqc29uX2V4dHJhY3RfcGF0aCh3aG9sZV9wbGFuLCAn MCcsICdQbGFuJykpOworICAgIG9yaWdpbmFsIDo9IGhhc2hfbm9kZS0+PidPcmlnaW5hbCBIYXNo IEJhdGNoZXMnOworICAgIGZpbmFsIDo9IGhhc2hfbm9kZS0+PidIYXNoIEJhdGNoZXMnOworICAg IHJldHVybiBuZXh0OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBNYWtlIGEgc2ltcGxl IHJlbGF0aW9uIHdpdGggd2VsbCBkaXN0cmlidXRlZCBrZXlzIGFuZCBjb3JyZWN0bHkKKy0tIGVz dGltYXRlZCBzaXplLgorY3JlYXRlIHRhYmxlIHNpbXBsZSBhcworICBzZWxlY3QgZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMDAwKSBBUyBpZCwgJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWEnOworYWx0ZXIgdGFibGUgc2ltcGxlIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworYW5h bHl6ZSBzaW1wbGU7CisKKy0tIE1ha2UgYSByZWxhdGlvbiB3aG9zZSBzaXplIHdlIHdpbGwgdW5k ZXItZXN0aW1hdGUuICBXZSB3YW50IHN0YXRzCistLSB0byBzYXkgMTAwMCByb3dzLCBidXQgYWN0 dWFsbHkgdGhlcmUgYXJlIDIwLDAwMCByb3dzLgorY3JlYXRlIHRhYmxlIGJpZ2dlcl90aGFuX2l0 X2xvb2tzIGFzCisgIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGFzIGlkLCAnYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSc7CithbHRlciB0YWJsZSBiaWdnZXJfdGhh bl9pdF9sb29rcyBzZXQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOworYWx0ZXIgdGFi bGUgYmlnZ2VyX3RoYW5faXRfbG9va3Mgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CithbmFs eXplIGJpZ2dlcl90aGFuX2l0X2xvb2tzOwordXBkYXRlIHBnX2NsYXNzIHNldCByZWx0dXBsZXMg PSAxMDAwIHdoZXJlIHJlbG5hbWUgPSAnYmlnZ2VyX3RoYW5faXRfbG9va3MnOworCistLSBNYWtl IGEgcmVsYXRpb24gd2hvc2Ugc2l6ZSB3ZSB1bmRlcmVzdGltYXRlIGFuZCB0aGF0IGFsc28gaGFz IGEKKy0tIGtpbmQgb2Ygc2tldyB0aGF0IGJyZWFrcyBvdXIgYmF0Y2hpbmcgc2NoZW1lLiAgV2Ug d2FudCBzdGF0cyB0byBzYXkKKy0tIDIgcm93cywgYnV0IGFjdHVhbGx5IHRoZXJlIGFyZSAyMCww MDAgcm93cyB3aXRoIHRoZSBzYW1lIGtleS4KK2NyZWF0ZSB0YWJsZSBleHRyZW1lbHlfc2tld2Vk IChpZCBpbnQsIHQgdGV4dCk7CithbHRlciB0YWJsZSBleHRyZW1lbHlfc2tld2VkIHNldCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CithbHRlciB0YWJsZSBleHRyZW1lbHlfc2tld2Vk IHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworYW5hbHl6ZSBleHRyZW1lbHlfc2tld2VkOwor aW5zZXJ0IGludG8gZXh0cmVtZWx5X3NrZXdlZAorICBzZWxlY3QgNDIgYXMgaWQsICdhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJworICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAy MDAwMCk7Cit1cGRhdGUgcGdfY2xhc3MKKyAgc2V0IHJlbHR1cGxlcyA9IDIsIHJlbHBhZ2VzID0g cGdfcmVsYXRpb25fc2l6ZSgnZXh0cmVtZWx5X3NrZXdlZCcpIC8gODE5MgorICB3aGVyZSByZWxu YW1lID0gJ2V4dHJlbWVseV9za2V3ZWQnOworCistLSBNYWtlIGEgcmVsYXRpb24gd2l0aCBhIGNv dXBsZSBvZiBlbm9ybW91cyB0dXBsZXMuCitjcmVhdGUgdGFibGUgd2lkZSBhcyBzZWxlY3QgZ2Vu ZXJhdGVfc2VyaWVzKDEsIDIpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4JykgYXMgdDsKK2Fs dGVyIHRhYmxlIHdpZGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CisKKy0tIFRoZSAib3B0 aW1hbCIgY2FzZTogdGhlIGhhc2ggdGFibGUgZml0cyBpbiBtZW1vcnk7IHdlIHBsYW4gZm9yIDEK Ky0tIGJhdGNoLCB3ZSBzdGljayB0byB0aGF0IG51bWJlciwgYW5kIHBlYWsgbWVtb3J5IHVzYWdl IHN0YXlzIHdpdGhpbgorLS0gb3VyIHdvcmtfbWVtIGJ1ZGdldAorCistLSBub24tcGFyYWxsZWwK K3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmln aW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5j cmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3Jv bGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2aW91 cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0 IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFs bGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+ IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2Vk X2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLWF3YXJlIGhhc2ggam9p bgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzRNQic7CitzZXQgbG9jYWwgaGFz aF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9 IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRp YWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisg IGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5n czsKKworLS0gVGhlICJnb29kIiBjYXNlOiBiYXRjaGVzIHJlcXVpcmVkLCBidXQgd2UgcGxhbiB0 aGUgcmlnaHQgbnVtYmVyOyB3ZQorLS0gcGxhbiBmb3Igc29tZSBudW1iZXIgb2YgYmF0Y2hlcywg YW5kIHdlIHN0aWNrIHRvIHRoYXQgbnVtYmVyLCBhbmQKKy0tIHBlYWsgbWVtb3J5IHVzYWdlIHNh eXMgd2l0aGluIG91ciB3b3JrX21lbSBidWRnZXQKKworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9p bnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDA7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211 bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+ IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2Vk X2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBoYXNo IGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9j YWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxf aGFzaCA9IG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20g c2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20g c2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IG9yaWdpbmFsID4gMSBh cyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0 Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZy b20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8g c2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luCitz YXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTkya0InOworc2V0IGxvY2FsIGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBv bjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIg am9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIg am9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFs bHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBm cm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxl IHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworLS0gcGFyYWxsZWwgZnVsbCBtdWx0 aS1iYXRjaCBoYXNoIGpvaW4KK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0 ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0t IFRoZSAiYmFkIiBjYXNlOiBkdXJpbmcgZXhlY3V0aW9uIHdlIG5lZWQgdG8gaW5jcmVhc2UgbnVt YmVyIG9mCistLSBiYXRjaGVzOyBpbiB0aGlzIGNhc2Ugd2UgcGxhbiBmb3IgMSBiYXRjaCwgYW5k IGluY3JlYXNlIGF0IGxlYXN0IGEKKy0tIGNvdXBsZSBvZiB0aW1lcywgYW5kIHBlYWsgbWVtb3J5 IHVzYWdlIHN0YXlzIHdpdGhpbiBvdXIgd29ya19tZW0KKy0tIGJ1ZGdldAorCistLSBub24tcGFy YWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9j YWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2Vs ZWN0IGNvdW50KCopIEZST00gc2ltcGxlIHIgSk9JTiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIFVT SU5HIChpZCk7CitzZWxlY3QgY291bnQoKikgRlJPTSBzaW1wbGUgciBKT0lOIGJpZ2dlcl90aGFu X2l0X2xvb2tzIHMgVVNJTkcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5 X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJv bSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBGUk9NIHNpbXBsZSBy IEpPSU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBVU0lORyAoaWQpOworJCQpOworcm9sbGJhY2sg dG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtb2JsaXZpb3VzIGhhc2gg am9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2Nh bCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9o YXNoID0gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBz aW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAo aWQpOworc2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwg PiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVz KAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9p dF9sb29rcyBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0g cGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5n czsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK3NldCBs b2NhbCB3b3JrX21lbSA9ICcxOTJrQic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9 IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworZXhwbGFpbiAoY29z dHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJpZ2dlcl90aGFu X2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQpOworc2VsZWN0IG9yaWdpbmFsID4g MSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRf YmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVzaW5nIChpZCk7Cisk JCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gVGhlICJ1Z2x5IiBjYXNlOiBpbmNyZWFz aW5nIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyBkdXJpbmcgZXhlY3V0aW9uCistLSBkb2Vzbid0IGhl bHAsIHNvIHN0b3AgdHJ5aW5nIHRvIGZpdCBpbiB3b3JrX21lbSBhbmQgaG9wZSBmb3IgdGhlCist LSBiZXN0OyBpbiB0aGlzIGNhc2Ugd2UgcGxhbiBmb3IgMSBiYXRjaCwgaW5jcmVhc2VzIGp1c3Qg b25jZSBhbmQKKy0tIHRoZW4gc3RvcCBpbmNyZWFzaW5nIGJlY2F1c2UgdGhhdCBkaWRuJ3QgaGVs cCBhdCBhbGwsIHNvIHdlIGJsb3cKKy0tIHJpZ2h0IHRocm91Z2ggdGhlIHdvcmtfbWVtIGJ1ZGdl dCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuLi4KKworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQg c2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7 CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRp cGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9t IHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291 bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOwor c2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CiskJCk7City b2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlv dXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOwor c2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3Bh cmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CitzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAo aWQpOworc2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7Cisk JCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1h d2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMTsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7 CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVf cGFyYWxsZWxfaGFzaCA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQo KikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworc2Vs ZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcg KGlkKTsKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291 bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOwor JCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIEEgY291cGxlIG9mIG90aGVyIGhhc2gg am9pbiB0ZXN0cyB1bnJlbGF0ZWQgdG8gd29ya19tZW0gbWFuYWdlbWVudC4KKworLS0gQ2hlY2sg dGhhdCBFWFBMQUlOIEFOQUxZWkUgaGFzIGRhdGEgZXZlbiBpZiB0aGUgbGVhZGVyIGRvZXNuJ3Qg cGFydGljaXBhdGUKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0 IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgcGFyYWxsZWxfbGVh ZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZWxlY3QgKiBmcm9tIGhhc2hfam9pbl9iYXRjaGVz KAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2lu ZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIEV4ZXJjaXNlIHJlc2Nh bnMuICBXZSdsbCB0dXJuIG9mZiBwYXJhbGxlbF9sZWFkZXJfcGFydGljaXBhdGlvbiBzbworLS0g dGhhdCB3ZSBjYW4gY2hlY2sgdGhhdCBpbnN0cnVtZW50YXRpb24gY29tZXMgYmFjayBjb3JyZWN0 bHkuCisKK2NyZWF0ZSB0YWJsZSBqb2luX2ZvbyBhcyBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGFzIGlkLCAneHh4eHgnOjp0ZXh0IGFzIHQ7CithbHRlciB0YWJsZSBqb2luX2ZvbyBzZXQg KHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKK2NyZWF0ZSB0YWJsZSBqb2luX2JhciBhcyBzZWxlY3Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSBhcyBpZCwgJ3h4eHh4Jzo6dGV4dCBhcyB0OworYWx0 ZXIgdGFibGUgam9pbl9iYXIgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CisKKy0tIG11bHRp LWJhdGNoIHdpdGggcmVzY2FuLCBwYXJhbGxlbC1vYmxpdmlvdXMKK3NhdmVwb2ludCBzZXR0aW5n czsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK3NldCBwYXJhbGxlbF9sZWFkZXJf cGFydGljaXBhdGlvbiA9IG9mZjsKK3NldCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0g MDsKK3NldCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK3NldCBwYXJhbGxlbF90dXBsZV9jb3N0 ID0gMDsKK3NldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBlbmFi bGVfbWF0ZXJpYWwgPSBvZmY7CitzZXQgZW5hYmxlX21lcmdlam9pbiA9IG9mZjsKK3NldCB3b3Jr X21lbSA9ICc2NGtCJzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAo Y29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9p biAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1 c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zv by5pZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgIGxlZnQg am9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBi MiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9m b28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJv bSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9v CisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2lu IGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCAr IDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGlu Z3M7CisKKy0tIHNpbmdsZS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwtb2JsaXZpb3VzCitz YXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQg cGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3Rh YmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFy YWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4g PSBvZmY7CitzZXQgd29ya19tZW0gPSAnNE1CJzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0g MS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2Zv bworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9p biBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQg KyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpv aW5fZm9vCisgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEg am9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlk ICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11 bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgq KSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBq b2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9m b28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworcm9s bGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIG11bHRpLWJhdGNoIHdpdGggcmVzY2FuLCBwYXJhbGxl bC1hd2FyZQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0g b247CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWluX3Bh cmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7 CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJsZV9t ZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNjRrQic7CitzZXQgaGFzaF9tZW1fbXVs dGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZy b20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5f YmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5p ZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgY291bnQo KikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpv aW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9mb28u aWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGZpbmFs ID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxl Y3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBi MS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICAg IG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsK KyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBzaW5nbGUtYmF0Y2ggd2l0aCByZXNj YW4sIHBhcmFsbGVsLWF3YXJlCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFs bGVsX2hhc2ggPSBvbjsKK3NldCBwYXJhbGxlbF9sZWFkZXJfcGFydGljaXBhdGlvbiA9IG9mZjsK K3NldCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK3NldCBwYXJhbGxlbF9zZXR1 cF9jb3N0ID0gMDsKK3NldCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK3NldCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBlbmFibGVfbWF0ZXJpYWwgPSBvZmY7Citz ZXQgZW5hYmxlX21lcmdlam9pbiA9IG9mZjsKK3NldCB3b3JrX21lbSA9ICc0TUInOworc2V0IGhh c2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBj b3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQg ZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24g am9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2Vs ZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIx LnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgIG9u IGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKK3Nl bGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAor JCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVj dCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlk KSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBz cy5pZCAtIDE7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gQSBmdWxsIG91dGVy IGpvaW4gd2hlcmUgZXZlcnkgcmVjb3JkIGlzIG1hdGNoZWQuCisKKy0tIG5vbi1wYXJhbGxlbAor c2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAwOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZy b20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qg IGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChp ZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWxpc20gbm90IHBvc3NpYmxl IHdpdGggcGFyYWxsZWwtb2JsaXZpb3VzIGZ1bGwgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGlu Z3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgbG9jYWwgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNl bGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNp bmcgKGlkKTsKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4g c2ltcGxlIHMgdXNpbmcgKGlkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxl bGlzbSBpcyBwb3NzaWJsZSB3aXRoIHBhcmFsbGVsLWF3YXJlIGZ1bGwgaGFzaCBqb2luCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAgY291bnQoKikgZnJvbSBz aW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCAgY291 bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsK K3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBBIGZ1bGwgb3V0ZXIgam9pbiB3aGVyZSBldmVy eSByZWNvcmQgaXMgbm90IG1hdGNoZWQuCisKKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNl dHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIg ZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworc2VsZWN0ICBj b3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9 IDAgLSBzLmlkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbGlzbSBub3Qg cG9zc2libGUgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgZnVsbCBoYXNoIGpvaW4KK3NhdmVwb2lu dCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK3NldCBsb2NhbCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikK KyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1w bGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUg ciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7Cityb2xsYmFj ayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWxpc20gaXMgcG9zc2libGUgd2l0aCBwYXJhbGxl bC1hd2FyZSBmdWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBs ZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSBy IGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKK3JvbGxiYWNr IHRvIHNldHRpbmdzOworCisKKy0tIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3IgaHVn ZSB0dXBsZXMgKG5vdGUgdXNlIG9mIG5vbi1zdHJpY3QKKy0tIGV4cHJlc3Npb24gYW5kIGxlZnQg am9pbiByZXF1aXJlZCB0byBnZXQgdGhlIGRldG9hc3RlZCB0dXBsZSBpbnRvCistLSB0aGUgaGFz aCB0YWJsZSkKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4gKGhp dHMgRXhlY1BhcmFsbGVsSGFzaExvYWRUdXBsZSBhbmQKKy0tIHN0c19wdXR0dXBsZSBvdmVyc2l6 ZWQgdHVwbGUgY2FzZXMgYmVjYXVzZSBpdCdzIG11bHRpLWJhdGNoKQorc2F2ZXBvaW50IHNldHRp bmdzOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJs ZV9wYXJhbGxlbF9oYXNoID0gb247CitzZXQgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBsZW5n dGgobWF4KHMudCkpCisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2Uo dCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CitzZWxlY3QgbGVuZ3Ro KG1heChzLnQpKQorZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAn JykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBmaW5hbCA+IDEg YXMgbXVsdGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGxl bmd0aChtYXgocy50KSkKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNj ZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxi YWNrIHRvIHNldHRpbmdzOworCisKKy0tIEhhc2ggam9pbiByZXVzZXMgdGhlIEhPVCBzdGF0dXMg Yml0IHRvIGluZGljYXRlIG1hdGNoIHN0YXR1cy4gVGhpcyBjYW4gb25seQorLS0gYmUgZ3VhcmFu dGVlZCB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpZiBhbGwgdGhlIGhhc2ggam9pbiB0dXBs ZSBtYXRjaAorLS0gYml0cyBhcmUgcmVzZXQgYmVmb3JlIHJldXNlLiBUaGlzIGlzIGRvbmUgdXBv biBsb2FkaW5nIHRoZW0gaW50byB0aGUKKy0tIGhhc2h0YWJsZS4KK1NBVkVQT0lOVCBzZXR0aW5n czsKK1NFVCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworU0VUIG1pbl9wYXJhbGxlbF90YWJs ZV9zY2FuX3NpemUgPSAwOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFs bGVsX3R1cGxlX2Nvc3QgPSAwOworQ1JFQVRFIFRBQkxFIGhqdGVzdF9tYXRjaGJpdHNfdDEoaWQg aW50KTsKK0NSRUFURSBUQUJMRSBoanRlc3RfbWF0Y2hiaXRzX3QyKGlkIGludCk7CitJTlNFUlQg SU5UTyBoanRlc3RfbWF0Y2hiaXRzX3QxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBoanRlc3Rf bWF0Y2hiaXRzX3QyIFZBTFVFUyAoMik7CistLSBVcGRhdGUgc2hvdWxkIGNyZWF0ZSBhIEhPVCB0 dXBsZS4gSWYgdGhpcyBzdGF0dXMgYml0IGlzbid0IGNsZWFyZWQsIHdlIHdvbid0CistLSBjb3Jy ZWN0bHkgZW1pdCB0aGUgTlVMTC1leHRlbmRlZCB1bm1hdGNoaW5nIHR1cGxlIGluIGZ1bGwgaGFz aCBqb2luLgorVVBEQVRFIGhqdGVzdF9tYXRjaGJpdHNfdDIgc2V0IGlkID0gMjsKK1NFTEVDVCAq IEZST00gaGp0ZXN0X21hdGNoYml0c190MSB0MSBGVUxMIEpPSU4gaGp0ZXN0X21hdGNoYml0c190 MiB0MiBPTiB0MS5pZCA9IHQyLmlkCisgIE9SREVSIEJZIHQxLmlkOworLS0gVGVzdCBzZXJpYWwg ZnVsbCBoYXNoIGpvaW4uCistLSBSZXNldHRpbmcgcGFyYWxsZWxfc2V0dXBfY29zdCBzaG91bGQg Zm9yY2UgYSBzZXJpYWwgcGxhbi4KKy0tIEp1c3QgdG8gYmUgc2FmZSwgaG93ZXZlciwgc2V0IGVu YWJsZV9wYXJhbGxlbF9oYXNoIHRvIG9mZiwgYXMgcGFyYWxsZWwgZnVsbAorLS0gaGFzaCBqb2lu cyBhcmUgb25seSBzdXBwb3J0ZWQgd2l0aCBzaGFyZWQgaGFzaHRhYmxlcy4KK1JFU0VUIHBhcmFs bGVsX3NldHVwX2Nvc3Q7CitTRVQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitTRUxFQ1Qg KiBGUk9NIGhqdGVzdF9tYXRjaGJpdHNfdDEgdDEgRlVMTCBKT0lOIGhqdGVzdF9tYXRjaGJpdHNf dDIgdDIgT04gdDEuaWQgPSB0Mi5pZDsKK1JPTExCQUNLIFRPIHNldHRpbmdzOworCityb2xsYmFj azsKKworLS0gVmVyaWZ5IHRoYXQgaGFzaCBrZXkgZXhwcmVzc2lvbnMgcmVmZXJlbmNlIHRoZSBj b3JyZWN0CistLSBub2Rlcy4gSGFzaGpvaW4ncyBoYXNoa2V5cyBuZWVkIHRvIHJlZmVyZW5jZSBp dHMgb3V0ZXIgcGxhbiwgSGFzaCdzCistLSBuZWVkIHRvIHJlZmVyZW5jZSBIYXNoJ3Mgb3V0ZXIg cGxhbiAod2hpY2ggaXMgYmVsb3cgSGFzaEpvaW4ncworLS0gaW5uZXIgcGxhbikuIEl0J3Mgbm90 IHRyaXZpYWwgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlZmVyZW5jZXMgYXJlCistLSBjb3JyZWN0ICh3 ZSBkb24ndCBkaXNwbGF5IHRoZSBoYXNoa2V5cyB0aGVtc2VsdmVzKSwgYnV0IGlmIHRoZQorLS0g aGFzaGtleXMgY29udGFpbiBzdWJwbGFuIHJlZmVyZW5jZXMsIHRob3NlIHdpbGwgYmUgZGlzcGxh eWVkLiBGb3JjZQorLS0gc3VicGxhbnMgdG8gYXBwZWFyIGp1c3QgYWJvdXQgZXZlcnl3aGVyZS4K Ky0tCistLSBCdWcgcmVwb3J0OgorLS0gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2Fn ZS1pZC9DQVBwSGZkdkdWZWdGX1RLS1JpQnJTbWF0SkwyZFI5dXdGQ3VSJTJCdGVRXzh0RVhVOG14 ZyU0MG1haWwuZ21haWwuY29tCistLQorQkVHSU47CitTRVQgTE9DQUwgZW5hYmxlX3NvcnQgPSBP RkY7IC0tIGF2b2lkIG1lcmdlam9pbnMKK1NFVCBMT0NBTCBmcm9tX2NvbGxhcHNlX2xpbWl0ID0g MTsgLS0gYWxsb3dzIGVhc3kgY2hhbmdpbmcgb2Ygam9pbiBvcmRlcgorCitDUkVBVEUgVEFCTEUg aGp0ZXN0XzEgKGEgdGV4dCwgYiBpbnQsIGlkIGludCwgYyBib29sKTsKK0NSRUFURSBUQUJMRSBo anRlc3RfMiAoYSBib29sLCBpZCBpbnQsIGIgdGV4dCwgYyBpbnQpOworCitJTlNFUlQgSU5UTyBo anRlc3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDIsIDEsIGZhbHNlKTsgLS0gbWF0 Y2hlcworSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAx LCAyLCBmYWxzZSk7IC0tIGZhaWxzIGlkIGpvaW4gY29uZGl0aW9uCitJTlNFUlQgSU5UTyBoanRl c3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDIwLCAxLCBmYWxzZSk7IC0tIGZhaWxz IDwgNTAKK0lOU0VSVCBJTlRPIGhqdGVzdF8xKGEsIGIsIGlkLCBjKSBWQUxVRVMgKCd0ZXh0Jywg MSwgMSwgZmFsc2UpOyAtLSBmYWlscyAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA9IChTRUxFQ1Qg aGp0ZXN0XzIuYyo1KQorCitJTlNFUlQgSU5UTyBoanRlc3RfMihhLCBpZCwgYiwgYykgVkFMVUVT ICh0cnVlLCAxLCAnYW5vdGhlcicsIDIpOyAtLSBtYXRjaGVzCitJTlNFUlQgSU5UTyBoanRlc3Rf MihhLCBpZCwgYiwgYykgVkFMVUVTICh0cnVlLCAzLCAnYW5vdGhlcicsIDcpOyAtLSBmYWlscyBp ZCBqb2luIGNvbmRpdGlvbgorSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVF UyAodHJ1ZSwgMSwgJ2Fub3RoZXInLCA5MCk7ICAtLSBmYWlscyA8IDU1CitJTlNFUlQgSU5UTyBo anRlc3RfMihhLCBpZCwgYiwgYykgVkFMVUVTICh0cnVlLCAxLCAnYW5vdGhlcicsIDMpOyAtLSBm YWlscyAoU0VMRUNUIGhqdGVzdF8xLmIgKiA1KSA9IChTRUxFQ1QgaGp0ZXN0XzIuYyo1KQorSU5T RVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ3RleHQnLCAx KTsgLS0gIGZhaWxzIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsKKworRVhQTEFJTiAoQ09TVFMg T0ZGLCBWRVJCT1NFKQorU0VMRUNUIGhqdGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEgYTIsaGp0ZXN0 XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQxLCBoanRlc3RfMi50YWJsZW9pZDo6cmVnY2xhc3MgdDIK K0ZST00gaGp0ZXN0XzEsIGhqdGVzdF8yCitXSEVSRQorICAgIGhqdGVzdF8xLmlkID0gKFNFTEVD VCAxIFdIRVJFIGhqdGVzdF8yLmlkID0gMSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICog NSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICog NSkgPCA1MAorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8yLmMgKiA1KSA8IDU1CisgICAgQU5EIGhq dGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsKKworU0VMRUNUIGhqdGVzdF8xLmEgYTEsIGhqdGVzdF8y LmEgYTIsaGp0ZXN0XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQxLCBoanRlc3RfMi50YWJsZW9pZDo6 cmVnY2xhc3MgdDIKK0ZST00gaGp0ZXN0XzEsIGhqdGVzdF8yCitXSEVSRQorICAgIGhqdGVzdF8x LmlkID0gKFNFTEVDVCAxIFdIRVJFIGhqdGVzdF8yLmlkID0gMSkKKyAgICBBTkQgKFNFTEVDVCBo anRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKyAgICBBTkQgKFNFTEVDVCBo anRlc3RfMS5iICogNSkgPCA1MAorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8yLmMgKiA1KSA8IDU1 CisgICAgQU5EIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsKKworRVhQTEFJTiAoQ09TVFMgT0ZG LCBWRVJCT1NFKQorU0VMRUNUIGhqdGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEgYTIsaGp0ZXN0XzEu dGFibGVvaWQ6OnJlZ2NsYXNzIHQxLCBoanRlc3RfMi50YWJsZW9pZDo6cmVnY2xhc3MgdDIKK0ZS T00gaGp0ZXN0XzIsIGhqdGVzdF8xCitXSEVSRQorICAgIGhqdGVzdF8xLmlkID0gKFNFTEVDVCAx IFdIRVJFIGhqdGVzdF8yLmlkID0gMSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkg PSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMS5iICogNSkg PCA1MAorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8yLmMgKiA1KSA8IDU1CisgICAgQU5EIGhqdGVz dF8xLmEgPD4gaGp0ZXN0XzIuYjsKKworU0VMRUNUIGhqdGVzdF8xLmEgYTEsIGhqdGVzdF8yLmEg YTIsaGp0ZXN0XzEudGFibGVvaWQ6OnJlZ2NsYXNzIHQxLCBoanRlc3RfMi50YWJsZW9pZDo6cmVn Y2xhc3MgdDIKK0ZST00gaGp0ZXN0XzIsIGhqdGVzdF8xCitXSEVSRQorICAgIGhqdGVzdF8xLmlk ID0gKFNFTEVDVCAxIFdIRVJFIGhqdGVzdF8yLmlkID0gMSkKKyAgICBBTkQgKFNFTEVDVCBoanRl c3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKyAgICBBTkQgKFNFTEVDVCBoanRl c3RfMS5iICogNSkgPCA1MAorICAgIEFORCAoU0VMRUNUIGhqdGVzdF8yLmMgKiA1KSA8IDU1Cisg ICAgQU5EIGhqdGVzdF8xLmEgPD4gaGp0ZXN0XzIuYjsKKworUk9MTEJBQ0s7CisKKy0tIFZlcmlm eSB0aGF0IHdlIGJlaGF2ZSBzYW5lbHkgd2hlbiB0aGUgaW5uZXIgaGFzaCBrZXlzIGNvbnRhaW4g cGFyYW1ldGVycworLS0gKHRoYXQgaXMsIG91dGVyIG9yIGxhdGVyYWwgcmVmZXJlbmNlcykuICBU aGlzIHNpdHVhdGlvbiBoYXMgdG8gZGVmZWF0CistLSByZS11c2Ugb2YgdGhlIGlubmVyIGhhc2gg dGFibGUgYWNyb3NzIHJlc2NhbnMuCitiZWdpbjsKK3NldCBsb2NhbCBlbmFibGVfaGFzaGpvaW4g PSBvbjsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGk4LnEyLCBzcy4qIGZyb20KK2lu dDhfdGJsIGk4LAorbGF0ZXJhbCAoc2VsZWN0IHQxLmZpdmV0aG91cywgaTQuZjEgZnJvbSB0ZW5r MSB0MSBqb2luIGludDRfdGJsIGk0CisgICAgICAgICBvbiB0MS5maXZldGhvdXMgPSBpNC5mMStp OC5xMiBvcmRlciBieSAxLDIpIHNzOworCitzZWxlY3QgaTgucTIsIHNzLiogZnJvbQoraW50OF90 YmwgaTgsCitsYXRlcmFsIChzZWxlY3QgdDEuZml2ZXRob3VzLCBpNC5mMSBmcm9tIHRlbmsxIHQx IGpvaW4gaW50NF90YmwgaTQKKyAgICAgICAgIG9uIHQxLmZpdmV0aG91cyA9IGk0LmYxK2k4LnEy IG9yZGVyIGJ5IDEsMikgc3M7CisKK3JvbGxiYWNrOwotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0 KQoK --0000000000009907cb062ae9f593--