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 1vntL7-00D73N-0G for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 06:59:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vntL5-00Fidy-2x for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 06:59:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vntL5-00Fidn-0H for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 06:59:43 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vntL2-00000000dwY-02Kg for pgsql-hackers@postgresql.org; Thu, 05 Feb 2026 06:59:41 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b8eafb515aeso69048266b.1 for ; Wed, 04 Feb 2026 22:59:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770274777; cv=none; d=google.com; s=arc-20240605; b=d00NQYLroV7RhHFY5A2hrCBjUqogVvos+KMc4u5Re+LF/PqfPVD9xiN3Y2S4jlNClu NurHPOeUZH/AW9hhjiBV6k0VNrRgMRBgXafsZPbsTieGbpLooHfkhS8PK6sMQBeAOOWi Z9R/DCzDjrMUZo6l0sm8U9lFBSSYXB7nZuzl0HxpFopEQPjRroVv6T/+b8rH7Xpn+1aa SnDe077ie0ZdxJ0t8ch34gL1DtJvSit+4Uulr8Glv6i6bUPawEBl/Y9BGhJgKwUyu6KK sancWgx18acxFFDb3l3ECOXslcoYpBplR+YPvdOZ79u8A56vj5auP6GowIZplj69F8a5 fZyQ== 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=4LU6bSEiw8I6xlbx+3yDIEwi3Nzbv/ffV7r/qn0jDnU=; fh=SEI0vNeuBQTQgj1Dm2JzLE+OQSvjZGwMVjzgEyIAPPQ=; b=DA7dKh2ZD94jBY+nbPq3zTL8QMDRhmDdDa2Pirj0/fjIfWvkk1LauYO/nA3oMgki1O 7CdTb4VQGFKpOpZ66g4YReYdI6DLPHORjfupSGvEdBEd6agz6Vfk23rHfQaHYDw2xT6m fj2sby9ZaRCXy2786pfKAmxuqLipT4nyp7JXNe+BAx+eup7ATk65fMF/ixGQ8oPZsFeP 0PkKkoDw7WA27yUHxv8MA67stOm5hbaOC+1Tp+kCKVB+KA5ZsjIYzwWLONhlAocvJAUx cv23jS6chRGLYREBelcGaPRpKUVIqQRBz4iwVx1hduRMKEyZVQrSOM11CpEZnR9hx6/w XUcw==; 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=1770274777; x=1770879577; 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=4LU6bSEiw8I6xlbx+3yDIEwi3Nzbv/ffV7r/qn0jDnU=; b=FDLkBQr92sxseXL4DP5NqDdRSPCDyLKkcJ761LP0fNquPGnmR2xzofgcP2FADy5tBs 6Nm8KggIA5yye06yS7zijFjTVMlWRZhg3lexIbE0CKJa0XX/5C02jRKfVGN/Rghgn9yT x5BYA5hwMiRsH8ofi6Gfz+bgAtz7LlEROObD+czXA+R8kTSmTfiQwGGDQARnnrqEdWgz mhkC+PrCEoEYb5JJTlvTY0hUrXclUE2YIs2uk9VhwcJOfmSe86JLvx5z3XYTabvlffVg a9ehlfzisEwQdF2RspFcycbAV8Ozshf6mgxBkUuBkMQySd1hCvZTMPWh4KaONqUrLihh D0mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770274777; x=1770879577; 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=4LU6bSEiw8I6xlbx+3yDIEwi3Nzbv/ffV7r/qn0jDnU=; b=Oxpn+esFlGGNf4U/xEh2M8KDq0IfT3d+hGGCKSjiwcwBZqTtlMibFj9gbPahSfyhzT omfkwqZSkcKOzwwCI4teFB04HStRV+9uLTb+XtlWlArVxOY2E92wRZt6GohLQmkenJML I96yOHw9ECJhudoaGY0C9UnPcX9IfsiR+OIh2K/6KujKZisjgv0q46lsvtUU2H86DpP1 rqeYItTzxUZcxXfSxueR+/donQHXvL6KvhklCs1c8hD0YoyBXaFkN2jRSsdVQkhHVph2 sYE1KVRongUlWbbRjvL+vLKThQqhUZW4O3Fm2+m7Sz6RhU3dHB7wVDZyRZaVsXRGzINA Zsgw== X-Forwarded-Encrypted: i=1; AJvYcCVifxDS77uxVr2bcHn7/9jR9wcBHBX1kCi7DPNhz2s4TGttC+n1y0i4gLBrYizDDCZQLOQjb7yvOAtuLIu5@postgresql.org X-Gm-Message-State: AOJu0YyG0+knq/hM21hxnsyk/pozwvq0zYS9WPmEzoXZwZNJEFd+kkwx tbvNCFNwnSJmrU35ryBSxa6eBmV50zEO4p9WU2n+Cifg2NW6os96pyAfy2CUcr1Dcf+W7tRPUbX 2cifnFLMljqwwWId5akykjHMHBJJ33QOG8u67 X-Gm-Gg: AZuq6aKHDfZP5ImJ60i0XkiSqpErHE4HW0ievmFVchGuIFgBxHrmts40EPwzvHt2n5F 6wFuMmytBOem5gDuYduHqAKZeJqEHvYRqeoOffXyRsKYli9PnWUQjlROI/lXtSdg5VsYXj0xepZ yxf1zk0xJpmPKmNUEg9WI2T8L9rpneQGREwHt0HmTIde5XYqYJdXuCqfXvDoo1fbH7YTxsDaluf AqqgVOglWOLrSZF9JG4vU+ON+iXEWTYUBE45eX1cvKoPFRefu73qeGv40XA+zoi9g1VfVkKP/IF pdSc6ehw9YY/YC+/SLWp2+Y2LAdwVxCMf32yvQ== X-Received: by 2002:a17:907:5cd:b0:b87:8172:257 with SMTP id a640c23a62f3a-b8e9f6dc3cemr355811966b.64.1770274776957; Wed, 04 Feb 2026 22:59:36 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Alexandre Felipe Date: Thu, 5 Feb 2026 06:59:25 +0000 X-Gm-Features: AZwV_Qib8qpI3Gz9J-wQSlQsJ4TCyvHQbyNQQeJHSlB0rMdTm3UltcKYZ5LFG-c Message-ID: Subject: Re: New access method for b-tree. To: =?UTF-8?B?TWljaGHFgiBLxYJlY3plaw==?= Cc: Ants Aasma , Tomas Vondra , Alexandre Felipe , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="0000000000003ca067064a0e379c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003ca067064a0e379c Content-Type: multipart/alternative; boundary="0000000000003ca065064a0e379a" --0000000000003ca065064a0e379a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 index (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 myself= ) > > [1] > https://www.postgresql.org/message-id/3FA1E0A9-8393-41F6-88BD-62EEEA1EC21= F%40kleczek.org > [2] > https://www.postgresql.org/message-id/B2AC13F9-6655-4E27-BFD3-068844E5DC9= 1%40kleczek.org > > =E2=80=94 > Kind regards, > Michal > --0000000000003ca065064a0e379a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you for looking into this.

Now we= can execute a, still narrow, family queries!

Mayb= e it helps to see this as a=C2=A0social network=C2=A0feeds. Imagine = a social network, you have a few friends, or follow a few people, and you w= ant 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 hundr= eds 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 fr= iends, and M is the number of posts to show.
This runs with compl= exity (Nx * M) rows, followed by an (Nx * M) sort, instead of (Nx * N) foll= owed 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=C2=A0that r= uns with M=C2=A0+ Nx row accesses, (M=C2=A0+ Nx) heap operations.
If everything is on the same page the skip scan would win.

<= /div>
The cost estimation is probably far off.
I am also not = considering the filters=C2=A0applied after this=C2=A0operator,=C2=A0and I d= on'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
* Mor= e 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 index (a, b, c)

---
Kind Regards= ,
Alexandre

On Wed, Feb 4, 2026 at 7:1= 3=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> wrote:

On Mon, 2 Feb= 2026 at 01:54, Tomas Vondra <tomas@vondra.me> wrote:
I&#= 39;m also wondering how common is the targeted query pattern? How commonit is to have an IN condition on the leading column in an index, and
OR= DER BY on the second one?

I have seen this pattern mult= iple times. My nickname for it is the
timeline view. Think of the social= media timeline, showing posts from
all followed accounts in timestamp o= rder, returned in reasonably sized
batches. The naive SQL query will hav= e to scan all posts from all
followed accounts and pass them through a t= op-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 understa= nd it correctly) -
effectively equivalent to running N index scans throu= gh Merge Append.

My workarounds I have proposed users have been either to rewrite the<= br>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
shap= e. But repeating the query N times can get unwieldy when the
number of v= alues grows, so the fallback is:

SELECT * FROM unnest(:friends) id, = LATERAL (
=C2=A0=C2=A0=C2=A0SELECT * FROM posts
=C2=A0=C2=A0=C2=A0W= HERE 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 i= s 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 workarou= nd 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 t= han a new IAM (but I don=E2=80=99t have enough knowledge and experience to = implement it myself)


=E2=80=94Kind regards,
Michal
--0000000000003ca065064a0e379a-- --0000000000003ca067064a0e379c 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_ml90vpgj1 RnJvbSBkODZiMzcxNDk5ZGIwMTFhMzY1ODNkMjA5NjNkZjY4YjA5MjE5MTkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBGcmksIDMwIEphbiAyMDI2IDE0OjI3OjE4ICswMDAwClN1YmplY3Q6 IFtQQVRDSCAyLzNdIFtNRVJHRS1TQ0FOXTogQWNjZXNzIG1ldGhvZAoKLS0tCiAuZ2l0aWdub3Jl 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 --0000000000003ca067064a0e379c 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_ml90vpgn2 RnJvbSBhZDEyM2EzZjhkYTNkOTUyNjJiMjU1M2U5MGRkOWM4ZmJiOGQyMzM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBUaHUsIDUgRmViIDIwMjYgMDU6MDk6NDggKzAwMDAKU3ViamVjdDog W1BBVENIIDMvM10gW01FUkdFLVNDQU5dIFBsYW5uZXIgaW50ZWdyYXRpb24KCi0tLQogc3JjL2Jh 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== --0000000000003ca067064a0e379c 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_ml90vpgd0 RnJvbSA2ZGM2N2IxNjY2OGVkYzY0ZGQ4MjBjNWEzMTNjODQ5Y2Q0N2RhNmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmUgRmVsaXBlIDxvLmFsZXhhbmRyZS5mZWxpcGVA Z21haWwuY29tPgpEYXRlOiBGcmksIDMwIEphbiAyMDI2IDA4OjM1OjE1ICswMDAwClN1YmplY3Q6 IFtQQVRDSCAxLzNdIFtNRVJHRS1TQ0FOXTogVGVzdCB0aGUgYmFzZWxpbmUKCi0tLQogc3JjL3Rl 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 --0000000000003ca067064a0e379c--