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.96) (envelope-from ) id 1voJRl-00186s-1F for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 10:52:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1voJRk-003DtI-1S for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 10:52:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1voJRj-003Dt8-2w for pgsql-hackers@lists.postgresql.org; Fri, 06 Feb 2026 10:52:19 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1voJRf-00000001Lbh-0xlu for pgsql-hackers@postgresql.org; Fri, 06 Feb 2026 10:52:17 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b883787268fso75461366b.3 for ; Fri, 06 Feb 2026 02:52:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770375134; cv=none; d=google.com; s=arc-20240605; b=UKls8mZ1FEdtnSNccNpJXZOFDu0M/oAZcCPlQGo0+9wIQO2gbkXI0mzCcXkur2pQAn zHkgOHKwfmOi0c0tzpi9JWMM7MSHakBCAPA8V8MzMMP8UuAMMNzR7PIDVzbyi6uH0bnv 8tbNKmd7NGxK49Nx2oVQEJRXztIFlFhCeGGkHweukrEeP+ElUz+hkOgpWU3S8TVZYfWi iKQ9IEDUsDS3yxfOaqm0KCo/3jHD9UtP4xUVwX0SbXc3tYMc/I3NNcdKpwCAbNkD/8GQ g8TJBaUw8xkdN1vY1RVxV/SzdSK8LH8haubFEHqWFdLRhDpAzI1LuMdhJKJXX07GSIUY u/8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=cDtP03BDDsyGazXJzwhXiETJX/zgRZWZRVc8cxjwZP4=; fh=4xUZBsjwpsecLsfseE6cMZT3zpnhNPkMoJo9GZT+6Tg=; b=NfLFKM+85QDBN3qLpAT4ad7r7ficOc6/6rL0gZZ7xZyUg/wRB9dXJp2Rboy0UL4Lhv yxaQlT6x4oVqRBVeySawIiPUiKJQhXKtOizbM8I8cgnzXxOHE94NgqCfiTRlAQt0vVAW La1xoTNe1Y4874kyFAeNYHmtce0Ch7stnK3M4bkA5Ti1f75qRtkt8DeW7bfvf4rlFSCl i7jkB76J5hRLaKeaTdpHpOSOsO+rppdElCH5DPaNRz2kwjdpgrs4IYHXd+bXs4WjuQ73 jd67Ct+rq+hzmGYOYLZ/uSWMFhsmPdGF3rXFWvZPpdzY0n2vC4tOOsL7J6wVEwVkrPic Kqwg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770375134; x=1770979934; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cDtP03BDDsyGazXJzwhXiETJX/zgRZWZRVc8cxjwZP4=; b=Fq1510tLCF/au9w/MD3gK+DRfBN88pxl1XKLVNlvq5myOWMKs2PJBMDqQ8/qjMCCPW onfnY7Itc8CNqA/NiU3uTKpyGLESaFZu3/p43G+J63l6NUNjShzBfh1GEEIqskcs5u2a CAi96Vx/TYOVBzy+OZsrP0IHnFLpa/erUZmEBVsE8AtCV1FDOowSpG35fMhITVEnVJg5 X2vCuummuhy1VfJLyfjYYOc2fDwv75vVoC9zJWTm3ffI6CO2sGwJLnkOmzYNK3vGszec LGjgNHczc0iYeIwCxeaZXU7WiBcwH01iDVpgKQxOnytYD5uDZf7yh6muhKipwr6gklzv 5UsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770375134; x=1770979934; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cDtP03BDDsyGazXJzwhXiETJX/zgRZWZRVc8cxjwZP4=; b=sLFloIuPkUkhq9sFl7u4H2Khh1KvzYBma6Cr7wa23tnxj5ZUKLmZOVrCLFYQi4H2pU 3lpaji5FnJell3Bv8HLHT9KBY8ZZ5heeJI6NtZe2/GpT9VFJb+NC8oQARSbwvTic5u8J 54UkM0fnPR4yeG6TBKoo4u0YtXuGHvyUPSLBdlAx/fKGkoOIoDZhU6XKZiWeYnWVwm99 hj8mfk+dknIexhKAbois1TLZ2g7EFFQOXonXgAKw8O7fHnpCJZkppCT1ZAeWN3qRmbaN qtEufApnvQNMNNqfZSvpnS+TxOiM/CyTXNXoBVDXrqaG/kPwdC0UKcGY1WVzTjRk/wlF ILKQ== X-Gm-Message-State: AOJu0YwmJzQv4hxGFiToVQD8OTU6z4JVeUerZL5FxTHRLCSN6Buispyd JzqIwBal5md/BeEHg//kVt1p7RR0kagdAn/qxNA4gHhtSzqPzn2cMd3kuCtH2IDDD2RZ5VGwI9X u2nreX8pXy8OmijHfj35cFsmgd8TA8jZxIVUQ X-Gm-Gg: AZuq6aKcVFdEb5NmZs9/E7QNKni4mmWiqOq8962Wko8UiVOmjEowAQ8UB3iroHQ5A09 lMjyxDx6QgtHabJVZ49k+Sn0R1TbJtbijKJuKR8R8YnDRBLeEXD2WfW2vq4wjqdaaN599sfnCev KAPj5txC8VX+j+DeoavYT3yscLVfplFt1bZIfIq+tOHIab8bZLuY+nwnWWmfrO8R725Cetx3cKu nrNdjji7T+LxHZWD0jakLfYV5ff5uO0+jHD9L/8E/X2WfYrEY/pxXnV+WIIttMQxCo68ZTqhfBv abIk6C52PXyWWIn/mO+gLc5rbWc+IgYT7nzZ X-Received: by 2002:a17:906:7944:b0:b87:7938:7b77 with SMTP id a640c23a62f3a-b8edf2f9476mr133620066b.30.1770375133206; Fri, 06 Feb 2026 02:52:13 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Alexandre Felipe Date: Fri, 6 Feb 2026 10:52:01 +0000 X-Gm-Features: AZwV_QjPJI0MuiN7uwO3pzk0WdDwbZMrJCU1aeX33kNXrSrXQjTB-1FQ20clRS8 Message-ID: Subject: Re: New access method for b-tree. To: "pgsql-hackers@postgresql.org" , pt@bowt.ie, michael@paquier.xyz, tgl@sss.pgh.pa.us, "peter@eisentraut.org" Cc: Ants Aasma , Tomas Vondra , Alexandre Felipe , =?UTF-8?B?TWljaGHFgiBLxYJlY3plaw==?= , pg@bowt.ie Content-Type: multipart/mixed; boundary="000000000000ef5980064a259486" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ef5980064a259486 Content-Type: multipart/alternative; boundary="000000000000ef597f064a259484" --000000000000ef597f064a259484 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello again hackers! +pt@bowt.ie : That seems to be the one that is probably the most familiar with the index scan (based on the commits). +michael@paquier.xyz , +tgl@sss.pgh.pa.us , +peter@eisentraut.org as the top 3 committers to nbtree over the last ~6 months. I have made substantial progress on adding a few features. I have questions, but I will let you go first :) Motivation: *In technical terms:* this proposal is to take advantage of a btree index when the query is filtered by a few distinct prefixes and ordered by a suffix and has a limit. *In non technical:* This could help to efficiently render a social network feed, where each user can select a list of users whose posts they want to see, and the posts must be ordered from newest to oldest. *Performance Comparison* I did a test with a toy table, please find more details below. With limit 100 | Method | Shared Hit | Shared Read | Exec Time | |------------|-----------:|------------:|----------:| | Merge | 13 | 119 | 13 ms | | IndexScan | 15,308 | 525,310 | 3,409 ms | With limit 1,000,000 | Method | SharedHit | SharRead | Temp I | Temp O | Exec Time | |------------|-----------:|---------:|-------:|-------:|----------:| | Merge | 980,318 | 19,721 | 0 | 0 | 2,128 ms | | Sequential | 15,208 | 525,410 | 20,207 | 35,384 | 3,762 ms | | Bitmap | 629 | 113,759 | 20,207 | 35,385 | 5,487 ms | | IndexScan | 7,880,619 | 126,706 | 20,945 | 35,386 | 5,874 ms | Sequential scans and bitmap scans in this case reduces significantly the number of accessed buff because the table has only four integer columns, and these methods can read all the lines on a given page at a time. However that comes at the cost of resorting to an in-disk sort method. For the query with limit 100 we get no temp files as we are using a top-100 sort. make check passes *Experiment details* Consider a 100M row table formed (a,b,c,d) \in 100 x 100 x 100 x 100 ```sql CREATE TABLE grid AS ( SELECT a, b, c, d, FROM generate_series(1, 100) AS a, generate_series(1, 100) AS b, generate_series(1, 100) AS c, generate_series(1, 100) AS d ); CREATE INDEX grid_index ON grid (a, b, c); ANALYSE grid; ``` Now let's say that we need to find certain number of rows filtered by a and ordered by b; ```sql PREPARE grid_query(int) AS SELECT sum(d) FROM ( SELECT * FROM grid WHERE a IN (2,3,5,8,13,21,34,55) AND b >=3D 0 ORDER BY b LIMIT $1) t; ``` --- Now with limit 100, with index merge scan (notice Index Prefixes in the plan). ```sql SET enable_indexmergescan =3D on; EXPLAIN (ANALYSE) EXECUTE grid_query(100); ``` ```text Buffers: shared hit=3D13 read=3D119 -> Limit (cost=3D0.57..87.29 rows=3D100 width=3D16) (actual time=3D5.528..12.999 rows=3D100.00 loops=3D1) Buffers: shared hit=3D13 read=3D119 -> Index Scan using grid_a_b_c_idx on grid (cost=3D0.57..93.36 rows=3D107 width=3D16) (actual time=3D5.528..12.994 rows=3D100.00 loops=3D1= ) Index Cond: (b >=3D 0) *Index Prefixes: *(a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) Index Searches: 8 Buffers: shared hit=3D13 read=3D119 Planning: Buffers: shared hit=3D59 read=3D23 Planning Time: 4.619 ms Execution Time: 13.055 ms ``` ```sql SET enable_indexmergescan =3D off; EXPLAIN (ANALYSE) EXECUTE grid_query(100); ``` ```text Aggregate (cost=3D1603588.06..1603588.07 rows=3D1 width=3D8) (actual time=3D3406.624..3408.710 rows=3D1.00 loops=3D1) Buffers: shared hit=3D15308 read=3D525310 -> Limit (cost=3D1603575.17..1603586.81 rows=3D100 width=3D16) (actual time=3D3406.601..3408.702 rows=3D100.00 loops=3D1) Buffers: shared hit=3D15308 read=3D525310 -> Gather Merge (cost=3D1603575.17..2514342.92 rows=3D7819999 width=3D16) (actual time=3D3406.598..3408.695 rows=3D100.00 loops=3D1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=3D15308 read=3D525310 -> Sort (cost=3D1602575.14..1610720.98 rows=3D3258333 width=3D16) (actual time=3D3393.782..3393.784 rows=3D100.00 loops=3D3) Sort Key: grid.b Sort Method: top-N heapsort Memory: 32kB Buffers: shared hit=3D15308 read=3D525310 Worker 0: Sort Method: top-N heapsort Memory: 32kB Worker 1: Sort Method: top-N heapsort Memory: 32kB -> *Parallel Seq Scan* on grid (cost=3D0.00..1478044.00 rows=3D3258333 width=3D16) (actual time=3D0.944..= 3129.896 rows=3D2666666.67 loops=3D3) Filter: ((b >=3D 0) AND (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[]))) Rows Removed by Filter: 30666667 Buffers: shared hit=3D15234 read=3D525310 Planning Time: 0.370 ms Execution Time: 3409.134 ms ``` Now queries with limit 1,000,000 ```sql SET enable_indexmergescan =3D on; EXPLAIN ANALYSE EXECUTE grid_query(1000000); ``` Query executed with the proposed access method. Notice in the plan Index Prefixes and Index Cond. ```text Buffers: shared hit=3D980318 read=3D19721 -> Limit (cost=3D0.57..867259.84 rows=3D1000000 width=3D16) (actual time=3D2.854..2103.438 rows=3D1000000.00 loops=3D1) Buffers: shared hit=3D980318 read=3D19721 -> Index Scan using grid_a_b_c_idx on grid (cost=3D0.57..867265.= 91 rows=3D1000007 width=3D16) (actual time=3D2.852..2066.205 rows=3D1000000.00= loops=3D1) Index Cond: (b >=3D 0) *Index Prefixes:* (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) Index Searches: 8 Buffers: shared hit=3D980318 read=3D19721 Planning Time: 0.328 ms Execution Time: 2127.811 ms ``` If we disable index_mergescan we naturally we fall into a sequential scan. ```sql SET enable_indexmergescan =3D off; EXPLAIN ANALYSE EXECUTE grid_query(1000000); ``` ```text Buffers: shared hit=3D15208 read=3D525410, temp read=3D20207 written=3D3= 5384 -> Limit (cost=3D1942895.64..2059362.12 rows=3D1000000 width=3D16) (ac= tual time=3D3467.012..3712.044 rows=3D1000000.00 loops=3D1) Buffers: shared hit=3D15208 read=3D525410, temp read=3D20207 written=3D35384 -> Gather Merge (cost=3D1942895.64..2853663.39 rows=3D7819999 width=3D16) (actual time=3D3467.010..3671.220 rows=3D1000000.00 loops=3D1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=3D15208 read=3D525410, temp read=3D20207 written=3D35384 -> Sort (cost=3D1941895.62..1950041.45 rows=3D3258333 width=3D16) (actual time=3D3455.852..3476.358 rows=3D334576.33 loops=3D3) Sort Key: grid.b Sort Method: *external merge Disk: 47016kB* Buffers: shared hit=3D15208 read=3D525410, temp read= =3D20207 written=3D35384 Worker 0: Sort Method: external merge Disk: 46976kB Worker 1: Sort Method: external merge Disk: 47000kB -> *Parallel Seq Scan* on grid (cost=3D0.00..1478044.00 rows=3D3258333 width=3D16) (actual time=3D2.789..= 2779.483 rows=3D2666666.67 loops=3D3) Filter: ((b >=3D 0) AND (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[]))) Rows Removed by Filter: 30666667 Buffers: shared hit=3D15134 read=3D525410 Planning Time: 0.332 ms Execution Time: 3761.866 ms ``` If we disable sequential scans, then we get a bitmap scan ```sql SET enable_seqscan =3D off; EXPLAIN ANALYSE EXECUTE grid_query(1000000); ``` ```text Buffers: shared hit=3D629 read=3D113759 written=3D2, temp read=3D20207 written=3D35385 -> Limit (cost=3D1998199.78..2114666.26 rows=3D1000000 width=3D16) (ac= tual time=3D5170.456..5453.433 rows=3D1000000.00 loops=3D1) Buffers: shared hit=3D629 read=3D113759 written=3D2, temp read=3D2= 0207 written=3D35385 -> Gather Merge (cost=3D1998199.78..2908967.53 rows=3D7819999 width=3D16) (actual time=3D5170.455..5413.254 rows=3D1000000.00 loops=3D1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=3D629 read=3D113759 written=3D2, temp read=3D20207 written=3D35385 -> Sort (cost=3D1997199.75..2005345.59 rows=3D3258333 width=3D16) (actual time=3D5156.929..5177.507 rows=3D334500.67 loops=3D3) Sort Key: grid.b Sort Method: external merge Disk: 47032kB Buffers: shared hit=3D629 read=3D113759 written=3D2, t= emp read=3D20207 written=3D35385 Worker 0: Sort Method: external merge Disk: 47280kB Worker 1: Sort Method: external merge Disk: 46680kB -> Parallel Bitmap Heap Scan on grid (cost=3D107691.54..1533348.13 rows=3D3258333 width=3D16) (actual time=3D299.891..4489.787 rows=3D2666666.67 loops=3D3) Recheck Cond: ((a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) AND (b >=3D 0)) Rows *Removed by Index Recheck*: 2410242 Heap Blocks: exact=3D13100 lossy=3D22639 Buffers: shared hit=3D615 read=3D113759 written= =3D2 Worker 0: Heap Blocks: exact=3D13077 lossy=3D22= 755 Worker 1: Heap Blocks: exact=3D13036 lossy=3D22= 421 -> *Bitmap Index Scan* on grid_a_b_c_idx (cost=3D0.00..105736.54 rows=3D7820000 width=3D0) (actual time=3D297.651..= 297.651 rows=3D8000000.00 loops=3D1) Index Cond: ((a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) AND (b >=3D 0)) Index Searches: 7 Buffers: shared hit=3D13 read=3D7293 writt= en=3D2 Planning Time: 0.165 ms Execution Time: 5487.213 ms ``` If we disable bitmap scans we finally get an index scan ```sql SET enable_bitmapscan =3D off; EXPLAIN ANALYSE EXECUTE grid_query(1000000); ``` ``` Buffers: shared hit=3D7883221 read=3D124111, temp read=3D20699 written= =3D35385 -> Limit (cost=3D7201203.08..7317669.55 rows=3D1000000 width=3D16) (ac= tual time=3D4414.478..4674.400 rows=3D1000000.00 loops=3D1) Buffers: shared hit=3D7883221 read=3D124111, temp read=3D20699 written=3D35385 -> Gather Merge (cost=3D7201203.08..8111970.83 rows=3D7819999 width=3D16) (actual time=3D4414.476..4633.982 rows=3D1000000.00 loops=3D1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=3D7883221 read=3D124111, temp read=3D206= 99 written=3D35385 -> Sort (cost=3D7200203.05..7208348.88 rows=3D3258333 width=3D16) (actual time=3D4390.625..4411.896 rows=3D334567.00 loops=3D3) Sort Key: grid.b Sort Method: *external merge Disk: 47304kB* Buffers: shared hit=3D7883221 read=3D124111, temp read=3D20699 written=3D35385 Worker 0: Sort Method: external merge Disk: 47304kB Worker 1: Sort Method: external merge Disk: 46384kB -> *Parallel Index Scan* using grid_a_b_c_idx on grid (cost=3D0.57..6736351.43 rows=3D3258333 width=3D16) (actual time=3D46.925..3796.915 rows=3D2666666.67 loops=3D3) Index Cond: ((a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) AND (b >=3D 0)) Index Searches: 7 Buffers: shared hit=3D7883208 read=3D124110 Planning Time: 0.385 ms Execution Time: 4713.325 ms ``` On Thu, Feb 5, 2026 at 6:59=E2=80=AFAM Alexandre Felipe < o.alexandre.felipe@gmail.com> wrote: > Thank you for looking into this. > > Now we can execute a, still narrow, family queries! > > Maybe it helps to see this as a *social network feeds*. Imagine a social > network, you have a few friends, or follow a few people, and you want to > see their updates ordered by date. For each user we have a different > combination of users that we have to display. But maybe, even having > hundreds of users we will only show the first 10. > > There is a low hanging fruit on the skip scan, if we need N rows, and one > group already has M rows we could stop there. > If Nx is the number of friends, and M is the number of posts to show. > This runs with complexity (Nx * M) rows, followed by an (Nx * M) sort, > instead of (Nx * N) followed by an (Nx * N) sort. > Where M =3D 10 and N is 1000 this is a significant improvement. > But if M ~ N, the merge scan that runs with M + Nx row accesses, (M + Nx) > heap operations. > If everything is on the same page the skip scan would win. > > The cost estimation is probably far off. > I am also not considering the filters applied after this operator, and I > don't know if the planner infrastructure is able to adjust it by itself. > This is where I would like reviewer's feedback. I think that the planner > costs are something to be determined experimentally. > > Next I will make it slightly more general handling > * More index columns: Index (a, b, s...) could support WHERE a IN (...) > ORDER BY b LIMIT N (ignoring s...) > * Multi-column prefix: WHERE (a, b) IN (...) ORDER BY c > * Non-leading prefix: WHERE b IN (...) AND a =3D const ORDER BY c on inde= x > (a, b, c) > > --- > Kind Regards, > Alexandre > > On Wed, Feb 4, 2026 at 7:13=E2=80=AFAM Micha=C5=82 K=C5=82eczek wrote: > >> >> >> On 3 Feb 2026, at 22:42, Ants Aasma wrote: >> >> On Mon, 2 Feb 2026 at 01:54, Tomas Vondra wrote: >> >> I'm also wondering how common is the targeted query pattern? How common >> it is to have an IN condition on the leading column in an index, and >> ORDER BY on the second one? >> >> >> I have seen this pattern multiple times. My nickname for it is the >> timeline view. Think of the social media timeline, showing posts from >> all followed accounts in timestamp order, returned in reasonably sized >> batches. The naive SQL query will have to scan all posts from all >> followed accounts and pass them through a top-N sort. When the total >> number of posts is much larger than the batch size this is much slower >> than what is proposed here (assuming I understand it correctly) - >> effectively equivalent to running N index scans through Merge Append. >> >> >> My workarounds I have proposed users have been either to rewrite the >> query as a UNION ALL of a set of single value prefix queries wrapped >> in an order by limit. This gives the exact needed merge append plan >> shape. But repeating the query N times can get unwieldy when the >> number of values grows, so the fallback is: >> >> SELECT * FROM unnest(:friends) id, LATERAL ( >> SELECT * FROM posts >> WHERE user_id =3D id >> ORDER BY tstamp DESC LIMIT 100) >> ORDER BY tstamp DESC LIMIT 100; >> >> The downside of this formulation is that we still have to fetch a >> batch worth of items from scans where we otherwise would have only had >> to look at one index tuple. >> >> >> GIST can be used to handle this kind of queries as it supports multiple >> sort orders. >> The only problem is that GIST does not support ORDER BY column. >> One possible workaround is [1] but as described there it does not play >> well with partitioning. >> I=E2=80=99ve started drafting support for ORDER BY column in GIST - see = [2]. >> I think it would be easier to implement and maintain than a new IAM (but >> I don=E2=80=99t have enough knowledge and experience to implement it mys= elf) >> >> [1] >> https://www.postgresql.org/message-id/3FA1E0A9-8393-41F6-88BD-62EEEA1EC2= 1F%40kleczek.org >> [2] >> https://www.postgresql.org/message-id/B2AC13F9-6655-4E27-BFD3-068844E5DC= 91%40kleczek.org >> >> =E2=80=94 >> Kind regards, >> Michal >> > --000000000000ef597f064a259484 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello again hackers= !

+pt@bowt.i= e: That seems to be the one that is probably the most familiar with the= index scan (based on the commits).
+michael@paquier.xyz=C2=A0,=C2=A0+tgl@sss.pgh.pa.us=C2= =A0,=C2=A0+peter= @eisentraut.org=C2=A0as the top 3 committers to nbtree over the last ~6= months.

I=C2=A0 have made substantial=C2=A0pr= ogress on adding a few features. I have questions, but I will let you go fi= rst :)

Motivation:
In technical terms: this proposal is to take advantage of a btree= index when the query is filtered by a few distinct prefixes and ordered by= a suffix and has a limit.
In non technical: This coul= d help to efficiently render=C2=A0a social network feed, where each user ca= n select a list of users whose posts they want to see, and the posts must b= e ordered from newest to oldest.

Performance Comparison

I did a test with a toy table, = please find more details below.

With limit 100

| Method =C2=A0 =C2=A0 | Shared Hit | Shared Read | Exec Time |<= br>|------------|-----------:|------------:|----------:|
| Merge =C2=A0 = =C2=A0 =C2=A0| =C2=A0 =C2=A0 =C2=A0 =C2=A0 13 | =C2=A0 =C2=A0 =C2=A0 =C2=A0= 119 | =C2=A0 =C2=A0 13 ms |
| IndexScan =C2=A0| =C2=A0 =C2=A0 15,308 | = =C2=A0 =C2=A0 525,310 | =C2=A03,409 ms |


With limit 1,000,000=

| Method =C2=A0 =C2=A0 | =C2=A0SharedHit |= SharRead | Temp I | Temp O | Exec Time |
|------------|-----------:|---= ------:|-------:|-------:|----------:|
| Merge =C2=A0 =C2=A0 =C2=A0| =C2= =A0 =C2=A0980,318 | =C2=A0 19,721 | =C2=A0 =C2=A0 =C2=A00 | =C2=A0 =C2=A0 = =C2=A00 | =C2=A02,128 ms |
| Sequential | =C2=A0 =C2=A0 15,208 | =C2=A05= 25,410 | 20,207 | 35,384 | =C2=A03,762 ms |
| Bitmap =C2=A0 =C2=A0 | =C2= =A0 =C2=A0 =C2=A0 =C2=A0629 | =C2=A0113,759 | 20,207 | 35,385 | =C2=A05,487= ms |
| IndexScan =C2=A0| =C2=A07,880,619 | =C2=A0126,706 | 20,945 | 35,= 386 | =C2=A05,874 ms |


Sequential scans and bitmap scans in t= his case reduces significantly the number of
accessed buff because the = table has only four integer columns, and these methods
can read all the= lines on a given page at a time.

However that comes at the cost of = resorting to an in-disk sort method.
For the query with limit 100 we ge= t no temp files as we are using a
top-100 sort.

make check passes


Experiment details=

Consider a 100M row table formed (a,b,c,d) \in 100 x 100= x 100 x 100


```sql
CREATE TABLE gr= id AS (
=C2=A0 =C2=A0 SELECT a, b, c, d, FROM
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 generate_series(1, 100) AS a,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 genera= te_series(1, 100) AS b,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 generate_series(1, = 100) AS c,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 generate_series(1, 100) AS d
= );

CREATE INDEX grid_index ON grid (a, b, c);
ANALYSE grid;
```

Now let's say that we need to find certain number of ro= ws filtered by a and ordered by b;
```sql
PR= EPARE grid_query(int) AS
SELECT sum(d) FROM (
=C2=A0 =C2=A0 SELECT * = FROM grid
=C2=A0 =C2=A0 WHERE a IN (2,3,5,8,13,21,34,55) AND b >=3D = 0
=C2=A0 =C2=A0 ORDER BY b
=C2=A0 =C2=A0 LIMIT $1) t;

```=

---


Now with limit 100, with index merge scan (notice In= dex Prefixes in the plan).

```sql
SET enable_indexmergescan =3D o= n;
EXPLAIN (ANALYSE) EXECUTE grid_query(100);
```

```text
= =C2=A0 =C2=A0Buffers: shared hit=3D13 read=3D119
=C2=A0 =C2=A0-> =C2= =A0Limit =C2=A0(cost=3D0.57..87.29 rows=3D100 width=3D16) (actual time=3D5.= 528..12.999 rows=3D100.00 loops=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0B= uffers: shared hit=3D13 read=3D119
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-&g= t; =C2=A0Index Scan using grid_a_b_c_idx on grid =C2=A0(cost=3D0.57..93.36 = rows=3D107 width=3D16) (actual time=3D5.528..12.994 rows=3D100.00 loops=3D1= )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Index Cond: (b = >=3D 0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Ind= ex Prefixes: (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[]))=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Index Searches: 8<= br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared h= it=3D13 read=3D119
=C2=A0Planning:
=C2=A0 =C2=A0Buffers: shared hit= =3D59 read=3D23
=C2=A0Planning Time: 4.619 ms
=C2=A0Execution Time: 1= 3.055 ms
=C2=A0```


```sql
SET enable_indexmergescan =3D of= f;
EXPLAIN (ANALYSE) EXECUTE grid_query(100);
```

```text
= =C2=A0Aggregate =C2=A0(cost=3D1603588.06..1603588.07 rows=3D1 width=3D8) (a= ctual time=3D3406.624..3408.710 rows=3D1.00 loops=3D1)
=C2=A0 =C2=A0Buff= ers: shared hit=3D15308 read=3D525310
=C2=A0 =C2=A0-> =C2=A0Limit =C2= =A0(cost=3D1603575.17..1603586.81 rows=3D100 width=3D16) (actual time=3D340= 6.601..3408.702 rows=3D100.00 loops=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Buffers: shared hit=3D15308 read=3D525310
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0-> =C2=A0Gather Merge =C2=A0(cost=3D1603575.17..2514342.92 rows= =3D7819999 width=3D16) (actual time=3D3406.598..3408.695 rows=3D100.00 loop= s=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers Pl= anned: 2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers = Launched: 2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffe= rs: shared hit=3D15308 read=3D525310
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0-> =C2=A0Sort =C2=A0(cost=3D1602575.14..1610720.98 r= ows=3D3258333 width=3D16) (actual time=3D3393.782..3393.784 rows=3D100.00 l= oops=3D3)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0Sort Key: grid.b
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Sort Method: top-N heapsort =C2=A0Memory= : 32kB
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0Buffers: shared hit=3D15308 read=3D525310
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Worker 0: =C2=A0= Sort Method: top-N heapsort =C2=A0Memory: 32kB
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Worker 1: =C2=A0Sort Me= thod: top-N heapsort =C2=A0Memory: 32kB
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Parallel Seq Sc= an on grid =C2=A0(cost=3D0.00..1478044.00 rows=3D3258333 width=3D16) (a= ctual time=3D0.944..3129.896 rows=3D2666666.67 loops=3D3)
=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=A0Filter: ((b >=3D 0) AND (a =3D ANY ('{2,3,5,8,13,21,34,55}= '::integer[])))
=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=A0Rows Removed by Filter: 306666= 67
=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=A0Buffers: shared hit=3D15234 read=3D525310
= =C2=A0Planning Time: 0.370 ms
=C2=A0Execution Time: 3409.134 ms
=C2= =A0```

Now queries with limit 1,000,000

```sql
SET enable_= indexmergescan =3D on;
EXPLAIN ANALYSE EXECUTE grid_query(1000000);
`= ``

Query executed with the proposed access method. Notice in the pla= n Index Prefixes and Index Cond.
```text
=C2=A0 =C2=A0Buffers: shared= hit=3D980318 read=3D19721
=C2=A0 =C2=A0-> =C2=A0Limit =C2=A0(cost=3D= 0.57..867259.84 rows=3D1000000 width=3D16) (actual time=3D2.854..2103.438 r= ows=3D1000000.00 loops=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: s= hared hit=3D980318 read=3D19721
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> = =C2=A0Index Scan using grid_a_b_c_idx on grid =C2=A0(cost=3D0.57..867265.91= rows=3D1000007 width=3D16) (actual time=3D2.852..2066.205 rows=3D1000000.0= 0 loops=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Inde= x Cond: (b >=3D 0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0Index Prefixes: (a =3D ANY ('{2,3,5,8,13,21,34,55}'::i= nteger[]))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Index = Searches: 8
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffe= rs: shared hit=3D980318 read=3D19721
=C2=A0Planning Time: 0.328 ms
= =C2=A0Execution Time: 2127.811 ms
=C2=A0```

If we disable index_m= ergescan we naturally we fall into a sequential scan.

```sql
SET = enable_indexmergescan =3D off;
EXPLAIN ANALYSE EXECUTE grid_query(100000= 0);
```
```text
=C2=A0 =C2=A0Buffers: shared hit=3D15208 read=3D52= 5410, temp read=3D20207 written=3D35384
=C2=A0 =C2=A0-> =C2=A0Limit = =C2=A0(cost=3D1942895.64..2059362.12 rows=3D1000000 width=3D16) (actual tim= e=3D3467.012..3712.044 rows=3D1000000.00 loops=3D1)
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0Buffers: shared hit=3D15208 read=3D525410, temp read=3D20207 = written=3D35384
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Gather Mer= ge =C2=A0(cost=3D1942895.64..2853663.39 rows=3D7819999 width=3D16) (actual = time=3D3467.010..3671.220 rows=3D1000000.00 loops=3D1)
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers Planned: 2
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers Launched: 2
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit=3D15208 re= ad=3D525410, temp read=3D20207 written=3D35384
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Sort =C2=A0(cost=3D1941895.62..1= 950041.45 rows=3D3258333 width=3D16) (actual time=3D3455.852..3476.358 rows= =3D334576.33 loops=3D3)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0Sort Key: grid.b
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Sort Method: external m= erge =C2=A0Disk: 47016kB
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit=3D15208 read=3D525410= , temp read=3D20207 written=3D35384
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Worker 0: =C2=A0Sort Method: exter= nal merge =C2=A0Disk: 46976kB
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Worker 1: =C2=A0Sort Method: external mer= ge =C2=A0Disk: 47000kB
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Parallel Seq Scan on grid =C2= =A0(cost=3D0.00..1478044.00 rows=3D3258333 width=3D16) (actual time=3D2.789= ..2779.483 rows=3D2666666.67 loops=3D3)
=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=A0Filter: (= (b >=3D 0) AND (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])))=
=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=A0Rows Removed by Filter: 30666667
=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=A0Buffers: shared hit=3D15134 read=3D525410
=C2=A0Planning Ti= me: 0.332 ms
=C2=A0Execution Time: 3761.866 ms
```
=C2=A0
If we= disable sequential scans, then we get a bitmap scan

```sql
SET e= nable_seqscan =3D off;
EXPLAIN ANALYSE EXECUTE grid_query(1000000);
`= ``
```text
=C2=A0 =C2=A0Buffers: shared hit=3D629 read=3D113759 writt= en=3D2, temp read=3D20207 written=3D35385
=C2=A0 =C2=A0-> =C2=A0Limit= =C2=A0(cost=3D1998199.78..2114666.26 rows=3D1000000 width=3D16) (actual ti= me=3D5170.456..5453.433 rows=3D1000000.00 loops=3D1)
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0Buffers: shared hit=3D629 read=3D113759 written=3D2, temp = read=3D20207 written=3D35385
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2= =A0Gather Merge =C2=A0(cost=3D1998199.78..2908967.53 rows=3D7819999 width= =3D16) (actual time=3D5170.455..5413.254 rows=3D1000000.00 loops=3D1)
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers Planned: 2=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Workers Launched: = 2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared= hit=3D629 read=3D113759 written=3D2, temp read=3D20207 written=3D35385
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Sort =C2= =A0(cost=3D1997199.75..2005345.59 rows=3D3258333 width=3D16) (actual time= =3D5156.929..5177.507 rows=3D334500.67 loops=3D3)
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Sort Key: grid.b
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Sort Method: external merge =C2=A0Disk: 47032kB
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit= =3D629 read=3D113759 written=3D2, temp read=3D20207 written=3D35385
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Wo= rker 0: =C2=A0Sort Method: external merge =C2=A0Disk: 47280kB
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Worker 1:= =C2=A0Sort Method: external merge =C2=A0Disk: 46680kB
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Para= llel Bitmap Heap Scan on grid =C2=A0(cost=3D107691.54..1533348.13 rows=3D32= 58333 width=3D16) (actual time=3D299.891..4489.787 rows=3D2666666.67 loops= =3D3)
=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=A0Recheck Cond: ((a =3D ANY ('{2,3,5,8,13,= 21,34,55}'::integer[])) AND (b >=3D 0))
=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=A0Ro= ws Removed by Index Recheck: 2410242
=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=A0Heap B= locks: exact=3D13100 lossy=3D22639
=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=A0Buffers: shar= ed hit=3D615 read=3D113759 written=3D2
=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=A0Worker 0:= =C2=A0Heap Blocks: exact=3D13077 lossy=3D22755
=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=A0Wo= rker 1: =C2=A0Heap Blocks: exact=3D13036 lossy=3D22421
=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=A0Bitmap Index Scan on grid_a_b_c_idx =C2=A0(cost=3D= 0.00..105736.54 rows=3D7820000 width=3D0) (actual time=3D297.651..297.651 r= ows=3D8000000.00 loops=3D1)
=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= =A0Index Cond: ((a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) AN= D (b >=3D 0))
=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=A0Index Search= es: 7
=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=A0Buffers: shared hit=3D1= 3 read=3D7293 written=3D2
=C2=A0Planning Time: 0.165 ms
=C2=A0Executi= on Time: 5487.213 ms
```

If we disable bitmap scans we finally ge= t an index scan

```sql
SET enable_bitmapscan =3D off;
EXPLAIN = ANALYSE EXECUTE grid_query(1000000);
```
```
=C2=A0 =C2=A0Buffers:= shared hit=3D7883221 read=3D124111, temp read=3D20699 written=3D35385
= =C2=A0 =C2=A0-> =C2=A0Limit =C2=A0(cost=3D7201203.08..7317669.55 rows=3D= 1000000 width=3D16) (actual time=3D4414.478..4674.400 rows=3D1000000.00 loo= ps=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit=3D7883221 = read=3D124111, temp read=3D20699 written=3D35385
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0-> =C2=A0Gather Merge =C2=A0(cost=3D7201203.08..8111970.83 = rows=3D7819999 width=3D16) (actual time=3D4414.476..4633.982 rows=3D1000000= .00 loops=3D1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Wo= rkers Planned: 2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= Workers Launched: 2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Buffers: shared hit=3D7883221 read=3D124111, temp read=3D20699 written= =3D35385
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> = =C2=A0Sort =C2=A0(cost=3D7200203.05..7208348.88 rows=3D3258333 width=3D16) = (actual time=3D4390.625..4411.896 rows=3D334567.00 loops=3D3)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Sort Key:= grid.b
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0Sort Method: external merge =C2=A0Disk: 47304kB
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Bu= ffers: shared hit=3D7883221 read=3D124111, temp read=3D20699 written=3D3538= 5
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0Worker 0: =C2=A0Sort Method: external merge =C2=A0Disk: 47304kB
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Worker 1: =C2=A0Sort Method: external merge =C2=A0Disk: 46384kB
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-&= gt; =C2=A0Parallel Index Scan using grid_a_b_c_idx on grid =C2=A0(co= st=3D0.57..6736351.43 rows=3D3258333 width=3D16) (actual time=3D46.925..379= 6.915 rows=3D2666666.67 loops=3D3)
=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=A0Index Cond: (= (a =3D ANY ('{2,3,5,8,13,21,34,55}'::integer[])) AND (b >=3D 0))=
=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=A0Index Searches: 7
=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=A0Buffe= rs: shared hit=3D7883208 read=3D124110
=C2=A0Planning Time: 0.385 ms
= =C2=A0Execution Time: 4713.325 ms
=C2=A0```

=C2=A0

=



On Thu, Feb 5, 2026 at 6:59= =E2=80=AFAM Alexandre Felipe <o.alexandre.felipe@gmail.com> wrote:
Thank = you for looking into this.

Now we can execute a, still n= arrow, family queries!

Maybe it helps to see this = as a=C2=A0social network=C2=A0feeds. Imagine a social network, you h= ave a few friends, or follow a few people, and you want to see their update= s ordered by date. For each user we have a different combination of users t= hat we have to display. But maybe, even having hundreds of users we will on= ly show the first 10.

There is a low hanging fruit= on the skip scan, if we need N rows, and one group already has M rows we c= ould stop there.
If Nx is the number of friends, and M is the num= ber of posts to show.
This runs with complexity (Nx * M) rows, fo= llowed by an (Nx * M) sort, instead of (Nx * N) followed by an (Nx * N) sor= t.
Where M =3D 10 and N is 1000 this is a significant improvement= .
But if M ~ N, the merge scan=C2=A0that runs with M=C2=A0+ Nx ro= w accesses, (M=C2=A0+ Nx) heap operations.
If everything is on th= e same page the skip scan would win.

The cost esti= mation is probably far off.
I am also not considering the filters= =C2=A0applied after this=C2=A0operator,=C2=A0and I don't know if the pl= anner infrastructure is able to adjust it by itself.
This is wher= e I would like reviewer's feedback. I think that the planner costs are = something to be determined experimentally.

Next I = will make it slightly more general handling
* More index columns: Index = (a, b, s...) could support WHERE a IN (...) ORDER BY b LIMIT N (ignoring s.= ..)
* Multi-column prefix: WHERE (a, b) IN (...) ORDER BY c
* Non-lea= ding prefix: WHERE b IN (...) AND a =3D const ORDER BY c on index (a, b, c)=

---
Kind Regards,
Alexandre

On Wed, Feb 4, 2026 at 7:13=E2=80=AFAM Micha=C5=82 K=C5=82eczek <michal@kleczek.org= > wrote:


On 3 Feb 2026, at 22:42, Ants Aasma <ants.aasma@cybertec.at> wro= te:

On Mon, 2 Feb 2026 at 01:54, Tomas Vondra <tomas@vondra.me> wrot= e:
I'm also wondering how common is the ta= rgeted query pattern? How common
it is to have an IN condition on the le= ading column in an index, and
ORDER BY on the second one?

I have seen this pattern multiple times. My nickname for it is thetimeline view. Think of the social media timeline, showing posts from
a= ll followed accounts in timestamp order, returned in reasonably sized
ba= tches. The naive SQL query will have to scan all posts from all
followed= accounts and pass them through a top-N sort. When the total
number of p= osts is much larger than the batch size this is much slower
than what is= proposed here (assuming I understand it correctly) -
effectively equiva= lent to running N index scans through Merge Append.

My workarounds I have proposed use= rs have been either to rewrite the
query as a UNION ALL of a set of sing= le value prefix queries wrapped
in an order by limit. This gives the exa= ct needed merge append plan
shape. But repeating the query N times can g= et unwieldy when the
number of values grows, so the fallback is:

= SELECT * FROM unnest(:friends) id, LATERAL (
=C2=A0=C2=A0=C2=A0SELECT *= FROM posts
=C2=A0=C2=A0=C2=A0WHERE user_id =3D id
=C2=A0=C2=A0=C2= =A0ORDER BY tstamp DESC LIMIT 100)
ORDER BY tstamp DESC LIMIT 100;
The downside of this formulation is that we still have to fetch a
batc= h worth of items from scans where we otherwise would have only had
to lo= ok at one index tuple.

GIST= can be used to handle this kind of queries as it supports multiple sort or= ders.
The only problem is that GIST does not support ORDER BY col= umn.
One possible workaround is [1] but as described there it doe= s not play well with partitioning.
I=E2=80=99ve started drafting = support for ORDER BY column in GIST - see [2].
I think it would b= e easier to implement and maintain than a new IAM (but I don=E2=80=99t have= enough knowledge and experience to implement it myself)
=E2=80=94
Kind regards,
Michal
--000000000000ef597f064a259484-- --000000000000ef5980064a259486 Content-Type: application/octet-stream; name="0003-MERGE-SCAN-Planner-integration.patch" Content-Disposition: attachment; filename="0003-MERGE-SCAN-Planner-integration.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlapnos02 RnJvbSBhZDEyM2EzZjhkYTNkOTUyNjJiMjU1M2U5MGRkOWM4ZmJiOGQyMzM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBUaHUsIDUgRmViIDIwMjYgMDU6MDk6NDggKzAwMDAKU3ViamVjdDog W1BBVENIIDMvNF0gW01FUkdFLVNDQU5dIFBsYW5uZXIgaW50ZWdyYXRpb24KCi0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRtZXJnZXNjYW4uYyAgfCAgNjAgKysrKysrLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgfCAxMjkgKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICB8ICAgNSArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgfCAgMTEgKysKIHNyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgIHwgMTg4ICsrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyAgIHwgICA4ICsKIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVy Z2Uub3V0IHwgIDE2ICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9tZXJnZS5zcWwgICAg ICB8ICAgOSArKwogMTQgZmlsZXMgY2hhbmdlZCwgNDM3IGluc2VydGlvbnMoKyksIDYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA1ZTg5Yjg2YTYyYy4uNTM2MTVm YjA4ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0xMjYsNiArMTI2LDggQEAgUmVs YXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2Mg PSBOVUxMOwogCisJc2Nhbi0+eHNfbnVtX21lcmdlX3ByZWZpeGVzID0gMDsKKwogCXJldHVybiBz Y2FuOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idG1lcmdl c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRtZXJnZXNjYW4uYwppbmRleCA3 MDgyOGRjNzNkMy4uZWRhMWU2ODM1MjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0bWVyZ2VzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRt ZXJnZXNjYW4uYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgi CiAjaW5jbHVkZSAibGliL3BhaXJpbmdoZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRl ICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtMTY5LDcg KzE3MCw4IEBAIGJ0X21lcmdlX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQljdXJzb3ItPmV4 aGF1c3RlZCA9IHByZWZpeF9udWxsc1tpXTsJLyogTlVMTCBwcmVmaXggPSBleGhhdXN0ZWQgKi8K IAkJY3Vyc29yLT5zb3J0X2tleV9pc251bGwgPSB0cnVlOwogCQlCVFNjYW5Qb3NJbnZhbGlkYXRl KGN1cnNvci0+cG9zKTsKLQkJY3Vyc29yLT50dXBsZXMgPSBOVUxMOworCQkvKiBBbGxvY2F0ZSB0 dXBsZSB3b3Jrc3BhY2UgZm9yIGluZGV4LW9ubHkgc2NhbnMgKi8KKwkJY3Vyc29yLT50dXBsZXMg PSBwYWxsb2MoQkxDS1NaKTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBtZXJnZSBoZWFwICov CkBAIC0yMTksNiArMjIxLDE1IEBAIGJ0X21lcmdlX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCQlzdGF0ZS0+YWN0aXZlX2N1cnNvcnMrKzsKIAkJCX0K IAkJfQorCisJCS8qCisJCSAqIFRyYWNrIGludGVybmFsIHR1cGxlIHJlYWRzIGZvciBzdGF0cy4g V2UgcmVhZCBhY3RpdmVfY3Vyc29ycyB0dXBsZXMKKwkJICogZHVyaW5nIGluaXRpYWxpemF0aW9u LiBPbmUgb2YgdGhlc2Ugd2lsbCBiZSByZXR1cm5lZCBmaXJzdCBhbmQKKwkJICogY291bnRlZCBi eSBpbmRleF9nZXRuZXh0X3RpZCwgc28gd2UgY291bnQgKGFjdGl2ZV9jdXJzb3JzIC0gMSkgaGVy ZS4KKwkJICovCisJCWlmIChzdGF0ZS0+YWN0aXZlX2N1cnNvcnMgPiAxKQorCQkJcGdzdGF0X2Nv dW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJICBzdGF0ZS0+ YWN0aXZlX2N1cnNvcnMgLSAxKTsKIAl9CiAKIAkvKiBHZXQgdGhlIGN1cnNvciB3aXRoIHRoZSBz bWFsbGVzdCBzdWZmaXggdmFsdWUgKi8KQEAgLTIyOCw5ICsyMzksMTUgQEAgYnRfbWVyZ2VfZ2V0 bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCW5vZGUgPSBwYWly aW5naGVhcF9yZW1vdmVfZmlyc3Qoc3RhdGUtPm1lcmdlX2hlYXApOwogCWN1cnNvciA9IHBhaXJp bmdoZWFwX2NvbnRhaW5lcihCVE1lcmdlQ3Vyc29yLCBwaF9ub2RlLCBub2RlKTsKIAotCS8qIFNl dCB1cCB0aGUgaGVhcCBUSUQgZnJvbSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKi8KKwkv KiBTZXQgdXAgdGhlIGhlYXAgVElEIGFuZCBpbmRleCB0dXBsZSBmcm9tIHRoZSBjdXJyZW50IGN1 cnNvciBwb3NpdGlvbiAqLwogCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKGN1cnNvci0+cG9zKSk7 Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnNvci0+cG9zLml0ZW1zW2N1cnNvci0+cG9zLml0ZW1J bmRleF0uaGVhcFRpZDsKKwl7CisJCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJmN1cnNvci0+ cG9zLml0ZW1zW2N1cnNvci0+cG9zLml0ZW1JbmRleF07CisJCXNjYW4tPnhzX2hlYXB0aWQgPSBj dXJySXRlbS0+aGVhcFRpZDsKKwkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIHNldCB0aGUgaW5k ZXggdHVwbGUgcG9pbnRlciAqLworCQlpZiAoY3Vyc29yLT50dXBsZXMpCisJCQlzY2FuLT54c19p dHVwID0gKEluZGV4VHVwbGUpIChjdXJzb3ItPnR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNl dCk7CisJfQogCiAJLyogQWR2YW5jZSBjdXJzb3IgdG8gbmV4dCB0dXBsZSAqLwogCWlmIChidF9t ZXJnZV9jdXJzb3JfYWR2YW5jZShzdGF0ZSwgc2NhbiwgY3Vyc29yKSkKQEAgLTI1NSw5ICsyNzIs MjMgQEAgYnRfbWVyZ2VfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogdm9pZAogYnRfbWVyZ2VfZW5kKEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlKQogeworCWlu dAkJCWk7CisKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJLyogUmVsZWFzZSBh bnkgYnVmZmVyIHBpbnMgaGVsZCBieSBjdXJzb3JzICovCisJZm9yIChpID0gMDsgaSA8IHN0YXRl LT5udW1fY3Vyc29yczsgaSsrKQorCXsKKwkJQlRNZXJnZUN1cnNvciAqY3Vyc29yID0gJnN0YXRl LT5jdXJzb3JzW2ldOworCisJCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKGN1cnNvci0+cG9zKSAmJiBC dWZmZXJJc1ZhbGlkKGN1cnNvci0+cG9zLmJ1ZikpCisJCXsKKwkJCVJlbGVhc2VCdWZmZXIoY3Vy c29yLT5wb3MuYnVmKTsKKwkJCWN1cnNvci0+cG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCX0K Kwl9CisKIAkvKiBGcmVlIHRoZSBtZW1vcnkgY29udGV4dCwgd2hpY2ggZnJlZXMgYWxsIGFsbG9j YXRpb25zICovCiAJTWVtb3J5Q29udGV4dERlbGV0ZShzdGF0ZS0+bWVyZ2VfY29udGV4dCk7CiB9 CkBAIC0zMDIsOCArMzMzLDE0IEBAIGJ0X21lcmdlX2N1cnNvcl9pbml0KEJUTWVyZ2VTY2FuU3Rh dGUgKnN0YXRlLAogCS8qIEludmFsaWRhdGUgY3VycmVudCBwb3NpdGlvbiB0byBmb3JjZSBfYnRf Zmlyc3QgKi8KIAlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAotCS8qIERpc2Fi bGUgYXJyYXkga2V5IGhhbmRsaW5nIGZvciB0aGlzIGN1cnNvcidzIHNjYW4gKi8KKwkvKgorCSAq IERpc2FibGUgYXJyYXkga2V5IGhhbmRsaW5nIGZvciB0aGlzIGN1cnNvcidzIHNjYW4uCisJICog V2UgbmVlZCB0byBjbGVhciBib3RoIG51bUFycmF5S2V5cyBhbmQgbmVlZFByaW1TY2FuIHRvIGF2 b2lkCisJICogYXNzZXJ0aW9ucyBpbiBfYnRfcmVhZGZpcnN0cGFnZSB0aGF0IGV4cGVjdCBhcnJh eSBrZXlzIHdoZW4KKwkgKiBuZWVkUHJpbVNjYW4gaXMgc2V0LgorCSAqLwogCXNvLT5udW1BcnJh eUtleXMgPSAwOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAogCS8qIFBvc2l0aW9uIGF0 IGZpcnN0IG1hdGNoaW5nIHR1cGxlICovCiAJZm91bmQgPSBfYnRfZmlyc3Qoc2Nhbiwgc3RhdGUt PmRpcmVjdGlvbik7CkBAIC0zMTMsNiArMzUwLDE2IEBAIGJ0X21lcmdlX2N1cnNvcl9pbml0KEJU TWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAogCQkvKiBDb3B5IHBvc2l0aW9uIHRvIGN1cnNvciAqLwog CQltZW1jcHkoJmN1cnNvci0+cG9zLCAmc28tPmN1cnJQb3MsIHNpemVvZihCVFNjYW5Qb3NEYXRh KSk7CiAKKwkJLyoKKwkJICogQ29weSB0aGUgdHVwbGUgZGF0YSBmb3IgaW5kZXgtb25seSBzY2Fu cy4KKwkJICogVGhlIHR1cGxlIHdvcmtzcGFjZSBjb250YWlucyBjb3BpZXMgb2YgaW5kZXggdHVw bGVzIHJlZmVyZW5jZWQKKwkJICogYnkgaXRlbXMgaW4gY3VyclBvcy4KKwkJICovCisJCWlmIChz by0+Y3VyclR1cGxlcyAmJiBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPiAwKQorCQl7CisJ CQltZW1jcHkoY3Vyc29yLT50dXBsZXMsIHNvLT5jdXJyVHVwbGVzLCBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQpOworCQl9CisKIAkJLyogRXh0cmFjdCB0aGUgc29ydCBrZXkgZm9yIGhlYXAg b3JkZXJpbmcgKi8KIAkJY3Vyc29yLT5zb3J0X2tleSA9IGJ0X21lcmdlX2V4dHJhY3Rfc29ydGtl eShzdGF0ZSwgc2NhbiwgY3Vyc29yLAogCQkJCQkJCQkJCQkJCSZjdXJzb3ItPnNvcnRfa2V5X2lz bnVsbCk7CkBAIC0zOTAsNiArNDM3LDExIEBAIGJ0X21lcmdlX2N1cnNvcl9hZHZhbmNlKEJUTWVy Z2VTY2FuU3RhdGUgKnN0YXRlLAogCiAJaWYgKGZvdW5kKQogCXsKKwkJLyoKKwkJICogRG9uJ3Qg Y291bnQgaGVyZSAtIHRoZSBhZHZhbmNlZC10byB0dXBsZSB3aWxsIGJlIHJldHVybmVkIGxhdGVy CisJCSAqIGFuZCBjb3VudGVkIGJ5IGluZGV4X2dldG5leHRfdGlkIGF0IHRoYXQgdGltZS4KKwkJ ICovCisKIAkJLyogRXh0cmFjdCBuZXcgc29ydCBrZXkgKi8KIAkJY3Vyc29yLT5zb3J0X2tleSA9 IGJ0X21lcmdlX2V4dHJhY3Rfc29ydGtleShzdGF0ZSwgc2NhbiwgY3Vyc29yLAogCQkJCQkJCQkJ CQkJCSZjdXJzb3ItPnNvcnRfa2V5X2lzbnVsbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YwppbmRleCAzZGVjMWVlNjU3ZC4uMGU1NWM0ODc0YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNp bmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9zdHJhdG51bS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1vcC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0u aCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKQEAgLTM0LDYgKzM2LDcgQEAKICNpbmNs dWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNs dWRlICJ1dGlscy9pbmRleF9zZWxmdW5jcy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIApAQCAtOTgsNiArMTAxLDggQEAgc3Rh dGljIHZvaWQgX2J0X3BhcmFsbGVsX3NlcmlhbGl6ZV9hcnJheXMoUmVsYXRpb24gcmVsLCBCVFBh cmFsbGVsU2NhbkRlc2MgYnRzY2EKIAkJCQkJCQkJCQkgIEJUU2Nhbk9wYXF1ZSBzbyk7CiBzdGF0 aWMgdm9pZCBfYnRfcGFyYWxsZWxfcmVzdG9yZV9hcnJheXMoUmVsYXRpb24gcmVsLCBCVFBhcmFs bGVsU2NhbkRlc2MgYnRzY2FuLAogCQkJCQkJCQkJCUJUU2Nhbk9wYXF1ZSBzbyk7CitzdGF0aWMg Ym9vbCBidF9pbml0X21lcmdlX3NjYW5fZnJvbV9rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisK IHN0YXRpYyB2b2lkIGJ0dmFjdXVtc2NhbihJbmRleFZhY3V1bUluZm8gKmluZm8sIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2Fs bGJhY2ssIHZvaWQgKmNhbGxiYWNrX3N0YXRlLAogCQkJCQkJIEJUQ3ljbGVJZCBjeWNsZWlkKTsK QEAgLTIyMSw2ICsyMjYsMTA2IEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVl cywgYm9vbCAqaXNudWxsLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBidF9pbml0X21l cmdlX3NjYW5fZnJvbV9rZXlzCisgKgkJSW5pdGlhbGl6ZSBtZXJnZSBzY2FuIHN0YXRlIGZyb20g dGhlIHByZXByb2Nlc3NlZCBzY2FuIGtleXMuCisgKgorICogUmV0dXJucyB0cnVlIGlmIG1lcmdl IHNjYW4gd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4KKyAqIFJldHVybnMgZmFsc2UgaWYg bWVyZ2Ugc2NhbiBjYW5ub3QgYmUgdXNlZCAoZS5nLiwgbm8gc3VpdGFibGUgYXJyYXkga2V5KS4K KyAqLworc3RhdGljIGJvb2wKK2J0X2luaXRfbWVyZ2Vfc2Nhbl9mcm9tX2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCVR1cGxlRGVzYwlp dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlTY2FuS2V5CQlhcnJheUtleSA9IE5V TEw7CisJQXJyYXlUeXBlICAqYXJyOworCURhdHVtCSAgICpwcmVmaXhfdmFsdWVzOworCWJvb2wJ ICAgKnByZWZpeF9udWxsczsKKwlpbnQJCQludW1fcHJlZml4ZXM7CisJaW50CQkJcHJlZml4X2F0 dG5vOworCWludAkJCXN1ZmZpeF9hdHRubzsKKwlPaWQJCQlzdWZmaXhfY21wX29pZDsKKwlPaWQJ CQlzdWZmaXhfY29sbGF0aW9uOworCU9pZAkJCW9wZmFtaWx5OworCU9pZAkJCWVsZW10eXBlOwor CWludDE2CQllbGVtbGVuOworCWJvb2wJCWVsZW1ieXZhbDsKKwljaGFyCQllbGVtYWxpZ247CisJ aW50CQkJaTsKKworCS8qIExvb2sgZm9yIFNLX1NFQVJDSEFSUkFZIG9uIGZpcnN0IGNvbHVtbiBp biB0aGUgcmF3IHNjYW4ga2V5cyAqLworCWZvciAoaSA9IDA7IGkgPCBzY2FuLT5udW1iZXJPZktl eXM7IGkrKykKKwl7CisJCVNjYW5LZXkJCXNrID0gJnNjYW4tPmtleURhdGFbaV07CisKKwkJaWYg KChzay0+c2tfZmxhZ3MgJiBTS19TRUFSQ0hBUlJBWSkgJiYKKwkJCXNrLT5za19hdHRubyA9PSAx ICYmCisJCQlzay0+c2tfc3RyYXRlZ3kgPT0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQl7CisJ CQlhcnJheUtleSA9IHNrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYXJyYXlLZXkgPT0g TlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRXh0cmFjdCBhcnJheSB2YWx1ZXMgZnJvbSB0 aGUgc2NhbiBrZXkgKi8KKwlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoYXJyYXlLZXktPnNrX2Fy Z3VtZW50KTsKKwludW1fcHJlZml4ZXMgPSBBcnJheUdldE5JdGVtcyhBUlJfTkRJTShhcnIpLCBB UlJfRElNUyhhcnIpKTsKKworCWlmIChudW1fcHJlZml4ZXMgPCAyKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiBHZXQgYXJyYXkgZWxlbWVudCB0eXBlIGluZm8gKi8KKwllbGVtdHlwZSA9IEFSUl9F TEVNVFlQRShhcnIpOworCWdldF90eXBsZW5ieXZhbGFsaWduKGVsZW10eXBlLCAmZWxlbWxlbiwg JmVsZW1ieXZhbCwgJmVsZW1hbGlnbik7CisKKwkvKiBEZWNvbnN0cnVjdCB0aGUgYXJyYXkgaW50 byBpbmRpdmlkdWFsIGVsZW1lbnRzICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyLCBlbGVtdHlw ZSwgZWxlbWxlbiwgZWxlbWJ5dmFsLCBlbGVtYWxpZ24sCisJCQkJCSAgJnByZWZpeF92YWx1ZXMs ICZwcmVmaXhfbnVsbHMsICZudW1fcHJlZml4ZXMpOworCisJLyogQXR0cmlidXRlIG51bWJlcnMg KDEtYmFzZWQpICovCisJcHJlZml4X2F0dG5vID0gMTsKKwlzdWZmaXhfYXR0bm8gPSAyOworCisJ LyogR2V0IHRoZSBvcGZhbWlseSBmcm9tIHRoZSBpbmRleCAqLworCW9wZmFtaWx5ID0gcmVsLT5y ZF9vcGZhbWlseVtzdWZmaXhfYXR0bm8gLSAxXTsKKworCS8qIEdldCBjb2xsYXRpb24gZnJvbSB0 aGUgc3VmZml4IGNvbHVtbiAqLworCXN1ZmZpeF9jb2xsYXRpb24gPSBUdXBsZURlc2NBdHRyKGl0 dXBkZXNjLCBzdWZmaXhfYXR0bm8gLSAxKS0+YXR0Y29sbGF0aW9uOworCisJLyogR2V0IHRoZSBj b21wYXJpc29uIGZ1bmN0aW9uIE9JRCBmb3IgdGhlIHN1ZmZpeCBjb2x1bW4gKi8KKwlzdWZmaXhf Y21wX29pZCA9IGdldF9vcGZhbWlseV9wcm9jKG9wZmFtaWx5LAorCQkJCQkJCQkJICAgVHVwbGVE ZXNjQXR0cihpdHVwZGVzYywgc3VmZml4X2F0dG5vIC0gMSktPmF0dHR5cGlkLAorCQkJCQkJCQkJ ICAgVHVwbGVEZXNjQXR0cihpdHVwZGVzYywgc3VmZml4X2F0dG5vIC0gMSktPmF0dHR5cGlkLAor CQkJCQkJCQkJICAgQlRPUkRFUl9QUk9DKTsKKworCWlmICghT2lkSXNWYWxpZChzdWZmaXhfY21w X29pZCkpCisJeworCQlwZnJlZShwcmVmaXhfdmFsdWVzKTsKKwkJcGZyZWUocHJlZml4X251bGxz KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIG1lcmdlIHNjYW4g c3RhdGUgKi8KKwlzby0+bWVyZ2VTdGF0ZSA9IGJ0X21lcmdlX2luaXQoc2NhbiwKKwkJCQkJCQkJ ICAgcHJlZml4X3ZhbHVlcywKKwkJCQkJCQkJICAgcHJlZml4X251bGxzLAorCQkJCQkJCQkgICBu dW1fcHJlZml4ZXMsCisJCQkJCQkJCSAgIHByZWZpeF9hdHRubywKKwkJCQkJCQkJICAgc3VmZml4 X2F0dG5vLAorCQkJCQkJCQkgICBzdWZmaXhfY21wX29pZCwKKwkJCQkJCQkJICAgc3VmZml4X2Nv bGxhdGlvbik7CisKKwlwZnJlZShwcmVmaXhfdmFsdWVzKTsKKwlwZnJlZShwcmVmaXhfbnVsbHMp OworCisJcmV0dXJuIChzby0+bWVyZ2VTdGF0ZSAhPSBOVUxMKTsKK30KKwogLyoKICAqCWJ0Z2V0 dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCiAgKi8KQEAgLTIzNSw2 ICszNDAsMjQgQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCS8qIGJ0cmVlIGluZGV4ZXMgYXJlIG5ldmVyIGxvc3N5ICovCiAJc2Nhbi0+eHNfcmVj aGVjayA9IGZhbHNlOwogCisJLyoKKwkgKiBDaGVjayBpZiBtZXJnZSBzY2FuIG9wdGltaXphdGlv biBzaG91bGQgYmUgdXNlZC4KKwkgKiBJbml0aWFsaXplIG1lcmdlIHNjYW4gc3RhdGUgb24gZmly c3QgY2FsbCBpZiBuZWVkZWQuCisJICovCisJaWYgKHNjYW4tPnhzX251bV9tZXJnZV9wcmVmaXhl cyA+IDAgJiYgc28tPm1lcmdlU3RhdGUgPT0gTlVMTCkKKwl7CisJCWlmICghYnRfaW5pdF9tZXJn ZV9zY2FuX2Zyb21fa2V5cyhzY2FuKSkKKwkJeworCQkJLyogTWVyZ2Ugc2NhbiBpbml0IGZhaWxl ZCwgZmFsbCB0aHJvdWdoIHRvIHJlZ3VsYXIgc2NhbiAqLworCQkJc2Nhbi0+eHNfbnVtX21lcmdl X3ByZWZpeGVzID0gMDsKKwkJfQorCX0KKworCS8qIFVzZSBtZXJnZSBzY2FuIGlmIGluaXRpYWxp emVkICovCisJLyogVXNlIG1lcmdlIHNjYW4gaWYgaW5pdGlhbGl6ZWQgKi8KKwlpZiAoc28tPm1l cmdlU3RhdGUgIT0gTlVMTCkKKwkJcmV0dXJuIGJ0X21lcmdlX2dldG5leHQoc2NhbiwgZGlyKTsK KwogCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9ybXMgYW5vdGhlciBwcmltaXRpdmUgaW5k ZXggc2NhbiAqLwogCWRvCiAJewpAQCAtMzY1LDYgKzQ4OCw5IEBAIGJ0YmVnaW5zY2FuKFJlbGF0 aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5raWxsZWRJdGVtcyA9IE5V TEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KIAlzby0+bnVtS2lsbGVkID0gMDsKIAorCS8qIEluaXRp YWxpemUgbWVyZ2Ugc2NhbiBzdGF0ZSB0byBOVUxMICovCisJc28tPm1lcmdlU3RhdGUgPSBOVUxM OworCiAJLyoKIAkgKiBXZSBkb24ndCBrbm93IHlldCB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgYmUg aW5kZXgtb25seSwgc28gd2UgZG8gbm90CiAJICogYWxsb2NhdGUgdGhlIHR1cGxlIHdvcmtzcGFj ZSBhcnJheXMgdW50aWwgYnRyZXNjYW4uICBIb3dldmVyLCB3ZSBzZXQgdXAKQEAgLTQ4Niw2ICs2 MTIsOSBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlwZnJlZShzby0+a2lsbGVk SXRlbXMpOwogCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQogCQlwZnJlZShzby0+Y3VyclR1 cGxlcyk7CisJLyogQ2xlYW4gdXAgbWVyZ2Ugc2NhbiBzdGF0ZSAqLworCWlmIChzby0+bWVyZ2VT dGF0ZSAhPSBOVUxMKQorCQlidF9tZXJnZV9lbmQoc28tPm1lcmdlU3RhdGUpOwogCS8qIHNvLT5t YXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUo c28pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggYzJk MDkzNzQ1MTcuLjcwNDgzYzRlNzY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMKQEAgLTk4LDYgKzk4LDcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwogCisJCXNjYW5k ZXNjLT54c19udW1fbWVyZ2VfcHJlZml4ZXMgPSBub2RlLT5pb3NzX051bU1lcmdlUHJlZml4ZXM7 CiAKIAkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KIAkJbm9kZS0+aW9zc19T Y2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKQEAgLTYxNSw3ICs2MTYsNyBAQCBFeGVjSW5p dEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5k ZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5kZXhzdGF0ZS0+aW9zc19OdW1S dW50aW1lS2V5cyA9IDA7Ci0KKwlpbmRleHN0YXRlLT5pb3NzX051bU1lcmdlUHJlZml4ZXMgPSBu b2RlLT5udW1fbWVyZ2VfcHJlZml4ZXM7CiAJLyoKIAkgKiBidWlsZCB0aGUgaW5kZXggc2NhbiBr ZXlzIGZyb20gdGhlIGluZGV4IHF1YWxpZmljYXRpb24KIAkgKi8KQEAgLTc5MCw2ICs3OTEsNyBA QCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7 CiAJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlub2RlLT5pb3Nz X1NjYW5EZXNjLT54c19udW1fbWVyZ2VfcHJlZml4ZXMgPSBub2RlLT5pb3NzX051bU1lcmdlUHJl Zml4ZXM7CiAJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKIAkvKgpAQCAt ODU2LDYgKzg1OCw3IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAog CQkJCQkJCQkgcGlzY2FuKTsKIAlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0 cnVlOworCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX251bV9tZXJnZV9wcmVmaXhlcyA9IG5vZGUt Pmlvc3NfTnVtTWVyZ2VQcmVmaXhlczsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0 byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggYTYxNmFiZmYwNGMuLjllNjJjYWNkMmQzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMTUsNiArMTE1LDcgQEAgSW5k ZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCiAJCW5vZGUtPmlzc19TY2FuRGVzYyA9IHNj YW5kZXNjOwogCisJCXNjYW5kZXNjLT54c19udW1fbWVyZ2VfcHJlZml4ZXMgPSBub2RlLT5pc3Nf TnVtTWVyZ2VQcmVmaXhlczsKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxj dWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZAogCQkgKiBwYXNzIHRoZSBzY2Fu a2V5cyB0byB0aGUgaW5kZXggQU0uCkBAIC0yMTEsNiArMjEyLDggQEAgSW5kZXhOZXh0V2l0aFJl b3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAKIAkJbm9kZS0+aXNzX1NjYW5EZXNjID0gc2Nh bmRlc2M7CiAKKwkJc2NhbmRlc2MtPnhzX251bV9tZXJnZV9wcmVmaXhlcyA9IG5vZGUtPmlzc19O dW1NZXJnZVByZWZpeGVzOworCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2Fs Y3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFzcyB0aGUgc2Nh bmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtMTA4Niw2ICsxMDg5LDExIEBAIEV4ZWNJbml0SW5k ZXhTY2FuKEluZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCWlu ZGV4c3RhdGUtPmlzc19SdW50aW1lQ29udGV4dCA9IE5VTEw7CiAJfQogCisJLyoKKwkgKiBJbml0 aWFsaXplIG1lcmdlIHNjYW4gc3RhdGUgZnJvbSBwbGFuIG5vZGUKKwkgKi8KKwlpbmRleHN0YXRl LT5pc3NfTnVtTWVyZ2VQcmVmaXhlcyA9IG5vZGUtPm51bV9tZXJnZV9wcmVmaXhlczsKKwogCS8q CiAJICogYWxsIGRvbmUuCiAJICovCkBAIC0xNzI1LDYgKzE3MzMsOCBAQCBFeGVjSW5kZXhTY2Fu SW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19O dW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAKKwlub2RlLT5pc3NfU2NhbkRlc2Mt PnhzX251bV9tZXJnZV9wcmVmaXhlcyA9IG5vZGUtPmlzc19OdW1NZXJnZVByZWZpeGVzOworCiAJ LyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFk eSwgZ28gYWhlYWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpA QCAtMTc4OSw2ICsxNzk5LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJ CQkJCSBwaXNjYW4pOwogCisJbm9kZS0+aXNzX1NjYW5EZXNjLT54c19udW1fbWVyZ2VfcHJlZml4 ZXMgPSBub2RlLT5pc3NfTnVtTWVyZ2VQcmVmaXhlczsKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1l IGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwog CSAqIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYwppbmRleCA2N2Q5ZGMzNWY0NC4uNDRiNzlmOTEzMzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIKKyNpbmNsdWRlICJ1dGlscy9h cnJheS5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Ry YW5zYW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCkBAIC0xMDIsNiArMTAzLDggQEAg c3RhdGljIGJvb2wgZWNsYXNzX2FscmVhZHlfdXNlZChFcXVpdmFsZW5jZUNsYXNzICpwYXJlbnRf ZWMsIFJlbGlkcyBvbGRyZWxpZHMsCiBzdGF0aWMgdm9pZCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQlJbmRleE9wdEluZm8gKmluZGV4 LCBJbmRleENsYXVzZVNldCAqY2xhdXNlcywKIAkJCQkJCQlMaXN0ICoqYml0aW5kZXhwYXRocyk7 CitzdGF0aWMgdm9pZCBjb25zaWRlcl9tZXJnZV9zY2FuX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJCSBJbmRleE9wdEluZm8gKmluZGV4LCBJbmRleENs YXVzZVNldCAqY2xhdXNlcyk7CiBzdGF0aWMgTGlzdCAqYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkgICBJbmRleE9wdEluZm8gKmlu ZGV4LCBJbmRleENsYXVzZVNldCAqY2xhdXNlcywKIAkJCQkJCQkgICBib29sIHVzZWZ1bF9wcmVk aWNhdGUsCkBAIC03NzAsNiArNzczLDE5MSBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCSAgIE5VTEwpOwogCQkqYml0aW5kZXhw YXRocyA9IGxpc3RfY29uY2F0KCpiaXRpbmRleHBhdGhzLCBpbmRleHBhdGhzKTsKIAl9CisKKwkv KgorCSAqIENvbnNpZGVyIG1lcmdlIHNjYW4gb3B0aW1pemF0aW9uIGZvciBxdWVyaWVzIHdpdGg6 CisJICogLSBTY2FsYXJBcnJheU9wRXhwciAoSU4gY2xhdXNlKSBvbiBmaXJzdCBpbmRleCBjb2x1 bW4KKwkgKiAtIE9SREVSIEJZIG9uIHNlY29uZCBjb2x1bW4gKGRpZmZlcmVudCBmcm9tIGluZGV4 IGxlYWRpbmcgY29sdW1uKQorCSAqIC0gT3B0aW9uYWxseSBMSU1JVAorCSAqLworCWNvbnNpZGVy X21lcmdlX3NjYW5fcGF0aChyb290LCByZWwsIGluZGV4LCBjbGF1c2VzKTsKK30KKworLyoKKyAq IGNvbnNpZGVyX21lcmdlX3NjYW5fcGF0aAorICoJICBDaGVjayBpZiB0aGlzIGluZGV4IGNhbiBw cm92aWRlIGEgbWVyZ2Ugc2NhbiBwYXRoIGZvciBxdWVyaWVzIG9mIHRoZSBmb3JtOgorICoJICBX SEVSRSBwcmVmaXggSU4gKC4uLikgQU5EIHN1ZmZpeCA+PSBiIE9SREVSIEJZIHN1ZmZpeCwgcHJl Zml4IExJTUlUIE4KKyAqCisgKgkgIE1lcmdlIHNjYW4gYWxsb3dzIGxhemlseSBwcm9kdWNpbmcg b3V0cHV0IHNvcnRlZCBieSAoc3VmZml4LCBwcmVmaXgpIGZyb20KKyAqCSAgYW4gaW5kZXggb24g KHByZWZpeCwgc3VmZml4KSBieSBkb2luZyBhIEstd2F5IG1lcmdlIG9mIEsgc2VwYXJhdGUgc2Nh bnMuCisgKi8KK3N0YXRpYyB2b2lkCitjb25zaWRlcl9tZXJnZV9zY2FuX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCSBJbmRleE9wdEluZm8gKmluZGV4LCBJ bmRleENsYXVzZVNldCAqY2xhdXNlcykKK3sKKwlJbmRleFBhdGggICppcGF0aDsKKwlMaXN0CSAg ICppbmRleF9jbGF1c2VzOworCUxpc3QJICAgKmluZGV4X3BhdGhrZXlzOworCUxpc3QJICAgKm1l cmdlX3BhdGhrZXlzOworCUxpc3RDZWxsICAgKmxjOworCWludAkJCW51bV9wcmVmaXhlcyA9IDA7 CisJaW50CQkJaW5kZXhjb2w7CisJYm9vbAkJaGFzX3Nhb3Bfb25fZmlyc3QgPSBmYWxzZTsKKwli b29sCQloYXNfY2xhdXNlX29uX3NlY29uZCA9IGZhbHNlOworCisJLyogTmVlZCBhdCBsZWFzdCAy IGluZGV4IGNvbHVtbnMgZm9yIG1lcmdlIHNjYW4gKi8KKwlpZiAoaW5kZXgtPm5rZXljb2x1bW5z IDwgMikKKwkJcmV0dXJuOworCisJLyogSW5kZXggbXVzdCBiZSBvcmRlcmVkIGFuZCBzdXBwb3J0 IGdldHR1cGxlICovCisJaWYgKGluZGV4LT5zb3J0b3BmYW1pbHkgPT0gTlVMTCB8fCAhaW5kZXgt PmFtaGFzZ2V0dHVwbGUpCisJCXJldHVybjsKKworCS8qIE11c3QgaGF2ZSBxdWVyeSBwYXRoa2V5 cyB3aXRoIGF0IGxlYXN0IDIgZWxlbWVudHMgKi8KKwlpZiAocm9vdC0+cXVlcnlfcGF0aGtleXMg PT0gTklMIHx8IGxpc3RfbGVuZ3RoKHJvb3QtPnF1ZXJ5X3BhdGhrZXlzKSA8IDIpCisJCXJldHVy bjsKKworCS8qCisJICogQ2hlY2sgZm9yIFNjYWxhckFycmF5T3BFeHByIG9uIGZpcnN0IGNvbHVt bi4KKwkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIChwcmVmaXggdmFsdWVz KS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBjbGF1c2VzLT5pbmRleGNsYXVzZXNbMF0pCisJeworCQlJ bmRleENsYXVzZSAqaWNsYXVzZSA9IChJbmRleENsYXVzZSAqKSBsZmlyc3QobGMpOworCQlSZXN0 cmljdEluZm8gKnJpbmZvID0gaWNsYXVzZS0+cmluZm87CisKKwkJaWYgKElzQShyaW5mby0+Y2xh dXNlLCBTY2FsYXJBcnJheU9wRXhwcikpCisJCXsKKwkJCVNjYWxhckFycmF5T3BFeHByICpzYW9w ID0gKFNjYWxhckFycmF5T3BFeHByICopIHJpbmZvLT5jbGF1c2U7CisJCQlOb2RlCSAgICphcnJh eWFyZyA9IChOb2RlICopIGxzZWNvbmQoc2FvcC0+YXJncyk7CisKKwkJCWhhc19zYW9wX29uX2Zp cnN0ID0gdHJ1ZTsKKworCQkJLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGFycmF5 IGVsZW1lbnRzICovCisJCQlpZiAoSXNBKGFycmF5YXJnLCBDb25zdCkpCisJCQl7CisJCQkJQ29u c3QJICAgKmNvbiA9IChDb25zdCAqKSBhcnJheWFyZzsKKworCQkJCWlmICghY29uLT5jb25zdGlz bnVsbCkKKwkJCQl7CisJCQkJCUFycmF5VHlwZSAgKmFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChj b24tPmNvbnN0dmFsdWUpOworCQkJCQludW1fcHJlZml4ZXMgPSBBcnJheUdldE5JdGVtcyhBUlJf TkRJTShhcnIpLCBBUlJfRElNUyhhcnIpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJLyogQ2FuJ3QgZGV0ZXJtaW5lIHNpemUsIGVzdGltYXRlIGNvbnNlcnZhdGl2ZWx5ICovCisJ CQkJbnVtX3ByZWZpeGVzID0gMTA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgh aGFzX3Nhb3Bfb25fZmlyc3QgfHwgbnVtX3ByZWZpeGVzIDwgMikKKwkJcmV0dXJuOworCisJLyog Q2hlY2sgaWYgdGhlcmUncyBhbnkgY2xhdXNlIG9uIHNlY29uZCBjb2x1bW4gKi8KKwlpZiAoY2xh dXNlcy0+aW5kZXhjbGF1c2VzWzFdICE9IE5JTCkKKwkJaGFzX2NsYXVzZV9vbl9zZWNvbmQgPSB0 cnVlOworCisJaWYgKCFoYXNfY2xhdXNlX29uX3NlY29uZCkKKwkJcmV0dXJuOworCisJLyoKKwkg KiBHZXQgdGhlIG5hdHVyYWwgaW5kZXggcGF0aGtleXMgKHByZWZpeCwgc3VmZml4IG9yZGVyKS4K KwkgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGF0aGtleXMgZm9yIG1lcmdlIHNjYW4gdG8gbWFrZSBz ZW5zZS4KKwkgKi8KKwlpbmRleF9wYXRoa2V5cyA9IGJ1aWxkX2luZGV4X3BhdGhrZXlzKHJvb3Qs IGluZGV4LCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJaWYgKGxpc3RfbGVuZ3RoKGluZGV4X3Bh dGhrZXlzKSA8IDIpCisJCXJldHVybjsKKworCS8qCisJICogQ2hlY2sgaWYgcXVlcnkgcGF0aGtl eXMgYXJlIChzdWZmaXgsIHByZWZpeCkgLSB0aGUgUkVWRVJTRUQgb3JkZXIuCisJICogcXVlcnlf cGF0aGtleXNbMF0gc2hvdWxkIG1hdGNoIGluZGV4X3BhdGhrZXlzWzFdIChzdWZmaXgpCisJICog cXVlcnlfcGF0aGtleXNbMV0gc2hvdWxkIG1hdGNoIGluZGV4X3BhdGhrZXlzWzBdIChwcmVmaXgp CisJICovCisJeworCQlQYXRoS2V5ICAgICpxcGswID0gKFBhdGhLZXkgKikgbGluaXRpYWwocm9v dC0+cXVlcnlfcGF0aGtleXMpOworCQlQYXRoS2V5ICAgICpxcGsxID0gKFBhdGhLZXkgKikgbHNl Y29uZChyb290LT5xdWVyeV9wYXRoa2V5cyk7CisJCVBhdGhLZXkgICAgKmlwazAgPSAoUGF0aEtl eSAqKSBsaW5pdGlhbChpbmRleF9wYXRoa2V5cyk7CisJCVBhdGhLZXkgICAgKmlwazEgPSAoUGF0 aEtleSAqKSBsc2Vjb25kKGluZGV4X3BhdGhrZXlzKTsKKworCQkvKiBRdWVyeSdzIGZpcnN0IHBh dGhrZXkgbXVzdCBtYXRjaCBpbmRleCdzIFNFQ09ORCBwYXRoa2V5IChzdWZmaXgpICovCisJCWlm IChxcGswLT5wa19lY2xhc3MgIT0gaXBrMS0+cGtfZWNsYXNzKQorCQkJcmV0dXJuOworCisJCS8q IFF1ZXJ5J3Mgc2Vjb25kIHBhdGhrZXkgbXVzdCBtYXRjaCBpbmRleCdzIEZJUlNUIHBhdGhrZXkg KHByZWZpeCkgKi8KKwkJaWYgKHFwazEtPnBrX2VjbGFzcyAhPSBpcGswLT5wa19lY2xhc3MpCisJ CQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGUgbWVyZ2Ugc2NhbiBjYW4gc2F0aXNmeSB0aGUg cXVlcnkncyBPUkRFUiBCWSAoc3VmZml4LCBwcmVmaXgpLgorCSAqIFVzZSB0aGUgcXVlcnkncyBw YXRoa2V5cyBkaXJlY3RseSBzaW5jZSB3ZSd2ZSB2ZXJpZmllZCB0aGV5IG1hdGNoLgorCSAqIFRo aXMgaXMgY3JpdGljYWw6IFBvc3RncmVTUUwgY29tcGFyZXMgcGF0aGtleXMgYnkgcG9pbnRlciBl cXVhbGl0eS4KKwkgKi8KKwltZXJnZV9wYXRoa2V5cyA9IHJvb3QtPnF1ZXJ5X3BhdGhrZXlzOwor CisJLyoKKwkgKiBCdWlsZCB0aGUgaW5kZXggY2xhdXNlIGxpc3QgKHNhbWUgYXMgbm9ybWFsIHBh dGgpLgorCSAqLworCWluZGV4X2NsYXVzZXMgPSBOSUw7CisJZm9yIChpbmRleGNvbCA9IDA7IGlu ZGV4Y29sIDwgaW5kZXgtPm5rZXljb2x1bW5zOyBpbmRleGNvbCsrKQorCXsKKwkJZm9yZWFjaChs YywgY2xhdXNlcy0+aW5kZXhjbGF1c2VzW2luZGV4Y29sXSkKKwkJeworCQkJSW5kZXhDbGF1c2Ug KmljbGF1c2UgPSAoSW5kZXhDbGF1c2UgKikgbGZpcnN0KGxjKTsKKwkJCWluZGV4X2NsYXVzZXMg PSBsYXBwZW5kKGluZGV4X2NsYXVzZXMsIGljbGF1c2UpOworCQl9CisJfQorCisJLyoKKwkgKiBD cmVhdGUgdGhlIG1lcmdlIHNjYW4gcGF0aCB3aXRoIChzdWZmaXgsIHByZWZpeCkgcGF0aGtleXMu CisJICovCisJaXBhdGggPSBjcmVhdGVfaW5kZXhfcGF0aChyb290LCBpbmRleCwKKwkJCQkJCQkg IGluZGV4X2NsYXVzZXMsCisJCQkJCQkJICBOSUwsCQkvKiBubyBPUkRFUiBCWSBleHByZXNzaW9u cyAqLworCQkJCQkJCSAgTklMLAkJLyogbm8gT1JERVIgQlkgY29sdW1ucyAqLworCQkJCQkJCSAg bWVyZ2VfcGF0aGtleXMsCisJCQkJCQkJICBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkg IGNoZWNrX2luZGV4X29ubHkocmVsLCBpbmRleCksCisJCQkJCQkJICBOVUxMLAkJLyogbm8gb3V0 ZXIgcmVsaWRzICovCisJCQkJCQkJICAxLjAsCQkvKiBsb29wX2NvdW50ICovCisJCQkJCQkJICBm YWxzZSk7CS8qIG5vdCBwYXJhbGxlbCAqLworCisJLyogRW5hYmxlIG1lcmdlIHNjYW4gd2l0aCBL LXdheSBtZXJnZSAqLworCWlwYXRoLT5udW1fbWVyZ2VfcHJlZml4ZXMgPSBudW1fcHJlZml4ZXM7 CisKKwkvKgorCSAqIEFkanVzdCBjb3N0cyBhbmQgcm93IGVzdGltYXRlIGZvciBtZXJnZSBzY2Fu LgorCSAqIE1lcmdlIHNjYW4gcmVhZHMgZXhhY3RseSAobGltaXQgKyBLIC0gMSkgdHVwbGVzIGlu c3RlYWQgb2YgYWxsIG1hdGNoaW5nLgorCSAqIFRoZSByb3cgZXN0aW1hdGUgcmVmbGVjdHMgYWN0 dWFsIHR1cGxlIGFjY2Vzc2VzLCBub3QgdG90YWwgbWF0Y2hlcy4KKwkgKi8KKwlpZiAocm9vdC0+ bGltaXRfdHVwbGVzID4gMCAmJiByb290LT5saW1pdF90dXBsZXMgPCBpcGF0aC0+cGF0aC5yb3dz KQorCXsKKwkJZG91YmxlCQltZXJnZV9yb3dzOworCQlkb3VibGUJCW9yaWdpbmFsX3Jvd3MgPSBp cGF0aC0+cGF0aC5yb3dzOworCisJCS8qIE1lcmdlIHNjYW4gcmVhZHMgZXhhY3RseSAobGltaXQg KyBLIC0gMSkgdHVwbGVzICovCisJCW1lcmdlX3Jvd3MgPSByb290LT5saW1pdF90dXBsZXMgKyBu dW1fcHJlZml4ZXMgLSAxOworCQlpZiAobWVyZ2Vfcm93cyA8IG9yaWdpbmFsX3Jvd3MpCisJCXsK KwkJCWRvdWJsZQkJcmF0aW8gPSBtZXJnZV9yb3dzIC8gb3JpZ2luYWxfcm93czsKKworCQkJLyog U2NhbGUgcnVuIGNvc3QgYnkgcmF0aW8gb2YgdHVwbGVzIGFjY2Vzc2VkICovCisJCQlpcGF0aC0+ cGF0aC50b3RhbF9jb3N0ID0gaXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ICsKKwkJCQkoaXBhdGgt PnBhdGgudG90YWxfY29zdCAtIGlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCkgKiByYXRpbzsKKwor CQkJLyogQWRkIHN0YXJ0dXAgY29zdCBmb3IgSyBpbmRleCBkZXNjZW50cyAqLworCQkJaXBhdGgt PnBhdGguc3RhcnR1cF9jb3N0ICs9IG51bV9wcmVmaXhlcyAqIDAuMDEgKiBjcHVfb3BlcmF0b3Jf Y29zdDsKKworCQkJLyogVXBkYXRlIHJvdyBlc3RpbWF0ZSB0byByZWZsZWN0IG1lcmdlIHNjYW4g ZWZmaWNpZW5jeSAqLworCQkJaXBhdGgtPnBhdGgucm93cyA9IG1lcmdlX3Jvd3M7CisJCX0KKwl9 CisKKwkvKiBTdWJtaXQgdGhlIHBhdGggZm9yIGNvbnNpZGVyYXRpb24gKi8KKwlhZGRfcGF0aChy ZWwsIChQYXRoICopIGlwYXRoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwppbmRleCBlNTIwMGY0YjNjZS4uNDg1YjRiM2U1NGUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE4NCwxMiArMTg0LDE0IEBAIHN0YXRpYyBJ bmRleFNjYW4gKm1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsIExpc3QgKnFwcXVhbCwgSW5k ZXggc2NhbnJlbGlkLAogCQkJCQkJCQkgT2lkIGluZGV4aWQsIExpc3QgKmluZGV4cXVhbCwgTGlz dCAqaW5kZXhxdWFsb3JpZywKIAkJCQkJCQkJIExpc3QgKmluZGV4b3JkZXJieSwgTGlzdCAqaW5k ZXhvcmRlcmJ5b3JpZywKIAkJCQkJCQkJIExpc3QgKmluZGV4b3JkZXJieW9wcywKKwkJCQkJCQkJ IGludCBudW1fbWVyZ2VfcHJlZml4ZXMsCiAJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGluZGV4c2Nh bmRpcik7CiBzdGF0aWMgSW5kZXhPbmx5U2NhbiAqbWFrZV9pbmRleG9ubHlzY2FuKExpc3QgKnFw dGxpc3QsIExpc3QgKnFwcXVhbCwKIAkJCQkJCQkJCQkgSW5kZXggc2NhbnJlbGlkLCBPaWQgaW5k ZXhpZCwKIAkJCQkJCQkJCQkgTGlzdCAqaW5kZXhxdWFsLCBMaXN0ICpyZWNoZWNrcXVhbCwKIAkJ CQkJCQkJCQkgTGlzdCAqaW5kZXhvcmRlcmJ5LAogCQkJCQkJCQkJCSBMaXN0ICppbmRleHRsaXN0 LAorCQkJCQkJCQkJCSBpbnQgbnVtX21lcmdlX3ByZWZpeGVzLAogCQkJCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGluZGV4c2NhbmRpcik7CiBzdGF0aWMgQml0bWFwSW5kZXhTY2FuICptYWtlX2JpdG1h cF9pbmRleHNjYW4oSW5kZXggc2NhbnJlbGlkLCBPaWQgaW5kZXhpZCwKIAkJCQkJCQkJCQkJICBM aXN0ICppbmRleHF1YWwsCkBAIC0zMDA5LDYgKzMwMTEsNyBAQCBjcmVhdGVfaW5kZXhzY2FuX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQlzdHJpcHBlZF9pbmRleHF1YWxzLAog CQkJCQkJCQkJCQkJZml4ZWRfaW5kZXhvcmRlcmJ5cywKIAkJCQkJCQkJCQkJCWluZGV4aW5mby0+ aW5kZXh0bGlzdCwKKwkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+bnVtX21lcmdlX3ByZWZpeGVzLAog CQkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIpOwogCWVsc2UKIAkJc2Nhbl9wbGFu ID0gKFNjYW4gKikgbWFrZV9pbmRleHNjYW4odGxpc3QsCkBAIC0zMDIwLDYgKzMwMjMsNyBAQCBj cmVhdGVfaW5kZXhzY2FuX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCWZpeGVk X2luZGV4b3JkZXJieXMsCiAJCQkJCQkJCQkJCWluZGV4b3JkZXJieXMsCiAJCQkJCQkJCQkJCWlu ZGV4b3JkZXJieW9wcywKKwkJCQkJCQkJCQkJYmVzdF9wYXRoLT5udW1fbWVyZ2VfcHJlZml4ZXMs CiAJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyKTsKIAogCWNvcHlfZ2VuZXJpY19w YXRoX2luZm8oJnNjYW5fcGxhbi0+cGxhbiwgJmJlc3RfcGF0aC0+cGF0aCk7CkBAIC01NTI3LDYg KzU1MzEsNyBAQCBtYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LAogCQkJICAgTGlzdCAqaW5k ZXhvcmRlcmJ5LAogCQkJICAgTGlzdCAqaW5kZXhvcmRlcmJ5b3JpZywKIAkJCSAgIExpc3QgKmlu ZGV4b3JkZXJieW9wcywKKwkJCSAgIGludCBudW1fbWVyZ2VfcHJlZml4ZXMsCiAJCQkgICBTY2Fu RGlyZWN0aW9uIGluZGV4c2NhbmRpcikKIHsKIAlJbmRleFNjYW4gICpub2RlID0gbWFrZU5vZGUo SW5kZXhTY2FuKTsKQEAgLTU1NDMsNiArNTU0OCw3IEBAIG1ha2VfaW5kZXhzY2FuKExpc3QgKnFw dGxpc3QsCiAJbm9kZS0+aW5kZXhvcmRlcmJ5ID0gaW5kZXhvcmRlcmJ5OwogCW5vZGUtPmluZGV4 b3JkZXJieW9yaWcgPSBpbmRleG9yZGVyYnlvcmlnOwogCW5vZGUtPmluZGV4b3JkZXJieW9wcyA9 IGluZGV4b3JkZXJieW9wczsKKwlub2RlLT5udW1fbWVyZ2VfcHJlZml4ZXMgPSBudW1fbWVyZ2Vf cHJlZml4ZXM7CiAJbm9kZS0+aW5kZXhvcmRlcmRpciA9IGluZGV4c2NhbmRpcjsKIAogCXJldHVy biBub2RlOwpAQCAtNTU1Nyw2ICs1NTYzLDcgQEAgbWFrZV9pbmRleG9ubHlzY2FuKExpc3QgKnFw dGxpc3QsCiAJCQkJICAgTGlzdCAqcmVjaGVja3F1YWwsCiAJCQkJICAgTGlzdCAqaW5kZXhvcmRl cmJ5LAogCQkJCSAgIExpc3QgKmluZGV4dGxpc3QsCisJCQkJICAgaW50IG51bV9tZXJnZV9wcmVm aXhlcywKIAkJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcikKIHsKIAlJbmRleE9ubHlT Y2FuICpub2RlID0gbWFrZU5vZGUoSW5kZXhPbmx5U2Nhbik7CkBAIC01NTcyLDYgKzU1NzksNyBA QCBtYWtlX2luZGV4b25seXNjYW4oTGlzdCAqcXB0bGlzdCwKIAlub2RlLT5yZWNoZWNrcXVhbCA9 IHJlY2hlY2txdWFsOwogCW5vZGUtPmluZGV4b3JkZXJieSA9IGluZGV4b3JkZXJieTsKIAlub2Rl LT5pbmRleHRsaXN0ID0gaW5kZXh0bGlzdDsKKwlub2RlLT5udW1fbWVyZ2VfcHJlZml4ZXMgPSBu dW1fbWVyZ2VfcHJlZml4ZXM7CiAJbm9kZS0+aW5kZXhvcmRlcmRpciA9IGluZGV4c2NhbmRpcjsK IAogCXJldHVybiBub2RlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXgg N2I2YzVkNTFlNWQuLjIxNzQ2Y2Q2ODRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhu b2RlLmMKQEAgLTEwNzUsNiArMTA3NSw4IEBAIGNyZWF0ZV9pbmRleF9wYXRoKFBsYW5uZXJJbmZv ICpyb290LAogCXBhdGhub2RlLT5pbmRleG9yZGVyYnljb2xzID0gaW5kZXhvcmRlcmJ5Y29sczsK IAlwYXRobm9kZS0+aW5kZXhzY2FuZGlyID0gaW5kZXhzY2FuZGlyOwogCisJcGF0aG5vZGUtPm51 bV9tZXJnZV9wcmVmaXhlcyA9IDA7CisKIAljb3N0X2luZGV4KHBhdGhub2RlLCByb290LCBsb29w X2NvdW50LCBwYXJ0aWFsX3BhdGgpOwogCiAJcmV0dXJuIHBhdGhub2RlOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKaW5kZXggY2UzNDBjMDc2ZjguLmZjNTUzMTVlZTA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAg LTE5MCw2ICsxOTAsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJLyog cGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwogCXN0 cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOworCisJLyogTWVy Z2Ugc2NhbjogSy13YXkgbWVyZ2UsIG9yZGVyZWQgYnkgYW4gaW5kZXggc3VmZml4ICovCisJaW50 CQkJeHNfbnVtX21lcmdlX3ByZWZpeGVzOwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyogR2Vu ZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IGY4MDUzZDllNTcyLi40NDMzZDFjMjYxMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3 MzQsNiArMTczNCw5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJYm9vbAkgICAq aXNzX09yZGVyQnlUeXBCeVZhbHM7CiAJaW50MTYJICAgKmlzc19PcmRlckJ5VHlwTGVuczsKIAlT aXplCQlpc3NfUHNjYW5MZW47CisKKwkvKiBNZXJnZSBzY2FuOiBLLXdheSBtZXJnZSAqLworCWlu dAkJCWlzc19OdW1NZXJnZVByZWZpeGVzOwogfSBJbmRleFNjYW5TdGF0ZTsKIAogLyogLS0tLS0t LS0tLS0tLS0tLQpAQCAtMTc4MCw2ICsxNzgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5 U2NhblN0YXRlCiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVD U3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05hbWVDU3RyaW5nQ291bnQ7CisJLyogTWVyZ2Ug c2NhbjogSy13YXkgbWVyZ2UgKi8KKwlpbnQJCQlpb3NzX051bU1lcmdlUHJlZml4ZXM7CiB9IElu ZGV4T25seVNjYW5TdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAppbmRleCBmYjgwODgyM2FjZi4uY2VkN2UyMjRhODcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBA IC0yMDQwLDYgKzIwNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFBhdGgKIAlTY2FuRGlyZWN0 aW9uIGluZGV4c2NhbmRpcjsKIAlDb3N0CQlpbmRleHRvdGFsY29zdDsKIAlTZWxlY3Rpdml0eSBp bmRleHNlbGVjdGl2aXR5OworCWludAkJCW51bV9tZXJnZV9wcmVmaXhlczsKIH0gSW5kZXhQYXRo OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA0YmM2ZmI1NjcwZS4uODZkOGM5MmUwMWYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC01OTcsNiArNTk3LDggQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuCiAJTGlzdAkgICAqaW5kZXhvcmRlcmJ5b3BzOwogCS8qIGZvcndhcmQgb3IgYmFj a3dhcmQgb3IgZG9uJ3QgY2FyZSAqLwogCVNjYW5EaXJlY3Rpb24gaW5kZXhvcmRlcmRpcjsKKwkv KiBNZXJnZSBzY2FuOiBLLXdheSBtZXJnZSAqLworCWludAkJCW51bV9tZXJnZV9wcmVmaXhlczsK IH0gSW5kZXhTY2FuOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC02NDUsNiArNjQ3LDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhbgogCUxpc3QJICAgKmluZGV4dGxpc3Q7CiAJLyog Zm9yd2FyZCBvciBiYWNrd2FyZCBvciBkb24ndCBjYXJlICovCiAJU2NhbkRpcmVjdGlvbiBpbmRl eG9yZGVyZGlyOworCS8qIE1lcmdlIHNjYW46IEstd2F5IG1lcmdlICovCisJaW50CQkJbnVtX21l cmdlX3ByZWZpeGVzOwogfSBJbmRleE9ubHlTY2FuOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX21lcmdlLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uub3V0CmluZGV4IDQ0MWFlMWQwNjU3 Li4yODUwOWIzMzFkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJl ZV9tZXJnZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9tZXJnZS5v dXQKQEAgLTgyLDYgKzgyLDIwIEBAIFNIT1cgdHJhY2tfY291bnRzOyAgLS0gc2hvdWxkIGJlICdv bicKICBvbgogKDEgcm93KQogCistLSBWZXJpZnkgbWVyZ2Ugc2NhbiBpcyB1c2VkOiBubyBTb3J0 IG5vZGUsIHJvd3M9MTAgKE4gKyBLIC0gMSA9IDMgKyA4IC0gMSkKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCB4LCB5CitGUk9NIGJ0cmVlX21lcmdlX3Rlc3QKK1dIRVJFIHggSU4gKDEsMiw1 LDgsMTMsMjEsMzQsNTUpIEFORCB5ID49IDE5CitPUkRFUiBCWSB5LCB4CitMSU1JVCAzOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBM aW1pdAorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBidHJlZV9tZXJnZV90ZXN0X2lkeCBv biBidHJlZV9tZXJnZV90ZXN0CisgICAgICAgICBJbmRleCBDb25kOiAoKHggPSBBTlkgKCd7MSwy LDUsOCwxMywyMSwzNCw1NX0nOjppbnRlZ2VyW10pKSBBTkQgKHkgPj0gMTkpKQorKDMgcm93cykK KwogLS0gRnJvbSB0aGUgbGltaXRlZCBxdWVyeSBwcm9wb3NpdGlvbiB0aGlzIGNhbiBiZSBjb21w dXRlZCB3aXRoIDEwCiAtLSB0dXBwbGUgYWNjZXNzZXMuCiBTRUxFQ1QgeCwgeQpAQCAtMTA3LDcg KzEyMSw3IEBAIEZST00gcGdfc3RhdF91c2VyX2luZGV4ZXMKIFdIRVJFIGluZGV4cmVsbmFtZSA9 ICdidHJlZV9tZXJnZV90ZXN0X2lkeCc7CiAgaWR4X3NjYW4gfCBpZHhfdHVwX3JlYWQgfCBpZHhf dHVwX2ZldGNoIAogLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KLSAg ICAgICAgNSB8ICAgICAgICAgICAxMCB8ICAgICAgICAgICAgMTAKKyAgICAgICAgOCB8ICAgICAg ICAgICAgOSB8ICAgICAgICAgICAgIDMKICgxIHJvdykKIAogRFJPUCBUQUJMRSBidHJlZV9tZXJn ZV90ZXN0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uuc3FsCmluZGV4IGJlMDBjMzNjMmE1 Li5hZDljZjAzZjg2OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVy Z2Uuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX21lcmdlLnNxbApAQCAtODEs NiArODEsMTUgQEAgQU5BTFlTRSBidHJlZV9tZXJnZV90ZXN0OwogU0VUIGVuYWJsZV9zZXFzY2Fu ID0gT0ZGOwogU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gT0ZGOwogU0hPVyB0cmFja19jb3VudHM7 ICAtLSBzaG91bGQgYmUgJ29uJworCistLSBWZXJpZnkgbWVyZ2Ugc2NhbiBpcyB1c2VkOiBubyBT b3J0IG5vZGUsIHJvd3M9MTAgKE4gKyBLIC0gMSA9IDMgKyA4IC0gMSkKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCB4LCB5CitGUk9NIGJ0cmVlX21lcmdlX3Rlc3QKK1dIRVJFIHggSU4gKDEs Miw1LDgsMTMsMjEsMzQsNTUpIEFORCB5ID49IDE5CitPUkRFUiBCWSB5LCB4CitMSU1JVCAzOwor CiAtLSBGcm9tIHRoZSBsaW1pdGVkIHF1ZXJ5IHByb3Bvc2l0aW9uIHRoaXMgY2FuIGJlIGNvbXB1 dGVkIHdpdGggMTAKIC0tIHR1cHBsZSBhY2Nlc3Nlcy4KIFNFTEVDVCB4LCB5Ci0tIAoyLjQwLjAK Cg== --000000000000ef5980064a259486 Content-Type: application/octet-stream; name="0004-MERGE-SCAN-Multi-column.patch" Content-Disposition: attachment; filename="0004-MERGE-SCAN-Multi-column.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlapnosc3 RnJvbSBlODM3NzQwMWVmZDFhZjBkNjQ4OWZjMTJlYWJhNWJmZDBkMzk2YjM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBUaHUsIDUgRmViIDIwMjYgMTA6MzY6NTEgKzAwMDAKU3ViamVjdDog W1BBVENIIDQvNF0gW01FUkdFLVNDQU5dIE11bHRpIGNvbHVtbgoKSGFuZGUgZXF1YWxpdHkgb3Ig U0FPUCBjb25zdHJhaW50cyBvbiBtdWx0aXBsZSBsZWFkaW5nIGNvbHVtbnMuCkltcG9zZXMgdGhl IGNvcnJlY3Qgb3JkZXIgb24gdGhlIGVudGlyZSBwcmVmaXgKKEFTQ3xERVNDKSBOVUxMUyAoRklS U1R8TEFTVCkKU3VwcG9ydHMgYmFja3dhcmQgc2NhbnMuCkFkZHMgZW5hYmxlX2luZGV4bWVyZ2Vz Y2FuIHBhcmFtZXRlcgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0bWVyZ2VzY2Fu LmMgIHwgMzQxICsrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMgICAgICAgIHwgMjE1ICsrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgICAgICAgICAgICB8ICA5NCArKysrLS0KIHNyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2Nvc3RzaXplLmMgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2luZHhwYXRoLmMgICAgIHwgMTgzICsrKysrKystLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jICAgfCAgODQgKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdCB8ICAgNyArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICB8ICAzNiArLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICAg IHwgICA0ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgIHwgICAx ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uub3V0IHwgMjc4ICsrKysr KysrKysrKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uuc3FsICAgICAg fCAxNTkgKysrKysrKysrLQogMTQgZmlsZXMgY2hhbmdlZCwgMTA1OCBpbnNlcnRpb25zKCspLCAz NDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRtZXJnZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0bWVyZ2VzY2FuLmMK aW5kZXggZWRhMWU2ODM1MjUuLjBmMTQ0NGI0OWI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idG1lcmdlc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0bWVyZ2VzY2FuLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0 cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJsaWIvcGFpcmlu Z2hlYXAuaCIKQEAgLTQwLDI3ICs0MSw0MyBAQCBzdGF0aWMgaW50CWJ0X21lcmdlX2hlYXBfY21w KGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmEsCiAJCQkJCQkJICB2b2lkICphcmcpOwogc3RhdGlj IGJvb2wgYnRfbWVyZ2VfY3Vyc29yX2luaXQoQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGUsCiAJCQkJ CQkJCSBJbmRleFNjYW5EZXNjIHNjYW4sCi0JCQkJCQkJCSBCVE1lcmdlQ3Vyc29yICpjdXJzb3Is Ci0JCQkJCQkJCSBEYXR1bSBwcmVmaXhfdmFsdWUsCi0JCQkJCQkJCSBib29sIHByZWZpeF9pc251 bGwpOworCQkJCQkJCQkgQlRNZXJnZUN1cnNvciAqY3Vyc29yKTsKIHN0YXRpYyBib29sIGJ0X21l cmdlX2N1cnNvcl9hZHZhbmNlKEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJSW5k ZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJQlRNZXJnZUN1cnNvciAqY3Vyc29yKTsKLXN0YXRp YyBEYXR1bSBidF9tZXJnZV9leHRyYWN0X3NvcnRrZXkoQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGUs Ci0JCQkJCQkJCQkgIEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJCQkJCQkJCSAgQlRNZXJnZUN1cnNv ciAqY3Vyc29yLAotCQkJCQkJCQkJICBib29sICppc251bGwpOworc3RhdGljIEluZGV4VHVwbGUg YnRfbWVyZ2VfZ2V0X2luZGV4X3R1cGxlKEJUTWVyZ2VDdXJzb3IgKmN1cnNvcik7CiAKIAorLyoK KyAqIGJ0X21lcmdlX2dldF9pbmRleF90dXBsZQorICoJICBHZXQgdGhlIGN1cnJlbnQgaW5kZXgg dHVwbGUgZnJvbSBhIGN1cnNvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBJbmRleFR1cGxlIHBvaW50 ZXIgZnJvbSBjdXJzb3ItPnR1cGxlcywgb3IgTlVMTCBpZiBleGhhdXN0ZWQuCisgKi8KK3N0YXRp YyBJbmRleFR1cGxlCitidF9tZXJnZV9nZXRfaW5kZXhfdHVwbGUoQlRNZXJnZUN1cnNvciAqY3Vy c29yKQoreworCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCisJaWYgKGN1cnNvci0+ZXhoYXVz dGVkIHx8IGN1cnNvci0+dHVwbGVzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY3Vyckl0 ZW0gPSAmY3Vyc29yLT5wb3MuaXRlbXNbY3Vyc29yLT5wb3MuaXRlbUluZGV4XTsKKwlyZXR1cm4g KEluZGV4VHVwbGUpIChjdXJzb3ItPnR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Cit9 CisKIC8qCiAgKiBidF9tZXJnZV9oZWFwX2NtcAotICoJICBDb21wYXJlIHR3byBjdXJzb3JzIGJ5 IHRoZWlyIGN1cnJlbnQgc29ydCBrZXkgKHN1ZmZpeCB2YWx1ZSkuCisgKgkgIENvbXBhcmUgdHdv IGN1cnNvcnMgYnkgdGhlaXIgY3VycmVudCBzb3J0IGtleSAoYWxsIHN1ZmZpeCBjb2x1bW5zKS4K ICAqCi0gKiBXaGVuIHNvcnQga2V5cyBhcmUgZXF1YWwsIHVzZXMgcHJlZml4IHZhbHVlIGFzIHRp ZWJyZWFrZXIgZm9yCi0gKiBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIChPUkRFUiBCWSBzdWZmaXgs IHByZWZpeCkuCisgKiBDb21wYXJlcyBhbGwgc3VmZml4IGNvbHVtbnMgaW4gb3JkZXIuIFdoZW4g YWxsIHN1ZmZpeCBjb2x1bW5zIGFyZSBlcXVhbCwKKyAqIHVzZXMgY3Vyc29yX2lkIGFzIHRpZWJy ZWFrZXIgZm9yIGRldGVybWluaXN0aWMgb3JkZXJpbmcgKHByZXNlcnZlcworICogb3JpZ2luYWwg cHJlZml4IGFycmF5IG9yZGVyKS4KICAqCi0gKiBSZXR1cm5zIHBvc2l0aXZlIGlmIGEgPiBiIChw YWlyaW5naGVhcCBpcyBhIG1heC1oZWFwLCB3ZSB3YW50IG1pbi1oZWFwCi0gKiBiZWhhdmlvciBz byB3ZSBpbnZlcnQgdGhlIGNvbXBhcmlzb24pLgorICogcmV0dXJucworICogICAgLTEgaWYgYSBj b21lcyBiZWZvcmUgYgorICogICAgIDEgaWYgYiBjb21lcyBiZWZvcmUgYQorICogICAgIDAgaWYg YSBhbmQgYiBhcmUgZXF1YWwKICAqLwogc3RhdGljIGludAogYnRfbWVyZ2VfaGVhcF9jbXAoY29u c3QgcGFpcmluZ2hlYXBfbm9kZSAqYSwKQEAgLTcyLDQxICs4OSw2NSBAQCBidF9tZXJnZV9oZWFw X2NtcChjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLAogCQkJCQkJCQkJCQkJCShwYWlyaW5naGVh cF9ub2RlICopIGEpOwogCUJUTWVyZ2VDdXJzb3IgKmN1cnNvcl9iID0gcGFpcmluZ2hlYXBfY29u dGFpbmVyKEJUTWVyZ2VDdXJzb3IsIHBoX25vZGUsCiAJCQkJCQkJCQkJCQkJKHBhaXJpbmdoZWFw X25vZGUgKikgYik7Ci0JRGF0dW0JCWtleV9hID0gY3Vyc29yX2EtPnNvcnRfa2V5OwotCURhdHVt CQlrZXlfYiA9IGN1cnNvcl9iLT5zb3J0X2tleTsKLQlib29sCQludWxsX2EgPSBjdXJzb3JfYS0+ c29ydF9rZXlfaXNudWxsOwotCWJvb2wJCW51bGxfYiA9IGN1cnNvcl9iLT5zb3J0X2tleV9pc251 bGw7Ci0JaW50MzIJCWNtcDsKLQotCS8qIEhhbmRsZSBOVUxMcyAtIE5VTExzIHNvcnQgbGFzdCAo TlVMTFMgTEFTVCBkZWZhdWx0IGZvciBBU0MpICovCi0JaWYgKG51bGxfYSAmJiBudWxsX2IpCi0J CXJldHVybiAwOwotCWlmIChudWxsX2EpCi0JCXJldHVybiAtMTsJCQkJLyogYSBpcyBOVUxMLCBj b21lcyBhZnRlciBiICovCi0JaWYgKG51bGxfYikKLQkJcmV0dXJuIDE7CQkJCS8qIGIgaXMgTlVM TCwgY29tZXMgYWZ0ZXIgYSAqLwotCi0JLyogQ29tcGFyZSB1c2luZyB0aGUgc3VmZml4IGNvbHVt bidzIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQljbXAgPSBEYXR1bUdldEludDMyKEZ1bmN0aW9u Q2FsbDJDb2xsKCZzdGF0ZS0+c3VmZml4X2NtcCwKLQkJCQkJCQkJCQkgIHN0YXRlLT5zdWZmaXhf Y29sbGF0aW9uLAotCQkJCQkJCQkJCSAga2V5X2EsIGtleV9iKSk7Ci0KLQkvKgotCSAqIFVzZSBw cmVmaXggdmFsdWUgYXMgdGllYnJlYWtlciBmb3IgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy4KLQkg KiBUaGlzIGVuc3VyZXMgT1JERVIgQlkgc3VmZml4LCBwcmVmaXggYmVoYXZpb3IuCi0JICovCi0J aWYgKGNtcCA9PSAwKQorCUluZGV4VHVwbGUJaXR1cF9hOworCUluZGV4VHVwbGUJaXR1cF9iOwor CWludDMyCQljbXAgPSAwOworCWludAkJCWNvbDsKKworCS8qIEdldCB0aGUgaW5kZXggdHVwbGVz IGZyb20gZWFjaCBjdXJzb3IgKi8KKwlpdHVwX2EgPSBidF9tZXJnZV9nZXRfaW5kZXhfdHVwbGUo Y3Vyc29yX2EpOworCWl0dXBfYiA9IGJ0X21lcmdlX2dldF9pbmRleF90dXBsZShjdXJzb3JfYik7 CisKKwkvKiBIYW5kbGUgZXhoYXVzdGVkIGN1cnNvcnMgKi8KKwlpZiAoaXR1cF9hID09IE5VTEwg JiYgaXR1cF9iID09IE5VTEwpCisJCXJldHVybiBjdXJzb3JfYi0+Y3Vyc29yX2lkIC0gY3Vyc29y X2EtPmN1cnNvcl9pZDsKKwlpZiAoaXR1cF9hID09IE5VTEwpCisJCXJldHVybiAtMTsJCQkJLyog YSBpcyBleGhhdXN0ZWQsIGNvbWVzIGFmdGVyIGIgKi8KKwlpZiAoaXR1cF9iID09IE5VTEwpCisJ CXJldHVybiAxOwkJCQkvKiBiIGlzIGV4aGF1c3RlZCwgY29tZXMgYWZ0ZXIgYSAqLworCisJLyog Q29tcGFyZSBhbGwgc3VmZml4IGNvbHVtbnMgaW4gb3JkZXIgKi8KKwlmb3IgKGNvbCA9IDA7IGNv bCA8IHN0YXRlLT5pbmRleF9yZWwtPnJkX2luZGV4LT5pbmRua2V5YXR0cyAtIHN0YXRlLT5udW1f cHJlZml4X2NvbHMgJiYgY21wID09IDA7IGNvbCsrKQogCXsKLQkJLyogQ29tcGFyZSBwcmVmaXgg dmFsdWVzIChhc3N1bWVzIHBhc3MtYnktdmFsdWUgaW50NCBmb3Igbm93KSAqLwotCQlpbnQzMgkJ cHJlZml4X2EgPSBEYXR1bUdldEludDMyKGN1cnNvcl9hLT5wcmVmaXhfdmFsdWUpOwotCQlpbnQz MgkJcHJlZml4X2IgPSBEYXR1bUdldEludDMyKGN1cnNvcl9iLT5wcmVmaXhfdmFsdWUpOwotCi0J CWlmIChwcmVmaXhfYSA8IHByZWZpeF9iKQotCQkJY21wID0gLTE7Ci0JCWVsc2UgaWYgKHByZWZp eF9hID4gcHJlZml4X2IpCi0JCQljbXAgPSAxOworCQlpbnQJCQlhdHRubyA9IHN0YXRlLT5udW1f cHJlZml4X2NvbHMgKyBjb2wgKyAxOworCQlpbnQxNgkJaW5kb3B0aW9uID0gc3RhdGUtPmluZGV4 X3JlbC0+cmRfaW5kb3B0aW9uW2F0dG5vIC0gMV07CisJCWJvb2wJCW51bGxfYSwKKwkJCQkJbnVs bF9iOworCQlEYXR1bQkJa2V5X2EsCisJCQkJCWtleV9iOworCisJCWtleV9hID0gaW5kZXhfZ2V0 YXR0cihpdHVwX2EsIGF0dG5vLCBzdGF0ZS0+aW5kZXhfdHVwZGVzYywgJm51bGxfYSk7CisJCWtl eV9iID0gaW5kZXhfZ2V0YXR0cihpdHVwX2IsIGF0dG5vLCBzdGF0ZS0+aW5kZXhfdHVwZGVzYywg Jm51bGxfYik7CisKKwkJLyogSGFuZGxlIE5VTExzIC0gcmV0dXJuIGRpcmVjdGx5IHdpdGggYWxs IGZhY3RvcnMgbXVsdGlwbGllZCAqLworCQlpZiAobnVsbF9hIHx8IG51bGxfYikKKwkJeworCQkJ aWYgKG51bGxfYSAmJiBudWxsX2IpCisJCQkJY29udGludWU7CQkvKiBCb3RoIE5VTEwsIHRyeSBu ZXh0IGNvbHVtbiAqLworCisJCQlyZXR1cm4gKG51bGxfYSA/IC0xIDogMSkKKwkJCQkgKiAoKGlu ZG9wdGlvbiAmIElORE9QVElPTl9OVUxMU19GSVJTVCkgPyAtMSA6IDEpCisJCQkJICogKHN0YXRl LT5kaXJlY3Rpb24gPT0gQmFja3dhcmRTY2FuRGlyZWN0aW9uID8gLTEgOiAxKTsKKwkJfQorCisJ CS8qIENvbXBhcmUgdXNpbmcgaW5kZXgncyBjb21wYXJpc29uIGZ1bmN0aW9uIGFuZCBjb2xsYXRp b24gKi8KKwkJY21wID0gRGF0dW1HZXRJbnQzMihGdW5jdGlvbkNhbGwyQ29sbChpbmRleF9nZXRw cm9jaW5mbyhzdGF0ZS0+aW5kZXhfcmVsLCBhdHRubywgQlRPUkRFUl9QUk9DKSwKKwkJCQkJCQkJ CQkJICBUdXBsZURlc2NBdHRyKHN0YXRlLT5pbmRleF90dXBkZXNjLCBhdHRubyAtIDEpLT5hdHRj b2xsYXRpb24sCisJCQkJCQkJCQkJCSAga2V5X2EsIGtleV9iKSk7CisKKwkJLyogRm9yIERFU0Mg Y29sdW1ucywgaW52ZXJ0IHRvIG1hdGNoIHBoeXNpY2FsIGluZGV4IG9yZGVyICovCisJCWlmICgo aW5kb3B0aW9uICYgSU5ET1BUSU9OX0RFU0MpKQorCQkJY21wID0gLWNtcDsKIAl9CiAKKwkvKiBG b3IgYmFja3dhcmQgc2NhbiwgaW52ZXJ0IHRoZSBzdWZmaXggY29tcGFyaXNvbiAqLworCWlmIChz dGF0ZS0+ZGlyZWN0aW9uID09IEJhY2t3YXJkU2NhbkRpcmVjdGlvbikKKwkJY21wID0gLWNtcDsK KworCS8qIFVzZSBjdXJzb3JfaWQgYXMgdGllYnJlYWtlciAoYWx3YXlzIGFzY2VuZGluZyBmb3Ig ZGV0ZXJtaW5pc20pICovCisJaWYgKGNtcCA9PSAwKQorCQljbXAgPSBjdXJzb3JfYS0+Y3Vyc29y X2lkIC0gY3Vyc29yX2ItPmN1cnNvcl9pZDsKKwogCS8qIE5lZ2F0ZSBmb3IgbWluLWhlYXAgYmVo YXZpb3IgKi8KIAlyZXR1cm4gLWNtcDsKIH0KQEAgLTExNiwyNCArMTU3LDMyIEBAIGJ0X21lcmdl X2hlYXBfY21wKGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmEsCiAgKiBidF9tZXJnZV9pbml0CiAg KgkgIEluaXRpYWxpemUgYSBtZXJnZSBzY2FuIHN0YXRlLgogICoKLSAqIENyZWF0ZXMgdGhlIG1l cmdlIHN0YXRlIHdpdGggb25lIGN1cnNvciBwZXIgcHJlZml4IHZhbHVlLgorICogQ3JlYXRlcyB0 aGUgbWVyZ2Ugc3RhdGUgd2l0aCBvbmUgY3Vyc29yIHBlciBwcmVmaXggY29tYmluYXRpb24uCiAg KiBUaGUgY3Vyc29ycyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlaXIgZmlyc3QgbWF0Y2hpbmcg dHVwbGVzCiAgKiB3aGVuIGJ0X21lcmdlX2dldG5leHQgaXMgZmlyc3QgY2FsbGVkLgorICoKKyAq IFByZWZpeCBjb2x1bW5zIGFyZSBhc3N1bWVkIHRvIGJlIDEuLm51bV9wcmVmaXhfY29scy4KKyAq IFN1ZmZpeCBjb2x1bW5zIGFyZSAobnVtX3ByZWZpeF9jb2xzKzEpLi5pbmRua2V5YXR0cy4KKyAq IENvbXBhcmlzb24gZnVuY3Rpb25zIGFyZSBsb29rZWQgdXAgZnJvbSB0aGUgaW5kZXggcmVsYXRp b24uCiAgKi8KIEJUTWVyZ2VTY2FuU3RhdGUgKgogYnRfbWVyZ2VfaW5pdChJbmRleFNjYW5EZXNj IHNjYW4sCi0JCQkgIERhdHVtICpwcmVmaXhfdmFsdWVzLAotCQkJICBib29sICpwcmVmaXhfbnVs bHMsCi0JCQkgIGludCBudW1fcHJlZml4ZXMsCi0JCQkgIGludCBwcmVmaXhfYXR0bm8sCi0JCQkg IGludCBzdWZmaXhfYXR0bm8sCi0JCQkgIE9pZCBzdWZmaXhfY21wX29pZCwKLQkJCSAgT2lkIHN1 ZmZpeF9jb2xsYXRpb24pCisJCQkgIERhdHVtICoqcHJlZml4X3R1cGxlcywKKwkJCSAgYm9vbCAq KnByZWZpeF9udWxscywKKwkJCSAgaW50IG51bV9jdXJzb3JzLAorCQkJICBpbnQgbnVtX3ByZWZp eF9jb2xzKQogewogCUJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlOworCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KHJlbCk7CiAJTWVtb3J5Q29udGV4dCBtZXJnZV9jb250ZXh0OwogCU1lbW9yeUNvbnRleHQgb2xk X2NvbnRleHQ7CiAJaW50CQkJaTsKKwlpbnQJCQlqOworCisJLyogQ2hlY2sgdGhlcmUgYXJlIHN1 ZmZpeCBjb2x1bW5zIHRvIG9yZGVyIGJ5ICovCisJaWYgKHJlbC0+cmRfaW5kZXgtPmluZG5rZXlh dHRzIDw9IG51bV9wcmVmaXhfY29scykKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiBDcmVhdGUgbWVt b3J5IGNvbnRleHQgZm9yIG1lcmdlIHNjYW4gYWxsb2NhdGlvbnMgKi8KIAltZXJnZV9jb250ZXh0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LApAQCAtMTQ0LDMz ICsxOTMsNTcgQEAgYnRfbWVyZ2VfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJLyogQWxsb2Nh dGUgbWFpbiBzdGF0ZSBzdHJ1Y3R1cmUgKi8KIAlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEJUTWVy Z2VTY2FuU3RhdGUpKTsKIAlzdGF0ZS0+bWVyZ2VfY29udGV4dCA9IG1lcmdlX2NvbnRleHQ7Ci0J c3RhdGUtPm51bV9jdXJzb3JzID0gbnVtX3ByZWZpeGVzOworCXN0YXRlLT5udW1fY3Vyc29ycyA9 IG51bV9jdXJzb3JzOwogCXN0YXRlLT5hY3RpdmVfY3Vyc29ycyA9IDA7Ci0Jc3RhdGUtPnByZWZp eF9hdHRubyA9IHByZWZpeF9hdHRubzsKLQlzdGF0ZS0+c3VmZml4X2F0dG5vID0gc3VmZml4X2F0 dG5vOwotCXN0YXRlLT5zdWZmaXhfY29sbGF0aW9uID0gc3VmZml4X2NvbGxhdGlvbjsKKwlzdGF0 ZS0+bnVtX3ByZWZpeF9jb2xzID0gbnVtX3ByZWZpeF9jb2xzOwogCXN0YXRlLT5kaXJlY3Rpb24g PSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKIAlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAlz dGF0ZS0+dHVwbGVzX2FjY2Vzc2VkID0gMDsKKwlzdGF0ZS0+aW5kZXhfdHVwZGVzYyA9IHR1cGRl c2M7CiAKLQkvKiBTZXQgdXAgc3VmZml4IGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQlmbWdyX2lu Zm8oc3VmZml4X2NtcF9vaWQsICZzdGF0ZS0+c3VmZml4X2NtcCk7CisJLyogU3RvcmUgcmVmZXJl bmNlIHRvIGluZGV4IHJlbGF0aW9uIChmb3IgY21wIGZ1bmNzLCBjb2xsYXRpb25zLCBpbmRvcHRp b24pICovCisJc3RhdGUtPmluZGV4X3JlbCA9IHJlbDsKIAogCS8qIEFsbG9jYXRlIGN1cnNvciBh cnJheSAqLwotCXN0YXRlLT5jdXJzb3JzID0gcGFsbG9jMChudW1fcHJlZml4ZXMgKiBzaXplb2Yo QlRNZXJnZUN1cnNvcikpOworCXN0YXRlLT5jdXJzb3JzID0gcGFsbG9jMChudW1fY3Vyc29ycyAq IHNpemVvZihCVE1lcmdlQ3Vyc29yKSk7CiAKIAkvKiBJbml0aWFsaXplIGN1cnNvciBtZXRhZGF0 YSAobm90IHBvc2l0aW9uZWQgeWV0KSAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fcHJlZml4ZXM7 IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2N1cnNvcnM7IGkrKykKIAl7CiAJCUJUTWVyZ2VD dXJzb3IgKmN1cnNvciA9ICZzdGF0ZS0+Y3Vyc29yc1tpXTsKKwkJYm9vbAkJaGFzX251bGwgPSBm YWxzZTsKIAogCQljdXJzb3ItPmN1cnNvcl9pZCA9IGk7Ci0JCWN1cnNvci0+cHJlZml4X3ZhbHVl ID0gZGF0dW1Db3B5KHByZWZpeF92YWx1ZXNbaV0sIHRydWUsIHNpemVvZihEYXR1bSkpOwotCQlj dXJzb3ItPnByZWZpeF9pc251bGwgPSBwcmVmaXhfbnVsbHNbaV07Ci0JCWN1cnNvci0+ZXhoYXVz dGVkID0gcHJlZml4X251bGxzW2ldOwkvKiBOVUxMIHByZWZpeCA9IGV4aGF1c3RlZCAqLwotCQlj dXJzb3ItPnNvcnRfa2V5X2lzbnVsbCA9IHRydWU7CisKKwkJLyogQ2hlY2sgaWYgYW55IHByZWZp eCB2YWx1ZSBpcyBOVUxMICovCisJCWZvciAoaiA9IDA7IGogPCBudW1fcHJlZml4X2NvbHM7IGor KykKKwkJeworCQkJaWYgKHByZWZpeF9udWxsc1tpXVtqXSkKKwkJCXsKKwkJCQloYXNfbnVsbCA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBTa2lwIGN1cnNvcnMgd2l0aCBO VUxMIHByZWZpeGVzIC0gdGhleSB3b3VsZCBtYXRjaCBub3RoaW5nICovCisJCWlmIChoYXNfbnVs bCkKKwkJeworCQkJY3Vyc29yLT5wcmVmaXhfdmFsdWVzID0gTlVMTDsKKwkJCWN1cnNvci0+ZXho YXVzdGVkID0gdHJ1ZTsKKwkJCWN1cnNvci0+dHVwbGVzID0gTlVMTDsKKwkJCUJUU2NhblBvc0lu dmFsaWRhdGUoY3Vyc29yLT5wb3MpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDb3B5IHBy ZWZpeCB2YWx1ZXMgZm9yIHRoaXMgY3Vyc29yICovCisJCWN1cnNvci0+cHJlZml4X3ZhbHVlcyA9 IHBhbGxvYyhudW1fcHJlZml4X2NvbHMgKiBzaXplb2YoRGF0dW0pKTsKKwkJZm9yIChqID0gMDsg aiA8IG51bV9wcmVmaXhfY29sczsgaisrKQorCQl7CisJCQljdXJzb3ItPnByZWZpeF92YWx1ZXNb al0gPSBkYXR1bUNvcHkocHJlZml4X3R1cGxlc1tpXVtqXSwgdHJ1ZSwgc2l6ZW9mKERhdHVtKSk7 CisJCX0KKwkJY3Vyc29yLT5leGhhdXN0ZWQgPSBmYWxzZTsKIAkJQlRTY2FuUG9zSW52YWxpZGF0 ZShjdXJzb3ItPnBvcyk7Ci0JCS8qIEFsbG9jYXRlIHR1cGxlIHdvcmtzcGFjZSBmb3IgaW5kZXgt b25seSBzY2FucyAqLworCQkvKiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2UgZm9yIHN1ZmZpeCBr ZXkgZXh0cmFjdGlvbiAqLwogCQljdXJzb3ItPnR1cGxlcyA9IHBhbGxvYyhCTENLU1opOwogCX0K IApAQCAtMjEyLDkgKzI4NSw3IEBAIGJ0X21lcmdlX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJewogCQkJQlRNZXJnZUN1cnNvciAqYyA9ICZzdGF0ZS0+ Y3Vyc29yc1tpXTsKIAotCQkJaWYgKCFjLT5leGhhdXN0ZWQgJiYKLQkJCQlidF9tZXJnZV9jdXJz b3JfaW5pdChzdGF0ZSwgc2NhbiwgYywKLQkJCQkJCQkJCSBjLT5wcmVmaXhfdmFsdWUsIGMtPnBy ZWZpeF9pc251bGwpKQorCQkJaWYgKCFjLT5leGhhdXN0ZWQgJiYgYnRfbWVyZ2VfY3Vyc29yX2lu aXQoc3RhdGUsIHNjYW4sIGMpKQogCQkJewogCQkJCS8qIEN1cnNvciBoYXMgYXQgbGVhc3Qgb25l IHR1cGxlLCBhZGQgdG8gaGVhcCAqLwogCQkJCXBhaXJpbmdoZWFwX2FkZChzdGF0ZS0+bWVyZ2Vf aGVhcCwgJmMtPnBoX25vZGUpOwpAQCAtMzAzLDMzICszNzQsMzggQEAgYnRfbWVyZ2VfZW5kKEJU TWVyZ2VTY2FuU3RhdGUgKnN0YXRlKQogc3RhdGljIGJvb2wKIGJ0X21lcmdlX2N1cnNvcl9pbml0 KEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAogCQkJCQkgSW5kZXhTY2FuRGVzYyBzY2FuLAotCQkJ CQkgQlRNZXJnZUN1cnNvciAqY3Vyc29yLAotCQkJCQkgRGF0dW0gcHJlZml4X3ZhbHVlLAotCQkJ CQkgYm9vbCBwcmVmaXhfaXNudWxsKQorCQkJCQkgQlRNZXJnZUN1cnNvciAqY3Vyc29yKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlib29sCQlm b3VuZDsKLQotCWlmIChwcmVmaXhfaXNudWxsKQotCXsKLQkJY3Vyc29yLT5leGhhdXN0ZWQgPSB0 cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQorCWJvb2wJCXNhdmVfd2FudF9pdHVwOworCWludAkJ CWNvbDsKIAogCS8qCi0JICogTW9kaWZ5IHRoZSBzY2FuIGtleSB0byB1c2UgdGhpcyBjdXJzb3In cyBwcmVmaXggdmFsdWUuCi0JICogV2UgcmV1c2UgdGhlIHNjYW4ncyBleGlzdGluZyBrZXkgaW5m cmFzdHJ1Y3R1cmUuCisJICogTW9kaWZ5IHRoZSBzY2FuIGtleXMgdG8gdXNlIHRoaXMgY3Vyc29y J3MgcHJlZml4IHZhbHVlcy4KKwkgKiBXZSBtb2RpZnkgc2Nhbi0+a2V5RGF0YSAob3JpZ2luYWwg a2V5cykgYmVjYXVzZSBfYnRfZmlyc3QgY2FsbHMKKwkgKiBfYnRfcHJlcHJvY2Vzc19rZXlzIHdo aWNoIHJlLXByb2Nlc3NlcyBzY2FuLT5rZXlEYXRhIGludG8gc28tPmtleURhdGEuCisJICogUHJl Zml4IGNvbHVtbnMgYXJlIDEuLm51bV9wcmVmaXhfY29scy4KIAkgKi8KLQlmb3IgKGludCBpID0g MDsgaSA8IHNvLT5udW1iZXJPZktleXM7IGkrKykKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IHN0YXRl LT5udW1fcHJlZml4X2NvbHM7IGNvbCsrKQogCXsKLQkJaWYgKHNvLT5rZXlEYXRhW2ldLnNrX2F0 dG5vID09IHN0YXRlLT5wcmVmaXhfYXR0bm8pCisJCWludAkJCWF0dG5vID0gY29sICsgMTsJLyog MS1iYXNlZCBhdHRyaWJ1dGUgbnVtYmVyICovCisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2Fu LT5udW1iZXJPZktleXM7IGkrKykKIAkJewotCQkJc28tPmtleURhdGFbaV0uc2tfYXJndW1lbnQg PSBwcmVmaXhfdmFsdWU7Ci0JCQlzby0+a2V5RGF0YVtpXS5za19mbGFncyAmPSB+KFNLX1NFQVJD SEFSUkFZKTsKLQkJCWJyZWFrOworCQkJaWYgKHNjYW4tPmtleURhdGFbaV0uc2tfYXR0bm8gPT0g YXR0bm8gJiYKKwkJCQlzY2FuLT5rZXlEYXRhW2ldLnNrX3N0cmF0ZWd5ID09IEJURXF1YWxTdHJh dGVneU51bWJlcikKKwkJCXsKKwkJCQlzY2FuLT5rZXlEYXRhW2ldLnNrX2FyZ3VtZW50ID0gY3Vy c29yLT5wcmVmaXhfdmFsdWVzW2NvbF07CisJCQkJc2Nhbi0+a2V5RGF0YVtpXS5za19mbGFncyAm PSB+KFNLX1NFQVJDSEFSUkFZKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIAorCS8qIEZv cmNlIGtleSByZS1wcmVwcm9jZXNzaW5nIGZvciB0aGlzIGN1cnNvcidzIHByZWZpeCB2YWx1ZXMg Ki8KKwlzby0+bnVtYmVyT2ZLZXlzID0gMDsKKwogCS8qIEludmFsaWRhdGUgY3VycmVudCBwb3Np dGlvbiB0byBmb3JjZSBfYnRfZmlyc3QgKi8KIAlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJy UG9zKTsKIApAQCAtMzQyLDYgKzQxOCwxNCBAQCBidF9tZXJnZV9jdXJzb3JfaW5pdChCVE1lcmdl U2NhblN0YXRlICpzdGF0ZSwKIAlzby0+bnVtQXJyYXlLZXlzID0gMDsKIAlzby0+bmVlZFByaW1T Y2FuID0gZmFsc2U7CiAKKwkvKgorCSAqIEZvcmNlIHR1cGxlIGRhdGEgdG8gYmUgY29waWVkIGZv ciBzdWZmaXgga2V5IGV4dHJhY3Rpb24uCisJICogVGhpcyBpcyBuZWVkZWQgZXZlbiBmb3IgcmVn dWxhciAobm9uLWluZGV4LW9ubHkpIHNjYW5zIGJlY2F1c2UKKwkgKiB0aGUgbWVyZ2UgY29tcGFy aXNvbiBmdW5jdGlvbiBuZWVkcyBhY2Nlc3MgdG8gdGhlIHN1ZmZpeCBjb2x1bW4uCisJICovCisJ c2F2ZV93YW50X2l0dXAgPSBzY2FuLT54c193YW50X2l0dXA7CisJc2Nhbi0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKKwogCS8qIFBvc2l0aW9uIGF0IGZpcnN0IG1hdGNoaW5nIHR1cGxlICovCiAJZm91 bmQgPSBfYnRfZmlyc3Qoc2Nhbiwgc3RhdGUtPmRpcmVjdGlvbik7CiAKQEAgLTM1MSw3ICs0MzUs NyBAQCBidF9tZXJnZV9jdXJzb3JfaW5pdChCVE1lcmdlU2NhblN0YXRlICpzdGF0ZSwKIAkJbWVt Y3B5KCZjdXJzb3ItPnBvcywgJnNvLT5jdXJyUG9zLCBzaXplb2YoQlRTY2FuUG9zRGF0YSkpOwog CiAJCS8qCi0JCSAqIENvcHkgdGhlIHR1cGxlIGRhdGEgZm9yIGluZGV4LW9ubHkgc2NhbnMuCisJ CSAqIENvcHkgdGhlIHR1cGxlIGRhdGEgZm9yIHN1ZmZpeCBrZXkgZXh0cmFjdGlvbiBkdXJpbmcg aGVhcCBjb21wYXJpc29uLgogCQkgKiBUaGUgdHVwbGUgd29ya3NwYWNlIGNvbnRhaW5zIGNvcGll cyBvZiBpbmRleCB0dXBsZXMgcmVmZXJlbmNlZAogCQkgKiBieSBpdGVtcyBpbiBjdXJyUG9zLgog CQkgKi8KQEAgLTM2MCwxMiArNDQ0LDcgQEAgYnRfbWVyZ2VfY3Vyc29yX2luaXQoQlRNZXJnZVNj YW5TdGF0ZSAqc3RhdGUsCiAJCQltZW1jcHkoY3Vyc29yLT50dXBsZXMsIHNvLT5jdXJyVHVwbGVz LCBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwogCQl9CiAKLQkJLyogRXh0cmFjdCB0aGUg c29ydCBrZXkgZm9yIGhlYXAgb3JkZXJpbmcgKi8KLQkJY3Vyc29yLT5zb3J0X2tleSA9IGJ0X21l cmdlX2V4dHJhY3Rfc29ydGtleShzdGF0ZSwgc2NhbiwgY3Vyc29yLAotCQkJCQkJCQkJCQkJCSZj dXJzb3ItPnNvcnRfa2V5X2lzbnVsbCk7CiAJCWN1cnNvci0+ZXhoYXVzdGVkID0gZmFsc2U7Ci0K LQkJLyogQ291bnQgdGhpcyBhcyBhIHR1cGxlIGFjY2VzcyAqLwogCQlzdGF0ZS0+dHVwbGVzX2Fj Y2Vzc2VkKys7CiAKIAkJLyogSW52YWxpZGF0ZSBtYWluIHNjYW4gcG9zaXRpb24gKi8KQEAgLTM3 Niw2ICs0NTUsOSBAQCBidF9tZXJnZV9jdXJzb3JfaW5pdChCVE1lcmdlU2NhblN0YXRlICpzdGF0 ZSwKIAkJY3Vyc29yLT5leGhhdXN0ZWQgPSB0cnVlOwogCX0KIAorCS8qIFJlc3RvcmUgb3JpZ2lu YWwgc2V0dGluZyAqLworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IHNhdmVfd2FudF9pdHVwOworCiAJ cmV0dXJuIGZvdW5kOwogfQogCkBAIC00MjMsMjggKzUwNSwzOCBAQCBidF9tZXJnZV9jdXJzb3Jf YWR2YW5jZShCVE1lcmdlU2NhblN0YXRlICpzdGF0ZSwKIAkJICogY2FsbCBfYnRfbmV4dCwgdGhl biBzd2FwIGJhY2suCiAJCSAqLwogCQlCVFNjYW5Qb3NEYXRhIHNhdmVfcG9zOworCQlib29sCQlz YXZlX3dhbnRfaXR1cDsKIAogCQltZW1jcHkoJnNhdmVfcG9zLCAmc28tPmN1cnJQb3MsIHNpemVv ZihCVFNjYW5Qb3NEYXRhKSk7CiAJCW1lbWNweSgmc28tPmN1cnJQb3MsICZjdXJzb3ItPnBvcywg c2l6ZW9mKEJUU2NhblBvc0RhdGEpKTsKIAorCQkvKiBGb3JjZSB0dXBsZSBkYXRhIHRvIGJlIGNv cGllZCBmb3Igc3VmZml4IGtleSBleHRyYWN0aW9uICovCisJCXNhdmVfd2FudF9pdHVwID0gc2Nh bi0+eHNfd2FudF9pdHVwOworCQlzY2FuLT54c193YW50X2l0dXAgPSB0cnVlOworCiAJCWZvdW5k ID0gX2J0X25leHQoc2Nhbiwgc3RhdGUtPmRpcmVjdGlvbik7CiAKIAkJaWYgKGZvdW5kKQorCQl7 CiAJCQltZW1jcHkoJmN1cnNvci0+cG9zLCAmc28tPmN1cnJQb3MsIHNpemVvZihCVFNjYW5Qb3NE YXRhKSk7CiAKKwkJCS8qCisJCQkgKiBDb3B5IHRoZSBuZXcgcGFnZSdzIHR1cGxlIGRhdGEgZm9y IHN1ZmZpeCBrZXkgZXh0cmFjdGlvbi4KKwkJCSAqLworCQkJaWYgKHNvLT5jdXJyVHVwbGVzICYm IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA+IDApCisJCQl7CisJCQkJbWVtY3B5KGN1cnNv ci0+dHVwbGVzLCBzby0+Y3VyclR1cGxlcywgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsK KwkJCX0KKwkJfQorCisJCS8qIFJlc3RvcmUgb3JpZ2luYWwgc2V0dGluZyAqLworCQlzY2FuLT54 c193YW50X2l0dXAgPSBzYXZlX3dhbnRfaXR1cDsKKwogCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAm c2F2ZV9wb3MsIHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CiAJfQogCiAJaWYgKGZvdW5kKQogCXsK LQkJLyoKLQkJICogRG9uJ3QgY291bnQgaGVyZSAtIHRoZSBhZHZhbmNlZC10byB0dXBsZSB3aWxs IGJlIHJldHVybmVkIGxhdGVyCi0JCSAqIGFuZCBjb3VudGVkIGJ5IGluZGV4X2dldG5leHRfdGlk IGF0IHRoYXQgdGltZS4KLQkJICovCi0KLQkJLyogRXh0cmFjdCBuZXcgc29ydCBrZXkgKi8KLQkJ Y3Vyc29yLT5zb3J0X2tleSA9IGJ0X21lcmdlX2V4dHJhY3Rfc29ydGtleShzdGF0ZSwgc2Nhbiwg Y3Vyc29yLAotCQkJCQkJCQkJCQkJCSZjdXJzb3ItPnNvcnRfa2V5X2lzbnVsbCk7CiAJCXN0YXRl LT50dXBsZXNfYWNjZXNzZWQrKzsKIAl9CiAJZWxzZQpAQCAtNDU0LDU2ICs1NDYsMyBAQCBidF9t ZXJnZV9jdXJzb3JfYWR2YW5jZShCVE1lcmdlU2NhblN0YXRlICpzdGF0ZSwKIAogCXJldHVybiBm b3VuZDsKIH0KLQotCi0vKgotICogYnRfbWVyZ2VfZXh0cmFjdF9zb3J0a2V5Ci0gKgkgIEV4dHJh Y3QgdGhlIHNvcnQga2V5IChzdWZmaXggY29sdW1uIHZhbHVlKSBmcm9tIHRoZSBjdXJyZW50IHR1 cGxlLgotICovCi1zdGF0aWMgRGF0dW0KLWJ0X21lcmdlX2V4dHJhY3Rfc29ydGtleShCVE1lcmdl U2NhblN0YXRlICpzdGF0ZSwKLQkJCQkJCSBJbmRleFNjYW5EZXNjIHNjYW4sCi0JCQkJCQkgQlRN ZXJnZUN1cnNvciAqY3Vyc29yLAotCQkJCQkJIGJvb2wgKmlzbnVsbCkKLXsKLQlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJ1ZmZlcgkJYnVmOwotCVBhZ2UJCXBhZ2U7Ci0J T2Zmc2V0TnVtYmVyIG9mZm51bTsKLQlJdGVtSWQJCWl0ZW1pZDsKLQlJbmRleFR1cGxlCWl0dXA7 Ci0JVHVwbGVEZXNjCXR1cGRlc2M7Ci0JRGF0dW0JCXJlc3VsdDsKLQotCWlmIChjdXJzb3ItPnBv cy5jdXJyUGFnZSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCi0JewotCQkqaXNudWxsID0gdHJ1ZTsK LQkJcmV0dXJuIChEYXR1bSkgMDsKLQl9Ci0KLQkvKiBSZWFkIHRoZSBwYWdlICovCi0JYnVmID0g UmVhZEJ1ZmZlcihyZWwsIGN1cnNvci0+cG9zLmN1cnJQYWdlKTsKLQlMb2NrQnVmZmVyKGJ1Ziwg QlRfUkVBRCk7Ci0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQotCW9mZm51bSA9IGN1cnNv ci0+cG9zLml0ZW1zW2N1cnNvci0+cG9zLml0ZW1JbmRleF0uaW5kZXhPZmZzZXQ7Ci0JaXRlbWlk ID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsKLQl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OwotCi0JLyogRXh0cmFjdCB0aGUgc3VmZml4IGNvbHVtbiB2YWx1ZSAqLwotCXJlc3VsdCA9IGlu ZGV4X2dldGF0dHIoaXR1cCwgc3RhdGUtPnN1ZmZpeF9hdHRubywgdHVwZGVzYywgaXNudWxsKTsK LQotCS8qIENvcHkgcGFzcy1ieS1yZWZlcmVuY2UgdmFsdWVzIGJlZm9yZSByZWxlYXNpbmcgYnVm ZmVyICovCi0JaWYgKCEqaXNudWxsKQotCXsKLQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgc3RhdGUtPnN1ZmZpeF9hdHRubyAtIDEpOwotCi0JCWlmICgh YXR0ci0+YXR0Ynl2YWwpCi0JCQlyZXN1bHQgPSBkYXR1bUNvcHkocmVzdWx0LCBhdHRyLT5hdHRi eXZhbCwgYXR0ci0+YXR0bGVuKTsKLQl9Ci0KLQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7Ci0K LQlyZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggMGU1 NWM0ODc0YjQuLmVlNmI2YzY3ODNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAg LTIyNiwxMDIgKzIyNiwxOTcgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVz LCBib29sICppc251bGwsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIFByZWZpeENvbENv bnN0cmFpbnQgLSBob2xkcyBjb25zdHJhaW50IGluZm8gZm9yIG9uZSBwcmVmaXggY29sdW1uCisg Ki8KK3R5cGVkZWYgc3RydWN0IFByZWZpeENvbENvbnN0cmFpbnQKK3sKKwlpbnQJCQlhdHRubzsJ CQkvKiBhdHRyaWJ1dGUgbnVtYmVyICgxLWJhc2VkKSAqLworCWludAkJCW51bV92YWx1ZXM7CQkv KiBudW1iZXIgb2YgdmFsdWVzICgxIGZvciBlcXVhbGl0eSwgTiBmb3IgSU4pICovCisJRGF0dW0J ICAgKnZhbHVlczsJCQkvKiBhcnJheSBvZiB2YWx1ZXMgKi8KKwlib29sCSAgICpudWxsczsJCQkv KiBhcnJheSBvZiBudWxsIGZsYWdzICovCit9IFByZWZpeENvbENvbnN0cmFpbnQ7CisKIC8qCiAg KiBidF9pbml0X21lcmdlX3NjYW5fZnJvbV9rZXlzCi0gKgkJSW5pdGlhbGl6ZSBtZXJnZSBzY2Fu IHN0YXRlIGZyb20gdGhlIHByZXByb2Nlc3NlZCBzY2FuIGtleXMuCisgKgkJSW5pdGlhbGl6ZSBt ZXJnZSBzY2FuIHN0YXRlIGZyb20gc2NhbiBrZXlzIHdpdGggbXVsdGktY29sdW1uIHN1cHBvcnQu CisgKgorICogSGFuZGxlcyBtdWx0aXBsZSBwcmVmaXggY29sdW1ucyB3aXRoIGVxdWFsaXR5IG9y IElOIGNvbnN0cmFpbnRzLgorICogRXhwYW5kcyBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBhbGwgcHJl Zml4IGNvbWJpbmF0aW9ucy4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgbWVyZ2Ugc2NhbiB3YXMg c3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLgotICogUmV0dXJucyBmYWxzZSBpZiBtZXJnZSBzY2Fu IGNhbm5vdCBiZSB1c2VkIChlLmcuLCBubyBzdWl0YWJsZSBhcnJheSBrZXkpLgorICogUmV0dXJu cyBmYWxzZSBpZiBtZXJnZSBzY2FuIGNhbm5vdCBiZSB1c2VkLgogICovCiBzdGF0aWMgYm9vbAog YnRfaW5pdF9tZXJnZV9zY2FuX2Zyb21fa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRpb25H ZXREZXNjcihyZWwpOwotCVNjYW5LZXkJCWFycmF5S2V5ID0gTlVMTDsKLQlBcnJheVR5cGUgICph cnI7Ci0JRGF0dW0JICAgKnByZWZpeF92YWx1ZXM7Ci0JYm9vbAkgICAqcHJlZml4X251bGxzOwot CWludAkJCW51bV9wcmVmaXhlczsKLQlpbnQJCQlwcmVmaXhfYXR0bm87Ci0JaW50CQkJc3VmZml4 X2F0dG5vOwotCU9pZAkJCXN1ZmZpeF9jbXBfb2lkOwotCU9pZAkJCXN1ZmZpeF9jb2xsYXRpb247 Ci0JT2lkCQkJb3BmYW1pbHk7Ci0JT2lkCQkJZWxlbXR5cGU7Ci0JaW50MTYJCWVsZW1sZW47Ci0J Ym9vbAkJZWxlbWJ5dmFsOwotCWNoYXIJCWVsZW1hbGlnbjsKKwlQcmVmaXhDb2xDb25zdHJhaW50 ICpjb25zdHJhaW50czsKKwlpbnQJCQludW1fcHJlZml4X2NvbHM7CisJaW50CQkJdG90YWxfY3Vy c29yczsKKwlEYXR1bQkgICoqcHJlZml4X3R1cGxlczsKKwlib29sCSAgKipwcmVmaXhfbnVsbHM7 CiAJaW50CQkJaTsKKwlpbnQJCQlqOworCWludAkJCWNvbDsKIAotCS8qIExvb2sgZm9yIFNLX1NF QVJDSEFSUkFZIG9uIGZpcnN0IGNvbHVtbiBpbiB0aGUgcmF3IHNjYW4ga2V5cyAqLwotCWZvciAo aSA9IDA7IGkgPCBzY2FuLT5udW1iZXJPZktleXM7IGkrKykKKwkvKgorCSAqIEZpbmQgcHJlZml4 IGNvbHVtbnM6IGFsbCBjb2x1bW5zIHdpdGggZXF1YWxpdHkvSU4gY29uc3RyYWludHMgYmVmb3Jl CisJICogdGhlIHN1ZmZpeCBjb2x1bW4uIEZvciBub3csIGFzc3VtZSBjb2x1bW5zIDEuLk4gYXJl IHByZWZpeGVzIGlmIHRoZXkKKwkgKiBoYXZlIGVxdWFsaXR5IGNvbnN0cmFpbnRzLCBhbmQgY29s dW1uIE4rMSBpcyB0aGUgc3VmZml4LgorCSAqLworCW51bV9wcmVmaXhfY29scyA9IDA7CisJZm9y IChjb2wgPSAxOyBjb2wgPD0gcmVsLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7IGNvbCsrKQogCXsK LQkJU2NhbktleQkJc2sgPSAmc2Nhbi0+a2V5RGF0YVtpXTsKKwkJYm9vbAkJaGFzX2VxdWFsaXR5 ID0gZmFsc2U7CiAKLQkJaWYgKChzay0+c2tfZmxhZ3MgJiBTS19TRUFSQ0hBUlJBWSkgJiYKLQkJ CXNrLT5za19hdHRubyA9PSAxICYmCi0JCQlzay0+c2tfc3RyYXRlZ3kgPT0gQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyKQorCQlmb3IgKGkgPSAwOyBpIDwgc2Nhbi0+bnVtYmVyT2ZLZXlzOyBpKyspCiAJ CXsKLQkJCWFycmF5S2V5ID0gc2s7Ci0JCQlicmVhazsKKwkJCVNjYW5LZXkJCXNrID0gJnNjYW4t PmtleURhdGFbaV07CisKKwkJCWlmIChzay0+c2tfYXR0bm8gPT0gY29sICYmCisJCQkJc2stPnNr X3N0cmF0ZWd5ID09IEJURXF1YWxTdHJhdGVneU51bWJlcikKKwkJCXsKKwkJCQloYXNfZXF1YWxp dHkgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQogCQl9CisKKwkJaWYgKGhhc19lcXVhbGl0eSkK KwkJCW51bV9wcmVmaXhfY29scysrOworCQllbHNlCisJCQlicmVhazsJCQkJLyogRmlyc3QgY29s dW1uIHdpdGhvdXQgZXF1YWxpdHkgaXMgc3VmZml4ICovCiAJfQogCi0JaWYgKGFycmF5S2V5ID09 IE5VTEwpCisJaWYgKG51bV9wcmVmaXhfY29scyA9PSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkv KiBFeHRyYWN0IGFycmF5IHZhbHVlcyBmcm9tIHRoZSBzY2FuIGtleSAqLwotCWFyciA9IERhdHVt R2V0QXJyYXlUeXBlUChhcnJheUtleS0+c2tfYXJndW1lbnQpOwotCW51bV9wcmVmaXhlcyA9IEFy cmF5R2V0Tkl0ZW1zKEFSUl9ORElNKGFyciksIEFSUl9ESU1TKGFycikpOwotCi0JaWYgKG51bV9w cmVmaXhlcyA8IDIpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBBbGxvY2F0ZSBjb25zdHJhaW50IGFy cmF5ICovCisJY29uc3RyYWludHMgPSBwYWxsb2MwKG51bV9wcmVmaXhfY29scyAqIHNpemVvZihQ cmVmaXhDb2xDb25zdHJhaW50KSk7CiAKLQkvKiBHZXQgYXJyYXkgZWxlbWVudCB0eXBlIGluZm8g Ki8KLQllbGVtdHlwZSA9IEFSUl9FTEVNVFlQRShhcnIpOwotCWdldF90eXBsZW5ieXZhbGFsaWdu KGVsZW10eXBlLCAmZWxlbWxlbiwgJmVsZW1ieXZhbCwgJmVsZW1hbGlnbik7CisJLyogQ29sbGVj dCBjb25zdHJhaW50cyBmb3IgZWFjaCBwcmVmaXggY29sdW1uICovCisJdG90YWxfY3Vyc29ycyA9 IDE7CisJZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fcHJlZml4X2NvbHM7IGNvbCsrKQorCXsKKwkJ aW50CQkJYXR0bm8gPSBjb2wgKyAxOworCQlQcmVmaXhDb2xDb25zdHJhaW50ICpjID0gJmNvbnN0 cmFpbnRzW2NvbF07CiAKLQkvKiBEZWNvbnN0cnVjdCB0aGUgYXJyYXkgaW50byBpbmRpdmlkdWFs IGVsZW1lbnRzICovCi0JZGVjb25zdHJ1Y3RfYXJyYXkoYXJyLCBlbGVtdHlwZSwgZWxlbWxlbiwg ZWxlbWJ5dmFsLCBlbGVtYWxpZ24sCi0JCQkJCSAgJnByZWZpeF92YWx1ZXMsICZwcmVmaXhfbnVs bHMsICZudW1fcHJlZml4ZXMpOworCQljLT5hdHRubyA9IGF0dG5vOwogCi0JLyogQXR0cmlidXRl IG51bWJlcnMgKDEtYmFzZWQpICovCi0JcHJlZml4X2F0dG5vID0gMTsKLQlzdWZmaXhfYXR0bm8g PSAyOworCQkvKiBMb29rIGZvciBhcnJheSBvciBzY2FsYXIgZXF1YWxpdHkgb24gdGhpcyBjb2x1 bW4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHNjYW4tPm51bWJlck9mS2V5czsgaSsrKQorCQl7CisJ CQlTY2FuS2V5CQlzayA9ICZzY2FuLT5rZXlEYXRhW2ldOwogCi0JLyogR2V0IHRoZSBvcGZhbWls eSBmcm9tIHRoZSBpbmRleCAqLwotCW9wZmFtaWx5ID0gcmVsLT5yZF9vcGZhbWlseVtzdWZmaXhf YXR0bm8gLSAxXTsKKwkJCWlmIChzay0+c2tfYXR0bm8gPT0gYXR0bm8gJiYKKwkJCQlzay0+c2tf c3RyYXRlZ3kgPT0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJeworCQkJCWlmIChzay0+c2tf ZmxhZ3MgJiBTS19TRUFSQ0hBUlJBWSkKKwkJCQl7CisJCQkJCS8qIElOIGNsYXVzZSAtIGV4dHJh Y3QgYXJyYXkgZWxlbWVudHMgKi8KKwkJCQkJQXJyYXlUeXBlICAqYXJyID0gRGF0dW1HZXRBcnJh eVR5cGVQKHNrLT5za19hcmd1bWVudCk7CisJCQkJCU9pZAkJCWVsZW10eXBlID0gQVJSX0VMRU1U WVBFKGFycik7CisJCQkJCWludDE2CQllbGVtbGVuOworCQkJCQlib29sCQllbGVtYnl2YWw7CisJ CQkJCWNoYXIJCWVsZW1hbGlnbjsKKworCQkJCQlnZXRfdHlwbGVuYnl2YWxhbGlnbihlbGVtdHlw ZSwgJmVsZW1sZW4sICZlbGVtYnl2YWwsICZlbGVtYWxpZ24pOworCQkJCQlkZWNvbnN0cnVjdF9h cnJheShhcnIsIGVsZW10eXBlLCBlbGVtbGVuLCBlbGVtYnl2YWwsIGVsZW1hbGlnbiwKKwkJCQkJ CQkJCSAgJmMtPnZhbHVlcywgJmMtPm51bGxzLCAmYy0+bnVtX3ZhbHVlcyk7CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCS8qIFNpbXBsZSBlcXVhbGl0eSAtIHNpbmdsZSB2YWx1ZSAqLwor CQkJCQljLT5udW1fdmFsdWVzID0gMTsKKwkJCQkJYy0+dmFsdWVzID0gcGFsbG9jKHNpemVvZihE YXR1bSkpOworCQkJCQljLT5udWxscyA9IHBhbGxvYyhzaXplb2YoYm9vbCkpOworCQkJCQljLT52 YWx1ZXNbMF0gPSBzay0+c2tfYXJndW1lbnQ7CisJCQkJCWMtPm51bGxzWzBdID0gKHNrLT5za19m bGFncyAmIFNLX0lTTlVMTCkgIT0gMDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAot CS8qIEdldCBjb2xsYXRpb24gZnJvbSB0aGUgc3VmZml4IGNvbHVtbiAqLwotCXN1ZmZpeF9jb2xs YXRpb24gPSBUdXBsZURlc2NBdHRyKGl0dXBkZXNjLCBzdWZmaXhfYXR0bm8gLSAxKS0+YXR0Y29s bGF0aW9uOworCQlpZiAoYy0+bnVtX3ZhbHVlcyA9PSAwKQorCQl7CisJCQkvKiBObyBjb25zdHJh aW50IGZvdW5kIC0gc2hvdWxkbid0IGhhcHBlbiAqLworCQkJcGZyZWUoY29uc3RyYWludHMpOwor CQkJcmV0dXJuIGZhbHNlOworCQl9CiAKLQkvKiBHZXQgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24g T0lEIGZvciB0aGUgc3VmZml4IGNvbHVtbiAqLwotCXN1ZmZpeF9jbXBfb2lkID0gZ2V0X29wZmFt aWx5X3Byb2Mob3BmYW1pbHksCi0JCQkJCQkJCQkgICBUdXBsZURlc2NBdHRyKGl0dXBkZXNjLCBz dWZmaXhfYXR0bm8gLSAxKS0+YXR0dHlwaWQsCi0JCQkJCQkJCQkgICBUdXBsZURlc2NBdHRyKGl0 dXBkZXNjLCBzdWZmaXhfYXR0bm8gLSAxKS0+YXR0dHlwaWQsCi0JCQkJCQkJCQkgICBCVE9SREVS X1BST0MpOworCQl0b3RhbF9jdXJzb3JzICo9IGMtPm51bV92YWx1ZXM7CisJfQogCi0JaWYgKCFP aWRJc1ZhbGlkKHN1ZmZpeF9jbXBfb2lkKSkKKwlpZiAodG90YWxfY3Vyc29ycyA8IDIpCiAJewot CQlwZnJlZShwcmVmaXhfdmFsdWVzKTsKLQkJcGZyZWUocHJlZml4X251bGxzKTsKKwkJLyogTm90 IGVub3VnaCBjb21iaW5hdGlvbnMgZm9yIG1lcmdlIHNjYW4gKi8KKwkJZm9yIChjb2wgPSAwOyBj b2wgPCBudW1fcHJlZml4X2NvbHM7IGNvbCsrKQorCQl7CisJCQlpZiAoY29uc3RyYWludHNbY29s XS52YWx1ZXMpCisJCQkJcGZyZWUoY29uc3RyYWludHNbY29sXS52YWx1ZXMpOworCQkJaWYgKGNv bnN0cmFpbnRzW2NvbF0ubnVsbHMpCisJCQkJcGZyZWUoY29uc3RyYWludHNbY29sXS5udWxscyk7 CisJCX0KKwkJcGZyZWUoY29uc3RyYWludHMpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJLyoK KwkgKiBFeHBhbmQgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYWxsIHByZWZpeCBjb2x1bW4gdmFsdWVz LgorCSAqIEVhY2ggY3Vyc29yIGdldHMgb25lIGNvbWJpbmF0aW9uIG9mIHByZWZpeCB2YWx1ZXMu CisJICovCisJcHJlZml4X3R1cGxlcyA9IHBhbGxvYyh0b3RhbF9jdXJzb3JzICogc2l6ZW9mKERh dHVtICopKTsKKwlwcmVmaXhfbnVsbHMgPSBwYWxsb2ModG90YWxfY3Vyc29ycyAqIHNpemVvZihi b29sICopKTsKKworCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9jdXJzb3JzOyBpKyspCisJeworCQlp bnQJCQlpZHggPSBpOworCisJCXByZWZpeF90dXBsZXNbaV0gPSBwYWxsb2MobnVtX3ByZWZpeF9j b2xzICogc2l6ZW9mKERhdHVtKSk7CisJCXByZWZpeF9udWxsc1tpXSA9IHBhbGxvYyhudW1fcHJl Zml4X2NvbHMgKiBzaXplb2YoYm9vbCkpOworCisJCS8qIENvbXB1dGUgd2hpY2ggdmFsdWUgZnJv bSBlYWNoIGNvbHVtbiBmb3IgY3Vyc29yIGkgKi8KKwkJZm9yIChqID0gbnVtX3ByZWZpeF9jb2xz IC0gMTsgaiA+PSAwOyBqLS0pCisJCXsKKwkJCWludAkJCXZhbF9pZHggPSBpZHggJSBjb25zdHJh aW50c1tqXS5udW1fdmFsdWVzOworCisJCQlwcmVmaXhfdHVwbGVzW2ldW2pdID0gY29uc3RyYWlu dHNbal0udmFsdWVzW3ZhbF9pZHhdOworCQkJcHJlZml4X251bGxzW2ldW2pdID0gY29uc3RyYWlu dHNbal0ubnVsbHNbdmFsX2lkeF07CisJCQlpZHggLz0gY29uc3RyYWludHNbal0ubnVtX3ZhbHVl czsKKwkJfQorCX0KKworCS8qCisJICogUHJlZml4IHR1cGxlcyBhcmUgcGFzc2VkIHRvIGJ0X21l cmdlX2luaXQgaW4gdGhlaXIgY3VycmVudCBvcmRlci4KKwkgKiBUaGUgY3Vyc29yX2lkIGFzc2ln bm1lbnQgcHJlc2VydmVzIHRoaXMgb3JkZXIsIHdoaWNoIHNlcnZlcyBhcworCSAqIHRpZWJyZWFr ZXIgd2hlbiBzdWZmaXggdmFsdWVzIGFyZSBlcXVhbC4gRnV0dXJlIGVuaGFuY2VtZW50OgorCSAq IGFsbG93IGV4ZWN1dG9yIHRvIHNvcnQgcHJlZml4ZXMgYnkgYXJiaXRyYXJ5IGV4cHJlc3Npb25z LgorCSAqLworCiAJLyogSW5pdGlhbGl6ZSB0aGUgbWVyZ2Ugc2NhbiBzdGF0ZSAqLwogCXNvLT5t ZXJnZVN0YXRlID0gYnRfbWVyZ2VfaW5pdChzY2FuLAotCQkJCQkJCQkgICBwcmVmaXhfdmFsdWVz LAorCQkJCQkJCQkgICBwcmVmaXhfdHVwbGVzLAogCQkJCQkJCQkgICBwcmVmaXhfbnVsbHMsCi0J CQkJCQkJCSAgIG51bV9wcmVmaXhlcywKLQkJCQkJCQkJICAgcHJlZml4X2F0dG5vLAotCQkJCQkJ CQkgICBzdWZmaXhfYXR0bm8sCi0JCQkJCQkJCSAgIHN1ZmZpeF9jbXBfb2lkLAotCQkJCQkJCQkg ICBzdWZmaXhfY29sbGF0aW9uKTsKKwkJCQkJCQkJICAgdG90YWxfY3Vyc29ycywKKwkJCQkJCQkJ ICAgbnVtX3ByZWZpeF9jb2xzKTsKIAotCXBmcmVlKHByZWZpeF92YWx1ZXMpOworCS8qIENsZWFu dXAgdGVtcG9yYXJ5IGFsbG9jYXRpb25zIChidF9tZXJnZV9pbml0IGNvcGllcyB3aGF0IGl0IG5l ZWRzKSAqLworCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9jdXJzb3JzOyBpKyspCisJeworCQlwZnJl ZShwcmVmaXhfdHVwbGVzW2ldKTsKKwkJcGZyZWUocHJlZml4X251bGxzW2ldKTsKKwl9CisJcGZy ZWUocHJlZml4X3R1cGxlcyk7CiAJcGZyZWUocHJlZml4X251bGxzKTsKKwlmb3IgKGNvbCA9IDA7 IGNvbCA8IG51bV9wcmVmaXhfY29sczsgY29sKyspCisJeworCQlpZiAoY29uc3RyYWludHNbY29s XS52YWx1ZXMpCisJCQlwZnJlZShjb25zdHJhaW50c1tjb2xdLnZhbHVlcyk7CisJCWlmIChjb25z dHJhaW50c1tjb2xdLm51bGxzKQorCQkJcGZyZWUoY29uc3RyYWludHNbY29sXS5udWxscyk7CisJ fQorCXBmcmVlKGNvbnN0cmFpbnRzKTsKIAogCXJldHVybiAoc28tPm1lcmdlU3RhdGUgIT0gTlVM TCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4OGMuLjFlMmMzZDVmOWZi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC04Nyw2ICs4NywxMCBAQCBzdGF0aWMgdm9pZCBz aG93X3F1YWwoTGlzdCAqcXVhbCwgY29uc3QgY2hhciAqcWxhYmVsLAogc3RhdGljIHZvaWQgc2hv d19zY2FuX3F1YWwoTGlzdCAqcXVhbCwgY29uc3QgY2hhciAqcWxhYmVsLAogCQkJCQkJICAgUGxh blN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCSAgIEV4cGxhaW5TdGF0 ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleF9xdWFsX3dpdGhfcHJlZml4KExpc3QgKnN1 ZmZpeF9xdWFsLCBMaXN0ICpwcmVmaXhfcXVhbCwKKwkJCQkJCQkJCQlMaXN0ICpkZWZhdWx0X3F1 YWwsCisJCQkJCQkJCQkJUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKKwkJ CQkJCQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdXBwZXJfcXVhbChM aXN0ICpxdWFsLCBjb25zdCBjaGFyICpxbGFiZWwsCiAJCQkJCQkJUGxhblN0YXRlICpwbGFuc3Rh dGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKQEAgLTE5NjEs MzUgKzE5NjUsNDcgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFu Y2VzdG9ycywKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQljYXNlIFRfSW5kZXhTY2Fu OgotCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9yaWcs Ci0JCQkJCQkgICAiSW5kZXggQ29uZCIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlp ZiAoKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9yaWcpCi0JCQkJc2hvd19pbnN0cnVt ZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBJbmRleCBSZWNoZWNrIiwgMiwKLQkJCQkJ CQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhTY2FuICop IHBsYW4pLT5pbmRleG9yZGVyYnlvcmlnLAotCQkJCQkJICAgIk9yZGVyIEJ5IiwgcGxhbnN0YXRl LCBhbmNlc3RvcnMsIGVzKTsKLQkJCXNob3dfc2Nhbl9xdWFsKHBsYW4tPnF1YWwsICJGaWx0ZXIi LCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwotCQkJaWYgKHBsYW4tPnF1YWwpCi0JCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAotCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxh bnN0YXRlLCBlcyk7CisJCQl7CisJCQkJSW5kZXhTY2FuICppc2NhbiA9IChJbmRleFNjYW4gKikg cGxhbjsKKworCQkJCXNob3dfaW5kZXhfcXVhbF93aXRoX3ByZWZpeChpc2Nhbi0+aW5kZXhxdWFs b3JpZywKKwkJCQkJCQkJCQkJaXNjYW4tPmluZGV4cHJlZml4cXVhbCwKKwkJCQkJCQkJCQkJaXNj YW4tPmluZGV4cXVhbG9yaWcsCisJCQkJCQkJCQkJCXBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7 CisJCQkJaWYgKGlzY2FuLT5pbmRleHF1YWxvcmlnKQorCQkJCQlzaG93X2luc3RydW1lbnRhdGlv bl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEluZGV4IFJlY2hlY2siLCAyLAorCQkJCQkJCQkJCQkg ICBwbGFuc3RhdGUsIGVzKTsKKwkJCQlzaG93X3NjYW5fcXVhbChpc2Nhbi0+aW5kZXhvcmRlcmJ5 b3JpZywKKwkJCQkJCQkgICAiT3JkZXIgQnkiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwor CQkJCXNob3dfc2Nhbl9xdWFsKHBsYW4tPnF1YWwsICJGaWx0ZXIiLCBwbGFuc3RhdGUsIGFuY2Vz dG9ycywgZXMpOworCQkJCWlmIChwbGFuLT5xdWFsKQorCQkJCQlzaG93X2luc3RydW1lbnRhdGlv bl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCisJCQkJCQkJCQkJCSAgIHBsYW5z dGF0ZSwgZXMpOworCQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOwor CQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgotCQkJc2hvd19zY2FuX3F1 YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCi0JCQkJCQkgICAiSW5kZXgg Q29uZCIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlpZiAoKChJbmRleE9ubHlTY2Fu ICopIHBsYW4pLT5yZWNoZWNrcXVhbCkKLQkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgi Um93cyBSZW1vdmVkIGJ5IEluZGV4IFJlY2hlY2siLCAyLAotCQkJCQkJCQkJCSAgIHBsYW5zdGF0 ZSwgZXMpOwotCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRl eG9yZGVyYnksCi0JCQkJCQkgICAiT3JkZXIgQnkiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMp OwotCQkJc2hvd19zY2FuX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5j ZXN0b3JzLCBlcyk7Ci0JCQlpZiAocGxhbi0+cXVhbCkKLQkJCQlzaG93X2luc3RydW1lbnRhdGlv bl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCi0JCQkJCQkJCQkJICAgcGxhbnN0 YXRlLCBlcyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQo IkhlYXAgRmV0Y2hlcyIsIE5VTEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5u dHVwbGVzMiwgMCwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBl cyk7CisJCQl7CisJCQkJSW5kZXhPbmx5U2NhbiAqaW9zY2FuID0gKEluZGV4T25seVNjYW4gKikg cGxhbjsKKworCQkJCXNob3dfaW5kZXhfcXVhbF93aXRoX3ByZWZpeChpb3NjYW4tPnJlY2hlY2tx dWFsLAorCQkJCQkJCQkJCQlpb3NjYW4tPmluZGV4cHJlZml4cXVhbCwKKwkJCQkJCQkJCQkJaW9z Y2FuLT5pbmRleHF1YWwsCisJCQkJCQkJCQkJCXBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CisJ CQkJaWYgKGlvc2Nhbi0+cmVjaGVja3F1YWwpCisJCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2Nv dW50KCJSb3dzIFJlbW92ZWQgYnkgSW5kZXggUmVjaGVjayIsIDIsCisJCQkJCQkJCQkJCSAgIHBs YW5zdGF0ZSwgZXMpOworCQkJCXNob3dfc2Nhbl9xdWFsKGlvc2Nhbi0+aW5kZXhvcmRlcmJ5LAor CQkJCQkJCSAgICJPcmRlciBCeSIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CisJCQkJc2hv d19zY2FuX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBl cyk7CisJCQkJaWYgKHBsYW4tPnF1YWwpCisJCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50 KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKKwkJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBl cyk7CisJCQkJaWYgKGVzLT5hbmFseXplKQorCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVh cCBGZXRjaGVzIiwgTlVMTCwKKwkJCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVw bGVzMiwgMCwgZXMpOworCQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMp OworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46CiAJCQlzaG93X3Nj YW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsb3JpZywKQEAgLTI1 NTUsNiArMjU3MSwzMCBAQCBzaG93X3NjYW5fcXVhbChMaXN0ICpxdWFsLCBjb25zdCBjaGFyICpx bGFiZWwsCiAJc2hvd19xdWFsKHF1YWwsIHFsYWJlbCwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIHVz ZXByZWZpeCwgZXMpOwogfQogCisvKgorICogU2hvdyBpbmRleCBxdWFscyB3aXRoIG9wdGlvbmFs IHByZWZpeCBzZXBhcmF0aW9uIGZvciBtZXJnZSBzY2Fucy4KKyAqCisgKiBGb3IgbWVyZ2Ugc2Nh bnMsIHNob3dzICJJbmRleCBDb25kIiAoc3VmZml4X3F1YWwpIGFuZCAiSW5kZXggUHJlZml4ZXMi CisgKiAocHJlZml4X3F1YWwpIHNlcGFyYXRlbHkuIEZvciByZWd1bGFyIHNjYW5zLCBzaG93cyBk ZWZhdWx0X3F1YWwgYXMKKyAqICJJbmRleCBDb25kIi4KKyAqLworc3RhdGljIHZvaWQKK3Nob3df aW5kZXhfcXVhbF93aXRoX3ByZWZpeChMaXN0ICpzdWZmaXhfcXVhbCwgTGlzdCAqcHJlZml4X3F1 YWwsCisJCQkJCQkJTGlzdCAqZGVmYXVsdF9xdWFsLAorCQkJCQkJCVBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsCisJCQkJCQkJRXhwbGFpblN0YXRlICplcykKK3sKKwlpZiAo cHJlZml4X3F1YWwpCisJeworCQlzaG93X3NjYW5fcXVhbChzdWZmaXhfcXVhbCwgIkluZGV4IENv bmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOworCQlzaG93X3NjYW5fcXVhbChwcmVmaXhf cXVhbCwgIkluZGV4IFByZWZpeGVzIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKKwl9CisJ ZWxzZQorCXsKKwkJc2hvd19zY2FuX3F1YWwoZGVmYXVsdF9xdWFsLCAiSW5kZXggQ29uZCIsIHBs YW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CisJfQorfQorCiAvKgogICogU2hvdyBhIHF1YWxpZmll ciBleHByZXNzaW9uIGZvciBhbiB1cHBlci1sZXZlbCBwbGFuIG5vZGUKICAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYzMwZDZlODQ2NzIuLjE1Njc1NTFmOWRkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0NSw2ICsxNDUsNyBAQCBp bnQJCQltYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9z ZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5h YmxlX2luZGV4b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4bWVyZ2VzY2FuID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRz Y2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9pbmR4cGF0aC5jCmluZGV4IDQ0Yjc5ZjkxMzM1Li41NWQ2MzVlOTUyNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC03ODQsNDQgKzc4NCwxNyBAQCBnZXRfaW5k ZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIH0KIAogLyoKLSAq IGNvbnNpZGVyX21lcmdlX3NjYW5fcGF0aAotICoJICBDaGVjayBpZiB0aGlzIGluZGV4IGNhbiBw cm92aWRlIGEgbWVyZ2Ugc2NhbiBwYXRoIGZvciBxdWVyaWVzIG9mIHRoZSBmb3JtOgotICoJICBX SEVSRSBwcmVmaXggSU4gKC4uLikgQU5EIHN1ZmZpeCA+PSBiIE9SREVSIEJZIHN1ZmZpeCwgcHJl Zml4IExJTUlUIE4KKyAqIGNvdW50X2VxdWFsaXR5X3ZhbHVlcworICoJICBDb3VudCB0aGUgbnVt YmVyIG9mIGVxdWFsaXR5IHZhbHVlcyBmb3IgaW5kZXggY2xhdXNlcyBvbiBhIGNvbHVtbi4KICAq Ci0gKgkgIE1lcmdlIHNjYW4gYWxsb3dzIGxhemlseSBwcm9kdWNpbmcgb3V0cHV0IHNvcnRlZCBi eSAoc3VmZml4LCBwcmVmaXgpIGZyb20KLSAqCSAgYW4gaW5kZXggb24gKHByZWZpeCwgc3VmZml4 KSBieSBkb2luZyBhIEstd2F5IG1lcmdlIG9mIEsgc2VwYXJhdGUgc2NhbnMuCisgKiBSZXR1cm5z IDEgZm9yIHNpbXBsZSBlcXVhbGl0eSwgTiBmb3IgSU4tbGlzdCB3aXRoIE4gZWxlbWVudHMsIDAg aWYgbm9uZS4KICAqLwotc3RhdGljIHZvaWQKLWNvbnNpZGVyX21lcmdlX3NjYW5fcGF0aChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkJIEluZGV4T3B0SW5mbyAqaW5k ZXgsIEluZGV4Q2xhdXNlU2V0ICpjbGF1c2VzKQorc3RhdGljIGludAorY291bnRfZXF1YWxpdHlf dmFsdWVzKExpc3QgKmluZGV4Y2xhdXNlcykKIHsKLQlJbmRleFBhdGggICppcGF0aDsKLQlMaXN0 CSAgICppbmRleF9jbGF1c2VzOwotCUxpc3QJICAgKmluZGV4X3BhdGhrZXlzOwotCUxpc3QJICAg Km1lcmdlX3BhdGhrZXlzOwogCUxpc3RDZWxsICAgKmxjOwotCWludAkJCW51bV9wcmVmaXhlcyA9 IDA7Ci0JaW50CQkJaW5kZXhjb2w7Ci0JYm9vbAkJaGFzX3Nhb3Bfb25fZmlyc3QgPSBmYWxzZTsK LQlib29sCQloYXNfY2xhdXNlX29uX3NlY29uZCA9IGZhbHNlOwogCi0JLyogTmVlZCBhdCBsZWFz dCAyIGluZGV4IGNvbHVtbnMgZm9yIG1lcmdlIHNjYW4gKi8KLQlpZiAoaW5kZXgtPm5rZXljb2x1 bW5zIDwgMikKLQkJcmV0dXJuOwotCi0JLyogSW5kZXggbXVzdCBiZSBvcmRlcmVkIGFuZCBzdXBw b3J0IGdldHR1cGxlICovCi0JaWYgKGluZGV4LT5zb3J0b3BmYW1pbHkgPT0gTlVMTCB8fCAhaW5k ZXgtPmFtaGFzZ2V0dHVwbGUpCi0JCXJldHVybjsKLQotCS8qIE11c3QgaGF2ZSBxdWVyeSBwYXRo a2V5cyB3aXRoIGF0IGxlYXN0IDIgZWxlbWVudHMgKi8KLQlpZiAocm9vdC0+cXVlcnlfcGF0aGtl eXMgPT0gTklMIHx8IGxpc3RfbGVuZ3RoKHJvb3QtPnF1ZXJ5X3BhdGhrZXlzKSA8IDIpCi0JCXJl dHVybjsKLQotCS8qCi0JICogQ2hlY2sgZm9yIFNjYWxhckFycmF5T3BFeHByIG9uIGZpcnN0IGNv bHVtbi4KLQkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIChwcmVmaXggdmFs dWVzKS4KLQkgKi8KLQlmb3JlYWNoKGxjLCBjbGF1c2VzLT5pbmRleGNsYXVzZXNbMF0pCisJZm9y ZWFjaChsYywgaW5kZXhjbGF1c2VzKQogCXsKIAkJSW5kZXhDbGF1c2UgKmljbGF1c2UgPSAoSW5k ZXhDbGF1c2UgKikgbGZpcnN0KGxjKTsKIAkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGljbGF1c2Ut PnJpbmZvOwpAQCAtODMxLDkgKzgwNCw2IEBAIGNvbnNpZGVyX21lcmdlX3NjYW5fcGF0aChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJU2NhbGFyQXJyYXlPcEV4cHIgKnNh b3AgPSAoU2NhbGFyQXJyYXlPcEV4cHIgKikgcmluZm8tPmNsYXVzZTsKIAkJCU5vZGUJICAgKmFy cmF5YXJnID0gKE5vZGUgKikgbHNlY29uZChzYW9wLT5hcmdzKTsKIAotCQkJaGFzX3Nhb3Bfb25f Zmlyc3QgPSB0cnVlOwotCi0JCQkvKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYXJy YXkgZWxlbWVudHMgKi8KIAkJCWlmIChJc0EoYXJyYXlhcmcsIENvbnN0KSkKIAkJCXsKIAkJCQlD b25zdAkgICAqY29uID0gKENvbnN0ICopIGFycmF5YXJnOwpAQCAtODQxLDYxICs4MTEsMTM1IEBA IGNvbnNpZGVyX21lcmdlX3NjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogCQkJCWlmICghY29uLT5jb25zdGlzbnVsbCkKIAkJCQl7CiAJCQkJCUFycmF5VHlwZSAg KmFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChjb24tPmNvbnN0dmFsdWUpOwotCQkJCQludW1fcHJl Zml4ZXMgPSBBcnJheUdldE5JdGVtcyhBUlJfTkRJTShhcnIpLCBBUlJfRElNUyhhcnIpKTsKKwor CQkJCQlyZXR1cm4gQXJyYXlHZXROSXRlbXMoQVJSX05ESU0oYXJyKSwgQVJSX0RJTVMoYXJyKSk7 CiAJCQkJfQogCQkJfQogCQkJZWxzZQogCQkJewogCQkJCS8qIENhbid0IGRldGVybWluZSBzaXpl LCBlc3RpbWF0ZSBjb25zZXJ2YXRpdmVseSAqLwotCQkJCW51bV9wcmVmaXhlcyA9IDEwOworCQkJ CXJldHVybiAxMDsKIAkJCX0KLQkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKElzQShyaW5mby0+ Y2xhdXNlLCBPcEV4cHIpKQorCQl7CisJCQkvKiBTaW1wbGUgZXF1YWxpdHkgY29uc3RyYWludCA9 IDEgdmFsdWUgKi8KKwkJCXJldHVybiAxOwogCQl9CiAJfQogCi0JaWYgKCFoYXNfc2FvcF9vbl9m aXJzdCB8fCBudW1fcHJlZml4ZXMgPCAyKQorCXJldHVybiAwOworfQorCisvKgorICogY29uc2lk ZXJfbWVyZ2Vfc2Nhbl9wYXRoCisgKgkgIENoZWNrIGlmIHRoaXMgaW5kZXggY2FuIHByb3ZpZGUg YSBtZXJnZSBzY2FuIHBhdGggZm9yIHF1ZXJpZXMgd2l0aAorICoJICBlcXVhbGl0eS9JTiBjb25z dHJhaW50cyBvbiBwcmVmaXggY29sdW1ucyBhbmQgT1JERVIgQlkgb24gc3VmZml4LgorICoKKyAq CSAgU3VwcG9ydHMgbXVsdGlwbGUgcHJlZml4IGNvbHVtbnM6CisgKgkgICAgLSBhID0gY29uc3Qg QU5EIGIgSU4gQiAtPiBsZW4oQikgY3Vyc29ycworICoJICAgIC0gYSBJTiBBIEFORCBiIElOIEIg LT4gbGVuKEEpICogbGVuKEIpIGN1cnNvcnMKKyAqCSAgICAtIGEgSU4gQSBBTkQgYiA9IGNvbnN0 IC0+IGxlbihBKSBjdXJzb3JzCisgKgorICoJICBNZXJnZSBzY2FuIGFsbG93cyBsYXppbHkgcHJv ZHVjaW5nIG91dHB1dCBzb3J0ZWQgYnkgc3VmZml4IGZyb20gYW4KKyAqCSAgaW5kZXggb24gKHBy ZWZpeGVzLi4uLCBzdWZmaXgpIGJ5IGRvaW5nIEstd2F5IG1lcmdlIG9mIEsgc2VwYXJhdGUgc2Nh bnMuCisgKi8KK3N0YXRpYyB2b2lkCitjb25zaWRlcl9tZXJnZV9zY2FuX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCSBJbmRleE9wdEluZm8gKmluZGV4LCBJ bmRleENsYXVzZVNldCAqY2xhdXNlcykKK3sKKwlJbmRleFBhdGggICppcGF0aDsKKwlMaXN0CSAg ICppbmRleF9jbGF1c2VzOworCUxpc3QJICAgKm1lcmdlX3BhdGhrZXlzOworCUxpc3RDZWxsICAg KmxjOworCWludAkJCW51bV9wcmVmaXhlczsKKwlpbnQJCQlzdWZmaXhfaW5kZXhjb2w7CisJaW50 CQkJaW5kZXhjb2w7CisJUGF0aEtleSAgICAqcXVlcnlfZmlyc3RfcGs7CisJU2NhbkRpcmVjdGlv biBzY2FuZGlyZWN0aW9uOworCisJaWYgKCFlbmFibGVfaW5kZXhtZXJnZXNjYW4pCiAJCXJldHVy bjsKIAotCS8qIENoZWNrIGlmIHRoZXJlJ3MgYW55IGNsYXVzZSBvbiBzZWNvbmQgY29sdW1uICov Ci0JaWYgKGNsYXVzZXMtPmluZGV4Y2xhdXNlc1sxXSAhPSBOSUwpCi0JCWhhc19jbGF1c2Vfb25f c2Vjb25kID0gdHJ1ZTsKKwkvKiBOZWVkIGF0IGxlYXN0IDIgaW5kZXggY29sdW1ucyBmb3IgbWVy Z2Ugc2NhbiAqLworCWlmIChpbmRleC0+bmtleWNvbHVtbnMgPCAyKQorCQlyZXR1cm47CiAKLQlp ZiAoIWhhc19jbGF1c2Vfb25fc2Vjb25kKQorCS8qIEluZGV4IG11c3QgYmUgb3JkZXJlZCBhbmQg c3VwcG9ydCBnZXR0dXBsZSAqLworCWlmIChpbmRleC0+c29ydG9wZmFtaWx5ID09IE5VTEwgfHwg IWluZGV4LT5hbWhhc2dldHR1cGxlKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIEdldCB0aGUgbmF0 dXJhbCBpbmRleCBwYXRoa2V5cyAocHJlZml4LCBzdWZmaXggb3JkZXIpLgotCSAqIFdlIG5lZWQg YXQgbGVhc3QgMiBwYXRoa2V5cyBmb3IgbWVyZ2Ugc2NhbiB0byBtYWtlIHNlbnNlLgotCSAqLwot CWluZGV4X3BhdGhrZXlzID0gYnVpbGRfaW5kZXhfcGF0aGtleXMocm9vdCwgaW5kZXgsIEZvcndh cmRTY2FuRGlyZWN0aW9uKTsKLQlpZiAobGlzdF9sZW5ndGgoaW5kZXhfcGF0aGtleXMpIDwgMikK KwkvKiBNdXN0IGhhdmUgcXVlcnkgcGF0aGtleXMgKi8KKwlpZiAocm9vdC0+cXVlcnlfcGF0aGtl eXMgPT0gTklMKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIENoZWNrIGlmIHF1ZXJ5IHBhdGhrZXlz IGFyZSAoc3VmZml4LCBwcmVmaXgpIC0gdGhlIFJFVkVSU0VEIG9yZGVyLgotCSAqIHF1ZXJ5X3Bh dGhrZXlzWzBdIHNob3VsZCBtYXRjaCBpbmRleF9wYXRoa2V5c1sxXSAoc3VmZml4KQotCSAqIHF1 ZXJ5X3BhdGhrZXlzWzFdIHNob3VsZCBtYXRjaCBpbmRleF9wYXRoa2V5c1swXSAocHJlZml4KQor CSAqIEZpbmQgdGhlIHN1ZmZpeCBjb2x1bW46IHRoZSBpbmRleCBjb2x1bW4gKG5vdCB0aGUgZmly c3QpIHRoYXQgbWF0Y2hlcworCSAqIHRoZSBxdWVyeSdzIGZpcnN0IE9SREVSIEJZIGNvbHVtbi4g V2UgZG9uJ3QgdXNlIGJ1aWxkX2luZGV4X3BhdGhrZXlzKCkKKwkgKiBiZWNhdXNlIGVxdWFsaXR5 LWNvbnN0cmFpbmVkIHByZWZpeCBjb2x1bW5zIGRvbid0IHByb2R1Y2UgcGF0aGtleXMuCisJICoK KwkgKiBJbnN0ZWFkLCB3ZSBkaXJlY3RseSBjaGVjayBlYWNoIGluZGV4IGNvbHVtbidzIGV4cHJl c3Npb24gYWdhaW5zdCB0aGUKKwkgKiBxdWVyeSdzIGZpcnN0IHBhdGhrZXkgZXF1aXZhbGVuY2Ug Y2xhc3MuCiAJICovCisJcXVlcnlfZmlyc3RfcGsgPSAoUGF0aEtleSAqKSBsaW5pdGlhbChyb290 LT5xdWVyeV9wYXRoa2V5cyk7CisJc3VmZml4X2luZGV4Y29sID0gLTE7CisKKwlmb3IgKGluZGV4 Y29sID0gMTsgaW5kZXhjb2wgPCBpbmRleC0+bmtleWNvbHVtbnM7IGluZGV4Y29sKyspCiAJewot CQlQYXRoS2V5ICAgICpxcGswID0gKFBhdGhLZXkgKikgbGluaXRpYWwocm9vdC0+cXVlcnlfcGF0 aGtleXMpOwotCQlQYXRoS2V5ICAgICpxcGsxID0gKFBhdGhLZXkgKikgbHNlY29uZChyb290LT5x dWVyeV9wYXRoa2V5cyk7Ci0JCVBhdGhLZXkgICAgKmlwazAgPSAoUGF0aEtleSAqKSBsaW5pdGlh bChpbmRleF9wYXRoa2V5cyk7Ci0JCVBhdGhLZXkgICAgKmlwazEgPSAoUGF0aEtleSAqKSBsc2Vj b25kKGluZGV4X3BhdGhrZXlzKTsKKwkJVGFyZ2V0RW50cnkgKmluZGV4dGxlID0gKFRhcmdldEVu dHJ5ICopIGxpc3RfbnRoKGluZGV4LT5pbmRleHRsaXN0LCBpbmRleGNvbCk7CisJCUVxdWl2YWxl bmNlTWVtYmVyICplbTsKKworCQkvKiBDaGVjayBpZiB0aGlzIGluZGV4IGNvbHVtbiBpcyBpbiB0 aGUgcXVlcnkncyBmaXJzdCBwYXRoa2V5IEVDICovCisJCWVtID0gZmluZF9lY19tZW1iZXJfbWF0 Y2hpbmdfZXhwcihxdWVyeV9maXJzdF9way0+cGtfZWNsYXNzLAorCQkJCQkJCQkJCSAgaW5kZXh0 bGUtPmV4cHIsCisJCQkJCQkJCQkJICBpbmRleC0+cmVsLT5yZWxpZHMpOworCQlpZiAoZW0gIT0g TlVMTCkKKwkJeworCQkJc3VmZml4X2luZGV4Y29sID0gaW5kZXhjb2w7CisJCQlicmVhazsKKwkJ fQorCX0KIAotCQkvKiBRdWVyeSdzIGZpcnN0IHBhdGhrZXkgbXVzdCBtYXRjaCBpbmRleCdzIFNF Q09ORCBwYXRoa2V5IChzdWZmaXgpICovCi0JCWlmIChxcGswLT5wa19lY2xhc3MgIT0gaXBrMS0+ cGtfZWNsYXNzKQotCQkJcmV0dXJuOworCWlmIChzdWZmaXhfaW5kZXhjb2wgPCAxKQorCQlyZXR1 cm47CQkJCQkvKiBObyBzdWl0YWJsZSBzdWZmaXggY29sdW1uIGZvdW5kICovCiAKLQkJLyogUXVl cnkncyBzZWNvbmQgcGF0aGtleSBtdXN0IG1hdGNoIGluZGV4J3MgRklSU1QgcGF0aGtleSAocHJl Zml4KSAqLwotCQlpZiAocXBrMS0+cGtfZWNsYXNzICE9IGlwazAtPnBrX2VjbGFzcykKLQkJCXJl dHVybjsKKwkvKgorCSAqIERldGVybWluZSBzY2FuIGRpcmVjdGlvbiBiYXNlZCBvbiBxdWVyeSdz IHNvcnQgZGlyZWN0aW9uIGFuZCBpbmRleCdzCisJICogbmF0dXJhbCBvcmRlci4gSWYgYm90aCBt YXRjaCwgdXNlIGZvcndhcmQ7IGlmIG9wcG9zaXRlLCB1c2UgYmFja3dhcmQuCisJICovCisJewor CQlib29sCXF1ZXJ5X2lzX2Rlc2MgPSAocXVlcnlfZmlyc3RfcGstPnBrX2NtcHR5cGUgPT0gQ09N UEFSRV9HVCk7CisJCWJvb2wJaW5kZXhfaXNfZGVzYyA9IGluZGV4LT5yZXZlcnNlX3NvcnRbc3Vm Zml4X2luZGV4Y29sXTsKKworCQlpZiAocXVlcnlfaXNfZGVzYyA9PSBpbmRleF9pc19kZXNjKQor CQkJc2NhbmRpcmVjdGlvbiA9IEZvcndhcmRTY2FuRGlyZWN0aW9uOworCQllbHNlCisJCQlzY2Fu ZGlyZWN0aW9uID0gQmFja3dhcmRTY2FuRGlyZWN0aW9uOwogCX0KIAogCS8qCi0JICogVGhlIG1l cmdlIHNjYW4gY2FuIHNhdGlzZnkgdGhlIHF1ZXJ5J3MgT1JERVIgQlkgKHN1ZmZpeCwgcHJlZml4 KS4KLQkgKiBVc2UgdGhlIHF1ZXJ5J3MgcGF0aGtleXMgZGlyZWN0bHkgc2luY2Ugd2UndmUgdmVy aWZpZWQgdGhleSBtYXRjaC4KLQkgKiBUaGlzIGlzIGNyaXRpY2FsOiBQb3N0Z3JlU1FMIGNvbXBh cmVzIHBhdGhrZXlzIGJ5IHBvaW50ZXIgZXF1YWxpdHkuCisJICogQ291bnQgcHJlZml4IGNvbWJp bmF0aW9uczogcHJvZHVjdCBvZiBlcXVhbGl0eSB2YWx1ZXMgZm9yIGFsbCBjb2x1bW5zCisJICog YmVmb3JlIHRoZSBzdWZmaXggY29sdW1uLiBFYWNoIGNvbHVtbiBtdXN0IGhhdmUgZXF1YWxpdHkg Y29uc3RyYWludC4KIAkgKi8KKwludW1fcHJlZml4ZXMgPSAxOworCWZvciAoaW5kZXhjb2wgPSAw OyBpbmRleGNvbCA8IHN1ZmZpeF9pbmRleGNvbDsgaW5kZXhjb2wrKykKKwl7CisJCWludAkJCWNv bF9jb3VudCA9IGNvdW50X2VxdWFsaXR5X3ZhbHVlcyhjbGF1c2VzLT5pbmRleGNsYXVzZXNbaW5k ZXhjb2xdKTsKKworCQlpZiAoY29sX2NvdW50ID09IDApCisJCQlyZXR1cm47CQkJCS8qIEdhcCBp biBwcmVmaXggLSBjYW4ndCB1c2UgbWVyZ2Ugc2NhbiAqLworCisJCW51bV9wcmVmaXhlcyAqPSBj b2xfY291bnQ7CisJfQorCisJaWYgKG51bV9wcmVmaXhlcyA8IDIpCisJCXJldHVybjsJCQkJCS8q IE5lZWQgYXQgbGVhc3QgMiBjdXJzb3JzIGZvciBtZXJnZSBzY2FuICovCisKKwkvKiBNdXN0IGhh dmUgYSBjbGF1c2Ugb24gdGhlIHN1ZmZpeCBjb2x1bW4gKi8KKwlpZiAoY2xhdXNlcy0+aW5kZXhj bGF1c2VzW3N1ZmZpeF9pbmRleGNvbF0gPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBVc2UgcXVl cnkgcGF0aGtleXMgZm9yIHBvaW50ZXIgZXF1YWxpdHkgKi8KIAltZXJnZV9wYXRoa2V5cyA9IHJv b3QtPnF1ZXJ5X3BhdGhrZXlzOwogCiAJLyoKQEAgLTkwNywxOSArOTUxLDIwIEBAIGNvbnNpZGVy X21lcmdlX3NjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlm b3JlYWNoKGxjLCBjbGF1c2VzLT5pbmRleGNsYXVzZXNbaW5kZXhjb2xdKQogCQl7CiAJCQlJbmRl eENsYXVzZSAqaWNsYXVzZSA9IChJbmRleENsYXVzZSAqKSBsZmlyc3QobGMpOworCiAJCQlpbmRl eF9jbGF1c2VzID0gbGFwcGVuZChpbmRleF9jbGF1c2VzLCBpY2xhdXNlKTsKIAkJfQogCX0KIAog CS8qCi0JICogQ3JlYXRlIHRoZSBtZXJnZSBzY2FuIHBhdGggd2l0aCAoc3VmZml4LCBwcmVmaXgp IHBhdGhrZXlzLgorCSAqIENyZWF0ZSB0aGUgbWVyZ2Ugc2NhbiBwYXRoIHdpdGggcXVlcnkncyBw YXRoa2V5cy4KIAkgKi8KIAlpcGF0aCA9IGNyZWF0ZV9pbmRleF9wYXRoKHJvb3QsIGluZGV4LAog CQkJCQkJCSAgaW5kZXhfY2xhdXNlcywKIAkJCQkJCQkgIE5JTCwJCS8qIG5vIE9SREVSIEJZIGV4 cHJlc3Npb25zICovCiAJCQkJCQkJICBOSUwsCQkvKiBubyBPUkRFUiBCWSBjb2x1bW5zICovCiAJ CQkJCQkJICBtZXJnZV9wYXRoa2V5cywKLQkJCQkJCQkgIEZvcndhcmRTY2FuRGlyZWN0aW9uLAor CQkJCQkJCSAgc2NhbmRpcmVjdGlvbiwKIAkJCQkJCQkgIGNoZWNrX2luZGV4X29ubHkocmVsLCBp bmRleCksCiAJCQkJCQkJICBOVUxMLAkJLyogbm8gb3V0ZXIgcmVsaWRzICovCiAJCQkJCQkJICAx LjAsCQkvKiBsb29wX2NvdW50ICovCkBAIC05MjcsMTEgKzk3MiwxMSBAQCBjb25zaWRlcl9tZXJn ZV9zY2FuX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAogCS8qIEVu YWJsZSBtZXJnZSBzY2FuIHdpdGggSy13YXkgbWVyZ2UgKi8KIAlpcGF0aC0+bnVtX21lcmdlX3By ZWZpeGVzID0gbnVtX3ByZWZpeGVzOworCWlwYXRoLT5zdWZmaXhfaW5kZXhjb2wgPSBzdWZmaXhf aW5kZXhjb2w7CiAKIAkvKgogCSAqIEFkanVzdCBjb3N0cyBhbmQgcm93IGVzdGltYXRlIGZvciBt ZXJnZSBzY2FuLgogCSAqIE1lcmdlIHNjYW4gcmVhZHMgZXhhY3RseSAobGltaXQgKyBLIC0gMSkg dHVwbGVzIGluc3RlYWQgb2YgYWxsIG1hdGNoaW5nLgotCSAqIFRoZSByb3cgZXN0aW1hdGUgcmVm bGVjdHMgYWN0dWFsIHR1cGxlIGFjY2Vzc2VzLCBub3QgdG90YWwgbWF0Y2hlcy4KIAkgKi8KIAlp ZiAocm9vdC0+bGltaXRfdHVwbGVzID4gMCAmJiByb290LT5saW1pdF90dXBsZXMgPCBpcGF0aC0+ cGF0aC5yb3dzKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRl eCA0ODViNGIzZTU0ZS4uN2Y3ZDljMjYwNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9j cmVhdGVwbGFuLmMKQEAgLTE4MSwxMSArMTgxLDExIEBAIHN0YXRpYyBTZXFTY2FuICptYWtlX3Nl cXNjYW4oTGlzdCAqcXB0bGlzdCwgTGlzdCAqcXBxdWFsLCBJbmRleCBzY2FucmVsaWQpOwogc3Rh dGljIFNhbXBsZVNjYW4gKm1ha2Vfc2FtcGxlc2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0ICpxcHF1 YWwsIEluZGV4IHNjYW5yZWxpZCwKIAkJCQkJCQkJICAgVGFibGVTYW1wbGVDbGF1c2UgKnRzYyk7 CiBzdGF0aWMgSW5kZXhTY2FuICptYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0ICpx cHF1YWwsIEluZGV4IHNjYW5yZWxpZCwKLQkJCQkJCQkJIE9pZCBpbmRleGlkLCBMaXN0ICppbmRl eHF1YWwsIExpc3QgKmluZGV4cXVhbG9yaWcsCi0JCQkJCQkJCSBMaXN0ICppbmRleG9yZGVyYnks IExpc3QgKmluZGV4b3JkZXJieW9yaWcsCi0JCQkJCQkJCSBMaXN0ICppbmRleG9yZGVyYnlvcHMs Ci0JCQkJCQkJCSBpbnQgbnVtX21lcmdlX3ByZWZpeGVzLAotCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBpbmRleHNjYW5kaXIpOworCQkJCQkJCSBPaWQgaW5kZXhpZCwgTGlzdCAqaW5kZXhxdWFsLCBM aXN0ICppbmRleHF1YWxvcmlnLAorCQkJCQkJCSBMaXN0ICppbmRleG9yZGVyYnksIExpc3QgKmlu ZGV4b3JkZXJieW9yaWcsCisJCQkJCQkJIExpc3QgKmluZGV4b3JkZXJieW9wcywKKwkJCQkJCQkg aW50IG51bV9tZXJnZV9wcmVmaXhlcywKKwkJCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5k aXIpOwogc3RhdGljIEluZGV4T25seVNjYW4gKm1ha2VfaW5kZXhvbmx5c2NhbihMaXN0ICpxcHRs aXN0LCBMaXN0ICpxcHF1YWwsCiAJCQkJCQkJCQkJIEluZGV4IHNjYW5yZWxpZCwgT2lkIGluZGV4 aWQsCiAJCQkJCQkJCQkJIExpc3QgKmluZGV4cXVhbCwgTGlzdCAqcmVjaGVja3F1YWwsCkBAIC0x OTMsNiArMTkzLDggQEAgc3RhdGljIEluZGV4T25seVNjYW4gKm1ha2VfaW5kZXhvbmx5c2NhbihM aXN0ICpxcHRsaXN0LCBMaXN0ICpxcHF1YWwsCiAJCQkJCQkJCQkJIExpc3QgKmluZGV4dGxpc3Qs CiAJCQkJCQkJCQkJIGludCBudW1fbWVyZ2VfcHJlZml4ZXMsCiAJCQkJCQkJCQkJIFNjYW5EaXJl Y3Rpb24gaW5kZXhzY2FuZGlyKTsKK3N0YXRpYyB2b2lkIHNldF9tZXJnZV9zY2FuX3F1YWxfaW5m byhTY2FuICpzY2FuX3BsYW4sIEluZGV4UGF0aCAqYmVzdF9wYXRoLAorCQkJCQkJCQkJIExpc3Qg KnN0cmlwcGVkX2luZGV4cXVhbHMsIGJvb2wgaW5kZXhvbmx5KTsKIHN0YXRpYyBCaXRtYXBJbmRl eFNjYW4gKm1ha2VfYml0bWFwX2luZGV4c2NhbihJbmRleCBzY2FucmVsaWQsIE9pZCBpbmRleGlk LAogCQkJCQkJCQkJCQkgIExpc3QgKmluZGV4cXVhbCwKIAkJCQkJCQkJCQkJICBMaXN0ICppbmRl eHF1YWxvcmlnKTsKQEAgLTMwMjYsNiArMzAyOCw5IEBAIGNyZWF0ZV9pbmRleHNjYW5fcGxhbihQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJYmVzdF9wYXRoLT5udW1fbWVyZ2VfcHJlZml4 ZXMsCiAJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyKTsKIAorCS8qIEZvciBtZXJn ZSBzY2FuLCBzZXBhcmF0ZSBwcmVmaXggYW5kIHN1ZmZpeCBxdWFscyBmb3IgRVhQTEFJTiAqLwor CXNldF9tZXJnZV9zY2FuX3F1YWxfaW5mbyhzY2FuX3BsYW4sIGJlc3RfcGF0aCwgc3RyaXBwZWRf aW5kZXhxdWFscywgaW5kZXhvbmx5KTsKKwogCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnNjYW5f cGxhbi0+cGxhbiwgJmJlc3RfcGF0aC0+cGF0aCk7CiAKIAlyZXR1cm4gc2Nhbl9wbGFuOwpAQCAt NTU4NSw2ICs1NTkwLDc1IEBAIG1ha2VfaW5kZXhvbmx5c2NhbihMaXN0ICpxcHRsaXN0LAogCXJl dHVybiBub2RlOwogfQogCisvKgorICogc2V0X21lcmdlX3NjYW5fcXVhbF9pbmZvCisgKgkgIEZv ciBtZXJnZSBzY2FuLCBleHRyYWN0IHByZWZpeCBxdWFscyBmb3IgRVhQTEFJTiBvdXRwdXQuCisg KgorICogUHJlZml4IHF1YWxzIGFyZSB0aG9zZSBvbiBpbmRleCBjb2x1bW5zIGJlZm9yZSBzdWZm aXhfaW5kZXhjb2wuCisgKiBUaGlzIHNlcGFyYXRlcyB0aGUgZXF1YWxpdHkvSU4gY29uc3RyYWlu dHMgKHByZWZpeGVzKSBmcm9tIHRoZQorICogcmFuZ2UgY29uc3RyYWludCAoc3VmZml4KSB0byBt YWtlIEVYUExBSU4gb3V0cHV0IGNsZWFyZXIuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfbWVyZ2Vf c2Nhbl9xdWFsX2luZm8oU2NhbiAqc2Nhbl9wbGFuLCBJbmRleFBhdGggKmJlc3RfcGF0aCwKKwkJ CQkJCSBMaXN0ICpzdHJpcHBlZF9pbmRleHF1YWxzLCBib29sIGluZGV4b25seSkKK3sKKwlMaXN0 CSAgICpwcmVmaXhfcXVhbHMgPSBOSUw7CisJTGlzdAkgICAqc3VmZml4X3F1YWxzID0gTklMOwor CUxpc3RDZWxsICAgKmxjOworCisJLyogT25seSBwcm9jZXNzIGlmIHRoaXMgaXMgYSBtZXJnZSBz Y2FuICovCisJaWYgKGJlc3RfcGF0aC0+bnVtX21lcmdlX3ByZWZpeGVzIDw9IDAgfHwgYmVzdF9w YXRoLT5zdWZmaXhfaW5kZXhjb2wgPCAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFBhcnRpdGlv biBxdWFscyBpbnRvIHByZWZpeCAoY29sdW1ucyBiZWZvcmUgc3VmZml4KSBhbmQgc3VmZml4Lgor CSAqIFdlIG1hdGNoIGVhY2ggcXVhbCBhZ2FpbnN0IHRoZSBJbmRleENsYXVzZXMgdG8gZGV0ZXJt aW5lIHdoaWNoCisJICogaW5kZXggY29sdW1uIGl0IHJlZmVyZW5jZXMuCisJICovCisJZm9yZWFj aChsYywgc3RyaXBwZWRfaW5kZXhxdWFscykKKwl7CisJCU5vZGUJICAgKmNsYXVzZSA9IChOb2Rl ICopIGxmaXJzdChsYyk7CisJCWJvb2wJCWlzX3ByZWZpeCA9IGZhbHNlOworCQlMaXN0Q2VsbCAg ICppYzsKKworCQlmb3JlYWNoKGljLCBiZXN0X3BhdGgtPmluZGV4Y2xhdXNlcykKKwkJeworCQkJ SW5kZXhDbGF1c2UgKmljbGF1c2UgPSAoSW5kZXhDbGF1c2UgKikgbGZpcnN0KGljKTsKKworCQkJ aWYgKGljbGF1c2UtPmluZGV4Y29sIDwgYmVzdF9wYXRoLT5zdWZmaXhfaW5kZXhjb2wgJiYKKwkJ CQllcXVhbChjbGF1c2UsIGljbGF1c2UtPnJpbmZvLT5jbGF1c2UpKQorCQkJeworCQkJCWlzX3By ZWZpeCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaXNfcHJlZml4KQor CQkJcHJlZml4X3F1YWxzID0gbGFwcGVuZChwcmVmaXhfcXVhbHMsIGNsYXVzZSk7CisJCWVsc2UK KwkJCXN1ZmZpeF9xdWFscyA9IGxhcHBlbmQoc3VmZml4X3F1YWxzLCBjbGF1c2UpOworCX0KKwor CS8qIFN0b3JlIHRoZSBzZXBhcmF0ZWQgcXVhbHMgaW4gdGhlIHBsYW4gbm9kZS4KKwkgKiBQcmVm aXggcXVhbHMgKGVxdWFsaXR5L0lOKSBkb24ndCBuZWVkIHJlY2hlY2tpbmcgc2luY2UgdGhleSdy ZSBleGFjdAorCSAqIG1hdGNoZXMsIHNvIHdlIG9ubHkgc3RvcmUgc3VmZml4IHF1YWxzIGluIHJl Y2hlY2txdWFsL2luZGV4cXVhbG9yaWcuCisJICovCisJaWYgKGluZGV4b25seSkKKwl7CisJCUlu ZGV4T25seVNjYW4gKmlvcyA9IChJbmRleE9ubHlTY2FuICopIHNjYW5fcGxhbjsKKworCQlpb3Mt PmluZGV4cHJlZml4cXVhbCA9IHByZWZpeF9xdWFsczsKKwkJaW9zLT5yZWNoZWNrcXVhbCA9IHN1 ZmZpeF9xdWFsczsKKwl9CisJZWxzZQorCXsKKwkJSW5kZXhTY2FuICppc2NhbiA9IChJbmRleFNj YW4gKikgc2Nhbl9wbGFuOworCisJCWlzY2FuLT5pbmRleHByZWZpeHF1YWwgPSBwcmVmaXhfcXVh bHM7CisJCWlzY2FuLT5pbmRleHF1YWxvcmlnID0gc3VmZml4X3F1YWxzOworCX0KK30KKwogc3Rh dGljIEJpdG1hcEluZGV4U2NhbiAqCiBtYWtlX2JpdG1hcF9pbmRleHNjYW4oSW5kZXggc2NhbnJl bGlkLAogCQkJCQkgIE9pZCBpbmRleGlkLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMKaW5kZXggMjE3NDZjZDY4NGMuLmVkNTk5M2NiNDlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BhdGhub2RlLmMKQEAgLTEwNzYsNiArMTA3Niw3IEBAIGNyZWF0ZV9pbmRleF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5pbmRleHNjYW5kaXIgPSBpbmRleHNjYW5kaXI7 CiAKIAlwYXRobm9kZS0+bnVtX21lcmdlX3ByZWZpeGVzID0gMDsKKwlwYXRobm9kZS0+c3VmZml4 X2luZGV4Y29sID0gLTE7CiAKIAljb3N0X2luZGV4KHBhdGhub2RlLCByb290LCBsb29wX2NvdW50 LCBwYXJ0aWFsX3BhdGgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0CmluZGV4IGYwMjYwZTZlNDEyLi4wNjc4ZmU1NzQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTg3Nyw2ICs4NzcsMTMgQEAKICAgYm9vdF92YWwg PT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhtZXJnZXNjYW4nLCB0eXBl ID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVO SU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNl IG9mIGluZGV4IG1lcmdlLXNjYW4gcGxhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywK KyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9pbmRleG1lcmdlc2NhbicsCisgIGJvb3RfdmFsID0+ICd0 cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX2luZGV4b25seXNjYW4nLCB0eXBlID0+ICdi b29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01F VEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGlu ZGV4LW9ubHktc2NhbiBwbGFucy4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25i dHJlZS5oCmluZGV4IDBkNGU3NDQwNzYwLi4wZGZmMjRhYzE1MSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApA QCAtMTA1MiwyMCArMTA1MiwyMCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogfSBC VEFycmF5S2V5SW5mbzsKIAogLyoKLSAqIEJUTWVyZ2VDdXJzb3IgLSB0cmFja3Mgc2NhbiBzdGF0 ZSBmb3Igb25lIHByZWZpeCB2YWx1ZSBpbiBtZXJnZSBzY2FuCisgKiBCVE1lcmdlQ3Vyc29yIC0g dHJhY2tzIHNjYW4gc3RhdGUgZm9yIG9uZSBwcmVmaXggaW4gbWVyZ2Ugc2NhbgogICoKICAqIEVh Y2ggY3Vyc29yIG1haW50YWlucyBpdHMgb3duIHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5kZXggZm9y IGEgc3BlY2lmaWMKLSAqIHByZWZpeCB2YWx1ZS4gQ3Vyc29ycyBhcmUgb3JnYW5pemVkIGluIGEg bWluLWhlYXAgb3JkZXJlZCBieSB0aGVpcgotICogY3VycmVudCBzdWZmaXgga2V5IHZhbHVlIGZv ciBlZmZpY2llbnQgSy13YXkgbWVyZ2UuCisgKiBwcmVmaXggdmFsdWVzLiBDdXJzb3JzIGFyZSBv cmdhbml6ZWQgaW4gYSBtaW4taGVhcCBvcmRlcmVkCisgKiBieSB0aGVpciBjdXJyZW50IHN1ZmZp eCBrZXkgdmFsdWUgZm9yIGVmZmljaWVudCBLLXdheSBtZXJnZS4KKyAqCisgKiBOb3RlOiBjdXJz b3JzIHdpdGggYW55IE5VTEwgcHJlZml4IGFyZSBtYXJrZWQgZXhoYXVzdGVkICh0aGV5IHdvdWxk IG1hdGNoIG5vdGhpbmcpLgorICogVGhlIHN1ZmZpeCBrZXkgaXMgZXh0cmFjdGVkIG9uLWRlbWFu ZCBmcm9tIHRoZSB0dXBsZSBkYXRhIGR1cmluZyBjb21wYXJpc29uLgogICovCiB0eXBlZGVmIHN0 cnVjdCBCVE1lcmdlQ3Vyc29yCiB7CiAJcGFpcmluZ2hlYXBfbm9kZSBwaF9ub2RlOwkvKiBwYWly aW5nIGhlYXAgbm9kZSBmb3IgbWVyZ2UgKi8KIAlpbnQJCQljdXJzb3JfaWQ7CQkvKiBpbmRleCBp biBtZXJnZSBzdGF0ZSdzIGN1cnNvcnMgYXJyYXkgKi8KLQlEYXR1bQkJcHJlZml4X3ZhbHVlOwkv KiB0aGUgcHJlZml4IHZhbHVlIGZvciB0aGlzIHN1Yi1zY2FuICovCi0JYm9vbAkJcHJlZml4X2lz bnVsbDsJLyogaXMgcHJlZml4IHZhbHVlIE5VTEw/ICovCi0JRGF0dW0JCXNvcnRfa2V5OwkJLyog Y3VycmVudCB0dXBsZSdzIHNvcnQga2V5IChzdWZmaXgpICovCi0JYm9vbAkJc29ydF9rZXlfaXNu dWxsOy8qIGlzIHNvcnQga2V5IE5VTEw/ICovCisJRGF0dW0JICAgKnByZWZpeF92YWx1ZXM7CS8q IGFycmF5IG9mIHByZWZpeCB2YWx1ZXMgZm9yIHRoaXMgc3ViLXNjYW4gKi8KIAlib29sCQlleGhh dXN0ZWQ7CQkvKiBubyBtb3JlIHR1cGxlcyBmb3IgdGhpcyBwcmVmaXggKi8KIAlCVFNjYW5Qb3NE YXRhIHBvczsJCQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGluZGV4ICovCiAJY2hhcgkgICAqdHVw bGVzOwkJCS8qIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlIChCTENLU1opICovCkBAIC0xMDgwLDE4 ICsxMDgwLDE3IEBAIHR5cGVkZWYgc3RydWN0IEJUTWVyZ2VDdXJzb3IKICAqLwogdHlwZWRlZiBz dHJ1Y3QgQlRNZXJnZVNjYW5TdGF0ZQogewotCWludAkJCW51bV9jdXJzb3JzOwkvKiBudW1iZXIg b2YgcHJlZml4IHZhbHVlcyAoSykgKi8KKwlpbnQJCQludW1fY3Vyc29yczsJLyogbnVtYmVyIG9m IHByZWZpeCBjb21iaW5hdGlvbnMgKEspICovCiAJaW50CQkJYWN0aXZlX2N1cnNvcnM7CS8qIGN1 cnNvcnMgbm90IHlldCBleGhhdXN0ZWQgKi8KIAlCVE1lcmdlQ3Vyc29yICpjdXJzb3JzOwkJLyog YXJyYXkgb2YgY3Vyc29ycyAqLwotCXBhaXJpbmdoZWFwICptZXJnZV9oZWFwOwkvKiBtaW4taGVh cCBvcmRlcmVkIGJ5IHNvcnRfa2V5ICovCi0JaW50CQkJcHJlZml4X2F0dG5vOwkvKiBhdHRyaWJ1 dGUgbnVtYmVyIG9mIHByZWZpeCBjb2x1bW4gKDEtYmFzZWQpICovCi0JaW50CQkJc3VmZml4X2F0 dG5vOwkvKiBhdHRyaWJ1dGUgbnVtYmVyIG9mIHN1ZmZpeCBjb2x1bW4gKDEtYmFzZWQpICovCi0J Rm1nckluZm8Jc3VmZml4X2NtcDsJCS8qIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHN1ZmZpeCAq LwotCU9pZAkJCXN1ZmZpeF9jb2xsYXRpb247CS8qIGNvbGxhdGlvbiBmb3Igc3VmZml4IGNvbXBh cmlzb24gKi8KKwlwYWlyaW5naGVhcCAqbWVyZ2VfaGVhcDsJLyogbWluLWhlYXAgb3JkZXJlZCBi eSBzdWZmaXgga2V5ICovCisJaW50CQkJbnVtX3ByZWZpeF9jb2xzOy8qIG51bWJlciBvZiBwcmVm aXggY29sdW1ucyAoYXR0bm8gMS4uTikgKi8KIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsJLyog c2NhbiBkaXJlY3Rpb24gKi8KIAlib29sCQlpbml0aWFsaXplZDsJLyogaGF2ZSBjdXJzb3JzIGJl ZW4gaW5pdGlhbGl6ZWQ/ICovCiAJTWVtb3J5Q29udGV4dCBtZXJnZV9jb250ZXh0Oy8qIG1lbW9y eSBjb250ZXh0IGZvciBhbGxvY2F0aW9ucyAqLwogCWludDY0CQl0dXBsZXNfYWNjZXNzZWQ7Lyog Y291bnQgb2YgaW5kZXggdHVwbGVzIGFjY2Vzc2VkICovCisJUmVsYXRpb24JaW5kZXhfcmVsOwkJ LyogaW5kZXggcmVsYXRpb24gKGZvciBjbXAgZnVuY3MsIGluZG9wdGlvbikgKi8KKwlUdXBsZURl c2MJaW5kZXhfdHVwZGVzYzsJLyogaW5kZXggdHVwbGUgZGVzY3JpcHRvciBmb3Igc3VmZml4IGV4 dHJhY3Rpb24gKi8KIH0gQlRNZXJnZVNjYW5TdGF0ZTsKIAogdHlwZWRlZiBzdHJ1Y3QgQlRTY2Fu T3BhcXVlRGF0YQpAQCAtMTM4OCwxMyArMTM4NywxMCBAQCBleHRlcm4gdm9pZCBfYnRfcGFyYWxs ZWxfYnVpbGRfbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpOwogICogcHJvdG90 eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idG1lcmdlc2Nhbi5jCiAgKi8KIGV4dGVybiBCVE1lcmdl U2NhblN0YXRlICpidF9tZXJnZV9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJCQkJCQkJCSAg IERhdHVtICpwcmVmaXhfdmFsdWVzLAotCQkJCQkJCQkJICAgYm9vbCAqcHJlZml4X251bGxzLAot CQkJCQkJCQkJICAgaW50IG51bV9wcmVmaXhlcywKLQkJCQkJCQkJCSAgIGludCBwcmVmaXhfYXR0 bm8sCi0JCQkJCQkJCQkgICBpbnQgc3VmZml4X2F0dG5vLAotCQkJCQkJCQkJICAgT2lkIHN1ZmZp eF9jbXBfb2lkLAotCQkJCQkJCQkJICAgT2lkIHN1ZmZpeF9jb2xsYXRpb24pOworCQkJCQkJCQkJ ICAgRGF0dW0gKipwcmVmaXhfdHVwbGVzLAorCQkJCQkJCQkJICAgYm9vbCAqKnByZWZpeF9udWxs cywKKwkJCQkJCQkJCSAgIGludCBudW1fY3Vyc29ycywKKwkJCQkJCQkJCSAgIGludCBudW1fcHJl Zml4X2NvbHMpOwogZXh0ZXJuIGJvb2wgYnRfbWVyZ2VfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiB2b2lkIGJ0X21lcmdlX2VuZChCVE1lcmdl U2NhblN0YXRlICpzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggY2VkN2UyMjRhODcu LmQ3YTQwOTk1MjEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjA0MSw2ICsyMDQxLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhQYXRoCiAJQ29zdAkJaW5kZXh0b3RhbGNvc3Q7CiAJU2VsZWN0 aXZpdHkgaW5kZXhzZWxlY3Rpdml0eTsKIAlpbnQJCQludW1fbWVyZ2VfcHJlZml4ZXM7CisJaW50 CQkJc3VmZml4X2luZGV4Y29sOwogfSBJbmRleFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CmluZGV4IDg2ZDhjOTJlMDFmLi4xNzI1NTQyNzQ0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAg LTU5OSw2ICs1OTksOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW4KIAlTY2FuRGlyZWN0aW9u IGluZGV4b3JkZXJkaXI7CiAJLyogTWVyZ2Ugc2NhbjogSy13YXkgbWVyZ2UgKi8KIAlpbnQJCQlu dW1fbWVyZ2VfcHJlZml4ZXM7CisJLyogTWVyZ2Ugc2NhbjogY29uc3RyYWludHMgb24gcHJlZml4 IGNvbHVtbnMgZm9yIEVYUExBSU4gKi8KKwlMaXN0CSAgICppbmRleHByZWZpeHF1YWw7CiB9IElu ZGV4U2NhbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjQ5LDYgKzY1MSw4IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4T25seVNjYW4KIAlTY2FuRGlyZWN0aW9uIGluZGV4b3JkZXJkaXI7CiAJ LyogTWVyZ2Ugc2NhbjogSy13YXkgbWVyZ2UgKi8KIAlpbnQJCQludW1fbWVyZ2VfcHJlZml4ZXM7 CisJLyogTWVyZ2Ugc2NhbjogcHJlZml4IHF1YWxzIChlcXVhbGl0eS9JTiBvbiBwcmVmaXggY29s dW1ucykgZm9yIEVYUExBSU4gKi8KKwlMaXN0CSAgICppbmRleHByZWZpeHF1YWw7CiB9IEluZGV4 T25seVNjYW47CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYy ZmQ1ZDMxNTA3Li5hMzJjYWM0ZDBjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl cjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4 bWVyZ2VzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9idHJlZV9tZXJnZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX21lcmdl Lm91dAppbmRleCAyODUwOWIzMzFkNy4uYTFlNjllODk0YWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uub3V0CkBAIC04MiwyNiArODIsMjcgQEAgU0hPVyB0cmFja19j b3VudHM7ICAtLSBzaG91bGQgYmUgJ29uJwogIG9uCiAoMSByb3cpCiAKLS0tIFZlcmlmeSBtZXJn ZSBzY2FuIGlzIHVzZWQ6IG5vIFNvcnQgbm9kZSwgcm93cz0xMCAoTiArIEsgLSAxID0gMyArIDgg LSAxKQorLS0gVmVyaWZ5IG1lcmdlIHNjYW4gaXMgdXNlZDogbm8gU29ydCBub2RlIHdoZW4gT1JE RVIgQlkgc3VmZml4IG9ubHkKKy0tIEsgPSA4IHByZWZpeGVzLCBMSU1JVCAzIC0+IHJlYWRzIGF0 IG1vc3QgMyArIDggLSAxID0gMTAgdHVwbGVzCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg eCwgeQogRlJPTSBidHJlZV9tZXJnZV90ZXN0CiBXSEVSRSB4IElOICgxLDIsNSw4LDEzLDIxLDM0 LDU1KSBBTkQgeSA+PSAxOQotT1JERVIgQlkgeSwgeAorT1JERVIgQlkgeQogTElNSVQgMzsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0CiAgICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIGJ0cmVlX21lcmdlX3Rlc3RfaWR4IG9uIGJ0cmVlX21lcmdlX3Rlc3QKLSAg ICAgICAgIEluZGV4IENvbmQ6ICgoeCA9IEFOWSAoJ3sxLDIsNSw4LDEzLDIxLDM0LDU1fSc6Omlu dGVnZXJbXSkpIEFORCAoeSA+PSAxOSkpCi0oMyByb3dzKQorICAgICAgICAgSW5kZXggQ29uZDog KHkgPj0gMTkpCisgICAgICAgICBJbmRleCBQcmVmaXhlczogKHggPSBBTlkgKCd7MSwyLDUsOCwx MywyMSwzNCw1NX0nOjppbnRlZ2VyW10pKQorKDQgcm93cykKIAotLS0gRnJvbSB0aGUgbGltaXRl ZCBxdWVyeSBwcm9wb3NpdGlvbiB0aGlzIGNhbiBiZSBjb21wdXRlZCB3aXRoIDEwCi0tLSB0dXBw bGUgYWNjZXNzZXMuCistLSBWZXJpZnkgdGhlIHF1ZXJ5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0 cyAoc29ydGVkIGJ5IHkpCiBTRUxFQ1QgeCwgeQogRlJPTSBidHJlZV9tZXJnZV90ZXN0CiBXSEVS RSB4IElOICgxLDIsNSw4LDEzLDIxLDM0LDU1KSBBTkQgeSA+PSAxOQotT1JERVIgQlkgeSwgeCAt LSBzb3J0IHggdG8gbWFrZSByZXN1bHQgdW5pcXVlCitPUkRFUiBCWSB5CiBMSU1JVCAzOwogIHgg fCB5ICAKIC0tLSstLS0tCkBAIC0xMjUsMyArMTI2LDI2MiBAQCBXSEVSRSBpbmRleHJlbG5hbWUg PSAnYnRyZWVfbWVyZ2VfdGVzdF9pZHgnOwogKDEgcm93KQogCiBEUk9QIFRBQkxFIGJ0cmVlX21l cmdlX3Rlc3Q7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gTXVsdGktY29sdW1uIHByZWZpeCB0ZXN0cworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIENyZWF0ZSBhIDMtY29sdW1uIHRhYmxlIGZvciBt dWx0aS1wcmVmaXggdGVzdGluZworQ1JFQVRFIFRBQkxFIGJ0cmVlX21lcmdlX211bHRpIEFTICgK KyAgICBTRUxFQ1QgYSwgYiwgYyBGUk9NIAorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAp IEFTIGEsIAorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIEFTIGIsCisgICAgICAgIGdl bmVyYXRlX3NlcmllcygxLCAyMCkgQVMgYworICAgIE9SREVSIEJZIHJhbmRvbSgpCispOworQ1JF QVRFIElOREVYIGJ0cmVlX21lcmdlX211bHRpX2lkeCBPTiBidHJlZV9tZXJnZV9tdWx0aSBVU0lO RyBidHJlZSAoYSwgYiwgYyk7CitBTkFMWVNFIGJ0cmVlX21lcmdlX211bHRpOworLS0gVGVzdCAx OiBhID0gY29uc3QgQU5EIGIgSU4gQiAtPiAzIGN1cnNvcnMgKGp1c3QgdGhlIElOIGxpc3QpCist LSBNZXJnZSBzY2FuIHRyaWdnZXJlZCwgbm8gU29ydCBub2RlIHdoZW4gT1JERVIgQlkgc3VmZml4 IG9ubHkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21l cmdlX211bHRpCitXSEVSRSBhID0gMSBBTkQgYiBJTiAoMSwgMiwgMykgQU5EIGMgPj0gNQorT1JE RVIgQlkgYworTElNSVQgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGlt aXQKKyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRyZWVfbWVyZ2VfbXVsdGlfaWR4IG9u IGJ0cmVlX21lcmdlX211bHRpCisgICAgICAgICBJbmRleCBDb25kOiAoYyA+PSA1KQorICAgICAg ICAgSW5kZXggUHJlZml4ZXM6ICgoYSA9IDEpIEFORCAoYiA9IEFOWSAoJ3sxLDIsM30nOjppbnRl Z2VyW10pKSkKKyg0IHJvd3MpCisKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211 bHRpCitXSEVSRSBhID0gMSBBTkQgYiBJTiAoMSwgMiwgMykgQU5EIGMgPj0gNQorT1JERVIgQlkg YworTElNSVQgMzsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0tLQorIDEgfCAxIHwgNQorIDEgfCAy IHwgNQorIDEgfCAzIHwgNQorKDMgcm93cykKKworLS0gVGVzdCAyOiBhIElOIEEgQU5EIGIgSU4g QiAtPiBsZW4oQSkgKiBsZW4oQikgY3Vyc29ycyAoQ2FydGVzaWFuIHByb2R1Y3QpCistLSBXaXRo IGEgSU4gKDEsMiksIGIgSU4gKDEsMiwzKSwgT1JERVIgQlkgYyBMSU1JVCA0CistLSBTaG91bGQg dXNlIDYgY3Vyc29ycyAoMiozKSwgbm8gU29ydCBub2RlIG5lZWRlZAorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGEsIGIsIGMKK0ZST00gYnRyZWVfbWVyZ2VfbXVsdGkKK1dIRVJFIGEgSU4g KDEsIDIpIEFORCBiIElOICgxLCAyLCAzKSBBTkQgYyA+PSAxMAorT1JERVIgQlkgYworTElNSVQg NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIGJ0cmVlX21lcmdlX211bHRpX2lkeCBvbiBidHJlZV9tZXJnZV9tdWx0aQorICAgICAg ICAgSW5kZXggQ29uZDogKGMgPj0gMTApCisgICAgICAgICBJbmRleCBQcmVmaXhlczogKChhID0g QU5ZICgnezEsMn0nOjppbnRlZ2VyW10pKSBBTkQgKGIgPSBBTlkgKCd7MSwyLDN9Jzo6aW50ZWdl cltdKSkpCisoNCByb3dzKQorCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0 aQorV0hFUkUgYSBJTiAoMSwgMikgQU5EIGIgSU4gKDEsIDIsIDMpIEFORCBjID49IDEwCitPUkRF UiBCWSBjCitMSU1JVCA0OworIGEgfCBiIHwgYyAgCistLS0rLS0tKy0tLS0KKyAxIHwgMSB8IDEw CisgMSB8IDIgfCAxMAorIDEgfCAzIHwgMTAKKyAyIHwgMSB8IDEwCisoNCByb3dzKQorCistLSBU ZXN0IDM6IGEgSU4gQSBBTkQgYiA9IGNvbnN0IC0+IGxlbihBKSBjdXJzb3JzCistLSBXaXRoIGEg SU4gKDEsMiwzLDQpLCBiPTUsIE9SREVSIEJZIGMgTElNSVQgMgorLS0gU2hvdWxkIHVzZSA0IGN1 cnNvcnMsIG5vIFNvcnQgbm9kZSBuZWVkZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBh LCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgxLCAyLCAzLCA0KSBB TkQgYiA9IDUgQU5EIGMgPj0gOAorT1JERVIgQlkgYworTElNSVQgMjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIGJ0cmVlX21lcmdlX211bHRpX2lkeCBvbiBidHJlZV9tZXJnZV9tdWx0aQorICAgICAgICAg SW5kZXggQ29uZDogKGMgPj0gOCkKKyAgICAgICAgIEluZGV4IFByZWZpeGVzOiAoKGEgPSBBTlkg KCd7MSwyLDMsNH0nOjppbnRlZ2VyW10pKSBBTkQgKGIgPSA1KSkKKyg0IHJvd3MpCisKK1NFTEVD VCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgxLCAyLCAzLCA0 KSBBTkQgYiA9IDUgQU5EIGMgPj0gOAorT1JERVIgQlkgYworTElNSVQgMjsKKyBhIHwgYiB8IGMg CistLS0rLS0tKy0tLQorIDEgfCA1IHwgOAorIDIgfCA1IHwgOAorKDIgcm93cykKKworLS0gVGVz dCA0OiBCYWNrd2FyZCBzY2FuIGRpcmVjdGlvbiAoT1JERVIgQlkgREVTQykKKy0tIFdpdGggYSBJ TiAoMSwyLDMpLCBiIElOICgxLDIpLCBPUkRFUiBCWSBjIERFU0MgTElNSVQgMworLS0gU2hvdWxk IHVzZSA2IGN1cnNvcnMgKDMqMiksIG5vIFNvcnQgbm9kZSBuZWVkZWQKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElO ICgxLCAyLCAzKSBBTkQgYiBJTiAoMSwgMikgQU5EIGMgPD0gMTUKK09SREVSIEJZIGMgREVTQwor TElNSVQgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICAtPiAgSW5kZXggT25s eSBTY2FuIEJhY2t3YXJkIHVzaW5nIGJ0cmVlX21lcmdlX211bHRpX2lkeCBvbiBidHJlZV9tZXJn ZV9tdWx0aQorICAgICAgICAgSW5kZXggQ29uZDogKGMgPD0gMTUpCisgICAgICAgICBJbmRleCBQ cmVmaXhlczogKChhID0gQU5ZICgnezEsMiwzfSc6OmludGVnZXJbXSkpIEFORCAoYiA9IEFOWSAo J3sxLDJ9Jzo6aW50ZWdlcltdKSkpCisoNCByb3dzKQorCitTRUxFQ1QgYSwgYiwgYworRlJPTSBi dHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMykgQU5EIGIgSU4gKDEsIDIpIEFO RCBjIDw9IDE1CitPUkRFUiBCWSBjIERFU0MKK0xJTUlUIDM7CisgYSB8IGIgfCBjICAKKy0tLSst LS0rLS0tLQorIDEgfCAxIHwgMTUKKyAxIHwgMiB8IDE1CisgMiB8IDEgfCAxNQorKDMgcm93cykK KworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIE11bHRpLWNvbHVtbiBzdWZmaXggdGVzdHMKKy0tIEluZGV4IGlz IG9uIChhLCBiLCBjKSwgdGVzdGluZyB3aXRoIHByZWZpeCBvbiAnYScgb25seQorLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFRlc3QgNTogT1JERVIgQlkgYiAoc2luZ2xlIGNvbHVtbiBzdWZmaXgpCistLSBXaXRo IGEgSU4gKDEsMiwzKSwgT1JERVIgQlkgYiBMSU1JVCA2CistLSBQcmVmaXg6IGEsIFN1ZmZpeDog YgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIsIGMKK0ZST00gYnRyZWVfbWVyZ2Vf bXVsdGkKK1dIRVJFIGEgSU4gKDEsIDIsIDMpIEFORCBiID49IDEKK09SREVSIEJZIGIKK0xJTUlU IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICAtPiAgSW5k ZXggT25seSBTY2FuIHVzaW5nIGJ0cmVlX21lcmdlX211bHRpX2lkeCBvbiBidHJlZV9tZXJnZV9t dWx0aQorICAgICAgICAgSW5kZXggQ29uZDogKGIgPj0gMSkKKyAgICAgICAgIEluZGV4IFByZWZp eGVzOiAoYSA9IEFOWSAoJ3sxLDIsM30nOjppbnRlZ2VyW10pKQorKDQgcm93cykKKworU0VMRUNU IGEsIGIsIGMKK0ZST00gYnRyZWVfbWVyZ2VfbXVsdGkKK1dIRVJFIGEgSU4gKDEsIDIsIDMpIEFO RCBiID49IDEKK09SREVSIEJZIGIKK0xJTUlUIDY7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0K KyAxIHwgMSB8IDEKKyAyIHwgMSB8IDEKKyAzIHwgMSB8IDEKKyAxIHwgMSB8IDIKKyAyIHwgMSB8 IDIKKyAzIHwgMSB8IDIKKyg2IHJvd3MpCisKKy0tIFRlc3QgNjogT1JERVIgQlkgYiBERVNDIChz aW5nbGUgY29sdW1uIHN1ZmZpeCwgYmFja3dhcmQpCistLSBXaXRoIGEgSU4gKDEsMiwzKSwgT1JE RVIgQlkgYiBERVNDIExJTUlUIDYKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiLCBj CitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgxLCAyLCAzKSBBTkQgYiA8PSAx MAorT1JERVIgQlkgYiBERVNDCitMSU1JVCA2OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAorICAgLT4gIEluZGV4IE9ubHkgU2NhbiBC YWNrd2FyZCB1c2luZyBidHJlZV9tZXJnZV9tdWx0aV9pZHggb24gYnRyZWVfbWVyZ2VfbXVsdGkK KyAgICAgICAgIEluZGV4IENvbmQ6IChiIDw9IDEwKQorICAgICAgICAgSW5kZXggUHJlZml4ZXM6 IChhID0gQU5ZICgnezEsMiwzfSc6OmludGVnZXJbXSkpCisoNCByb3dzKQorCitTRUxFQ1QgYSwg YiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMykgQU5EIGIg PD0gMTAKK09SREVSIEJZIGIgREVTQworTElNSVQgNjsKKyBhIHwgYiAgfCBjICAKKy0tLSstLS0t Ky0tLS0KKyAxIHwgMTAgfCAyMAorIDIgfCAxMCB8IDIwCisgMyB8IDEwIHwgMjAKKyAxIHwgMTAg fCAxOQorIDIgfCAxMCB8IDE5CisgMyB8IDEwIHwgMTkKKyg2IHJvd3MpCisKKy0tIFRlc3QgNzog T1JERVIgQlkgYiwgYyAobXVsdGktY29sdW1uIHN1ZmZpeCkKKy0tIFdpdGggYSBJTiAoMSwyLDMp LCBPUkRFUiBCWSBiLCBjIExJTUlUIDYKKy0tIFByZWZpeDogYSwgU3VmZml4OiAoYiwgYykKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRp CitXSEVSRSBhIElOICgxLCAyLCAzKSBBTkQgYiA+PSAxCitPUkRFUiBCWSBiLCBjCitMSU1JVCA2 OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAorICAgLT4gIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBidHJlZV9tZXJnZV9tdWx0aV9pZHggb24gYnRyZWVfbWVyZ2VfbXVs dGkKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID49IDEpCisgICAgICAgICBJbmRleCBQcmVmaXhl czogKGEgPSBBTlkgKCd7MSwyLDN9Jzo6aW50ZWdlcltdKSkKKyg0IHJvd3MpCisKK1NFTEVDVCBh LCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgxLCAyLCAzKSBBTkQg YiA+PSAxCitPUkRFUiBCWSBiLCBjCitMSU1JVCA2OworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0t CisgMSB8IDEgfCAxCisgMiB8IDEgfCAxCisgMyB8IDEgfCAxCisgMSB8IDEgfCAyCisgMiB8IDEg fCAyCisgMyB8IDEgfCAyCisoNiByb3dzKQorCistLSBUZXN0IDg6IE9SREVSIEJZIGIgREVTQywg YyBERVNDIChtdWx0aS1jb2x1bW4gc3VmZml4LCBiYWNrd2FyZCkKKy0tIFdpdGggYSBJTiAoMSwy LDMpLCBPUkRFUiBCWSBiIERFU0MsIGMgREVTQyBMSU1JVCA2CitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwg MiwgMykgQU5EIGIgPD0gMTAKK09SREVSIEJZIGIgREVTQywgYyBERVNDCitMSU1JVCA2OworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAor ICAgLT4gIEluZGV4IE9ubHkgU2NhbiBCYWNrd2FyZCB1c2luZyBidHJlZV9tZXJnZV9tdWx0aV9p ZHggb24gYnRyZWVfbWVyZ2VfbXVsdGkKKyAgICAgICAgIEluZGV4IENvbmQ6IChiIDw9IDEwKQor ICAgICAgICAgSW5kZXggUHJlZml4ZXM6IChhID0gQU5ZICgnezEsMiwzfSc6OmludGVnZXJbXSkp CisoNCByb3dzKQorCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hF UkUgYSBJTiAoMSwgMiwgMykgQU5EIGIgPD0gMTAKK09SREVSIEJZIGIgREVTQywgYyBERVNDCitM SU1JVCA2OworIGEgfCBiICB8IGMgIAorLS0tKy0tLS0rLS0tLQorIDEgfCAxMCB8IDIwCisgMiB8 IDEwIHwgMjAKKyAzIHwgMTAgfCAyMAorIDEgfCAxMCB8IDE5CisgMiB8IDEwIHwgMTkKKyAzIHwg MTAgfCAxOQorKDYgcm93cykKKworRFJPUCBUQUJMRSBidHJlZV9tZXJnZV9tdWx0aTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX21lcmdlLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2J0cmVlX21lcmdlLnNxbAppbmRleCBhZDljZjAzZjg2OS4uNzkyMTU5YjBjMTcg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX21lcmdlLnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9tZXJnZS5zcWwKQEAgLTgyLDIwICs4MiwyMCBAQCBT RVQgZW5hYmxlX3NlcXNjYW4gPSBPRkY7CiBTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CiBT SE9XIHRyYWNrX2NvdW50czsgIC0tIHNob3VsZCBiZSAnb24nCiAKLS0tIFZlcmlmeSBtZXJnZSBz Y2FuIGlzIHVzZWQ6IG5vIFNvcnQgbm9kZSwgcm93cz0xMCAoTiArIEsgLSAxID0gMyArIDggLSAx KQorLS0gVmVyaWZ5IG1lcmdlIHNjYW4gaXMgdXNlZDogbm8gU29ydCBub2RlIHdoZW4gT1JERVIg Qlkgc3VmZml4IG9ubHkKKy0tIEsgPSA4IHByZWZpeGVzLCBMSU1JVCAzIC0+IHJlYWRzIGF0IG1v c3QgMyArIDggLSAxID0gMTAgdHVwbGVzCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgeCwg eQogRlJPTSBidHJlZV9tZXJnZV90ZXN0CiBXSEVSRSB4IElOICgxLDIsNSw4LDEzLDIxLDM0LDU1 KSBBTkQgeSA+PSAxOQotT1JERVIgQlkgeSwgeAorT1JERVIgQlkgeQogTElNSVQgMzsKIAotLS0g RnJvbSB0aGUgbGltaXRlZCBxdWVyeSBwcm9wb3NpdGlvbiB0aGlzIGNhbiBiZSBjb21wdXRlZCB3 aXRoIDEwCi0tLSB0dXBwbGUgYWNjZXNzZXMuCistLSBWZXJpZnkgdGhlIHF1ZXJ5IHByb2R1Y2Vz IGNvcnJlY3QgcmVzdWx0cyAoc29ydGVkIGJ5IHkpCiBTRUxFQ1QgeCwgeQogRlJPTSBidHJlZV9t ZXJnZV90ZXN0CiBXSEVSRSB4IElOICgxLDIsNSw4LDEzLDIxLDM0LDU1KSBBTkQgeSA+PSAxOQot T1JERVIgQlkgeSwgeCAtLSBzb3J0IHggdG8gbWFrZSByZXN1bHQgdW5pcXVlCitPUkRFUiBCWSB5 CiBMSU1JVCAzOwogCiAKQEAgLTEwNiw0ICsxMDYsMTUxIEBAIFNFTEVDVCBpZHhfc2NhbiwgaWR4 X3R1cF9yZWFkLCBpZHhfdHVwX2ZldGNoCiBGUk9NIHBnX3N0YXRfdXNlcl9pbmRleGVzIAogV0hF UkUgaW5kZXhyZWxuYW1lID0gJ2J0cmVlX21lcmdlX3Rlc3RfaWR4JzsKIAotRFJPUCBUQUJMRSBi dHJlZV9tZXJnZV90ZXN0OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RST1AgVEFCTEUg YnRyZWVfbWVyZ2VfdGVzdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIE11bHRpLWNvbHVtbiBwcmVmaXggdGVzdHMKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tIENyZWF0ZSBhIDMtY29sdW1u IHRhYmxlIGZvciBtdWx0aS1wcmVmaXggdGVzdGluZworQ1JFQVRFIFRBQkxFIGJ0cmVlX21lcmdl X211bHRpIEFTICgKKyAgICBTRUxFQ1QgYSwgYiwgYyBGUk9NIAorICAgICAgICBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTApIEFTIGEsIAorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIEFTIGIs CisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLCAyMCkgQVMgYworICAgIE9SREVSIEJZIHJhbmRv bSgpCispOworQ1JFQVRFIElOREVYIGJ0cmVlX21lcmdlX211bHRpX2lkeCBPTiBidHJlZV9tZXJn ZV9tdWx0aSBVU0lORyBidHJlZSAoYSwgYiwgYyk7CitBTkFMWVNFIGJ0cmVlX21lcmdlX211bHRp OworCistLSBUZXN0IDE6IGEgPSBjb25zdCBBTkQgYiBJTiBCIC0+IDMgY3Vyc29ycyAoanVzdCB0 aGUgSU4gbGlzdCkKKy0tIE1lcmdlIHNjYW4gdHJpZ2dlcmVkLCBubyBTb3J0IG5vZGUgd2hlbiBP UkRFUiBCWSBzdWZmaXggb25seQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIsIGMK K0ZST00gYnRyZWVfbWVyZ2VfbXVsdGkKK1dIRVJFIGEgPSAxIEFORCBiIElOICgxLCAyLCAzKSBB TkQgYyA+PSA1CitPUkRFUiBCWSBjCitMSU1JVCAzOworCitTRUxFQ1QgYSwgYiwgYworRlJPTSBi dHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSA9IDEgQU5EIGIgSU4gKDEsIDIsIDMpIEFORCBjID49 IDUKK09SREVSIEJZIGMKK0xJTUlUIDM7CisKKy0tIFRlc3QgMjogYSBJTiBBIEFORCBiIElOIEIg LT4gbGVuKEEpICogbGVuKEIpIGN1cnNvcnMgKENhcnRlc2lhbiBwcm9kdWN0KQorLS0gV2l0aCBh IElOICgxLDIpLCBiIElOICgxLDIsMyksIE9SREVSIEJZIGMgTElNSVQgNAorLS0gU2hvdWxkIHVz ZSA2IGN1cnNvcnMgKDIqMyksIG5vIFNvcnQgbm9kZSBuZWVkZWQKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgx LCAyKSBBTkQgYiBJTiAoMSwgMiwgMykgQU5EIGMgPj0gMTAKK09SREVSIEJZIGMKK0xJTUlUIDQ7 CisKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBhIElOICgx LCAyKSBBTkQgYiBJTiAoMSwgMiwgMykgQU5EIGMgPj0gMTAKK09SREVSIEJZIGMKK0xJTUlUIDQ7 CisKKy0tIFRlc3QgMzogYSBJTiBBIEFORCBiID0gY29uc3QgLT4gbGVuKEEpIGN1cnNvcnMKKy0t IFdpdGggYSBJTiAoMSwyLDMsNCksIGI9NSwgT1JERVIgQlkgYyBMSU1JVCAyCistLSBTaG91bGQg dXNlIDQgY3Vyc29ycywgbm8gU29ydCBub2RlIG5lZWRlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGEsIGIsIGMKK0ZST00gYnRyZWVfbWVyZ2VfbXVsdGkKK1dIRVJFIGEgSU4gKDEsIDIs IDMsIDQpIEFORCBiID0gNSBBTkQgYyA+PSA4CitPUkRFUiBCWSBjCitMSU1JVCAyOworCitTRUxF Q1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMywg NCkgQU5EIGIgPSA1IEFORCBjID49IDgKK09SREVSIEJZIGMKK0xJTUlUIDI7CisKKy0tIFRlc3Qg NDogQmFja3dhcmQgc2NhbiBkaXJlY3Rpb24gKE9SREVSIEJZIERFU0MpCistLSBXaXRoIGEgSU4g KDEsMiwzKSwgYiBJTiAoMSwyKSwgT1JERVIgQlkgYyBERVNDIExJTUlUIDMKKy0tIFNob3VsZCB1 c2UgNiBjdXJzb3JzICgzKjIpLCBubyBTb3J0IG5vZGUgbmVlZGVkCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAo MSwgMiwgMykgQU5EIGIgSU4gKDEsIDIpIEFORCBjIDw9IDE1CitPUkRFUiBCWSBjIERFU0MKK0xJ TUlUIDM7CisKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVSRSBh IElOICgxLCAyLCAzKSBBTkQgYiBJTiAoMSwgMikgQU5EIGMgPD0gMTUKK09SREVSIEJZIGMgREVT QworTElNSVQgMzsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE11bHRpLWNvbHVtbiBzdWZmaXggdGVzdHMK Ky0tIEluZGV4IGlzIG9uIChhLCBiLCBjKSwgdGVzdGluZyB3aXRoIHByZWZpeCBvbiAnYScgb25s eQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKworLS0gVGVzdCA1OiBPUkRFUiBCWSBiIChzaW5nbGUgY29sdW1uIHN1 ZmZpeCkKKy0tIFdpdGggYSBJTiAoMSwyLDMpLCBPUkRFUiBCWSBiIExJTUlUIDYKKy0tIFByZWZp eDogYSwgU3VmZml4OiBiCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiwgYworRlJP TSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMykgQU5EIGIgPj0gMQorT1JE RVIgQlkgYgorTElNSVQgNjsKKworU0VMRUNUIGEsIGIsIGMKK0ZST00gYnRyZWVfbWVyZ2VfbXVs dGkKK1dIRVJFIGEgSU4gKDEsIDIsIDMpIEFORCBiID49IDEKK09SREVSIEJZIGIKK0xJTUlUIDY7 CisKKy0tIFRlc3QgNjogT1JERVIgQlkgYiBERVNDIChzaW5nbGUgY29sdW1uIHN1ZmZpeCwgYmFj a3dhcmQpCistLSBXaXRoIGEgSU4gKDEsMiwzKSwgT1JERVIgQlkgYiBERVNDIExJTUlUIDYKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRp CitXSEVSRSBhIElOICgxLCAyLCAzKSBBTkQgYiA8PSAxMAorT1JERVIgQlkgYiBERVNDCitMSU1J VCA2OworCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJnZV9tdWx0aQorV0hFUkUgYSBJ TiAoMSwgMiwgMykgQU5EIGIgPD0gMTAKK09SREVSIEJZIGIgREVTQworTElNSVQgNjsKKworLS0g VGVzdCA3OiBPUkRFUiBCWSBiLCBjIChtdWx0aS1jb2x1bW4gc3VmZml4KQorLS0gV2l0aCBhIElO ICgxLDIsMyksIE9SREVSIEJZIGIsIGMgTElNSVQgNgorLS0gUHJlZml4OiBhLCBTdWZmaXg6IChi LCBjKQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEsIGIsIGMKK0ZST00gYnRyZWVfbWVy Z2VfbXVsdGkKK1dIRVJFIGEgSU4gKDEsIDIsIDMpIEFORCBiID49IDEKK09SREVSIEJZIGIsIGMK K0xJTUlUIDY7CisKK1NFTEVDVCBhLCBiLCBjCitGUk9NIGJ0cmVlX21lcmdlX211bHRpCitXSEVS RSBhIElOICgxLCAyLCAzKSBBTkQgYiA+PSAxCitPUkRFUiBCWSBiLCBjCitMSU1JVCA2OworCist LSBUZXN0IDg6IE9SREVSIEJZIGIgREVTQywgYyBERVNDIChtdWx0aS1jb2x1bW4gc3VmZml4LCBi YWNrd2FyZCkKKy0tIFdpdGggYSBJTiAoMSwyLDMpLCBPUkRFUiBCWSBiIERFU0MsIGMgREVTQyBM SU1JVCA2CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9t ZXJnZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMykgQU5EIGIgPD0gMTAKK09SREVSIEJZIGIg REVTQywgYyBERVNDCitMSU1JVCA2OworCitTRUxFQ1QgYSwgYiwgYworRlJPTSBidHJlZV9tZXJn ZV9tdWx0aQorV0hFUkUgYSBJTiAoMSwgMiwgMykgQU5EIGIgPD0gMTAKK09SREVSIEJZIGIgREVT QywgYyBERVNDCitMSU1JVCA2OworCitEUk9QIFRBQkxFIGJ0cmVlX21lcmdlX211bHRpOwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIuNDAuMAoK --000000000000ef5980064a259486 Content-Type: application/octet-stream; name="0001-MERGE-SCAN-Test-the-baseline.patch" Content-Disposition: attachment; filename="0001-MERGE-SCAN-Test-the-baseline.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlapnoqp0 RnJvbSA2ZGM2N2IxNjY2OGVkYzY0ZGQ4MjBjNWEzMTNjODQ5Y2Q0N2RhNmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBGcmksIDMwIEphbiAyMDI2IDA4OjM1OjE1ICswMDAwClN1YmplY3Q6 IFtQQVRDSCAxLzRdIFtNRVJHRS1TQ0FOXTogVGVzdCB0aGUgYmFzZWxpbmUKCi0tLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9tZXJnZS5vdXQgfCAxMTMgKysrKysrKysrKysrKysr KysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uuc3FsICAgICAgfCAxMDAg KysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfbWVyZ2Uu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uu c3FsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9tZXJnZS5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX21lcmdlLm91dApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDQxYWUxZDA2NTcKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX21lcmdlLm91dApAQCAtMCwwICsx LDExMyBAQAorLS0gQi1UcmVlIE1lcmdlIFNjYW4gQWNjZXNzIE1ldGhvZCBUZXN0CistLQorLS0g Qi1UcmVlIE1lcmdlIFNjYW4gaXMgYW4gYWNjZXNzIG1ldGhvZCB0aGF0IGFsbG93cyBsYXppbHkg cHJvZHVjaW5nCistLSBvdXRwdXQgc29ydGVkIGJ5IGEgbm9uLWxlYWRpbmcgY29sdW1uIHdoZW4g dGhlIHByZWZpeCBoYXMgZmV3IGRpc3RpbmN0IHZhbHVlcy4KKy0tCistLQorLS0gTGV0IFMgYmUg YW4gaW5maW5pdGUgc2V0IG9mIGxhdHRpYyBwb2ludHMgKHgseSkuCistLSBMZXQgUyh4PTEseT49 YikgYmUgdGhlIHNlcXVlbmNlIG9mIHBvaW50cyAKKy0tICAgICBTRUxFQ1QgKiBGUk9NIFMgV0hF UkUgeCA9IGEgYW5kIHkgPj0gYiBPUkRFUiBCWSBiOworLS0gICAgIGkuZS4gKGEsIGIpLCAoYSwg YisxKSwgKGEsIGIrMiksIC4uLgorLS0gU2ltaWxhcmx5LCBTKHggSU4gWCwgeT1iKSBiZWluZyB0 aGUgc2VxdWVuY2Ugb2YgcG9pbnRzCistLSAgICAgU0VMRUNUICogRlJPTSBTIFdIRVJFIHggSU4g WCBhbmQgeSA9IGIgT1JERVIgQlkgeDsKKy0tICAgICBpLmUuICh4WzFdLCBiKSwgLi4uLCAoeFtu XSwgYiksICh4WzFdLCBiKzEpLCAuLi4KKy0tIFRoZSBvdXRwdXQgb2YgUyh4IElOIFgsIHkgPj0g YikgY2FuIGJlIGNvbXB1dGVkIGFzIGEKKy0tCistLSBQcm9wb3NpdGlvbiAodW5jb21wdXRhYmxl KTogCistLSBTKHgsIElOIFgsIHkgPj0gYikgaXMgdGhlIEstd2F5IG1lcmdlIG9mIHRoZSBzZXF1 ZW5jZXMgCistLSB7Uyh4PXhbaV0sIHkgPj0gYiksIHhbaV0gaW4gWH0KKy0tIAorLS0KKy0tCist LSBQcm9wb3NpdGlvbiAoY29tcHV0YWJsZSk6IEJvdW5kZWQgc3VmZml4CistLQorLS0gUyh4LCBJ TiBYLCBiMSA8PSB5IDw9IGIyKSBhcyBib3VuZGVkCistLSBjYW4gYmUgY29tcHV0ZWQgd2l0aCAo U0VMRUNUIGNvdW50KGRpc3RpbmN0IHgpICsgY291bnQoMSkgRlJPTSBib3VuZGVkKQorLS0gdHVw bGUgYWNjZXNzZXMuCistLSAoQ29uc3RydWN0aXZlKSBQcm9vZjoKKy0tIFRoZSByZXN1bHQgb2Yg CistLSAgICBTRUxFQ1QgKiBGUk9NIFggCistLSAgICBKT0lOIFMgb24geCA9IHhbaV0gV0hFUkUg eSBCRVRXRUVOIGIxIEFORCBiMjsKKy0tIGlzIHRoZSBzYW1lIGFzIAorLS0gICAgU0VMRUNUICog RlJPTSBYLAorLS0gICAgTEFURVJBTCAoCistLSAgICAgICAgKFNFTEVDVCAqIEZST00gUyAKKy0t ICAgICAgICAgICBXSEVSRSB4ID0geFtpXSBBTkQgeSBCRVRXRUVOIGIxIEFORCBiMgorLS0gICAg ICAgICkgQVMgc3Vic2NhbltpXQorLS0gICAgKSBhcyBtZXJnZWQKKy0tIAorLS0gRWFjaCBvZiBz dWJzY2FuW2ldIGlzIGNvdmVyZWQgYnkgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIGluZGV4IGFuZCBj YW4KKy0tIGFuZCByZXF1aXJlIGF0IG1vc3QgCistLSAgKGNvdW50KDEpIEZST00gc3Vic2Nhbltp XSkgKyAxICAgIC0tIHN1YnNjYW4gdHVwbGUgYWNjZXNzIGNvdW50CistLSB0dXBwbGVzIHRvIGJl IGFjY2Vzc2VkLgorLS0gVGhlIG1lcmdlZCByZXN1bHQgY2FuIGJlIGNvbXB1dGVkIHVzaW5nIGEg Sy13YXkgbWVyZ2Ugc29ydCAKKy0tIHdob3NlIG51bWJlciBvZiByb3dzIGlzCistLSAgIHN1bShj b3VudCgxKSBGUk9NIHN1YnNjYW5baV0pICAgIC0tIHF1ZXJ5IG91dHB1dCByb3dzCistLSBRLkUu RC4KKy0tCistLQorLS0gUHJvcG9zaXRpb24gKGNvbXB1dGFibGUpOiBMaW1pdHRlZCBxdWVyeQor LS0gVGhlIHF1ZXJ5CistLSAgIFMoeCwgSU4gWCwgeSA+PSBiKSBMSU1JVCBOIGFzIGxpbWl0ZWQK Ky0tIENhbiBiZSBjb21wdXRlZCB3aXRoIGF0IG1vc3QgCistLSAgIE4gKyBjb3VudChkaXN0aW5j dCBYKSAtIDEKKy0tIHR1cGxlIGFjY2Vzc2VzLgorLS0KKy0tIChDb25zdHJ1Y3RpdmUpIFByb29m OgorLS0gSWYgYW4gdXBwZXIgYHVgIGJvdW5kIGZvciBgTUFYKHkgSU4gUyh4LCBJTiBYLCB5ID49 IGIpIExJTUlUIE4pYCBpcyBrbm93biwKKy0tIHRoZW4gdGhlIHF1ZXJ5IGNhbiBiZSByZXdyaXR0 ZW4gYXMKKy0tICAgUyh4LCBJTiBYLCBiIDw9IHkgPD0gdSkgTElNSVQgTgorLS0gVGhlIEstd2F5 IGNhbiBwcm9kdWNlIHRoZSBuZXh0IGVsZW1lbnQgYXMgc29vbiBhcyBpdCBoYXMgZmV0Y2hlZAor LS0gdGhlIG5leHQgZWxlbWVudCBmb3IgZWFjaCBzdWJxdWVyeQorLS0gMSByb3cgY2FuIGJlIHBy b2R1Y2VkIGFmdGVyIGNvdW50KGRpc3RpbmN0IFgpIGZldGNoZXMsCistLSBBZnRlciB0aGF0IGl0 IGNhbiBwcm9kdWNlIG9uZSBuZXcgcm93IGZvciBlYWNoIGZldGNoLgorLS0gVGh1cywgdGhlIHRv dGFsIG51bWJlciBvZiBmZXRjaGVzIGlzIGF0IG1vc3QKKy0tICAgTiArIGNvdW50KGRpc3RpbmN0 IFgpIC0gMQorLS0gUS5FLkQuCistLSBHZW5lcmF0ZSBhIHRhYmxlIHdpdGggbGF0dGljZSBwb2lu dHMgCistLSBDb3VsZCBiZSBpbmZpbml0ZQorQ1JFQVRFIFRBQkxFIGJ0cmVlX21lcmdlX3Rlc3Qg QVMgKAorICAgIFNFTEVDVCB4LCB5IEZST00gCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLCA1 MCkgQVMgeCwgCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLCA1MCkgQVMgeQorICAgIE9SREVS IEJZIHJhbmRvbSgpCispOworQ1JFQVRFIElOREVYIGJ0cmVlX21lcmdlX3Rlc3RfaWR4IE9OIGJ0 cmVlX21lcmdlX3Rlc3QgVVNJTkcgYnRyZWUgKHgsIHkpOworQU5BTFlTRSBidHJlZV9tZXJnZV90 ZXN0OworU0VUIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0g T0ZGOworU0hPVyB0cmFja19jb3VudHM7ICAtLSBzaG91bGQgYmUgJ29uJworIHRyYWNrX2NvdW50 cyAKKy0tLS0tLS0tLS0tLS0tCisgb24KKygxIHJvdykKKworLS0gRnJvbSB0aGUgbGltaXRlZCBx dWVyeSBwcm9wb3NpdGlvbiB0aGlzIGNhbiBiZSBjb21wdXRlZCB3aXRoIDEwCistLSB0dXBwbGUg YWNjZXNzZXMuCitTRUxFQ1QgeCwgeQorRlJPTSBidHJlZV9tZXJnZV90ZXN0CitXSEVSRSB4IElO ICgxLDIsNSw4LDEzLDIxLDM0LDU1KSBBTkQgeSA+PSAxOQorT1JERVIgQlkgeSwgeCAtLSBzb3J0 IHggdG8gbWFrZSByZXN1bHQgdW5pcXVlCitMSU1JVCAzOworIHggfCB5ICAKKy0tLSstLS0tCisg MSB8IDE5CisgMiB8IDE5CisgNSB8IDE5CisoMyByb3dzKQorCitTRUxFQ1QgcGdfc3RhdF9mb3Jj ZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIGlkeF9zY2FuLCBpZHhfdHVwX3Jl YWQsIGlkeF90dXBfZmV0Y2ggCitGUk9NIHBnX3N0YXRfdXNlcl9pbmRleGVzIAorV0hFUkUgaW5k ZXhyZWxuYW1lID0gJ2J0cmVlX21lcmdlX3Rlc3RfaWR4JzsKKyBpZHhfc2NhbiB8IGlkeF90dXBf cmVhZCB8IGlkeF90dXBfZmV0Y2ggCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLQorICAgICAgICA1IHwgICAgICAgICAgIDEwIHwgICAgICAgICAgICAxMAorKDEgcm93 KQorCitEUk9QIFRBQkxFIGJ0cmVlX21lcmdlX3Rlc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9idHJlZV9tZXJnZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9t ZXJnZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDBjMzNj MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfbWVyZ2Uu c3FsCkBAIC0wLDAgKzEsMTAwIEBACistLSBCLVRyZWUgTWVyZ2UgU2NhbiBBY2Nlc3MgTWV0aG9k IFRlc3QKKy0tCistLSBCLVRyZWUgTWVyZ2UgU2NhbiBpcyBhbiBhY2Nlc3MgbWV0aG9kIHRoYXQg YWxsb3dzIGxhemlseSBwcm9kdWNpbmcKKy0tIG91dHB1dCBzb3J0ZWQgYnkgYSBub24tbGVhZGlu ZyBjb2x1bW4gd2hlbiB0aGUgcHJlZml4IGhhcyBmZXcgZGlzdGluY3QgdmFsdWVzLgorLS0KKy0t CistLSBMZXQgUyBiZSBhbiBpbmZpbml0ZSBzZXQgb2YgbGF0dGljIHBvaW50cyAoeCx5KS4KKy0t IExldCBTKHg9MSx5Pj1iKSBiZSB0aGUgc2VxdWVuY2Ugb2YgcG9pbnRzIAorLS0gICAgIFNFTEVD VCAqIEZST00gUyBXSEVSRSB4ID0gYSBhbmQgeSA+PSBiIE9SREVSIEJZIGI7CistLSAgICAgaS5l LiAoYSwgYiksIChhLCBiKzEpLCAoYSwgYisyKSwgLi4uCistLSBTaW1pbGFybHksIFMoeCBJTiBY LCB5PWIpIGJlaW5nIHRoZSBzZXF1ZW5jZSBvZiBwb2ludHMKKy0tICAgICBTRUxFQ1QgKiBGUk9N IFMgV0hFUkUgeCBJTiBYIGFuZCB5ID0gYiBPUkRFUiBCWSB4OworLS0gICAgIGkuZS4gKHhbMV0s IGIpLCAuLi4sICh4W25dLCBiKSwgKHhbMV0sIGIrMSksIC4uLgorLS0gVGhlIG91dHB1dCBvZiBT KHggSU4gWCwgeSA+PSBiKSBjYW4gYmUgY29tcHV0ZWQgYXMgYQorLS0KKy0tIFByb3Bvc2l0aW9u ICh1bmNvbXB1dGFibGUpOiAKKy0tIFMoeCwgSU4gWCwgeSA+PSBiKSBpcyB0aGUgSy13YXkgbWVy Z2Ugb2YgdGhlIHNlcXVlbmNlcyAKKy0tIHtTKHg9eFtpXSwgeSA+PSBiKSwgeFtpXSBpbiBYfQor LS0gCistLQorLS0KKy0tIFByb3Bvc2l0aW9uIChjb21wdXRhYmxlKTogQm91bmRlZCBzdWZmaXgK Ky0tCistLSBTKHgsIElOIFgsIGIxIDw9IHkgPD0gYjIpIGFzIGJvdW5kZWQKKy0tIGNhbiBiZSBj b21wdXRlZCB3aXRoIChTRUxFQ1QgY291bnQoZGlzdGluY3QgeCkgKyBjb3VudCgxKSBGUk9NIGJv dW5kZWQpCistLSB0dXBsZSBhY2Nlc3Nlcy4KKy0tIChDb25zdHJ1Y3RpdmUpIFByb29mOgorLS0g VGhlIHJlc3VsdCBvZiAKKy0tICAgIFNFTEVDVCAqIEZST00gWCAKKy0tICAgIEpPSU4gUyBvbiB4 ID0geFtpXSBXSEVSRSB5IEJFVFdFRU4gYjEgQU5EIGIyOworLS0gaXMgdGhlIHNhbWUgYXMgCist LSAgICBTRUxFQ1QgKiBGUk9NIFgsCistLSAgICBMQVRFUkFMICgKKy0tICAgICAgICAoU0VMRUNU ICogRlJPTSBTIAorLS0gICAgICAgICAgIFdIRVJFIHggPSB4W2ldIEFORCB5IEJFVFdFRU4gYjEg QU5EIGIyCistLSAgICAgICAgKSBBUyBzdWJzY2FuW2ldCistLSAgICApIGFzIG1lcmdlZAorLS0g CistLSBFYWNoIG9mIHN1YnNjYW5baV0gaXMgY292ZXJlZCBieSBhIHNpbmdsZSByYW5nZSBpbiB0 aGUgaW5kZXggYW5kIGNhbgorLS0gYW5kIHJlcXVpcmUgYXQgbW9zdCAKKy0tICAoY291bnQoMSkg RlJPTSBzdWJzY2FuW2ldKSArIDEgICAgLS0gc3Vic2NhbiB0dXBsZSBhY2Nlc3MgY291bnQKKy0t IHR1cHBsZXMgdG8gYmUgYWNjZXNzZWQuCistLSBUaGUgbWVyZ2VkIHJlc3VsdCBjYW4gYmUgY29t cHV0ZWQgdXNpbmcgYSBLLXdheSBtZXJnZSBzb3J0IAorLS0gd2hvc2UgbnVtYmVyIG9mIHJvd3Mg aXMKKy0tICAgc3VtKGNvdW50KDEpIEZST00gc3Vic2NhbltpXSkgICAgLS0gcXVlcnkgb3V0cHV0 IHJvd3MKKy0tIFEuRS5ELgorLS0KKy0tCistLSBQcm9wb3NpdGlvbiAoY29tcHV0YWJsZSk6IExp bWl0dGVkIHF1ZXJ5CistLSBUaGUgcXVlcnkKKy0tICAgUyh4LCBJTiBYLCB5ID49IGIpIExJTUlU IE4gYXMgbGltaXRlZAorLS0gQ2FuIGJlIGNvbXB1dGVkIHdpdGggYXQgbW9zdCAKKy0tICAgTiAr IGNvdW50KGRpc3RpbmN0IFgpIC0gMQorLS0gdHVwbGUgYWNjZXNzZXMuCistLQorLS0gKENvbnN0 cnVjdGl2ZSkgUHJvb2Y6CistLSBJZiBhbiB1cHBlciBgdWAgYm91bmQgZm9yIGBNQVgoeSBJTiBT KHgsIElOIFgsIHkgPj0gYikgTElNSVQgTilgIGlzIGtub3duLAorLS0gdGhlbiB0aGUgcXVlcnkg Y2FuIGJlIHJld3JpdHRlbiBhcworLS0gICBTKHgsIElOIFgsIGIgPD0geSA8PSB1KSBMSU1JVCBO CistLSBUaGUgSy13YXkgY2FuIHByb2R1Y2UgdGhlIG5leHQgZWxlbWVudCBhcyBzb29uIGFzIGl0 IGhhcyBmZXRjaGVkCistLSB0aGUgbmV4dCBlbGVtZW50IGZvciBlYWNoIHN1YnF1ZXJ5CistLSAx IHJvdyBjYW4gYmUgcHJvZHVjZWQgYWZ0ZXIgY291bnQoZGlzdGluY3QgWCkgZmV0Y2hlcywKKy0t IEFmdGVyIHRoYXQgaXQgY2FuIHByb2R1Y2Ugb25lIG5ldyByb3cgZm9yIGVhY2ggZmV0Y2guCist LSBUaHVzLCB0aGUgdG90YWwgbnVtYmVyIG9mIGZldGNoZXMgaXMgYXQgbW9zdAorLS0gICBOICsg Y291bnQoZGlzdGluY3QgWCkgLSAxCistLSBRLkUuRC4KKworCistLSBHZW5lcmF0ZSBhIHRhYmxl IHdpdGggbGF0dGljZSBwb2ludHMgCistLSBDb3VsZCBiZSBpbmZpbml0ZQorQ1JFQVRFIFRBQkxF IGJ0cmVlX21lcmdlX3Rlc3QgQVMgKAorICAgIFNFTEVDVCB4LCB5IEZST00gCisgICAgICAgIGdl bmVyYXRlX3NlcmllcygxLCA1MCkgQVMgeCwgCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLCA1 MCkgQVMgeQorICAgIE9SREVSIEJZIHJhbmRvbSgpCispOworQ1JFQVRFIElOREVYIGJ0cmVlX21l cmdlX3Rlc3RfaWR4IE9OIGJ0cmVlX21lcmdlX3Rlc3QgVVNJTkcgYnRyZWUgKHgsIHkpOworCitB TkFMWVNFIGJ0cmVlX21lcmdlX3Rlc3Q7CisKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IE9GRjsKK1NF VCBlbmFibGVfYml0bWFwc2NhbiA9IE9GRjsKK1NIT1cgdHJhY2tfY291bnRzOyAgLS0gc2hvdWxk IGJlICdvbicKKy0tIEZyb20gdGhlIGxpbWl0ZWQgcXVlcnkgcHJvcG9zaXRpb24gdGhpcyBjYW4g YmUgY29tcHV0ZWQgd2l0aCAxMAorLS0gdHVwcGxlIGFjY2Vzc2VzLgorU0VMRUNUIHgsIHkKK0ZS T00gYnRyZWVfbWVyZ2VfdGVzdAorV0hFUkUgeCBJTiAoMSwyLDUsOCwxMywyMSwzNCw1NSkgQU5E IHkgPj0gMTkKK09SREVSIEJZIHksIHggLS0gc29ydCB4IHRvIG1ha2UgcmVzdWx0IHVuaXF1ZQor TElNSVQgMzsKKworCitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisKKworU0VM RUNUIGlkeF9zY2FuLCBpZHhfdHVwX3JlYWQsIGlkeF90dXBfZmV0Y2ggCitGUk9NIHBnX3N0YXRf dXNlcl9pbmRleGVzIAorV0hFUkUgaW5kZXhyZWxuYW1lID0gJ2J0cmVlX21lcmdlX3Rlc3RfaWR4 JzsKKworRFJPUCBUQUJMRSBidHJlZV9tZXJnZV90ZXN0OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKLS0gCjIuNDAuMAoK --000000000000ef5980064a259486 Content-Type: application/octet-stream; name="0002-MERGE-SCAN-Access-method.patch" Content-Disposition: attachment; filename="0002-MERGE-SCAN-Access-method.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlapnorm1 RnJvbSBkODZiMzcxNDk5ZGIwMTFhMzY1ODNkMjA5NjNkZjY4YjA5MjE5MTkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBGcmksIDMwIEphbiAyMDI2IDE0OjI3OjE4ICswMDAwClN1YmplY3Q6 IFtQQVRDSCAyLzRdIFtNRVJHRS1TQ0FOXTogQWNjZXNzIG1ldGhvZAoKLS0tCiAuZ2l0aWdub3Jl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idG1lcmdlc2Nhbi5jICAgICAgfCA0NTcgKysrKysrKysrKysrKysrKysrCiBz cmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAgNjQgKysrCiBz cmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2J0cmVlX21lcmdlL01ha2VmaWxlICAgIHwgIDI0ICsKIC4uLi9l eHBlY3RlZC90ZXN0X2J0cmVlX21lcmdlLm91dCAgICAgICAgICAgICB8IDI0MyArKysrKysrKysr CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvbWVzb24uYnVpbGQgfCAgMzMgKysK IC4uLi90ZXN0X2J0cmVlX21lcmdlL3NxbC90ZXN0X2J0cmVlX21lcmdlLnNxbCB8IDIwNyArKysr KysrKwogLi4uL3Rlc3RfYnRyZWVfbWVyZ2UtLTEuMC5zcWwgICAgICAgICAgICAgICAgIHwgIDQz ICsrCiAuLi4vdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmMgICAgICAgfCAzODkg KysrKysrKysrKysrKysrCiAuLi4vdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmNv bnRyb2wgfCAgIDUgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTQ3NiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRtZXJnZXNjYW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJn ZS9leHBlY3RlZC90ZXN0X2J0cmVlX21lcmdlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9zcWwvdGVzdF9idHJlZV9tZXJn ZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVy Z2UvdGVzdF9idHJlZV9tZXJnZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJn ZS5jb250cm9sCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggNGU5 MTEzOTVmZTMuLmFjMWY5NWQ5Y2YwIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRp Z25vcmUKQEAgLTQzLDMgKzQzLDExIEBAIGxpYioucGMKIC9SZWxlYXNlLwogL3RtcF9pbnN0YWxs LwogL3BvcnRsb2NrLworCisjIGhpZGRlbiBmaWxlcyAoZS5nLiAuZGJkYXRhLCAuaW5zdGFsbCwg Z29vZCBwcmFjdGljZSB0byB0ZXN0IGxvY2FsbHkgaW4gaXNvbGF0aW9uKQorLioKKworIyBUZXN0 IG91dHB1dAorKiovcmVncmVzc2lvbi5kaWZmcworKiovcmVncmVzc2lvbi5vdXQKKyoqL3Jlc3Vs dHMvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQppbmRleCAwZGFmNjQwYWY5Ni4uNzIwNTNj ZWZkYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBP QkpTID0gXAogCW5idGNvbXBhcmUubyBcCiAJbmJ0ZGVkdXAubyBcCiAJbmJ0aW5zZXJ0Lm8gXAor CW5idG1lcmdlc2Nhbi5vIFwKIAluYnRwYWdlLm8gXAogCW5idHByZXByb2Nlc3NrZXlzLm8gXAog CW5idHJlYWRwYWdlLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9t ZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQKaW5kZXgg ODEyZjA2N2U3MTAuLjEwMTZmZWE2MmQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbWVzb24u YnVpbGQKQEAgLTQsNiArNCw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ25idGNv bXBhcmUuYycsCiAgICduYnRkZWR1cC5jJywKICAgJ25idGluc2VydC5jJywKKyAgJ25idG1lcmdl c2Nhbi5jJywKICAgJ25idHBhZ2UuYycsCiAgICduYnRwcmVwcm9jZXNza2V5cy5jJywKICAgJ25i dHJlYWRwYWdlLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRt ZXJnZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0bWVyZ2VzY2FuLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcwODI4ZGM3M2QzCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRtZXJnZXNjYW4uYwpAQCAt MCwwICsxLDQ1NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbmJ0bWVyZ2VzY2FuLmMK KyAqCSAgQi1UcmVlIG1lcmdlIHNjYW4gZm9yIGVmZmljaWVudCBldmFsdWF0aW9uIG9mIElOLWxp c3QgcXVlcmllcworICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBLLXdheSBtZXJnZSBz Y2FuIGZvciBCLXRyZWUgaW5kZXhlcywgb3B0aW1pemVkCisgKiBmb3IgcXVlcmllcyBvZiB0aGUg Zm9ybToKKyAqICAgV0hFUkUgcHJlZml4IElOICh2MSwgdjIsIC4uLiwgdkspIEFORCBzdWZmaXgg Pj0gYiBPUkRFUiBCWSBzdWZmaXggTElNSVQgTgorICoKKyAqIFRoZSBhbGdvcml0aG0gbWFpbnRh aW5zIGEgbWluLWhlYXAgb2YgY3Vyc29ycywgb25lIHBlciBwcmVmaXggdmFsdWUuCisgKiBFYWNo IGN1cnNvciB0cmFja3MgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5kZXggZm9yIHRoYXQgcHJl Zml4LgorICogVHVwbGVzIGFyZSByZXR1cm5lZCBpbiBzdWZmaXggb3JkZXIgYnkgcmVwZWF0ZWRs eSBleHRyYWN0aW5nIHRoZQorICogbWluaW11bSBmcm9tIHRoZSBoZWFwLgorICoKKyAqIFRhcmdl dCBiZWhhdmlvcjogQWNjZXNzIGF0IG1vc3QgTiArIEsgLSAxIGluZGV4IHR1cGxlcyBmb3IgTElN SVQgTi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRtZXJnZXNjYW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKKyNpbmNs dWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCisvKiBGb3J3YXJk IGRlY2xhcmF0aW9ucyBvZiBzdGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CWJ0X21lcmdl X2hlYXBfY21wKGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmEsCisJCQkJCQkJICBjb25zdCBwYWly aW5naGVhcF9ub2RlICpiLAorCQkJCQkJCSAgdm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIGJ0X21l cmdlX2N1cnNvcl9pbml0KEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAorCQkJCQkJCQkgSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgQlRNZXJnZUN1cnNvciAqY3Vyc29yLAorCQkJCQkJCQkg RGF0dW0gcHJlZml4X3ZhbHVlLAorCQkJCQkJCQkgYm9vbCBwcmVmaXhfaXNudWxsKTsKK3N0YXRp YyBib29sIGJ0X21lcmdlX2N1cnNvcl9hZHZhbmNlKEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAor CQkJCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJQlRNZXJnZUN1cnNvciAqY3Vy c29yKTsKK3N0YXRpYyBEYXR1bSBidF9tZXJnZV9leHRyYWN0X3NvcnRrZXkoQlRNZXJnZVNjYW5T dGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgIEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAg QlRNZXJnZUN1cnNvciAqY3Vyc29yLAorCQkJCQkJCQkJICBib29sICppc251bGwpOworCisKKy8q CisgKiBidF9tZXJnZV9oZWFwX2NtcAorICoJICBDb21wYXJlIHR3byBjdXJzb3JzIGJ5IHRoZWly IGN1cnJlbnQgc29ydCBrZXkgKHN1ZmZpeCB2YWx1ZSkuCisgKgorICogV2hlbiBzb3J0IGtleXMg YXJlIGVxdWFsLCB1c2VzIHByZWZpeCB2YWx1ZSBhcyB0aWVicmVha2VyIGZvcgorICogZGV0ZXJt aW5pc3RpYyBvcmRlcmluZyAoT1JERVIgQlkgc3VmZml4LCBwcmVmaXgpLgorICoKKyAqIFJldHVy bnMgcG9zaXRpdmUgaWYgYSA+IGIgKHBhaXJpbmdoZWFwIGlzIGEgbWF4LWhlYXAsIHdlIHdhbnQg bWluLWhlYXAKKyAqIGJlaGF2aW9yIHNvIHdlIGludmVydCB0aGUgY29tcGFyaXNvbikuCisgKi8K K3N0YXRpYyBpbnQKK2J0X21lcmdlX2hlYXBfY21wKGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmEs CisJCQkJICBjb25zdCBwYWlyaW5naGVhcF9ub2RlICpiLAorCQkJCSAgdm9pZCAqYXJnKQorewor CUJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlID0gKEJUTWVyZ2VTY2FuU3RhdGUgKikgYXJnOworCUJU TWVyZ2VDdXJzb3IgKmN1cnNvcl9hID0gcGFpcmluZ2hlYXBfY29udGFpbmVyKEJUTWVyZ2VDdXJz b3IsIHBoX25vZGUsCisJCQkJCQkJCQkJCQkJKHBhaXJpbmdoZWFwX25vZGUgKikgYSk7CisJQlRN ZXJnZUN1cnNvciAqY3Vyc29yX2IgPSBwYWlyaW5naGVhcF9jb250YWluZXIoQlRNZXJnZUN1cnNv ciwgcGhfbm9kZSwKKwkJCQkJCQkJCQkJCQkocGFpcmluZ2hlYXBfbm9kZSAqKSBiKTsKKwlEYXR1 bQkJa2V5X2EgPSBjdXJzb3JfYS0+c29ydF9rZXk7CisJRGF0dW0JCWtleV9iID0gY3Vyc29yX2It PnNvcnRfa2V5OworCWJvb2wJCW51bGxfYSA9IGN1cnNvcl9hLT5zb3J0X2tleV9pc251bGw7CisJ Ym9vbAkJbnVsbF9iID0gY3Vyc29yX2ItPnNvcnRfa2V5X2lzbnVsbDsKKwlpbnQzMgkJY21wOwor CisJLyogSGFuZGxlIE5VTExzIC0gTlVMTHMgc29ydCBsYXN0IChOVUxMUyBMQVNUIGRlZmF1bHQg Zm9yIEFTQykgKi8KKwlpZiAobnVsbF9hICYmIG51bGxfYikKKwkJcmV0dXJuIDA7CisJaWYgKG51 bGxfYSkKKwkJcmV0dXJuIC0xOwkJCQkvKiBhIGlzIE5VTEwsIGNvbWVzIGFmdGVyIGIgKi8KKwlp ZiAobnVsbF9iKQorCQlyZXR1cm4gMTsJCQkJLyogYiBpcyBOVUxMLCBjb21lcyBhZnRlciBhICov CisKKwkvKiBDb21wYXJlIHVzaW5nIHRoZSBzdWZmaXggY29sdW1uJ3MgY29tcGFyaXNvbiBmdW5j dGlvbiAqLworCWNtcCA9IERhdHVtR2V0SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwoJnN0YXRlLT5z dWZmaXhfY21wLAorCQkJCQkJCQkJCSAgc3RhdGUtPnN1ZmZpeF9jb2xsYXRpb24sCisJCQkJCQkJ CQkJICBrZXlfYSwga2V5X2IpKTsKKworCS8qCisJICogVXNlIHByZWZpeCB2YWx1ZSBhcyB0aWVi cmVha2VyIGZvciBkZXRlcm1pbmlzdGljIG9yZGVyaW5nLgorCSAqIFRoaXMgZW5zdXJlcyBPUkRF UiBCWSBzdWZmaXgsIHByZWZpeCBiZWhhdmlvci4KKwkgKi8KKwlpZiAoY21wID09IDApCisJewor CQkvKiBDb21wYXJlIHByZWZpeCB2YWx1ZXMgKGFzc3VtZXMgcGFzcy1ieS12YWx1ZSBpbnQ0IGZv ciBub3cpICovCisJCWludDMyCQlwcmVmaXhfYSA9IERhdHVtR2V0SW50MzIoY3Vyc29yX2EtPnBy ZWZpeF92YWx1ZSk7CisJCWludDMyCQlwcmVmaXhfYiA9IERhdHVtR2V0SW50MzIoY3Vyc29yX2It PnByZWZpeF92YWx1ZSk7CisKKwkJaWYgKHByZWZpeF9hIDwgcHJlZml4X2IpCisJCQljbXAgPSAt MTsKKwkJZWxzZSBpZiAocHJlZml4X2EgPiBwcmVmaXhfYikKKwkJCWNtcCA9IDE7CisJfQorCisJ LyogTmVnYXRlIGZvciBtaW4taGVhcCBiZWhhdmlvciAqLworCXJldHVybiAtY21wOworfQorCisK Ky8qCisgKiBidF9tZXJnZV9pbml0CisgKgkgIEluaXRpYWxpemUgYSBtZXJnZSBzY2FuIHN0YXRl LgorICoKKyAqIENyZWF0ZXMgdGhlIG1lcmdlIHN0YXRlIHdpdGggb25lIGN1cnNvciBwZXIgcHJl Zml4IHZhbHVlLgorICogVGhlIGN1cnNvcnMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZWlyIGZp cnN0IG1hdGNoaW5nIHR1cGxlcworICogd2hlbiBidF9tZXJnZV9nZXRuZXh0IGlzIGZpcnN0IGNh bGxlZC4KKyAqLworQlRNZXJnZVNjYW5TdGF0ZSAqCitidF9tZXJnZV9pbml0KEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCSAgRGF0dW0gKnByZWZpeF92YWx1ZXMsCisJCQkgIGJvb2wgKnByZWZpeF9u dWxscywKKwkJCSAgaW50IG51bV9wcmVmaXhlcywKKwkJCSAgaW50IHByZWZpeF9hdHRubywKKwkJ CSAgaW50IHN1ZmZpeF9hdHRubywKKwkJCSAgT2lkIHN1ZmZpeF9jbXBfb2lkLAorCQkJICBPaWQg c3VmZml4X2NvbGxhdGlvbikKK3sKKwlCVE1lcmdlU2NhblN0YXRlICpzdGF0ZTsKKwlNZW1vcnlD b250ZXh0IG1lcmdlX2NvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRfY29udGV4dDsKKwlpbnQJ CQlpOworCisJLyogQ3JlYXRlIG1lbW9yeSBjb250ZXh0IGZvciBtZXJnZSBzY2FuIGFsbG9jYXRp b25zICovCisJbWVyZ2VfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICJCVE1lcmdlU2NhbiIsCisJCQkJCQkJCQkJICBBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhtZXJnZV9jb250ZXh0KTsKKworCS8qIEFsbG9jYXRlIG1haW4gc3RhdGUgc3RydWN0dXJlICov CisJc3RhdGUgPSBwYWxsb2MwKHNpemVvZihCVE1lcmdlU2NhblN0YXRlKSk7CisJc3RhdGUtPm1l cmdlX2NvbnRleHQgPSBtZXJnZV9jb250ZXh0OworCXN0YXRlLT5udW1fY3Vyc29ycyA9IG51bV9w cmVmaXhlczsKKwlzdGF0ZS0+YWN0aXZlX2N1cnNvcnMgPSAwOworCXN0YXRlLT5wcmVmaXhfYXR0 bm8gPSBwcmVmaXhfYXR0bm87CisJc3RhdGUtPnN1ZmZpeF9hdHRubyA9IHN1ZmZpeF9hdHRubzsK KwlzdGF0ZS0+c3VmZml4X2NvbGxhdGlvbiA9IHN1ZmZpeF9jb2xsYXRpb247CisJc3RhdGUtPmRp cmVjdGlvbiA9IEZvcndhcmRTY2FuRGlyZWN0aW9uOworCXN0YXRlLT5pbml0aWFsaXplZCA9IGZh bHNlOworCXN0YXRlLT50dXBsZXNfYWNjZXNzZWQgPSAwOworCisJLyogU2V0IHVwIHN1ZmZpeCBj b21wYXJpc29uIGZ1bmN0aW9uICovCisJZm1ncl9pbmZvKHN1ZmZpeF9jbXBfb2lkLCAmc3RhdGUt PnN1ZmZpeF9jbXApOworCisJLyogQWxsb2NhdGUgY3Vyc29yIGFycmF5ICovCisJc3RhdGUtPmN1 cnNvcnMgPSBwYWxsb2MwKG51bV9wcmVmaXhlcyAqIHNpemVvZihCVE1lcmdlQ3Vyc29yKSk7CisK KwkvKiBJbml0aWFsaXplIGN1cnNvciBtZXRhZGF0YSAobm90IHBvc2l0aW9uZWQgeWV0KSAqLwor CWZvciAoaSA9IDA7IGkgPCBudW1fcHJlZml4ZXM7IGkrKykKKwl7CisJCUJUTWVyZ2VDdXJzb3Ig KmN1cnNvciA9ICZzdGF0ZS0+Y3Vyc29yc1tpXTsKKworCQljdXJzb3ItPmN1cnNvcl9pZCA9IGk7 CisJCWN1cnNvci0+cHJlZml4X3ZhbHVlID0gZGF0dW1Db3B5KHByZWZpeF92YWx1ZXNbaV0sIHRy dWUsIHNpemVvZihEYXR1bSkpOworCQljdXJzb3ItPnByZWZpeF9pc251bGwgPSBwcmVmaXhfbnVs bHNbaV07CisJCWN1cnNvci0+ZXhoYXVzdGVkID0gcHJlZml4X251bGxzW2ldOwkvKiBOVUxMIHBy ZWZpeCA9IGV4aGF1c3RlZCAqLworCQljdXJzb3ItPnNvcnRfa2V5X2lzbnVsbCA9IHRydWU7CisJ CUJUU2NhblBvc0ludmFsaWRhdGUoY3Vyc29yLT5wb3MpOworCQljdXJzb3ItPnR1cGxlcyA9IE5V TEw7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgbWVyZ2UgaGVhcCAqLworCXN0YXRlLT5tZXJn ZV9oZWFwID0gcGFpcmluZ2hlYXBfYWxsb2NhdGUoYnRfbWVyZ2VfaGVhcF9jbXAsIHN0YXRlKTsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRfY29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7 Cit9CisKKworLyoKKyAqIGJ0X21lcmdlX2dldG5leHQKKyAqCSAgR2V0IHRoZSBuZXh0IHR1cGxl IGZyb20gdGhlIG1lcmdlIHNjYW4uCisgKgorICogUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgd2Fz IGZvdW5kLCBmYWxzZSBpZiBzY2FuIGlzIGV4aGF1c3RlZC4KKyAqIFRoZSB0dXBsZSdzIFRJRCBp cyBzdG9yZWQgaW4gc2Nhbi0+eHNfaGVhcHRpZC4KKyAqLworYm9vbAorYnRfbWVyZ2VfZ2V0bmV4 dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVE1lcmdlU2NhblN0YXRlICpz dGF0ZSA9IHNvLT5tZXJnZVN0YXRlOworCUJUTWVyZ2VDdXJzb3IgKmN1cnNvcjsKKwlwYWlyaW5n aGVhcF9ub2RlICpub2RlOworCWludAkJCWk7CisKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0 dXJuIGZhbHNlOworCisJLyogSW5pdGlhbGl6ZSBjdXJzb3JzIG9uIGZpcnN0IGNhbGwgKi8KKwlp ZiAoIXN0YXRlLT5pbml0aWFsaXplZCkKKwl7CisJCXN0YXRlLT5pbml0aWFsaXplZCA9IHRydWU7 CisJCXN0YXRlLT5kaXJlY3Rpb24gPSBkaXI7CisKKwkJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5u dW1fY3Vyc29yczsgaSsrKQorCQl7CisJCQlCVE1lcmdlQ3Vyc29yICpjID0gJnN0YXRlLT5jdXJz b3JzW2ldOworCisJCQlpZiAoIWMtPmV4aGF1c3RlZCAmJgorCQkJCWJ0X21lcmdlX2N1cnNvcl9p bml0KHN0YXRlLCBzY2FuLCBjLAorCQkJCQkJCQkJIGMtPnByZWZpeF92YWx1ZSwgYy0+cHJlZml4 X2lzbnVsbCkpCisJCQl7CisJCQkJLyogQ3Vyc29yIGhhcyBhdCBsZWFzdCBvbmUgdHVwbGUsIGFk ZCB0byBoZWFwICovCisJCQkJcGFpcmluZ2hlYXBfYWRkKHN0YXRlLT5tZXJnZV9oZWFwLCAmYy0+ cGhfbm9kZSk7CisJCQkJc3RhdGUtPmFjdGl2ZV9jdXJzb3JzKys7CisJCQl9CisJCX0KKwl9CisK KwkvKiBHZXQgdGhlIGN1cnNvciB3aXRoIHRoZSBzbWFsbGVzdCBzdWZmaXggdmFsdWUgKi8KKwlp ZiAocGFpcmluZ2hlYXBfaXNfZW1wdHkoc3RhdGUtPm1lcmdlX2hlYXApKQorCQlyZXR1cm4gZmFs c2U7CisKKwlub2RlID0gcGFpcmluZ2hlYXBfcmVtb3ZlX2ZpcnN0KHN0YXRlLT5tZXJnZV9oZWFw KTsKKwljdXJzb3IgPSBwYWlyaW5naGVhcF9jb250YWluZXIoQlRNZXJnZUN1cnNvciwgcGhfbm9k ZSwgbm9kZSk7CisKKwkvKiBTZXQgdXAgdGhlIGhlYXAgVElEIGZyb20gdGhlIGN1cnJlbnQgY3Vy c29yIHBvc2l0aW9uICovCisJQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoY3Vyc29yLT5wb3MpKTsK KwlzY2FuLT54c19oZWFwdGlkID0gY3Vyc29yLT5wb3MuaXRlbXNbY3Vyc29yLT5wb3MuaXRlbUlu ZGV4XS5oZWFwVGlkOworCisJLyogQWR2YW5jZSBjdXJzb3IgdG8gbmV4dCB0dXBsZSAqLworCWlm IChidF9tZXJnZV9jdXJzb3JfYWR2YW5jZShzdGF0ZSwgc2NhbiwgY3Vyc29yKSkKKwl7CisJCS8q IEN1cnNvciBzdGlsbCBoYXMgdHVwbGVzLCByZS1hZGQgdG8gaGVhcCAqLworCQlwYWlyaW5naGVh cF9hZGQoc3RhdGUtPm1lcmdlX2hlYXAsICZjdXJzb3ItPnBoX25vZGUpOworCX0KKwllbHNlCisJ eworCQkvKiBDdXJzb3IgZXhoYXVzdGVkICovCisJCXN0YXRlLT5hY3RpdmVfY3Vyc29ycy0tOwor CX0KKworCXJldHVybiB0cnVlOworfQorCisKKy8qCisgKiBidF9tZXJnZV9lbmQKKyAqCSAgQ2xl YW4gdXAgbWVyZ2Ugc2NhbiBzdGF0ZS4KKyAqLwordm9pZAorYnRfbWVyZ2VfZW5kKEJUTWVyZ2VT Y2FuU3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkv KiBGcmVlIHRoZSBtZW1vcnkgY29udGV4dCwgd2hpY2ggZnJlZXMgYWxsIGFsbG9jYXRpb25zICov CisJTWVtb3J5Q29udGV4dERlbGV0ZShzdGF0ZS0+bWVyZ2VfY29udGV4dCk7Cit9CisKKworLyoK KyAqIGJ0X21lcmdlX2N1cnNvcl9pbml0CisgKgkgIEluaXRpYWxpemUgYSBjdXJzb3IgYW5kIHBv c2l0aW9uIGl0IGF0IHRoZSBmaXJzdCBtYXRjaGluZyB0dXBsZS4KKyAqCisgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIGN1cnNvciBmb3VuZCBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgdHVwbGUuCisgKi8K K3N0YXRpYyBib29sCitidF9tZXJnZV9jdXJzb3JfaW5pdChCVE1lcmdlU2NhblN0YXRlICpzdGF0 ZSwKKwkJCQkJIEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJIEJUTWVyZ2VDdXJzb3IgKmN1cnNv ciwKKwkJCQkJIERhdHVtIHByZWZpeF92YWx1ZSwKKwkJCQkJIGJvb2wgcHJlZml4X2lzbnVsbCkK K3sKKwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJYm9v bAkJZm91bmQ7CisKKwlpZiAocHJlZml4X2lzbnVsbCkKKwl7CisJCWN1cnNvci0+ZXhoYXVzdGVk ID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogTW9kaWZ5IHRoZSBzY2Fu IGtleSB0byB1c2UgdGhpcyBjdXJzb3IncyBwcmVmaXggdmFsdWUuCisJICogV2UgcmV1c2UgdGhl IHNjYW4ncyBleGlzdGluZyBrZXkgaW5mcmFzdHJ1Y3R1cmUuCisJICovCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBzby0+bnVtYmVyT2ZLZXlzOyBpKyspCisJeworCQlpZiAoc28tPmtleURhdGFbaV0u c2tfYXR0bm8gPT0gc3RhdGUtPnByZWZpeF9hdHRubykKKwkJeworCQkJc28tPmtleURhdGFbaV0u c2tfYXJndW1lbnQgPSBwcmVmaXhfdmFsdWU7CisJCQlzby0+a2V5RGF0YVtpXS5za19mbGFncyAm PSB+KFNLX1NFQVJDSEFSUkFZKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSW52YWxpZGF0 ZSBjdXJyZW50IHBvc2l0aW9uIHRvIGZvcmNlIF9idF9maXJzdCAqLworCUJUU2NhblBvc0ludmFs aWRhdGUoc28tPmN1cnJQb3MpOworCisJLyogRGlzYWJsZSBhcnJheSBrZXkgaGFuZGxpbmcgZm9y IHRoaXMgY3Vyc29yJ3Mgc2NhbiAqLworCXNvLT5udW1BcnJheUtleXMgPSAwOworCisJLyogUG9z aXRpb24gYXQgZmlyc3QgbWF0Y2hpbmcgdHVwbGUgKi8KKwlmb3VuZCA9IF9idF9maXJzdChzY2Fu LCBzdGF0ZS0+ZGlyZWN0aW9uKTsKKworCWlmIChmb3VuZCkKKwl7CisJCS8qIENvcHkgcG9zaXRp b24gdG8gY3Vyc29yICovCisJCW1lbWNweSgmY3Vyc29yLT5wb3MsICZzby0+Y3VyclBvcywgc2l6 ZW9mKEJUU2NhblBvc0RhdGEpKTsKKworCQkvKiBFeHRyYWN0IHRoZSBzb3J0IGtleSBmb3IgaGVh cCBvcmRlcmluZyAqLworCQljdXJzb3ItPnNvcnRfa2V5ID0gYnRfbWVyZ2VfZXh0cmFjdF9zb3J0 a2V5KHN0YXRlLCBzY2FuLCBjdXJzb3IsCisJCQkJCQkJCQkJCQkJJmN1cnNvci0+c29ydF9rZXlf aXNudWxsKTsKKwkJY3Vyc29yLT5leGhhdXN0ZWQgPSBmYWxzZTsKKworCQkvKiBDb3VudCB0aGlz IGFzIGEgdHVwbGUgYWNjZXNzICovCisJCXN0YXRlLT50dXBsZXNfYWNjZXNzZWQrKzsKKworCQkv KiBJbnZhbGlkYXRlIG1haW4gc2NhbiBwb3NpdGlvbiAqLworCQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKKwl9CisJZWxzZQorCXsKKwkJY3Vyc29yLT5leGhhdXN0ZWQgPSB0cnVl OworCX0KKworCXJldHVybiBmb3VuZDsKK30KKworCisvKgorICogYnRfbWVyZ2VfY3Vyc29yX2Fk dmFuY2UKKyAqCSAgQWR2YW5jZSBhIGN1cnNvciB0byBpdHMgbmV4dCB0dXBsZS4KKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIGN1cnNvciBub3cgcG9pbnRzIHRvIGEgdmFsaWQgdHVwbGUsIGZh bHNlIGlmIGV4aGF1c3RlZC4KKyAqLworc3RhdGljIGJvb2wKK2J0X21lcmdlX2N1cnNvcl9hZHZh bmNlKEJUTWVyZ2VTY2FuU3RhdGUgKnN0YXRlLAorCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJQlRNZXJnZUN1cnNvciAqY3Vyc29yKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlib29sCQlmb3VuZCA9IGZhbHNlOworCisJaWYgKGN1 cnNvci0+ZXhoYXVzdGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUcnkgdG8gbW92ZSB0byBu ZXh0IHR1cGxlIHdpdGhpbiBjdXJyZW50IHBhZ2UncyBpdGVtcyBhcnJheSAqLworCWlmIChzdGF0 ZS0+ZGlyZWN0aW9uID09IEZvcndhcmRTY2FuRGlyZWN0aW9uKQorCXsKKwkJaWYgKGN1cnNvci0+ cG9zLml0ZW1JbmRleCA8IGN1cnNvci0+cG9zLmxhc3RJdGVtKQorCQl7CisJCQljdXJzb3ItPnBv cy5pdGVtSW5kZXgrKzsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfQorCX0KKwllbHNlCisJeworCQlp ZiAoY3Vyc29yLT5wb3MuaXRlbUluZGV4ID4gY3Vyc29yLT5wb3MuZmlyc3RJdGVtKQorCQl7CisJ CQljdXJzb3ItPnBvcy5pdGVtSW5kZXgtLTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfQorCX0KKwor CWlmICghZm91bmQpCisJeworCQkvKgorCQkgKiBDdXJyZW50IHBhZ2UgZXhoYXVzdGVkLiBVc2Ug X2J0X25leHQgdG8gZ2V0IHRoZSBuZXh0IHBhZ2UuCisJCSAqIFdlIHN3YXAgb3VyIGN1cnNvcidz IHBvc2l0aW9uIGludG8gdGhlIHNjYW4ncyBjdXJyUG9zLAorCQkgKiBjYWxsIF9idF9uZXh0LCB0 aGVuIHN3YXAgYmFjay4KKwkJICovCisJCUJUU2NhblBvc0RhdGEgc2F2ZV9wb3M7CisKKwkJbWVt Y3B5KCZzYXZlX3BvcywgJnNvLT5jdXJyUG9zLCBzaXplb2YoQlRTY2FuUG9zRGF0YSkpOworCQlt ZW1jcHkoJnNvLT5jdXJyUG9zLCAmY3Vyc29yLT5wb3MsIHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7 CisKKwkJZm91bmQgPSBfYnRfbmV4dChzY2FuLCBzdGF0ZS0+ZGlyZWN0aW9uKTsKKworCQlpZiAo Zm91bmQpCisJCQltZW1jcHkoJmN1cnNvci0+cG9zLCAmc28tPmN1cnJQb3MsIHNpemVvZihCVFNj YW5Qb3NEYXRhKSk7CisKKwkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNhdmVfcG9zLCBzaXplb2Yo QlRTY2FuUG9zRGF0YSkpOworCX0KKworCWlmIChmb3VuZCkKKwl7CisJCS8qIEV4dHJhY3QgbmV3 IHNvcnQga2V5ICovCisJCWN1cnNvci0+c29ydF9rZXkgPSBidF9tZXJnZV9leHRyYWN0X3NvcnRr ZXkoc3RhdGUsIHNjYW4sIGN1cnNvciwKKwkJCQkJCQkJCQkJCQkmY3Vyc29yLT5zb3J0X2tleV9p c251bGwpOworCQlzdGF0ZS0+dHVwbGVzX2FjY2Vzc2VkKys7CisJfQorCWVsc2UKKwl7CisJCWN1 cnNvci0+ZXhoYXVzdGVkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKworLyoK KyAqIGJ0X21lcmdlX2V4dHJhY3Rfc29ydGtleQorICoJICBFeHRyYWN0IHRoZSBzb3J0IGtleSAo c3VmZml4IGNvbHVtbiB2YWx1ZSkgZnJvbSB0aGUgY3VycmVudCB0dXBsZS4KKyAqLworc3RhdGlj IERhdHVtCitidF9tZXJnZV9leHRyYWN0X3NvcnRrZXkoQlRNZXJnZVNjYW5TdGF0ZSAqc3RhdGUs CisJCQkJCQkgSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJIEJUTWVyZ2VDdXJzb3IgKmN1cnNv ciwKKwkJCQkJCSBib29sICppc251bGwpCit7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKKwlCdWZmZXIJCWJ1ZjsKKwlQYWdlCQlwYWdlOworCU9mZnNldE51bWJlciBvZmZu dW07CisJSXRlbUlkCQlpdGVtaWQ7CisJSW5kZXhUdXBsZQlpdHVwOworCVR1cGxlRGVzYwl0dXBk ZXNjOworCURhdHVtCQlyZXN1bHQ7CisKKwlpZiAoY3Vyc29yLT5wb3MuY3VyclBhZ2UgPT0gSW52 YWxpZEJsb2NrTnVtYmVyKQorCXsKKwkJKmlzbnVsbCA9IHRydWU7CisJCXJldHVybiAoRGF0dW0p IDA7CisJfQorCisJLyogUmVhZCB0aGUgcGFnZSAqLworCWJ1ZiA9IFJlYWRCdWZmZXIocmVsLCBj dXJzb3ItPnBvcy5jdXJyUGFnZSk7CisJTG9ja0J1ZmZlcihidWYsIEJUX1JFQUQpOworCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisKKwlvZmZudW0gPSBjdXJzb3ItPnBvcy5pdGVtc1tjdXJz b3ItPnBvcy5pdGVtSW5kZXhdLmluZGV4T2Zmc2V0OworCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQo cGFnZSwgb2ZmbnVtKTsKKwlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0 ZW1pZCk7CisJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKworCS8qIEV4dHJhY3Qg dGhlIHN1ZmZpeCBjb2x1bW4gdmFsdWUgKi8KKwlyZXN1bHQgPSBpbmRleF9nZXRhdHRyKGl0dXAs IHN0YXRlLT5zdWZmaXhfYXR0bm8sIHR1cGRlc2MsIGlzbnVsbCk7CisKKwkvKiBDb3B5IHBhc3Mt YnktcmVmZXJlbmNlIHZhbHVlcyBiZWZvcmUgcmVsZWFzaW5nIGJ1ZmZlciAqLworCWlmICghKmlz bnVsbCkKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRl c2MsIHN0YXRlLT5zdWZmaXhfYXR0bm8gLSAxKTsKKworCQlpZiAoIWF0dHItPmF0dGJ5dmFsKQor CQkJcmVzdWx0ID0gZGF0dW1Db3B5KHJlc3VsdCwgYXR0ci0+YXR0Ynl2YWwsIGF0dHItPmF0dGxl bik7CisJfQorCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCisJcmV0dXJuIHJlc3VsdDsK K30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9uYnRyZWUuaAppbmRleCA3NzIyNDg1OTY4NS4uMGQ0ZTc0NDA3NjAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmRl eC5oIgorI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdp bmZvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Rz bS5oIgpAQCAtMTA1MCw2ICsxMDUxLDQ5IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZv CiAJU2NhbktleQkJaGlnaF9jb21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQg Ki8KIH0gQlRBcnJheUtleUluZm87CiAKKy8qCisgKiBCVE1lcmdlQ3Vyc29yIC0gdHJhY2tzIHNj YW4gc3RhdGUgZm9yIG9uZSBwcmVmaXggdmFsdWUgaW4gbWVyZ2Ugc2NhbgorICoKKyAqIEVhY2gg Y3Vyc29yIG1haW50YWlucyBpdHMgb3duIHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5kZXggZm9yIGEg c3BlY2lmaWMKKyAqIHByZWZpeCB2YWx1ZS4gQ3Vyc29ycyBhcmUgb3JnYW5pemVkIGluIGEgbWlu LWhlYXAgb3JkZXJlZCBieSB0aGVpcgorICogY3VycmVudCBzdWZmaXgga2V5IHZhbHVlIGZvciBl ZmZpY2llbnQgSy13YXkgbWVyZ2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJUTWVyZ2VDdXJzb3IK K3sKKwlwYWlyaW5naGVhcF9ub2RlIHBoX25vZGU7CS8qIHBhaXJpbmcgaGVhcCBub2RlIGZvciBt ZXJnZSAqLworCWludAkJCWN1cnNvcl9pZDsJCS8qIGluZGV4IGluIG1lcmdlIHN0YXRlJ3MgY3Vy c29ycyBhcnJheSAqLworCURhdHVtCQlwcmVmaXhfdmFsdWU7CS8qIHRoZSBwcmVmaXggdmFsdWUg Zm9yIHRoaXMgc3ViLXNjYW4gKi8KKwlib29sCQlwcmVmaXhfaXNudWxsOwkvKiBpcyBwcmVmaXgg dmFsdWUgTlVMTD8gKi8KKwlEYXR1bQkJc29ydF9rZXk7CQkvKiBjdXJyZW50IHR1cGxlJ3Mgc29y dCBrZXkgKHN1ZmZpeCkgKi8KKwlib29sCQlzb3J0X2tleV9pc251bGw7LyogaXMgc29ydCBrZXkg TlVMTD8gKi8KKwlib29sCQlleGhhdXN0ZWQ7CQkvKiBubyBtb3JlIHR1cGxlcyBmb3IgdGhpcyBw cmVmaXggKi8KKwlCVFNjYW5Qb3NEYXRhIHBvczsJCQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlu ZGV4ICovCisJY2hhcgkgICAqdHVwbGVzOwkJCS8qIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlIChC TENLU1opICovCit9IEJUTWVyZ2VDdXJzb3I7CisKKy8qCisgKiBCVE1lcmdlU2NhblN0YXRlIC0g c3RhdGUgZm9yIEstd2F5IG1lcmdlIHNjYW4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBtYW5hZ2Vz IG11bHRpcGxlIGN1cnNvcnMgZm9yIGEgbWVyZ2Ugc2NhbiwgYWxsb3dpbmcKKyAqIGxhenkgZXZh bHVhdGlvbiBvZiBxdWVyaWVzIGxpa2U6CisgKiAgIFdIRVJFIHByZWZpeCBJTiAodjEsIHYyLCAu Li4sIHZLKSBBTkQgc3VmZml4ID49IGIgT1JERVIgQlkgc3VmZml4IExJTUlUIE4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgQlRNZXJnZVNjYW5TdGF0ZQoreworCWludAkJCW51bV9jdXJzb3JzOwkvKiBu dW1iZXIgb2YgcHJlZml4IHZhbHVlcyAoSykgKi8KKwlpbnQJCQlhY3RpdmVfY3Vyc29yczsJLyog Y3Vyc29ycyBub3QgeWV0IGV4aGF1c3RlZCAqLworCUJUTWVyZ2VDdXJzb3IgKmN1cnNvcnM7CQkv KiBhcnJheSBvZiBjdXJzb3JzICovCisJcGFpcmluZ2hlYXAgKm1lcmdlX2hlYXA7CS8qIG1pbi1o ZWFwIG9yZGVyZWQgYnkgc29ydF9rZXkgKi8KKwlpbnQJCQlwcmVmaXhfYXR0bm87CS8qIGF0dHJp YnV0ZSBudW1iZXIgb2YgcHJlZml4IGNvbHVtbiAoMS1iYXNlZCkgKi8KKwlpbnQJCQlzdWZmaXhf YXR0bm87CS8qIGF0dHJpYnV0ZSBudW1iZXIgb2Ygc3VmZml4IGNvbHVtbiAoMS1iYXNlZCkgKi8K KwlGbWdySW5mbwlzdWZmaXhfY21wOwkJLyogY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc3VmZml4 ICovCisJT2lkCQkJc3VmZml4X2NvbGxhdGlvbjsJLyogY29sbGF0aW9uIGZvciBzdWZmaXggY29t cGFyaXNvbiAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwkvKiBzY2FuIGRpcmVjdGlvbiAq LworCWJvb2wJCWluaXRpYWxpemVkOwkvKiBoYXZlIGN1cnNvcnMgYmVlbiBpbml0aWFsaXplZD8g Ki8KKwlNZW1vcnlDb250ZXh0IG1lcmdlX2NvbnRleHQ7LyogbWVtb3J5IGNvbnRleHQgZm9yIGFs bG9jYXRpb25zICovCisJaW50NjQJCXR1cGxlc19hY2Nlc3NlZDsvKiBjb3VudCBvZiBpbmRleCB0 dXBsZXMgYWNjZXNzZWQgKi8KK30gQlRNZXJnZVNjYW5TdGF0ZTsKKwogdHlwZWRlZiBzdHJ1Y3Qg QlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVw cm9jZXNzX2tleXMoKTogKi8KQEAgLTEwODksNiArMTEzMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBC VFNjYW5PcGFxdWVEYXRhCiAJICovCiAJaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4 LCBvciAtMSBpZiBub3QgdmFsaWQgKi8KIAorCS8qCisJICogTWVyZ2Ugc2NhbiBzdGF0ZSwgaWYg dXNpbmcgbWVyZ2Ugc2NhbiBvcHRpbWl6YXRpb24uCisJICogTlVMTCBpZiBub3QgdXNpbmcgbWVy Z2Ugc2Nhbi4KKwkgKi8KKwlCVE1lcmdlU2NhblN0YXRlICptZXJnZVN0YXRlOworCiAJLyoga2Vl cCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwogCUJUU2NhblBvc0RhdGEg Y3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwogCUJUU2NhblBvc0RhdGEgbWFy a1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55ICovCkBAIC0xMzM0LDQgKzEzODQsMTgg QEAgZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKmJ0YnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsCiAJCQkJCQkJCSBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogZXh0ZXJu IHZvaWQgX2J0X3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAq dG9jKTsKIAorLyoKKyAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRtZXJnZXNjYW4u YworICovCitleHRlcm4gQlRNZXJnZVNjYW5TdGF0ZSAqYnRfbWVyZ2VfaW5pdChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkgICBEYXR1bSAqcHJlZml4X3ZhbHVlcywKKwkJCQkJCQkJCSAg IGJvb2wgKnByZWZpeF9udWxscywKKwkJCQkJCQkJCSAgIGludCBudW1fcHJlZml4ZXMsCisJCQkJ CQkJCQkgICBpbnQgcHJlZml4X2F0dG5vLAorCQkJCQkJCQkJICAgaW50IHN1ZmZpeF9hdHRubywK KwkJCQkJCQkJCSAgIE9pZCBzdWZmaXhfY21wX29pZCwKKwkJCQkJCQkJCSAgIE9pZCBzdWZmaXhf Y29sbGF0aW9uKTsKK2V4dGVybiBib29sIGJ0X21lcmdlX2dldG5leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gdm9pZCBidF9tZXJnZV9lbmQoQlRNZXJn ZVNjYW5TdGF0ZSAqc3RhdGUpOworCiAjZW5kaWYJCQkJCQkJLyogTkJUUkVFX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCmluZGV4IDI2MzRhNTE5OTM1Li5iN2I4MDJiZmRkZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1 aWxkCkBAIC0xOCw2ICsxOCw3IEBAIHN1YmRpcignc3NsX3Bhc3NwaHJhc2VfY2FsbGJhY2snKQog c3ViZGlyKCd0ZXN0X2FpbycpCiBzdWJkaXIoJ3Rlc3RfYmluYXJ5aGVhcCcpCiBzdWJkaXIoJ3Rl c3RfYml0bWFwc2V0JykKK3N1YmRpcigndGVzdF9idHJlZV9tZXJnZScpCiBzdWJkaXIoJ3Rlc3Rf Ymxvb21maWx0ZXInKQogc3ViZGlyKCd0ZXN0X2Nsb2V4ZWMnKQogc3ViZGlyKCd0ZXN0X2NvcHlf Y2FsbGJhY2tzJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJn ZS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTQwNDE2YTJjOTEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvTWFrZWZpbGUK QEAgLTAsMCArMSwyNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvTWFr ZWZpbGUKKworTU9EVUxFX2JpZyA9IHRlc3RfYnRyZWVfbWVyZ2UKK09CSlMgPSBcCisJJChXSU4z MlJFUykgXAorCXRlc3RfYnRyZWVfbWVyZ2UubworCitQR0ZJTEVERVNDID0gInRlc3RfYnRyZWVf bWVyZ2UgLSB0ZXN0IGNvZGUgZm9yIGJ0cmVlIG1lcmdlIHNjYW4iCisKK0VYVEVOU0lPTiA9IHRl c3RfYnRyZWVfbWVyZ2UKK0RBVEEgPSB0ZXN0X2J0cmVlX21lcmdlLS0xLjAuc3FsCisKK1JFR1JF U1MgPSB0ZXN0X2J0cmVlX21lcmdlCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19j b25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBH WFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UKK3Rv cF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFr ZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2Jh bC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJn ZS9leHBlY3RlZC90ZXN0X2J0cmVlX21lcmdlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9i dHJlZV9tZXJnZS9leHBlY3RlZC90ZXN0X2J0cmVlX21lcmdlLm91dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmFmNGQ3OTM3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvZXhwZWN0ZWQvdGVzdF9idHJlZV9tZXJn ZS5vdXQKQEAgLTAsMCArMSwyNDMgQEAKKy0tIFVuaXQgdGVzdHMgZm9yIEItdHJlZSBtZXJnZSBz Y2FuIGltcGxlbWVudGF0aW9uCistLSBUZXN0cyB0aGUgY29yZSBtZXJnZSBzY2FuIGFsZ29yaXRo bSBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBwbGFubmVyCitDUkVBVEUgRVhURU5TSU9OIHRlc3Rf YnRyZWVfbWVyZ2U7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBTZXR1cDogQ3JlYXRlIHRl c3QgdGFibGVzIHdpdGgga25vd24gZGF0YSBkaXN0cmlidXRpb25zCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBUZXN0IHRhYmxlIHdpdGggaW50ZWdlciBwcmVmaXggYW5kIHN1ZmZpeAorQ1JF QVRFIFRBQkxFIG1lcmdlX3Rlc3RfaW50ICgKKyAgICBwcmVmaXhfY29sIGludDQsCisgICAgc3Vm Zml4X2NvbCBpbnQ0CispOworLS0gSW5zZXJ0IGRhdGE6IDEwIHByZWZpeCB2YWx1ZXMsIDEwMCBz dWZmaXggdmFsdWVzIGVhY2ggPSAxMDAwIHJvd3MKK0lOU0VSVCBJTlRPIG1lcmdlX3Rlc3RfaW50 CitTRUxFQ1QgcCwgcworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIEFTIHAsCisgICAgIGdl bmVyYXRlX3NlcmllcygxLCAxMDApIEFTIHM7CitDUkVBVEUgSU5ERVggbWVyZ2VfdGVzdF9pbnRf aWR4IE9OIG1lcmdlX3Rlc3RfaW50IChwcmVmaXhfY29sLCBzdWZmaXhfY29sKTsKK0FOQUxZWkUg bWVyZ2VfdGVzdF9pbnQ7CistLSBUZXN0IHRhYmxlIHdpdGggaW50ZWdlciBwcmVmaXggYW5kIHRp bWVzdGFtcCBzdWZmaXgKK0NSRUFURSBUQUJMRSBtZXJnZV90ZXN0X3RzICgKKyAgICB1c2VyX2lk IGludDQsCisgICAgZXZlbnRfdGltZSB0aW1lc3RhbXAKKyk7CistLSBJbnNlcnQgZGF0YTogNSB1 c2VycywgMTAwIGV2ZW50cyBlYWNoCitJTlNFUlQgSU5UTyBtZXJnZV90ZXN0X3RzCitTRUxFQ1Qg dSwgJzIwMjYtMDEtMDEgMDA6MDA6MDAnOjp0aW1lc3RhbXAgKyAoZSB8fCAnIG1pbnV0ZXMnKTo6 aW50ZXJ2YWwKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIEFTIHUsCisgICAgIGdlbmVyYXRl X3NlcmllcygxLCAxMDApIEFTIGU7CitDUkVBVEUgSU5ERVggbWVyZ2VfdGVzdF90c19pZHggT04g bWVyZ2VfdGVzdF90cyAodXNlcl9pZCwgZXZlbnRfdGltZSk7CitBTkFMWVpFIG1lcmdlX3Rlc3Rf dHM7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDE6IEJhc2ljIGludGVnZXIgbWVy Z2Ugc2NhbgorLS0gUXVlcnk6IFdIRVJFIHByZWZpeCBJTiAoMSwyLDMpIEFORCBzdWZmaXggPj0g NTAgTElNSVQgNQorLS0gSyA9IDMgcHJlZml4IHZhbHVlcywgTElNSVQgPSA1CistLSBFeHBlY3Rl ZCB0dXBsZXMgYWNjZXNzZWQ6IDUgKyAzIC0gMSA9IDcKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K K1NFTEVDVCAnVGVzdCAxOiBCYXNpYyBpbnRlZ2VyIG1lcmdlIHNjYW4nIEFTIHRlc3RfbmFtZTsK KyAgICAgICAgICAgIHRlc3RfbmFtZSAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUZXN0IDE6IEJhc2ljIGludGVnZXIgbWVyZ2Ugc2NhbgorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdl X3Rlc3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9pbnRfaWR4JywKKyAgICBBUlJBWVsxLCAyLCAz XSwKKyAgICA1MCwKKyAgICA1CispOworIHR1cGxlc19yZXR1cm5lZCB8IHR1cGxlc19hY2Nlc3Nl ZCB8IG1heGltdW1fcmVxdWlyZWRfZmV0Y2hlcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICA1IHwg ICAgICAgICAgICAgICA4IHwgICAgICAgICAgICAgICAgICAgICAgICA3CisoMSByb3cpCisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgMjogTW9yZSBwcmVmaXggdmFsdWVzCistLSBR dWVyeTogV0hFUkUgcHJlZml4IElOICgxLDIsMyw0LDUpIEFORCBzdWZmaXggPj0gODAgTElNSVQg MworLS0gSyA9IDUgcHJlZml4IHZhbHVlcywgTElNSVQgPSAzCistLSBFeHBlY3RlZCB0dXBsZXMg YWNjZXNzZWQ6IDMgKyA1IC0gMSA9IDcKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFTEVDVCAn VGVzdCAyOiBNb3JlIHByZWZpeCB2YWx1ZXMnIEFTIHRlc3RfbmFtZTsKKyAgICAgICAgIHRlc3Rf bmFtZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUZXN0IDI6IE1v cmUgcHJlZml4IHZhbHVlcworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVy Z2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdlX3Rlc3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9pbnRf aWR4JywKKyAgICBBUlJBWVsxLCAyLCAzLCA0LCA1XSwKKyAgICA4MCwKKyAgICAzCispOworIHR1 cGxlc19yZXR1cm5lZCB8IHR1cGxlc19hY2Nlc3NlZCB8IG1heGltdW1fcmVxdWlyZWRfZmV0Y2hl cyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAzIHwgICAgICAgICAgICAgICA4IHwgICAgICAgICAg ICAgICAgICAgICAgICA3CisoMSByb3cpCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRl c3QgMzogU2luZ2xlIHByZWZpeCB2YWx1ZSAoZGVnZW5lcmF0ZXMgdG8gcmVndWxhciBzY2FuKQor LS0gSyA9IDEsIExJTUlUID0gNQorLS0gRXhwZWN0ZWQgdHVwbGVzIGFjY2Vzc2VkOiA1ICsgMSAt IDEgPSA1CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUxFQ1QgJ1Rlc3QgMzogU2luZ2xlIHBy ZWZpeCB2YWx1ZScgQVMgdGVzdF9uYW1lOworICAgICAgICAgIHRlc3RfbmFtZSAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGVzdCAzOiBTaW5nbGUgcHJlZml4IHZh bHVlCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX2ludCgK KyAgICAnbWVyZ2VfdGVzdF9pbnQnLAorICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAgIEFS UkFZWzFdLAorICAgIDUwLAorICAgIDUKKyk7CisgdHVwbGVzX3JldHVybmVkIHwgdHVwbGVzX2Fj Y2Vzc2VkIHwgbWF4aW11bV9yZXF1aXJlZF9mZXRjaGVzIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg IDUgfCAgICAgICAgICAgICAgIDYgfCAgICAgICAgICAgICAgICAgICAgICAgIDUKKygxIHJvdykK KworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCA0OiBMYXJnZSBMSU1JVCAobW9yZSB0 aGFuIG1hdGNoaW5nIHJvd3MpCistLSBLID0gMywgcHJlZml4IHZhbHVlcyB0aGF0IGhhdmUgNTEg cm93cyBlYWNoIChzdWZmaXggPj0gNTApCistLSBMSU1JVCA9IDIwMCBidXQgb25seSAxNTMgcm93 cyBleGlzdAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VMRUNUICdUZXN0IDQ6IExhcmdlIExJ TUlUJyBBUyB0ZXN0X25hbWU7CisgICAgICB0ZXN0X25hbWUgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFRlc3QgNDogTGFyZ2UgTElNSVQKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0 ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KAorICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAgJ21l cmdlX3Rlc3RfaW50X2lkeCcsCisgICAgQVJSQVlbMSwgMiwgM10sCisgICAgNTAsCisgICAgMjAw CispOworIHR1cGxlc19yZXR1cm5lZCB8IHR1cGxlc19hY2Nlc3NlZCB8IG1heGltdW1fcmVxdWly ZWRfZmV0Y2hlcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgMTUzIHwgICAgICAgICAgICAgMTUzIHwg ICAgICAgICAgICAgICAgICAgICAgMTUzCisoMSByb3cpCisKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tIFRlc3QgNTogTm9uLWNvbnRpZ3VvdXMgcHJlZml4IHZhbHVlcworLS0gUXVlcnk6IFdI RVJFIHByZWZpeCBJTiAoMiw1LDgpIEFORCBzdWZmaXggPj0gNTAgTElNSVQgNQorLS0gVGVzdHMg dGhhdCBtZXJnZSBzY2FuIHdvcmtzIHdpdGggZ2FwcyBpbiBwcmVmaXggdmFsdWVzCistLSBLID0g MyBwcmVmaXggdmFsdWVzIChub24tYWRqYWNlbnQpLCBMSU1JVCA9IDUKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KK1NFTEVDVCAnVGVzdCA1OiBOb24tY29udGlndW91cyBwcmVmaXggdmFsdWVzJyBB UyB0ZXN0X25hbWU7CisgICAgICAgICAgICAgIHRlc3RfbmFtZSAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUZXN0IDU6IE5vbi1jb250aWd1 b3VzIHByZWZpeCB2YWx1ZXMKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21l cmdlX3NjYW5faW50KAorICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAgJ21lcmdlX3Rlc3RfaW50 X2lkeCcsCisgICAgQVJSQVlbMiwgNSwgOF0sCisgICAgNTAsCisgICAgNQorKTsKKyB0dXBsZXNf cmV0dXJuZWQgfCB0dXBsZXNfYWNjZXNzZWQgfCBtYXhpbXVtX3JlcXVpcmVkX2ZldGNoZXMgCist LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgNSB8ICAgICAgICAgICAgICAgOCB8ICAgICAgICAgICAgICAg ICAgICAgICAgNworKDEgcm93KQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDY6 IFRpbWVzdGFtcCBzdWZmaXggY29sdW1uCistLSBRdWVyeTogV0hFUkUgdXNlcl9pZCBJTiAoMSwy LDMpIEFORCBldmVudF90aW1lID49ICcyMDI2LTAxLTAxIDAxOjAwOjAwJyBMSU1JVCA1CistLSBL ID0gMywgTElNSVQgPSA1CistLSBFeHBlY3RlZCB0dXBsZXMgYWNjZXNzZWQ6IDUgKyAzIC0gMSA9 IDcKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFTEVDVCAnVGVzdCA2OiBUaW1lc3RhbXAgc3Vm Zml4JyBBUyB0ZXN0X25hbWU7CisgICAgICAgIHRlc3RfbmFtZSAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBUZXN0IDY6IFRpbWVzdGFtcCBzdWZmaXgKKygxIHJvdykKKwor U0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5fdHMoCisgICAgJ21lcmdlX3Rlc3Rf dHMnLAorICAgICdtZXJnZV90ZXN0X3RzX2lkeCcsCisgICAgQVJSQVlbMSwgMiwgM10sCisgICAg JzIwMjYtMDEtMDEgMDE6MDA6MDAnOjp0aW1lc3RhbXAsCisgICAgNQorKTsKKyB0dXBsZXNfcmV0 dXJuZWQgfCB0dXBsZXNfYWNjZXNzZWQgfCBtYXhpbXVtX3JlcXVpcmVkX2ZldGNoZXMgCistLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICAgICAgICAgICAgNSB8ICAgICAgICAgICAgICAgOCB8ICAgICAgICAgICAgICAgICAg ICAgICAgNworKDEgcm93KQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDc6IEFs bCB1c2VycyB3aXRoIHRpbWVzdGFtcAorLS0gSyA9IDUsIExJTUlUID0gMTAKKy0tIEV4cGVjdGVk IHR1cGxlcyBhY2Nlc3NlZDogMTAgKyA1IC0gMSA9IDE0CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitTRUxFQ1QgJ1Rlc3QgNzogQWxsIHVzZXJzIHRpbWVzdGFtcCcgQVMgdGVzdF9uYW1lOworICAg ICAgICAgIHRlc3RfbmFtZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgVGVzdCA3OiBBbGwgdXNlcnMgdGltZXN0YW1wCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g dGVzdF9idHJlZV9tZXJnZV9zY2FuX3RzKAorICAgICdtZXJnZV90ZXN0X3RzJywKKyAgICAnbWVy Z2VfdGVzdF90c19pZHgnLAorICAgIEFSUkFZWzEsIDIsIDMsIDQsIDVdLAorICAgICcyMDI2LTAx LTAxIDAwOjMwOjAwJzo6dGltZXN0YW1wLAorICAgIDEwCispOworIHR1cGxlc19yZXR1cm5lZCB8 IHR1cGxlc19hY2Nlc3NlZCB8IG1heGltdW1fcmVxdWlyZWRfZmV0Y2hlcyAKKy0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg ICAgICAgICAgIDEwIHwgICAgICAgICAgICAgIDE1IHwgICAgICAgICAgICAgICAgICAgICAgIDE0 CisoMSByb3cpCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgODogQ29ycmVjdG5l c3MgdmVyaWZpY2F0aW9uCistLSBWZXJpZnkgbWVyZ2Ugc2NhbiByZXR1cm5zIHJvd3MgaW4gZXhh Y3QgT1JERVIgQlkgc3VmZml4X2NvbCwgcHJlZml4X2NvbCBvcmRlcgorLS0gVXNpbmcgV0lUSCBP UkRJTkFMSVRZIHRvIGNvbXBhcmUgcm93IHBvc2l0aW9ucworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorU0VMRUNUICdUZXN0IDg6IENvcnJlY3RuZXNzIHZlcmlmaWNhdGlvbicgQVMgdGVzdF9uYW1l OworICAgICAgICAgICAgdGVzdF9uYW1lICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFRlc3QgODogQ29ycmVjdG5lc3MgdmVyaWZpY2F0aW9uCisoMSBy b3cpCisKKy0tIENvbXBhcmUgbWVyZ2Ugc2NhbiB2cyByZWd1bGFyIHF1ZXJ5IHdpdGggcm93IHBv c2l0aW9ucyAoc2hvdWxkIGJlIGVtcHR5KQorV0lUSCBtZXJnZV9yZXN1bHQgQVMgKAorICAgIFNF TEVDVCByb3dfbnVtYmVyKCkgT1ZFUiAoKSBBUyBybiwgcHJlZml4X2NvbCwgc3VmZml4X2NvbAor ICAgIEZST00gdGVzdF9idHJlZV9tZXJnZV9mZXRjaF9pbnQoCisgICAgICAgICdtZXJnZV90ZXN0 X2ludCcsCisgICAgICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAgICAgICBBUlJBWVsxLCAy LCAzXSwKKyAgICAgICAgOTAsCisgICAgICAgIDEwCisgICAgKQorKSwKK3JlZ3VsYXJfcmVzdWx0 IEFTICgKKyAgICBTRUxFQ1Qgcm93X251bWJlcigpIE9WRVIgKCkgQVMgcm4sIHByZWZpeF9jb2ws IHN1ZmZpeF9jb2wKKyAgICBGUk9NICgKKyAgICAgICAgU0VMRUNUIHByZWZpeF9jb2wsIHN1ZmZp eF9jb2wKKyAgICAgICAgRlJPTSBtZXJnZV90ZXN0X2ludAorICAgICAgICBXSEVSRSBwcmVmaXhf Y29sIElOICgxLCAyLCAzKSBBTkQgc3VmZml4X2NvbCA+PSA5MAorICAgICAgICBPUkRFUiBCWSBz dWZmaXhfY29sLCBwcmVmaXhfY29sCisgICAgICAgIExJTUlUIDEwCisgICAgKSB0CispCitTRUxF Q1QgJ01JU01BVENIJyBBUyBzdGF0dXMsIG0ucm4sIG0ucHJlZml4X2NvbCwgbS5zdWZmaXhfY29s LAorICAgICAgIHIucHJlZml4X2NvbCBBUyBleHBlY3RlZF9wcmVmaXgsIHIuc3VmZml4X2NvbCBB UyBleHBlY3RlZF9zdWZmaXgKK0ZST00gbWVyZ2VfcmVzdWx0IG0KK0ZVTEwgT1VURVIgSk9JTiBy ZWd1bGFyX3Jlc3VsdCByIE9OIG0ucm4gPSByLnJuCitXSEVSRSBtLnByZWZpeF9jb2wgSVMgRElT VElOQ1QgRlJPTSByLnByZWZpeF9jb2wKKyAgIE9SIG0uc3VmZml4X2NvbCBJUyBESVNUSU5DVCBG Uk9NIHIuc3VmZml4X2NvbDsKKyBzdGF0dXMgfCBybiB8IHByZWZpeF9jb2wgfCBzdWZmaXhfY29s IHwgZXhwZWN0ZWRfcHJlZml4IHwgZXhwZWN0ZWRfc3VmZml4IAorLS0tLS0tLS0rLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t CisoMCByb3dzKQorCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBDbGVhbnVwCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitEUk9QIFRBQkxFIG1lcmdlX3Rlc3RfaW50OworRFJPUCBUQUJMRSBt ZXJnZV90ZXN0X3RzOworRFJPUCBFWFRFTlNJT04gdGVzdF9idHJlZV9tZXJnZTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9tZXNvbi5idWlsZCBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjY1ZDZjZjQ0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwz MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisKK3Rlc3RfYnRyZWVfbWVyZ2Vfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9idHJl ZV9tZXJnZS5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfYnRy ZWVfbWVyZ2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJh X2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfYnRyZWVfbWVyZ2UnLAorICAgICctLUZJTEVE RVNDJywgJ3Rlc3RfYnRyZWVfbWVyZ2UgLSB0ZXN0IGNvZGUgZm9yIGJ0cmVlIG1lcmdlIHNjYW4n LF0pCitlbmRpZgorCit0ZXN0X2J0cmVlX21lcmdlID0gc2hhcmVkX21vZHVsZSgndGVzdF9idHJl ZV9tZXJnZScsCisgIHRlc3RfYnRyZWVfbWVyZ2Vfc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0 X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9idHJlZV9tZXJnZQorCit0 ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rlc3RfYnRyZWVfbWVyZ2UuY29udHJvbCcs CisgICd0ZXN0X2J0cmVlX21lcmdlLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFt ZSc6ICd0ZXN0X2J0cmVlX21lcmdlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGly KCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogewor ICAgICdzcWwnOiBbCisgICAgICAndGVzdF9idHJlZV9tZXJnZScsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS9zcWwvdGVzdF9i dHJlZV9tZXJnZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2Uvc3FsL3Rl c3RfYnRyZWVfbWVyZ2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41ODI4YjM0M2IzNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9i dHJlZV9tZXJnZS9zcWwvdGVzdF9idHJlZV9tZXJnZS5zcWwKQEAgLTAsMCArMSwyMDcgQEAKKy0t IFVuaXQgdGVzdHMgZm9yIEItdHJlZSBtZXJnZSBzY2FuIGltcGxlbWVudGF0aW9uCistLSBUZXN0 cyB0aGUgY29yZSBtZXJnZSBzY2FuIGFsZ29yaXRobSBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBw bGFubmVyCisKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9idHJlZV9tZXJnZTsKKworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0gU2V0dXA6IENyZWF0ZSB0ZXN0IHRhYmxlcyB3aXRoIGtub3duIGRh dGEgZGlzdHJpYnV0aW9ucworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBUZXN0IHRhYmxl IHdpdGggaW50ZWdlciBwcmVmaXggYW5kIHN1ZmZpeAorQ1JFQVRFIFRBQkxFIG1lcmdlX3Rlc3Rf aW50ICgKKyAgICBwcmVmaXhfY29sIGludDQsCisgICAgc3VmZml4X2NvbCBpbnQ0CispOworCist LSBJbnNlcnQgZGF0YTogMTAgcHJlZml4IHZhbHVlcywgMTAwIHN1ZmZpeCB2YWx1ZXMgZWFjaCA9 IDEwMDAgcm93cworSU5TRVJUIElOVE8gbWVyZ2VfdGVzdF9pbnQKK1NFTEVDVCBwLCBzCitGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMCkgQVMgcCwKKyAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MCkgQVMgczsKKworQ1JFQVRFIElOREVYIG1lcmdlX3Rlc3RfaW50X2lkeCBPTiBtZXJnZV90ZXN0 X2ludCAocHJlZml4X2NvbCwgc3VmZml4X2NvbCk7CitBTkFMWVpFIG1lcmdlX3Rlc3RfaW50Owor CistLSBUZXN0IHRhYmxlIHdpdGggaW50ZWdlciBwcmVmaXggYW5kIHRpbWVzdGFtcCBzdWZmaXgK K0NSRUFURSBUQUJMRSBtZXJnZV90ZXN0X3RzICgKKyAgICB1c2VyX2lkIGludDQsCisgICAgZXZl bnRfdGltZSB0aW1lc3RhbXAKKyk7CisKKy0tIEluc2VydCBkYXRhOiA1IHVzZXJzLCAxMDAgZXZl bnRzIGVhY2gKK0lOU0VSVCBJTlRPIG1lcmdlX3Rlc3RfdHMKK1NFTEVDVCB1LCAnMjAyNi0wMS0w MSAwMDowMDowMCc6OnRpbWVzdGFtcCArIChlIHx8ICcgbWludXRlcycpOjppbnRlcnZhbAorRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgQVMgdSwKKyAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MCkgQVMgZTsKKworQ1JFQVRFIElOREVYIG1lcmdlX3Rlc3RfdHNfaWR4IE9OIG1lcmdlX3Rlc3Rf dHMgKHVzZXJfaWQsIGV2ZW50X3RpbWUpOworQU5BTFlaRSBtZXJnZV90ZXN0X3RzOworCisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgMTogQmFzaWMgaW50ZWdlciBtZXJnZSBzY2Fu CistLSBRdWVyeTogV0hFUkUgcHJlZml4IElOICgxLDIsMykgQU5EIHN1ZmZpeCA+PSA1MCBMSU1J VCA1CistLSBLID0gMyBwcmVmaXggdmFsdWVzLCBMSU1JVCA9IDUKKy0tIEV4cGVjdGVkIHR1cGxl cyBhY2Nlc3NlZDogNSArIDMgLSAxID0gNworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTRUxF Q1QgJ1Rlc3QgMTogQmFzaWMgaW50ZWdlciBtZXJnZSBzY2FuJyBBUyB0ZXN0X25hbWU7CisKK1NF TEVDVCAqIEZST00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX2ludCgKKyAgICAnbWVyZ2VfdGVzdF9p bnQnLAorICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAgIEFSUkFZWzEsIDIsIDNdLAorICAg IDUwLAorICAgIDUKKyk7CisKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCAyOiBN b3JlIHByZWZpeCB2YWx1ZXMKKy0tIFF1ZXJ5OiBXSEVSRSBwcmVmaXggSU4gKDEsMiwzLDQsNSkg QU5EIHN1ZmZpeCA+PSA4MCBMSU1JVCAzCistLSBLID0gNSBwcmVmaXggdmFsdWVzLCBMSU1JVCA9 IDMKKy0tIEV4cGVjdGVkIHR1cGxlcyBhY2Nlc3NlZDogMyArIDUgLSAxID0gNworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorCitTRUxFQ1QgJ1Rlc3QgMjogTW9yZSBwcmVmaXggdmFsdWVzJyBBUyB0 ZXN0X25hbWU7CisKK1NFTEVDVCAqIEZST00gdGVzdF9idHJlZV9tZXJnZV9zY2FuX2ludCgKKyAg ICAnbWVyZ2VfdGVzdF9pbnQnLAorICAgICdtZXJnZV90ZXN0X2ludF9pZHgnLAorICAgIEFSUkFZ WzEsIDIsIDMsIDQsIDVdLAorICAgIDgwLAorICAgIDMKKyk7CisKKworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gVGVzdCAzOiBTaW5nbGUgcHJlZml4IHZhbHVlIChkZWdlbmVyYXRlcyB0byBy ZWd1bGFyIHNjYW4pCistLSBLID0gMSwgTElNSVQgPSA1CistLSBFeHBlY3RlZCB0dXBsZXMgYWNj ZXNzZWQ6IDUgKyAxIC0gMSA9IDUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU0VMRUNUICdU ZXN0IDM6IFNpbmdsZSBwcmVmaXggdmFsdWUnIEFTIHRlc3RfbmFtZTsKKworU0VMRUNUICogRlJP TSB0ZXN0X2J0cmVlX21lcmdlX3NjYW5faW50KAorICAgICdtZXJnZV90ZXN0X2ludCcsCisgICAg J21lcmdlX3Rlc3RfaW50X2lkeCcsCisgICAgQVJSQVlbMV0sCisgICAgNTAsCisgICAgNQorKTsK KworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IDQ6IExhcmdlIExJTUlUIChtb3Jl IHRoYW4gbWF0Y2hpbmcgcm93cykKKy0tIEsgPSAzLCBwcmVmaXggdmFsdWVzIHRoYXQgaGF2ZSA1 MSByb3dzIGVhY2ggKHN1ZmZpeCA+PSA1MCkKKy0tIExJTUlUID0gMjAwIGJ1dCBvbmx5IDE1MyBy b3dzIGV4aXN0CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NFTEVDVCAnVGVzdCA0OiBMYXJn ZSBMSU1JVCcgQVMgdGVzdF9uYW1lOworCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVyZ2Vf c2Nhbl9pbnQoCisgICAgJ21lcmdlX3Rlc3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9pbnRfaWR4 JywKKyAgICBBUlJBWVsxLCAyLCAzXSwKKyAgICA1MCwKKyAgICAyMDAKKyk7CisKKworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gVGVzdCA1OiBOb24tY29udGlndW91cyBwcmVmaXggdmFsdWVz CistLSBRdWVyeTogV0hFUkUgcHJlZml4IElOICgyLDUsOCkgQU5EIHN1ZmZpeCA+PSA1MCBMSU1J VCA1CistLSBUZXN0cyB0aGF0IG1lcmdlIHNjYW4gd29ya3Mgd2l0aCBnYXBzIGluIHByZWZpeCB2 YWx1ZXMKKy0tIEsgPSAzIHByZWZpeCB2YWx1ZXMgKG5vbi1hZGphY2VudCksIExJTUlUID0gNQor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorCitTRUxFQ1QgJ1Rlc3QgNTogTm9uLWNvbnRpZ3VvdXMg cHJlZml4IHZhbHVlcycgQVMgdGVzdF9uYW1lOworCitTRUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVf bWVyZ2Vfc2Nhbl9pbnQoCisgICAgJ21lcmdlX3Rlc3RfaW50JywKKyAgICAnbWVyZ2VfdGVzdF9p bnRfaWR4JywKKyAgICBBUlJBWVsyLCA1LCA4XSwKKyAgICA1MCwKKyAgICA1CispOworCisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgNjogVGltZXN0YW1wIHN1ZmZpeCBjb2x1bW4K Ky0tIFF1ZXJ5OiBXSEVSRSB1c2VyX2lkIElOICgxLDIsMykgQU5EIGV2ZW50X3RpbWUgPj0gJzIw MjYtMDEtMDEgMDE6MDA6MDAnIExJTUlUIDUKKy0tIEsgPSAzLCBMSU1JVCA9IDUKKy0tIEV4cGVj dGVkIHR1cGxlcyBhY2Nlc3NlZDogNSArIDMgLSAxID0gNworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorCitTRUxFQ1QgJ1Rlc3QgNjogVGltZXN0YW1wIHN1ZmZpeCcgQVMgdGVzdF9uYW1lOworCitT RUxFQ1QgKiBGUk9NIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl90cygKKyAgICAnbWVyZ2VfdGVzdF90 cycsCisgICAgJ21lcmdlX3Rlc3RfdHNfaWR4JywKKyAgICBBUlJBWVsxLCAyLCAzXSwKKyAgICAn MjAyNi0wMS0wMSAwMTowMDowMCc6OnRpbWVzdGFtcCwKKyAgICA1CispOworCisKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIFRlc3QgNzogQWxsIHVzZXJzIHdpdGggdGltZXN0YW1wCistLSBL ID0gNSwgTElNSVQgPSAxMAorLS0gRXhwZWN0ZWQgdHVwbGVzIGFjY2Vzc2VkOiAxMCArIDUgLSAx ID0gMTQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU0VMRUNUICdUZXN0IDc6IEFsbCB1c2Vy cyB0aW1lc3RhbXAnIEFTIHRlc3RfbmFtZTsKKworU0VMRUNUICogRlJPTSB0ZXN0X2J0cmVlX21l cmdlX3NjYW5fdHMoCisgICAgJ21lcmdlX3Rlc3RfdHMnLAorICAgICdtZXJnZV90ZXN0X3RzX2lk eCcsCisgICAgQVJSQVlbMSwgMiwgMywgNCwgNV0sCisgICAgJzIwMjYtMDEtMDEgMDA6MzA6MDAn Ojp0aW1lc3RhbXAsCisgICAgMTAKKyk7CisKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g VGVzdCA4OiBDb3JyZWN0bmVzcyB2ZXJpZmljYXRpb24KKy0tIFZlcmlmeSBtZXJnZSBzY2FuIHJl dHVybnMgcm93cyBpbiBleGFjdCBPUkRFUiBCWSBzdWZmaXhfY29sLCBwcmVmaXhfY29sIG9yZGVy CistLSBVc2luZyBXSVRIIE9SRElOQUxJVFkgdG8gY29tcGFyZSByb3cgcG9zaXRpb25zCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK1NFTEVDVCAnVGVzdCA4OiBDb3JyZWN0bmVzcyB2ZXJpZmlj YXRpb24nIEFTIHRlc3RfbmFtZTsKKworLS0gQ29tcGFyZSBtZXJnZSBzY2FuIHZzIHJlZ3VsYXIg cXVlcnkgd2l0aCByb3cgcG9zaXRpb25zIChzaG91bGQgYmUgZW1wdHkpCitXSVRIIG1lcmdlX3Jl c3VsdCBBUyAoCisgICAgU0VMRUNUIHJvd19udW1iZXIoKSBPVkVSICgpIEFTIHJuLCBwcmVmaXhf Y29sLCBzdWZmaXhfY29sCisgICAgRlJPTSB0ZXN0X2J0cmVlX21lcmdlX2ZldGNoX2ludCgKKyAg ICAgICAgJ21lcmdlX3Rlc3RfaW50JywKKyAgICAgICAgJ21lcmdlX3Rlc3RfaW50X2lkeCcsCisg ICAgICAgIEFSUkFZWzEsIDIsIDNdLAorICAgICAgICA5MCwKKyAgICAgICAgMTAKKyAgICApCisp LAorcmVndWxhcl9yZXN1bHQgQVMgKAorICAgIFNFTEVDVCByb3dfbnVtYmVyKCkgT1ZFUiAoKSBB UyBybiwgcHJlZml4X2NvbCwgc3VmZml4X2NvbAorICAgIEZST00gKAorICAgICAgICBTRUxFQ1Qg cHJlZml4X2NvbCwgc3VmZml4X2NvbAorICAgICAgICBGUk9NIG1lcmdlX3Rlc3RfaW50CisgICAg ICAgIFdIRVJFIHByZWZpeF9jb2wgSU4gKDEsIDIsIDMpIEFORCBzdWZmaXhfY29sID49IDkwCisg ICAgICAgIE9SREVSIEJZIHN1ZmZpeF9jb2wsIHByZWZpeF9jb2wKKyAgICAgICAgTElNSVQgMTAK KyAgICApIHQKKykKK1NFTEVDVCAnTUlTTUFUQ0gnIEFTIHN0YXR1cywgbS5ybiwgbS5wcmVmaXhf Y29sLCBtLnN1ZmZpeF9jb2wsCisgICAgICAgci5wcmVmaXhfY29sIEFTIGV4cGVjdGVkX3ByZWZp eCwgci5zdWZmaXhfY29sIEFTIGV4cGVjdGVkX3N1ZmZpeAorRlJPTSBtZXJnZV9yZXN1bHQgbQor RlVMTCBPVVRFUiBKT0lOIHJlZ3VsYXJfcmVzdWx0IHIgT04gbS5ybiA9IHIucm4KK1dIRVJFIG0u cHJlZml4X2NvbCBJUyBESVNUSU5DVCBGUk9NIHIucHJlZml4X2NvbAorICAgT1IgbS5zdWZmaXhf Y29sIElTIERJU1RJTkNUIEZST00gci5zdWZmaXhfY29sOworCisKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tIENsZWFudXAKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRFJPUCBUQUJMRSBt ZXJnZV90ZXN0X2ludDsKK0RST1AgVEFCTEUgbWVyZ2VfdGVzdF90czsKK0RST1AgRVhURU5TSU9O IHRlc3RfYnRyZWVfbWVyZ2U7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRy ZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ODcyOTQ3ZDdkNwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLS0xLjAuc3Fs CkBAIC0wLDAgKzEsNDMgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90 ZXN0X2J0cmVlX21lcmdlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBz b3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBV c2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9idHJlZV9tZXJnZSIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKKy0tIFRlc3QgbWVyZ2Ugc2NhbiB3aXRoIGludGVnZXIgY29sdW1ucworQ1JFQVRF IEZVTkNUSU9OIHRlc3RfYnRyZWVfbWVyZ2Vfc2Nhbl9pbnQoCisgICAgdGFibGVfbmFtZSB0ZXh0 LAorICAgIGluZGV4X25hbWUgdGV4dCwKKyAgICBwcmVmaXhfdmFsdWVzIGludDRbXSwKKyAgICBz dWZmaXhfc3RhcnQgaW50NCwKKyAgICBsaW1pdF9jb3VudCBpbnQ0CispIFJFVFVSTlMgVEFCTEUg KAorICAgIHR1cGxlc19yZXR1cm5lZCBpbnQ0LAorICAgIHR1cGxlc19hY2Nlc3NlZCBpbnQ0LAor ICAgIG1heGltdW1fcmVxdWlyZWRfZmV0Y2hlcyBpbnQ0CispIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEMgU1RSSUNUOworCistLSBGZXRjaCBhY3R1YWwgcm93cyBmcm9tIG1lcmdlIHNj YW4gKGZvciBjb3JyZWN0bmVzcyB2ZXJpZmljYXRpb24pCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9i dHJlZV9tZXJnZV9mZXRjaF9pbnQoCisgICAgdGFibGVfbmFtZSB0ZXh0LAorICAgIGluZGV4X25h bWUgdGV4dCwKKyAgICBwcmVmaXhfdmFsdWVzIGludDRbXSwKKyAgICBzdWZmaXhfc3RhcnQgaW50 NCwKKyAgICBsaW1pdF9jb3VudCBpbnQ0CispIFJFVFVSTlMgVEFCTEUgKAorICAgIHByZWZpeF9j b2wgaW50NCwKKyAgICBzdWZmaXhfY29sIGludDQKKykgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQyBTVFJJQ1Q7CisKKy0tIFRlc3QgbWVyZ2Ugc2NhbiB3aXRoIHRpbWVzdGFtcCBzdWZm aXgKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2J0cmVlX21lcmdlX3NjYW5fdHMoCisgICAgdGFibGVf bmFtZSB0ZXh0LAorICAgIGluZGV4X25hbWUgdGV4dCwKKyAgICBwcmVmaXhfdmFsdWVzIGludDRb XSwKKyAgICBzdWZmaXhfc3RhcnQgdGltZXN0YW1wLAorICAgIGxpbWl0X2NvdW50IGludDQKKykg UkVUVVJOUyBUQUJMRSAoCisgICAgdHVwbGVzX3JldHVybmVkIGludDQsCisgICAgdHVwbGVzX2Fj Y2Vzc2VkIGludDQsCisgICAgbWF4aW11bV9yZXF1aXJlZF9mZXRjaGVzIGludDQKKykgQVMgJ01P RFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQyBTVFJJQ1Q7CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmMgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGIyMjEzMGVjZgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmMKQEAg LTAsMCArMSwzODkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfYnRyZWVfbWVy Z2UuYworICoJCVVuaXQgdGVzdHMgZm9yIEItdHJlZSBNZXJnZSBTY2FuIGltcGxlbWVudGF0aW9u CisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgU1FMLWNhbGxhYmxlIGZ1bmN0aW9ucyB0byBk aXJlY3RseSB0ZXN0IHRoZQorICogbWVyZ2Ugc2NhbiBhbGdvcml0aG0gd2l0aG91dCBnb2luZyB0 aHJvdWdoIHRoZSBwbGFubmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5j bHVkZSAiYWNjZXNzL25idHJlZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1 ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgor I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1 dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1 dGlscy9zbmFwbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX01PRFVM RV9NQUdJQzsKKworI2RlZmluZSBNQVhfUkVTVUxUUyAxMDAwMAorCisvKgorICogTWVyZ2VTY2Fu UmVzdWx0IC0gaG9sZHMgcmVzdWx0cyBmcm9tIGEgbWVyZ2Ugc2NhbiBleGVjdXRpb24KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2FuUmVzdWx0Cit7CisJaW50CQkJdHVwbGVzX3JldHVybmVk OworCWludDY0CQl0dXBsZXNfYWNjZXNzZWQ7CisJaW50CQkJbnVtX3ByZWZpeGVzOworCWludAkJ CWxpbWl0X2NvdW50OworCS8qIEZvciBmZXRjaCBmdW5jdGlvbjogY29sbGVjdGVkIHJvdyBkYXRh ICovCisJaW50MzIJICAgKnByZWZpeGVzOworCWludDMyCSAgICpzdWZmaXhlczsKK30gTWVyZ2VT Y2FuUmVzdWx0OworCisvKgorICogZG9fbWVyZ2Vfc2NhbiAtIGNvbW1vbiBtZXJnZSBzY2FuIGV4 ZWN1dGlvbgorICoKKyAqIFBlcmZvcm1zIGEgbWVyZ2Ugc2NhbiB3aXRoIHRoZSBnaXZlbiBwYXJh bWV0ZXJzIGFuZCBjb2xsZWN0cyByZXN1bHRzLgorICogSWYgY29sbGVjdF9yb3dzIGlzIHRydWUs IGZldGNoZXMgYW5kIHN0b3JlcyBhY3R1YWwgcm93IGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkCitk b19tZXJnZV9zY2FuKGNvbnN0IGNoYXIgKnRhYmxlX25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmlu ZGV4X25hbWUsCisJCQkgIERhdHVtICpwcmVmaXhfdmFsdWVzLAorCQkJICBib29sICpwcmVmaXhf bnVsbHMsCisJCQkgIGludCBudW1fcHJlZml4ZXMsCisJCQkgIERhdHVtIHN1ZmZpeF9zdGFydCwK KwkJCSAgT2lkIHN1ZmZpeF90eXBlLAorCQkJICBSZWdQcm9jZWR1cmUgc3VmZml4X2VxX3Byb2Ms CisJCQkgIFJlZ1Byb2NlZHVyZSBzdWZmaXhfZ2VfcHJvYywKKwkJCSAgaW50IGxpbWl0X2NvdW50 LAorCQkJICBib29sIGNvbGxlY3Rfcm93cywKKwkJCSAgTWVyZ2VTY2FuUmVzdWx0ICpyZXN1bHQp Cit7CisJT2lkCQkJdGFibGVfb2lkOworCU9pZAkJCWluZGV4X29pZDsKKwlSZWxhdGlvbgloZWFw X3JlbDsKKwlSZWxhdGlvbglpbmRleF9yZWw7CisJSW5kZXhTY2FuRGVzYyBzY2FuOworCUJUU2Nh bk9wYXF1ZSBzbzsKKwlCVE1lcmdlU2NhblN0YXRlICptZXJnZV9zdGF0ZTsKKwlTbmFwc2hvdAlz bmFwc2hvdDsKKwlPaWQJCQlzdWZmaXhfY21wX29pZDsKKwlPaWQJCQlvcGZhbWlseTsKKwljb25z dCBjaGFyICpvcGZhbWlseV9uYW1lOworCWludAkJCXR1cGxlc19yZXR1cm5lZCA9IDA7CisJaW50 CQkJbWF4X3Jlc3VsdHM7CisKKwkvKiBEZXRlcm1pbmUgb3BlcmF0b3IgZmFtaWx5IGJhc2VkIG9u IHN1ZmZpeCB0eXBlICovCisJaWYgKHN1ZmZpeF90eXBlID09IElOVDRPSUQpCisJCW9wZmFtaWx5 X25hbWUgPSAiaW50ZWdlcl9vcHMiOworCWVsc2UgaWYgKHN1ZmZpeF90eXBlID09IFRJTUVTVEFN UE9JRCkKKwkJb3BmYW1pbHlfbmFtZSA9ICJkYXRldGltZV9vcHMiOworCWVsc2UKKwkJZWxvZyhF UlJPUiwgInVuc3VwcG9ydGVkIHN1ZmZpeCB0eXBlOiAldSIsIHN1ZmZpeF90eXBlKTsKKworCS8q IExvb2sgdXAgdGFibGUgYW5kIGluZGV4ICovCisJdGFibGVfb2lkID0gUmVsbmFtZUdldFJlbGlk KHRhYmxlX25hbWUpOworCWlmICghT2lkSXNWYWxpZCh0YWJsZV9vaWQpKQorCQllbG9nKEVSUk9S LCAidGFibGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwgdGFibGVfbmFtZSk7CisKKwlpbmRleF9v aWQgPSBSZWxuYW1lR2V0UmVsaWQoaW5kZXhfbmFtZSk7CisJaWYgKCFPaWRJc1ZhbGlkKGluZGV4 X29pZCkpCisJCWVsb2coRVJST1IsICJpbmRleCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBpbmRl eF9uYW1lKTsKKworCS8qIE9wZW4gcmVsYXRpb25zICovCisJaGVhcF9yZWwgPSB0YWJsZV9vcGVu KHRhYmxlX29pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRleF9yZWwgPSBpbmRleF9vcGVuKGlu ZGV4X29pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIEdldCBjb21wYXJpc29uIGZ1bmN0aW9u IGZvciBzdWZmaXggdHlwZSAqLworCW9wZmFtaWx5ID0gZ2V0X29wZmFtaWx5X29pZChCVFJFRV9B TV9PSUQsCisJCQkJCQkJCWxpc3RfbWFrZTEobWFrZVN0cmluZyhwc3RyZHVwKG9wZmFtaWx5X25h bWUpKSksCisJCQkJCQkJCWZhbHNlKTsKKwlzdWZmaXhfY21wX29pZCA9IGdldF9vcGZhbWlseV9w cm9jKG9wZmFtaWx5LCBzdWZmaXhfdHlwZSwgc3VmZml4X3R5cGUsCisJCQkJCQkJCQkgICBCVE9S REVSX1BST0MpOworCWlmICghT2lkSXNWYWxpZChzdWZmaXhfY21wX29pZCkpCisJCWVsb2coRVJS T1IsICJjb3VsZCBub3QgZmluZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0eXBlICV1Iiwgc3Vm Zml4X3R5cGUpOworCisJLyogQmVnaW4gaW5kZXggc2NhbiAqLworCXNuYXBzaG90ID0gR2V0QWN0 aXZlU25hcHNob3QoKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBfcmVsLCBpbmRleF9y ZWwsIHNuYXBzaG90LCBOVUxMLCAyLCAwKTsKKworCS8qIFNldCB1cCBzY2FuIGtleXMgKi8KKwl7 CisJCVNjYW5LZXlEYXRhIGtleXNbMl07CisKKwkJU2NhbktleUluaXQoJmtleXNbMF0sIDEsIEJU RXF1YWxTdHJhdGVneU51bWJlciwgc3VmZml4X2VxX3Byb2MsCisJCQkJCXByZWZpeF92YWx1ZXNb MF0pOworCQlTY2FuS2V5SW5pdCgma2V5c1sxXSwgMiwgQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51 bWJlciwgc3VmZml4X2dlX3Byb2MsCisJCQkJCXN1ZmZpeF9zdGFydCk7CisJCWluZGV4X3Jlc2Nh bihzY2FuLCBrZXlzLCAyLCBOVUxMLCAwKTsKKwl9CisKKwlzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKworCS8qIEluaXRpYWxpemUgbWVyZ2Ugc2NhbiAqLworCW1lcmdlX3N0YXRl ID0gYnRfbWVyZ2VfaW5pdChzY2FuLCBwcmVmaXhfdmFsdWVzLCBwcmVmaXhfbnVsbHMsCisJCQkJ CQkJCW51bV9wcmVmaXhlcywgMSwgMiwgc3VmZml4X2NtcF9vaWQsIEludmFsaWRPaWQpOworCXNv LT5tZXJnZVN0YXRlID0gbWVyZ2Vfc3RhdGU7CisKKwkvKiBFeGVjdXRlIHNjYW4gKi8KKwltYXhf cmVzdWx0cyA9IChsaW1pdF9jb3VudCA+IDApID8gbGltaXRfY291bnQgOiBNQVhfUkVTVUxUUzsK KworCXdoaWxlICh0dXBsZXNfcmV0dXJuZWQgPCBtYXhfcmVzdWx0cykKKwl7CisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisKKwkJaWYgKCFidF9tZXJnZV9nZXRuZXh0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkKKwkJCWJyZWFrOworCisJCWlmIChjb2xsZWN0X3Jvd3MgJiYgcmVzdWx0 LT5wcmVmaXhlcyAhPSBOVUxMKQorCQl7CisJCQkvKiBGZXRjaCBoZWFwIHR1cGxlIHRvIGdldCBh Y3R1YWwgdmFsdWVzICovCisJCQlIZWFwVHVwbGVEYXRhIGhlYXBUdXBsZTsKKwkJCUJ1ZmZlcgkJ aGVhcEJ1ZmZlcjsKKwkJCWJvb2wJCWlzbnVsbDsKKworCQkJaGVhcFR1cGxlLnRfc2VsZiA9IHNj YW4tPnhzX2hlYXB0aWQ7CisJCQlpZiAoaGVhcF9mZXRjaChoZWFwX3JlbCwgc25hcHNob3QsICZo ZWFwVHVwbGUsICZoZWFwQnVmZmVyLCBmYWxzZSkpCisJCQl7CisJCQkJcmVzdWx0LT5wcmVmaXhl c1t0dXBsZXNfcmV0dXJuZWRdID0KKwkJCQkJRGF0dW1HZXRJbnQzMihoZWFwX2dldGF0dHIoJmhl YXBUdXBsZSwgMSwKKwkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihoZWFwX3JlbCksICZp c251bGwpKTsKKwkJCQlyZXN1bHQtPnN1ZmZpeGVzW3R1cGxlc19yZXR1cm5lZF0gPQorCQkJCQlE YXR1bUdldEludDMyKGhlYXBfZ2V0YXR0cigmaGVhcFR1cGxlLCAyLAorCQkJCQkJCQkJCQkgICBS ZWxhdGlvbkdldERlc2NyKGhlYXBfcmVsKSwgJmlzbnVsbCkpOworCQkJCVJlbGVhc2VCdWZmZXIo aGVhcEJ1ZmZlcik7CisJCQl9CisJCX0KKworCQl0dXBsZXNfcmV0dXJuZWQrKzsKKworCQlpZiAo dHVwbGVzX3JldHVybmVkID49IE1BWF9SRVNVTFRTKQorCQl7CisJCQllbG9nKFdBUk5JTkcsICJt ZXJnZSBzY2FuIGhpdCBzYWZldHkgbGltaXQgb2YgJWQgdHVwbGVzIiwgTUFYX1JFU1VMVFMpOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBDb2xsZWN0IHJlc3VsdHMgYmVmb3JlIGNsZWFudXAg Ki8KKwlyZXN1bHQtPnR1cGxlc19yZXR1cm5lZCA9IHR1cGxlc19yZXR1cm5lZDsKKwlyZXN1bHQt PnR1cGxlc19hY2Nlc3NlZCA9IG1lcmdlX3N0YXRlLT50dXBsZXNfYWNjZXNzZWQ7CisJcmVzdWx0 LT5udW1fcHJlZml4ZXMgPSBudW1fcHJlZml4ZXM7CisJcmVzdWx0LT5saW1pdF9jb3VudCA9IGxp bWl0X2NvdW50OworCisJLyogQ2xlYW4gdXAgKi8KKwlidF9tZXJnZV9lbmQobWVyZ2Vfc3RhdGUp OworCXNvLT5tZXJnZVN0YXRlID0gTlVMTDsKKwlpbmRleF9lbmRzY2FuKHNjYW4pOworCWluZGV4 X2Nsb3NlKGluZGV4X3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9jbG9zZShoZWFwX3Jl bCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIGJ1aWxkX3N0YXRzX3Jlc3VsdCAtIGJ1 aWxkIHRoZSBzdGF0cyByZXN1bHQgdHVwbGUKKyAqLworc3RhdGljIERhdHVtCitidWlsZF9zdGF0 c19yZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE1lcmdlU2NhblJlc3VsdCAqcmVzdWx0 KQoreworCVR1cGxlRGVzYwl0dXBkZXNjOworCURhdHVtCQl2YWx1ZXNbM107CisJYm9vbAkJbnVs bHNbM10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJSGVhcFR1cGxlCXR1cGxlOworCWludAkJ CW1heF9yZXF1aXJlZF9mZXRjaGVzOworCisJLyogQ2FsY3VsYXRlIGV4cGVjdGVkIG1heCBmZXRj aGVzICovCisJaWYgKHJlc3VsdC0+dHVwbGVzX3JldHVybmVkIDwgcmVzdWx0LT5saW1pdF9jb3Vu dCkKKwkJbWF4X3JlcXVpcmVkX2ZldGNoZXMgPSByZXN1bHQtPnR1cGxlc19yZXR1cm5lZDsKKwll bHNlCisJCW1heF9yZXF1aXJlZF9mZXRjaGVzID0gcmVzdWx0LT5saW1pdF9jb3VudCArIHJlc3Vs dC0+bnVtX3ByZWZpeGVzIC0gMTsKKworCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8s IE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJt c2coImZ1bmN0aW9uIHJldHVybmluZyByZWNvcmQgY2FsbGVkIGluIGNvbnRleHQgIgorCQkJCQkJ InRoYXQgY2Fubm90IGFjY2VwdCB0eXBlIHJlY29yZCIpKSk7CisKKwl0dXBkZXNjID0gQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CisKKwl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKHJlc3VsdC0+ dHVwbGVzX3JldHVybmVkKTsKKwl2YWx1ZXNbMV0gPSBJbnQzMkdldERhdHVtKChpbnQzMikgcmVz dWx0LT50dXBsZXNfYWNjZXNzZWQpOworCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0obWF4X3Jl cXVpcmVkX2ZldGNoZXMpOworCisJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFs dWVzLCBudWxscyk7CisJcmV0dXJuIEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKK30KKworCisv KgorICogdGVzdF9idHJlZV9tZXJnZV9zY2FuX2ludCAtIHRlc3QgbWVyZ2Ugc2NhbiB3aXRoIGlu dGVnZXIgY29sdW1ucworICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYnRyZWVfbWVyZ2Vf c2Nhbl9pbnQpOworCitEYXR1bQordGVzdF9idHJlZV9tZXJnZV9zY2FuX2ludChQR19GVU5DVElP Tl9BUkdTKQoreworCXRleHQJICAgKnRhYmxlX25hbWUgPSBQR19HRVRBUkdfVEVYVF9QUCgwKTsK Kwl0ZXh0CSAgICppbmRleF9uYW1lID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CisJQXJyYXlUeXBl ICAqcHJlZml4X2FycmF5ID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDIpOworCWludDMyCQlzdWZm aXhfc3RhcnQgPSBQR19HRVRBUkdfSU5UMzIoMyk7CisJaW50MzIJCWxpbWl0X2NvdW50ID0gUEdf R0VUQVJHX0lOVDMyKDQpOworCURhdHVtCSAgICpwcmVmaXhfdmFsdWVzOworCWJvb2wJICAgKnBy ZWZpeF9udWxsczsKKwlpbnQJCQludW1fcHJlZml4ZXM7CisJTWVyZ2VTY2FuUmVzdWx0IHJlc3Vs dCA9IHswfTsKKworCWRlY29uc3RydWN0X2FycmF5KHByZWZpeF9hcnJheSwgSU5UNE9JRCwgc2l6 ZW9mKGludDMyKSwgdHJ1ZSwgVFlQQUxJR05fSU5ULAorCQkJCQkgICZwcmVmaXhfdmFsdWVzLCAm cHJlZml4X251bGxzLCAmbnVtX3ByZWZpeGVzKTsKKworCWlmIChudW1fcHJlZml4ZXMgPT0gMCkK KwkJZWxvZyhFUlJPUiwgInByZWZpeF92YWx1ZXMgYXJyYXkgY2Fubm90IGJlIGVtcHR5Iik7CisK Kwlkb19tZXJnZV9zY2FuKHRleHRfdG9fY3N0cmluZyh0YWJsZV9uYW1lKSwKKwkJCQkgIHRleHRf dG9fY3N0cmluZyhpbmRleF9uYW1lKSwKKwkJCQkgIHByZWZpeF92YWx1ZXMsIHByZWZpeF9udWxs cywgbnVtX3ByZWZpeGVzLAorCQkJCSAgSW50MzJHZXREYXR1bShzdWZmaXhfc3RhcnQpLCBJTlQ0 T0lELAorCQkJCSAgRl9JTlQ0RVEsIEZfSU5UNEdFLAorCQkJCSAgbGltaXRfY291bnQsIGZhbHNl LCAmcmVzdWx0KTsKKworCXJldHVybiBidWlsZF9zdGF0c19yZXN1bHQoZmNpbmZvLCAmcmVzdWx0 KTsKK30KKworCisvKgorICogdGVzdF9idHJlZV9tZXJnZV9zY2FuX3RzIC0gdGVzdCBtZXJnZSBz Y2FuIHdpdGggdGltZXN0YW1wIHN1ZmZpeAorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf YnRyZWVfbWVyZ2Vfc2Nhbl90cyk7CisKK0RhdHVtCit0ZXN0X2J0cmVlX21lcmdlX3NjYW5fdHMo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICp0YWJsZV9uYW1lID0gUEdfR0VUQVJHX1RF WFRfUFAoMCk7CisJdGV4dAkgICAqaW5kZXhfbmFtZSA9IFBHX0dFVEFSR19URVhUX1BQKDEpOwor CUFycmF5VHlwZSAgKnByZWZpeF9hcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgyKTsKKwlU aW1lc3RhbXAJc3VmZml4X3N0YXJ0ID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgzKTsKKwlpbnQzMgkJ bGltaXRfY291bnQgPSBQR19HRVRBUkdfSU5UMzIoNCk7CisJRGF0dW0JICAgKnByZWZpeF92YWx1 ZXM7CisJYm9vbAkgICAqcHJlZml4X251bGxzOworCWludAkJCW51bV9wcmVmaXhlczsKKwlNZXJn ZVNjYW5SZXN1bHQgcmVzdWx0ID0gezB9OworCisJZGVjb25zdHJ1Y3RfYXJyYXkocHJlZml4X2Fy cmF5LCBJTlQ0T0lELCBzaXplb2YoaW50MzIpLCB0cnVlLCBUWVBBTElHTl9JTlQsCisJCQkJCSAg JnByZWZpeF92YWx1ZXMsICZwcmVmaXhfbnVsbHMsICZudW1fcHJlZml4ZXMpOworCisJaWYgKG51 bV9wcmVmaXhlcyA9PSAwKQorCQllbG9nKEVSUk9SLCAicHJlZml4X3ZhbHVlcyBhcnJheSBjYW5u b3QgYmUgZW1wdHkiKTsKKworCWRvX21lcmdlX3NjYW4odGV4dF90b19jc3RyaW5nKHRhYmxlX25h bWUpLAorCQkJCSAgdGV4dF90b19jc3RyaW5nKGluZGV4X25hbWUpLAorCQkJCSAgcHJlZml4X3Zh bHVlcywgcHJlZml4X251bGxzLCBudW1fcHJlZml4ZXMsCisJCQkJICBUaW1lc3RhbXBHZXREYXR1 bShzdWZmaXhfc3RhcnQpLCBUSU1FU1RBTVBPSUQsCisJCQkJICBGX0lOVDRFUSwgRl9USU1FU1RB TVBfR0UsCisJCQkJICBsaW1pdF9jb3VudCwgZmFsc2UsICZyZXN1bHQpOworCisJcmV0dXJuIGJ1 aWxkX3N0YXRzX3Jlc3VsdChmY2luZm8sICZyZXN1bHQpOworfQorCisKKy8qCisgKiB0ZXN0X2J0 cmVlX21lcmdlX2ZldGNoX2ludCAtIGZldGNoIGFjdHVhbCByb3dzIGZyb20gbWVyZ2Ugc2Nhbgor ICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYnRyZWVfbWVyZ2VfZmV0Y2hfaW50KTsKKwor RGF0dW0KK3Rlc3RfYnRyZWVfbWVyZ2VfZmV0Y2hfaW50KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ RnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCisJdHlwZWRlZiBzdHJ1Y3QKKwl7CisJCWludDMy CSAgICpwcmVmaXhlczsKKwkJaW50MzIJICAgKnN1ZmZpeGVzOworCQlpbnQJCQludW1fcmVzdWx0 czsKKwkJaW50CQkJY3VycmVudF9pZHg7CisJfSBGZXRjaENvbnRleHQ7CisKKwlpZiAoU1JGX0lT X0ZJUlNUQ0FMTCgpKQorCXsKKwkJdGV4dAkgICAqdGFibGVfbmFtZSA9IFBHX0dFVEFSR19URVhU X1BQKDApOworCQl0ZXh0CSAgICppbmRleF9uYW1lID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CisJ CUFycmF5VHlwZSAgKnByZWZpeF9hcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgyKTsKKwkJ aW50MzIJCXN1ZmZpeF9zdGFydCA9IFBHX0dFVEFSR19JTlQzMigzKTsKKwkJaW50MzIJCWxpbWl0 X2NvdW50ID0gUEdfR0VUQVJHX0lOVDMyKDQpOworCQlEYXR1bQkgICAqcHJlZml4X3ZhbHVlczsK KwkJYm9vbAkgICAqcHJlZml4X251bGxzOworCQlpbnQJCQludW1fcHJlZml4ZXM7CisJCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwkJRmV0Y2hDb250ZXh0ICpmY3R4OworCQlNZXJnZVNjYW5S ZXN1bHQgcmVzdWx0ID0gezB9OworCQlUdXBsZURlc2MJdHVwZGVzYzsKKwkJaW50CQkJbWF4X3Jl c3VsdHM7CisKKwkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7 CisKKwkJZGVjb25zdHJ1Y3RfYXJyYXkocHJlZml4X2FycmF5LCBJTlQ0T0lELCBzaXplb2YoaW50 MzIpLCB0cnVlLCBUWVBBTElHTl9JTlQsCisJCQkJCQkgICZwcmVmaXhfdmFsdWVzLCAmcHJlZml4 X251bGxzLCAmbnVtX3ByZWZpeGVzKTsKKworCQlpZiAobnVtX3ByZWZpeGVzID09IDApCisJCQll bG9nKEVSUk9SLCAicHJlZml4X3ZhbHVlcyBhcnJheSBjYW5ub3QgYmUgZW1wdHkiKTsKKworCQkv KiBBbGxvY2F0ZSByZXN1bHQgc3RvcmFnZSAqLworCQltYXhfcmVzdWx0cyA9IChsaW1pdF9jb3Vu dCA+IDApID8gbGltaXRfY291bnQgOiBNQVhfUkVTVUxUUzsKKwkJZmN0eCA9IHBhbGxvYyhzaXpl b2YoRmV0Y2hDb250ZXh0KSk7CisJCWZjdHgtPnByZWZpeGVzID0gcGFsbG9jKG1heF9yZXN1bHRz ICogc2l6ZW9mKGludDMyKSk7CisJCWZjdHgtPnN1ZmZpeGVzID0gcGFsbG9jKG1heF9yZXN1bHRz ICogc2l6ZW9mKGludDMyKSk7CisJCWZjdHgtPmN1cnJlbnRfaWR4ID0gMDsKKworCQkvKiBQb2lu dCByZXN1bHQgdG8gb3VyIHN0b3JhZ2UgKi8KKwkJcmVzdWx0LnByZWZpeGVzID0gZmN0eC0+cHJl Zml4ZXM7CisJCXJlc3VsdC5zdWZmaXhlcyA9IGZjdHgtPnN1ZmZpeGVzOworCisJCWRvX21lcmdl X3NjYW4odGV4dF90b19jc3RyaW5nKHRhYmxlX25hbWUpLAorCQkJCQkgIHRleHRfdG9fY3N0cmlu ZyhpbmRleF9uYW1lKSwKKwkJCQkJICBwcmVmaXhfdmFsdWVzLCBwcmVmaXhfbnVsbHMsIG51bV9w cmVmaXhlcywKKwkJCQkJICBJbnQzMkdldERhdHVtKHN1ZmZpeF9zdGFydCksIElOVDRPSUQsCisJ CQkJCSAgRl9JTlQ0RVEsIEZfSU5UNEdFLAorCQkJCQkgIGxpbWl0X2NvdW50LCB0cnVlLCAmcmVz dWx0KTsKKworCQlmY3R4LT5udW1fcmVzdWx0cyA9IHJlc3VsdC50dXBsZXNfcmV0dXJuZWQ7CisK KwkJLyogQnVpbGQgcmVzdWx0IHR1cGxlIGRlc2NyaXB0b3IgKi8KKwkJdHVwZGVzYyA9IENyZWF0 ZVRlbXBsYXRlVHVwbGVEZXNjKDIpOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgMSwg InByZWZpeF9jb2wiLCBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAyLCAic3VmZml4X2NvbCIsIElOVDRPSUQsIC0xLCAwKTsKKwkJZnVuY2N0eC0+dHVwbGVf ZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBm Y3R4OworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlmdW5j Y3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKworCXsKKwkJRmV0Y2hDb250ZXh0ICpmY3R4ID0g ZnVuY2N0eC0+dXNlcl9mY3R4OworCisJCWlmIChmY3R4LT5jdXJyZW50X2lkeCA8IGZjdHgtPm51 bV9yZXN1bHRzKQorCQl7CisJCQlEYXR1bQkJdmFsdWVzWzJdOworCQkJYm9vbAkJbnVsbHNbMl0g PSB7ZmFsc2UsIGZhbHNlfTsKKwkJCUhlYXBUdXBsZQl0dXBsZTsKKworCQkJdmFsdWVzWzBdID0g SW50MzJHZXREYXR1bShmY3R4LT5wcmVmaXhlc1tmY3R4LT5jdXJyZW50X2lkeF0pOworCQkJdmFs dWVzWzFdID0gSW50MzJHZXREYXR1bShmY3R4LT5zdWZmaXhlc1tmY3R4LT5jdXJyZW50X2lkeF0p OworCQkJZmN0eC0+Y3VycmVudF9pZHgrKzsKKworCQkJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUo ZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CisJCQlTUkZfUkVUVVJOX05FWFQo ZnVuY2N0eCwgSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0cmVlX21lcmdlLmNvbnRyb2wgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYnRyZWVfbWVyZ2UvdGVzdF9idHJlZV9tZXJnZS5jb250cm9s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mODE0NmJkMGY3NAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9idHJlZV9tZXJnZS90ZXN0X2J0 cmVlX21lcmdlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHRlc3RfYnRyZWVfbWVyZ2UgZXh0 ZW5zaW9uCitjb21tZW50ID0gJ1VuaXQgdGVzdHMgZm9yIEItdHJlZSBtZXJnZSBzY2FuJworZGVm YXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfYnRy ZWVfbWVyZ2UnCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuNDAuMAoK --000000000000ef5980064a259486--