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 1vRIV6-00AvRL-2E for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Dec 2025 23:12:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRIV5-005gwR-0Q for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Dec 2025 23:12:39 +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 1vRIV4-005gwF-0O for pgsql-hackers@lists.postgresql.org; Thu, 04 Dec 2025 23:12:39 +0000 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vRIUx-003BK8-0H for pgsql-hackers@lists.postgresql.org; Thu, 04 Dec 2025 23:12:37 +0000 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6598413b604so345790eaf.0 for ; Thu, 04 Dec 2025 15:12:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764889951; x=1765494751; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zCQuJw2QMqRG1uRDE2PKhXuTQ7kK4QZT2U1pmZT87LA=; b=brPLRXu0+03j4QAue9xjNK5GUq4+K2c/qGbHJKUTUn7QsjeRUw9iNEIchFUq3Y4DX2 cOS0QKknX/kbQeQAtAIaD+8x7h7EHzxsv22tXgxTNml6kYlwII/zI31rwJOcCUgFdj3S M7MeGOgdowMcQKWhhGRAXRQbKrOq+da3Ib0OPw8gmqvm0G76ovhaLcXXvgr3JlCU2k/c ECghRqYTdNuA2Cmqwh9uz6VYcM6OOJOquLE8SU0vFSl4I6xJfx95QUPk+dr4CN3ZFYCu kIKyhNnb95uj54ZTMHjd9su+ZmVKPYqBkuHT9Pp8yUCpMYkoDuwefoE48jMuEZv0XeJ5 m9og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764889951; x=1765494751; 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=zCQuJw2QMqRG1uRDE2PKhXuTQ7kK4QZT2U1pmZT87LA=; b=a2IJ2Ena0W3ZGvOTrw2Ztj4qa9nC6wQ9sEr8SMl7wGEmzm2/45xdsS/JZ+vWUSwmJO uNTrLxbWNOVlyjmOalU2euLgQN7eIrPHzZPeTOqZ4SeCaNQ3dGrL5CPsLnSNnMi9tMEg 6vHHGbHpGgYxIZ8GIJqsfuKlL64yt2eDP0YaRYJZWrNuhDjlQshTOThtuM5AQjf68Kyz 64gdgKYLnvjR9Lzzqvx+WRLXMKDXhHlZW/A5DkUEHw/evs8bt/HWfW/lqLDbHPtEg1xa shurXZKW06F9kw08wDO5ocVBjG+FXGcrdOP2Lou8HkIHPz9l04vBKS7IwVME2G+n9GJj SeGQ== X-Forwarded-Encrypted: i=1; AJvYcCV+01dTVh+BDSCqXYlQurfO4m8JVY3LjmHsXUsjNXdMiAnI+OH8QZ0jwMuM5TQvcxJ+YPp4hV4qxmpgHfgK@lists.postgresql.org X-Gm-Message-State: AOJu0YyiwV7SX73Ndvj0y4C9hb5HCmdPDevprQmJakcrXhG4+VYxfW18 N5ZR/FV+eeV5+ycKEu9WeLqYn+ArhVwX5SFCNyQoFjYyH5Uiz7zLNnsIQkMbE5eWVO5v3X2Fr81 x+tegUnYj1u6N3LBpbOFffCrxAP8+qtE= X-Gm-Gg: ASbGnctIsLCBVxXLp3/4iW/iKQbwN7KEdr/EL3rhIDEg5fS8mkweWnW8xY8LE/Uk3lM 5fdv1fWInunruhgChCCIyLHp8dTfI3vVqYrjxp9eradjrbtO4to8bSp/ooEXi8cwAJe69IYo3lg 7UpMr+Bk4MkIEnzG8uwcPVu4GveJj2kqSTUmkTph+6x7SvvC6K+yldn8YctsJULDXdUQyLsQCVW MT7IIfBlLHDcLvcBjFQDvJg0G0sQMned1fuofYhchRwHSElYHzLx3xnSMArIMeesXTZ+u2h2fYQ bVWl6Hmhy8LR556s9scIIlrstjY= X-Google-Smtp-Source: AGHT+IFhCctpMmV65Oij1X+CiL8OAUxV+s3V797LYUOY8uGpnLJUN+wi8505wJO1kYXwUWYMYETkoDPqxEPN+AmzcjY= X-Received: by 2002:a05:6808:1316:b0:451:4be5:a90f with SMTP id 5614622812f47-45379d20b52mr2636856b6e.2.1764889951007; Thu, 04 Dec 2025 15:12:31 -0800 (PST) MIME-Version: 1.0 References: <7648d5c5.7f4.19ae6d8757c.Coremail.wangyu_runtime@163.com> In-Reply-To: From: Corey Huinker Date: Thu, 4 Dec 2025 18:12:16 -0500 X-Gm-Features: AWmQ_bmcKCf7t22ALLlB5zyxJxYaNL9levWdnRI49IVt88DGyjtJ9LI6SEajpY8 Message-ID: Subject: Re: Re: Extended Statistics set/restore/clear functions. To: Michael Paquier Cc: WangYu , Chao Li , jian he , Tomas Vondra , pgsql-hackers@lists.postgresql.org, tgl@sss.pgh.pa.us Content-Type: multipart/mixed; boundary="0000000000009961d60645287624" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009961d60645287624 Content-Type: multipart/alternative; boundary="0000000000009961d50645287622" --0000000000009961d50645287622 Content-Type: text/plain; charset="UTF-8" > > > Indeed. These exact typos existed in some of the previous iterations > of the patch posted on this thread. > +1 > 1) statatt_get_type(), that retrieves a set of information from a > relation and one of its attributes. This is lightly documented in > extended_statistics_update() from 0002, with an argument claiming that > we do the same as attribute statistics. If one then looks at > attribute_stats.c, we have a not-really-helpful "derive information > from attribute". The trick is that we have an implied dependency > here: statatt_get_type() needs to be called *before* > statatt_get_elem_type() for attribute *and* extended stats, > statatt_get_elem_type() being fed data from statatt_get_type(). > I've added comments to that effect. > > 2) statatt_get_elem_type(), interesting piece of the puzzle that acts > as a wrapper for the type cache. An important part here, it seems to > me, would be to at least tell that this relies on data retrieved from > statatt_get_type(), initially. Once I've noticed this dependency the > logic felt a bit cleaner to understand, but we have no docs explaining > any of that.. > I've added comments that will hopefully connect those dots. > > 3) statatt_init_empty_tuple(), that initializes a set of data to be > used for updates and/or insertion. My first thought here is about > ... > not apply to extended stats. But one would have to guess this fact > after knowing that this relates to the catalog pg_statistic.. > The comments didn't seem quite so illuminating, but I added them just the same. > > 4) statatt_set_slot is slightly simpler. Still here, it is really easy > to miss that this routine should be fed data retrieved by > statatt_get_type(). staop can also be an eq or an lt operator. > stakind is one of the STATISTIC_KIND_* values, etc, etc. > Some here too. > As far as I can see, there is nothing in these functions that require > them to be located in attribute_stats.c anymore. Let's move that to > stats_utils.c, common place for all the shared facilities used by > these stats modules. Or it could also be a new, separate patch, for > the manipulation and extraction of the tuple data related to > the pg_statistic tuples. > They've been moved to stats_utils.c, and impact was fairly minimal. I was worried about an explosion of #includes, but that ended up not being the case. > Perhaps you know what these imply because you have written this code > originally in ce207d2a7901, but exposing them also means that it is > very important to document at least some concepts and assumptions > around them so as it is possible to guide somebody that may want to > use this code: > - What are the input arguments from? > - And what are the results? > - In which circumstances should these be used? > An attempt was made. > Then about 0002. > > There are a bunch of assumptions embedded inside import_expressions() > that are interdependent with the calls of these attribute routines > ... > each STATISTIC_KIND_*. Too much is let to the reader to guess, making > the code complicated to maintain as written, at least IMHO. > I tried to expand on these things, but I haven't yet moved them to another file for reasons I'll explain later. > Is there any need to locate these new functions and code in > extended_stats.c, actually? A separation into a new file seems like > it would be a cleaner result, leaving extended_stats.c to deal with > the import of the new data, including the fetch and deletion of any > existing data in pg_stat_ext that would be updated or inserted. > Perhaps name that extended_stats_funcs.c, as these are about the > direct SQL functions, import and deletion. > We can move them to another file, but I'm not sure if that will actually make things clearer. What is extended_stats.c if not functions about extended stats? Perhaps it makes more sense to try harder to find the commonality in the building of the pg_statistic tuples, move those functions to stats_utils, and get things decluttered that way? For the tests, it looks like it would be better to have everything in > a new file, like a stats_ext_import.sql for the clear and restore > bits. > Those tests very much build upon the tables and data already created for regular relation/attribute imports, so we save quite a bit of boilerplate in keeping them there. > > A lot of the tests are copy-pastes of surrounding queries. Perhaps it > would be better to use a SQL function wrapper or an IN clause with > multiple relations? I'd say "no", because we're doing a lot of things that *could* generate ERRORs, and we're verifying that they generate WARNINGs instead. If we did batch up those commands, and any one of them generated an error, we'd be at loss for which one was the culprit, and we'd also lose any insight into what else got busted in the other rows of the batch. > The patch has a lot of bloat with these repeated > queries.. Perhaps we should use a split for the elements in the > extended stats array instead of jsonb_pretty(). The results get quite > long here. > I replaced '}, ' with '},\n' and removed the jsonb_pretty entirely, which is something I had proposed doing earlier, as it's actually more pretty than jsonb_pretty(). It's still in the same file, though. I like the net result of this, and it might make sense to search other regression tests for places where we can employ this mini-pretty pattern. > As of 0002, there are actually two independent pieces dealt with: the > deletion of extended stats with pg_clear_extended_stats(), and the > insert/update of extended stats with pg_restore_extended_stats(). I'd > suggest to split that into two parts, with the clear being first in > rank. The deletion is simpler, and getting that in first simplifies > the review of the import part with less input to deal with. > The pg_clear function is quite trivial, as it's basically just marshalling and locking before a call to delete_pg_statistic_ext_data(). So while I can split them out, I'd also have to split the pg_proc.dat changes into two separate ones, which makes it hard to see how similar they are. I have a similar feeling about the changes to func-admin.sgml. All of that, plus a rebase. --0000000000009961d50645287622 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Indeed.=C2=A0 These exact typos existed in some of the previous iterations<= br> of the patch posted on this thread.

+1<= /div>
=C2=A0
1) statatt_get_type(), that retrieves a set of information from a
relation and one of its attributes.=C2=A0 This is lightly documented in
extended_statistics_update() from 0002, with an argument claiming that
we do the same as attribute statistics.=C2=A0 If one then looks at
attribute_stats.c, we have a not-really-helpful "derive information from attribute".=C2=A0 The trick is that we have an implied dependency=
here: statatt_get_type() needs to be called *before*
statatt_get_elem_type() for attribute *and* extended stats,
statatt_get_elem_type() being fed data from statatt_get_type().

I've added comments to that effect.
= =C2=A0

2) statatt_get_elem_type(), interesting piece of the puzzle that acts
as a wrapper for the type cache.=C2=A0 An important part here, it seems to<= br> me, would be to at least tell that this relies on data retrieved from
statatt_get_type(), initially.=C2=A0 Once I've noticed this dependency = the
logic felt a bit cleaner to understand, but we have no docs explaining
any of that..

I've added comments t= hat will hopefully connect those dots.
=C2=A0

3) statatt_init_empty_tuple(), that initializes a set of data to be
used for updates and/or insertion.=C2=A0 My first thought here is about ...
not apply to extended stats.=C2=A0 But one would have to guess this= fact
after knowing that this relates to the catalog pg_statistic..

The comments didn't seem quite so illuminating, = but I added them just the same.
=C2=A0

4) statatt_set_slot is slightly simpler.=C2=A0 Still here, it is really eas= y
to miss that this routine should be fed data retrieved by
statatt_get_type().=C2=A0 staop can also be an eq or an lt operator.
stakind is one of the STATISTIC_KIND_* values, etc, etc.

Some here too.
=C2=A0
As far as I can see, there is nothing in thes= e functions that require
them to be located in attribute_stats.c anymore.=C2=A0 Let's move that = to
stats_utils.c, common place for all the shared facilities used by
these stats modules.=C2=A0 Or it could also be a new, separate patch, for the manipulation and extraction of the tuple data related to
the pg_statistic tuples.

They've be= en moved to stats_utils.c, and impact was fairly minimal. I was worried abo= ut an explosion of #includes, but that ended up not being the case.
=C2=A0
Perhaps you know what these imply because you have written this code
originally in ce207d2a7901, but exposing them also means that it is
very important to document at least some concepts and assumptions
around them so as it is possible to guide somebody that may want to
use this code:
- What are the input arguments from?
- And what are the results?
- In which circumstances should these be used?

An attempt was made.
=C2=A0
Then about 0002.

There are a bunch of assumptions embedded inside import_expressions()
that are interdependent with the calls of these attribute routines
...each STATISTIC_KIND_*.=C2=A0 Too much is let to the reader to guess, maki= ng
the code complicated to maintain as written, at least IMHO.

I tried to expand on these things, but I haven't y= et moved them to another file for reasons I'll explain later.
=C2=A0
Is there any need to locate these new functions and code in
extended_stats.c, actually?=C2=A0 A separation into a new file seems like it would be a cleaner result, leaving extended_stats.c to deal with
the import of the new data, including the fetch and deletion of any
existing data in pg_stat_ext that would be updated or inserted.
Perhaps name that extended_stats_funcs.c, as these are about the
direct SQL functions, import and deletion.

<= div>We can move them to another file, but I'm not sure if that will act= ually make things clearer. What is extended_stats.c if not functions about = extended stats? Perhaps it makes more sense to try harder to find the commo= nality in the building of the pg_statistic tuples, move those functions to = stats_utils, and get things decluttered that way?

=
For the tests, it looks like it would be better to have everything in
a new file, like a stats_ext_import.sql for the clear and restore
bits.

Those tests very much build upon = the tables and data already created for regular relation/attribute imports,= so we save quite a bit of boilerplate in keeping them there.
=C2= =A0

A lot of the tests are copy-pastes of surrounding queries.=C2=A0 Perhaps it=
would be better to use a SQL function wrapper or an IN clause with
multiple relations?

I'd say "no&qu= ot;, because we're doing a lot of things that *could* generate ERRORs, = and we're verifying that they generate WARNINGs instead. If we did batc= h up those commands, and any one of them generated an error, we'd be at= loss for which one was the culprit, and we'd also lose any insight int= o what else got busted in the other rows of the batch.
=C2=A0
=C2=A0 The p= atch has a lot of bloat with these repeated
queries..=C2=A0 Perhaps we should use a split for the elements in the
extended stats array instead of jsonb_pretty().=C2=A0 The results get quite=
long here.

I replaced '}, ' wit= h '},\n' and removed the jsonb_pretty entirely, which is something = I had proposed doing earlier, as it's actually more pretty than jsonb_p= retty(). It's still in the same file, though.

= I like the net result of this, and it might make sense to search other regr= ession tests for places where we can employ this mini-pretty pattern.
=
=C2=A0
As of 0002, there are actually two independent pieces dealt with: the
deletion of extended stats with pg_clear_extended_stats(), and the
insert/update of extended stats with pg_restore_extended_stats().=C2=A0 I&#= 39;d
suggest to split that into two parts, with the clear being first in
rank.=C2=A0 The deletion is simpler, and getting that in first simplifies the review of the import part with less input to deal with.

The pg_clear function is quite trivial, as it's ba= sically just marshalling and locking before a call to delete_pg_statistic_e= xt_data(). So while I can split them out, I'd also have to split the pg= _proc.dat changes into two separate ones, which makes it hard to see how si= milar they are. I have a similar feeling about the changes to func-admin.sg= ml.

All of that, plus a rebase.
--0000000000009961d50645287622-- --0000000000009961d60645287624 Content-Type: text/x-patch; charset="US-ASCII"; name="v20-0001-Expose-attribute-statistics-functions-for-use-in.patch" Content-Disposition: attachment; filename="v20-0001-Expose-attribute-statistics-functions-for-use-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mis1w4g60 RnJvbSBmMGRhOTVhODhlNDNlMjA0NmJjMWY1Mjg3YjlhZDdkZGJiMjUxZTEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCA0IE5vdiAyMDI1IDIzOjUwOjAxIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 MjAgMS8zXSBFeHBvc2UgYXR0cmlidXRlIHN0YXRpc3RpY3MgZnVuY3Rpb25zIGZvciB1c2UgaW4K IGV4dGVuZGVkX3N0YXRzLgoKTWFueSBvZiB0aGUgb3BlcmF0aW9ucyBvZiBhdHRyaWJ1dGUgc3Rh dHMgaGF2ZSBhbmFsb2dvdXMgb3BlcmF0aW9ucyBpbgpleHRlbmRlZCBzdGF0cy4KCiogZ2V0X2F0 dHJfc3RhdF90eXBlKCkgcmVuYW1lZCB0byBzdGF0YXR0X2dldF90eXBlKCkKKiBpbml0X2VtcHR5 X3N0YXRzX3R1cGxlKCkgcmVuYW1lZCB0byBzdGF0YXR0X2luaXRfZW1wdHlfdHVwbGUoKQoqIHRl eHRfdG9fc3RhdmFsdWVzKCkKKiBnZXRfZWxlbV9zdGF0X3R5cGUoKSByZW5hbWVkIHRvIHN0YXRh dHRfZ2V0X2VsZW1fdHlwZSgpCgpBbHNvLCBhZGQgY29tbWVudHMgZXhwbGFpbmluZyB0aGUgZnVu Y3Rpb24gYXJndW1lbnQgaW5kZXggZW51bXMsIGFuZCB0aGUKYXJyYXlzIHRoYXQgYXJlIGluZGV4 ZWQgYnkgdGhvc2UgZW51bXMuCi0tLQogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0X3V0aWxz LmggICAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMu YyB8IDQyNCArKystLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9z dGF0X3V0aWxzLmMgICAgICB8IDM3MiArKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCA0MzQgaW5zZXJ0aW9ucygrKSwgMzgzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9zdGF0X3V0aWxzLmgKaW5kZXggZjQxYjE4MWQ0ZDMuLmU1N2EwMTA0M2I3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9z dGF0aXN0aWNzL3N0YXRfdXRpbHMuaApAQCAtMTQsOSArMTQsNyBAQAogI2RlZmluZSBTVEFUU19V VElMU19ICiAKICNpbmNsdWRlICJmbWdyLmgiCi0KLS8qIGF2b2lkIGluY2x1ZGluZyBwcmltbm9k ZXMuaCBoZXJlICovCi10eXBlZGVmIHN0cnVjdCBSYW5nZVZhciBSYW5nZVZhcjsKKyNpbmNsdWRl ICJub2Rlcy9wYXRobm9kZXMuaCIKIAogc3RydWN0IFN0YXRzQXJnSW5mbwogewpAQCAtNDAsNCAr MzgsMjEgQEAgZXh0ZXJuIGJvb2wgc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdfcGFpcnMoRnVu Y3Rpb25DYWxsSW5mbyBwYWlyc19mY2luZm8sCiAJCQkJCQkJCQkJCSBGdW5jdGlvbkNhbGxJbmZv IHBvc2l0aW9uYWxfZmNpbmZvLAogCQkJCQkJCQkJCQkgc3RydWN0IFN0YXRzQXJnSW5mbyAqYXJn aW5mbyk7CiAKK2V4dGVybiB2b2lkIHN0YXRhdHRfZ2V0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51 bWJlciBhdHRudW0sCisJCQkJCQkJIE9pZCAqYXR0dHlwaWQsIGludDMyICphdHR0eXBtb2QsCisJ CQkJCQkJIGNoYXIgKmF0dHR5cHR5cGUsIE9pZCAqYXR0dHlwY29sbCwKKwkJCQkJCQkgT2lkICpl cV9vcHIsIE9pZCAqbHRfb3ByKTsKK2V4dGVybiB2b2lkIHN0YXRhdHRfaW5pdF9lbXB0eV90dXBs ZShPaWQgcmVsb2lkLCBpbnQxNiBhdHRudW0sIGJvb2wgaW5oZXJpdGVkLAorCQkJCQkJCQkJIERh dHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcyk7CisKK2V4dGVybiB2b2lk IHN0YXRhdHRfc2V0X3Nsb3QoRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMsIGJvb2wgKnJlcGxh Y2VzLAorCQkJCQkJCSBpbnQxNiBzdGFraW5kLCBPaWQgc3Rhb3AsIE9pZCBzdGFjb2xsLAorCQkJ CQkJCSBEYXR1bSBzdGFudW1iZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLAorCQkJCQkJCSBE YXR1bSBzdGF2YWx1ZXMsIGJvb2wgc3RhdmFsdWVzX2lzbnVsbCk7CisKK2V4dGVybiBEYXR1bSB0 ZXh0X3RvX3N0YXZhbHVlcyhjb25zdCBjaGFyICpzdGFuYW1lLCBGbWdySW5mbyAqYXJyYXlfaW4s IERhdHVtIGQsCisJCQkJCQkJICAgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIGJvb2wgKm9rKTsK K2V4dGVybiBib29sIHN0YXRhdHRfZ2V0X2VsZW1fdHlwZShPaWQgYXR0dHlwaWQsIGNoYXIgYXR0 dHlwdHlwZSwKKwkJCQkJCQkJICBPaWQgKmVsZW10eXBpZCwgT2lkICplbGVtX2VxX29wcik7CisK ICNlbmRpZgkJCQkJCQkvKiBTVEFUU19VVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9h dHRyaWJ1dGVfc3RhdHMuYwppbmRleCBlZjRkNzY4ZmVhYi4uOWIyODkxMjlmY2MgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwpAQCAtMjAsMTAgKzIwLDggQEAKICNp bmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgog I2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xs YXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCi0jaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAi c3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTMyLDEwICszMCw2IEBACiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotI2Rl ZmluZSBERUZBVUxUX05VTExfRlJBQyAgICAgIEZsb2F0NEdldERhdHVtKDAuMCkKLSNkZWZpbmUg REVGQVVMVF9BVkdfV0lEVEggICAgICBJbnQzMkdldERhdHVtKDApIC8qIHVua25vd24gKi8KLSNk ZWZpbmUgREVGQVVMVF9OX0RJU1RJTkNUICAgICBGbG9hdDRHZXREYXR1bSgwLjApCS8qIHVua25v d24gKi8KLQogLyoKICAqIFBvc2l0aW9uYWwgYXJndW1lbnQgbnVtYmVycywgbmFtZXMsIGFuZCB0 eXBlcyBmb3IKICAqIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZSgpIGFuZCBwZ19yZXN0b3Jl X2F0dHJpYnV0ZV9zdGF0cygpLgpAQCAtNjQsNiArNTgsMTAgQEAgZW51bSBhdHRyaWJ1dGVfc3Rh dHNfYXJnbnVtCiAJTlVNX0FUVFJJQlVURV9TVEFUU19BUkdTCiB9OwogCisvKgorICogVGhlIGFy Z3VtZW50IG5hbWVzIGFuZCB0eXBvaWRzIG9mIHRoZSBhcmd1bWVudHMgZm9yCisgKiBhdHRyaWJ1 dGVfc3RhdGlzdGljc191cGRhdGUuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgU3RhdHNBcmdJbmZvIGF0 dGFyZ2luZm9bXSA9CiB7CiAJW0FUVFJFTFNDSEVNQV9BUkddID0geyJzY2hlbWFuYW1lIiwgVEVY VE9JRH0sCkBAIC0xMDEsNiArOTksMTAgQEAgZW51bSBjbGVhcl9hdHRyaWJ1dGVfc3RhdHNfYXJn bnVtCiAJQ19OVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MKIH07CiAKKy8qCisgKiBUaGUgYXJndW1l bnQgbmFtZXMgYW5kIHR5cG9pZHMgb2YgdGhlIGFyZ3VtZW50cyBmb3IKKyAqIHBnX2NsZWFyX2F0 dHJpYnV0ZV9zdGF0cy4KKyAqLwogc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gY2xlYXJhcmdp bmZvW10gPQogewogCVtDX0FUVFJFTFNDSEVNQV9BUkddID0geyJyZWxhdGlvbiIsIFRFWFRPSUR9 LApAQCAtMTExLDI0ICsxMTMsOSBAQCBzdGF0aWMgc3RydWN0IFN0YXRzQXJnSW5mbyBjbGVhcmFy Z2luZm9bXSA9CiB9OwogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUo RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOwotc3RhdGljIE5vZGUgKmdldF9hdHRyX2V4cHIoUmVs YXRpb24gcmVsLCBpbnQgYXR0bnVtKTsKLXN0YXRpYyB2b2lkIGdldF9hdHRyX3N0YXRfdHlwZShP aWQgcmVsb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwKLQkJCQkJCQkgICBPaWQgKmF0dHR5cGlkLCBp bnQzMiAqYXR0dHlwbW9kLAotCQkJCQkJCSAgIGNoYXIgKmF0dHR5cHR5cGUsIE9pZCAqYXR0dHlw Y29sbCwKLQkJCQkJCQkgICBPaWQgKmVxX29wciwgT2lkICpsdF9vcHIpOwotc3RhdGljIGJvb2wg Z2V0X2VsZW1fc3RhdF90eXBlKE9pZCBhdHR0eXBpZCwgY2hhciBhdHR0eXB0eXBlLAotCQkJCQkJ CSAgIE9pZCAqZWxlbXR5cGlkLCBPaWQgKmVsZW1fZXFfb3ByKTsKLXN0YXRpYyBEYXR1bSB0ZXh0 X3RvX3N0YXZhbHVlcyhjb25zdCBjaGFyICpzdGFuYW1lLCBGbWdySW5mbyAqYXJyYXlfaW4sIERh dHVtIGQsCi0JCQkJCQkJICAgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIGJvb2wgKm9rKTsKLXN0 YXRpYyB2b2lkIHNldF9zdGF0c19zbG90KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29s ICpyZXBsYWNlcywKLQkJCQkJCSAgIGludDE2IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNv bGwsCi0JCQkJCQkgICBEYXR1bSBzdGFudW1iZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLAot CQkJCQkJICAgRGF0dW0gc3RhdmFsdWVzLCBib29sIHN0YXZhbHVlc19pc251bGwpOwogc3RhdGlj IHZvaWQgdXBzZXJ0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBzdGFyZWwsIEhlYXBUdXBsZSBvbGR0 dXAsCiAJCQkJCQkJCWNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBjb25z dCBib29sICpyZXBsYWNlcyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfcGdfc3RhdGlzdGljKE9pZCBy ZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWluaGVyaXQpOwotc3RhdGljIHZvaWQg aW5pdF9lbXB0eV9zdGF0c190dXBsZShPaWQgcmVsb2lkLCBpbnQxNiBhdHRudW0sIGJvb2wgaW5o ZXJpdGVkLAotCQkJCQkJCQkgICBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAqcmVw bGFjZXMpOwogCiAvKgogICogSW5zZXJ0IG9yIFVwZGF0ZSBBdHRyaWJ1dGUgU3RhdGlzdGljcwpA QCAtMjk4LDE2ICsyODUsMTYgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvKQogCX0KIAogCS8qIGRlcml2ZSBpbmZvcm1hdGlvbiBmcm9tIGF0dHJp YnV0ZSAqLwotCWdldF9hdHRyX3N0YXRfdHlwZShyZWxvaWQsIGF0dG51bSwKLQkJCQkJICAgJmF0 dHR5cGlkLCAmYXR0dHlwbW9kLAotCQkJCQkgICAmYXR0dHlwdHlwZSwgJmF0dHR5cGNvbGwsCi0J CQkJCSAgICZlcV9vcHIsICZsdF9vcHIpOworCXN0YXRhdHRfZ2V0X3R5cGUocmVsb2lkLCBhdHRu dW0sCisJCQkJCSAmYXR0dHlwaWQsICZhdHR0eXBtb2QsCisJCQkJCSAmYXR0dHlwdHlwZSwgJmF0 dHR5cGNvbGwsCisJCQkJCSAmZXFfb3ByLCAmbHRfb3ByKTsKIAogCS8qIGlmIG5lZWRlZCwgZGVy aXZlIGVsZW1lbnQgdHlwZSAqLwogCWlmIChkb19tY2VsZW0gfHwgZG9fZGVjaGlzdCkKIAl7Ci0J CWlmICghZ2V0X2VsZW1fc3RhdF90eXBlKGF0dHR5cGlkLCBhdHR0eXB0eXBlLAotCQkJCQkJCQkm ZWxlbXR5cGlkLCAmZWxlbV9lcV9vcHIpKQorCQlpZiAoIXN0YXRhdHRfZ2V0X2VsZW1fdHlwZShh dHR0eXBpZCwgYXR0dHlwdHlwZSwKKwkJCQkJCQkJICAgJmVsZW10eXBpZCwgJmVsZW1fZXFfb3By KSkKIAkJewogCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZGV0 ZXJtaW5lIGVsZW1lbnQgdHlwZSBvZiBjb2x1bW4gXCIlc1wiIiwgYXR0bmFtZSksCkBAIC0zNjEs OCArMzQ4LDggQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvKQogCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHN0YXR1cCkpCiAJCWhlYXBfZGVmb3JtX3R1 cGxlKHN0YXR1cCwgUmVsYXRpb25HZXREZXNjcihzdGFyZWwpLCB2YWx1ZXMsIG51bGxzKTsKIAll bHNlCi0JCWluaXRfZW1wdHlfc3RhdHNfdHVwbGUocmVsb2lkLCBhdHRudW0sIGluaGVyaXRlZCwg dmFsdWVzLCBudWxscywKLQkJCQkJCQkgICByZXBsYWNlcyk7CisJCXN0YXRhdHRfaW5pdF9lbXB0 eV90dXBsZShyZWxvaWQsIGF0dG51bSwgaW5oZXJpdGVkLCB2YWx1ZXMsIG51bGxzLAorCQkJCQkJ CQkgcmVwbGFjZXMpOwogCiAJLyogaWYgc3BlY2lmaWVkLCBzZXQgdG8gYXJndW1lbnQgdmFsdWVz ICovCiAJaWYgKCFQR19BUkdJU05VTEwoTlVMTF9GUkFDX0FSRykpCkBAIC0zOTQsMTAgKzM4MSwx MCBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p CiAKIAkJaWYgKGNvbnZlcnRlZCkKIAkJewotCQkJc2V0X3N0YXRzX3Nsb3QodmFsdWVzLCBudWxs cywgcmVwbGFjZXMsCi0JCQkJCQkgICBTVEFUSVNUSUNfS0lORF9NQ1YsCi0JCQkJCQkgICBlcV9v cHIsIGF0dHR5cGNvbGwsCi0JCQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBm YWxzZSk7CisJCQlzdGF0YXR0X3NldF9zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAorCQkJ CQkJCSBTVEFUSVNUSUNfS0lORF9NQ1YsCisJCQkJCQkJIGVxX29wciwgYXR0dHlwY29sbCwKKwkJ CQkJCQkgc3RhbnVtYmVycywgZmFsc2UsIHN0YXZhbHVlcywgZmFsc2UpOwogCQl9CiAJCWVsc2UK IAkJCXJlc3VsdCA9IGZhbHNlOwpAQCAtNDE3LDEwICs0MDQsMTAgQEAgYXR0cmlidXRlX3N0YXRp c3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCiAJCWlmIChjb252ZXJ0ZWQp CiAJCXsKLQkJCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAotCQkJCQkJ ICAgU1RBVElTVElDX0tJTkRfSElTVE9HUkFNLAotCQkJCQkJICAgbHRfb3ByLCBhdHR0eXBjb2xs LAotCQkJCQkJICAgMCwgdHJ1ZSwgc3RhdmFsdWVzLCBmYWxzZSk7CisJCQlzdGF0YXR0X3NldF9z bG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAorCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9ISVNU T0dSQU0sCisJCQkJCQkJIGx0X29wciwgYXR0dHlwY29sbCwKKwkJCQkJCQkgMCwgdHJ1ZSwgc3Rh dmFsdWVzLCBmYWxzZSk7CiAJCX0KIAkJZWxzZQogCQkJcmVzdWx0ID0gZmFsc2U7CkBAIC00MzMs MTAgKzQyMCwxMCBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8pCiAJCUFycmF5VHlwZSAgKmFycnkgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihl bGVtcywgMSwgRkxPQVQ0T0lEKTsKIAkJRGF0dW0JCXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0 dW0oYXJyeSk7CiAKLQkJc2V0X3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgcmVwbGFjZXMsCi0J CQkJCSAgIFNUQVRJU1RJQ19LSU5EX0NPUlJFTEFUSU9OLAotCQkJCQkgICBsdF9vcHIsIGF0dHR5 cGNvbGwsCi0JCQkJCSAgIHN0YW51bWJlcnMsIGZhbHNlLCAwLCB0cnVlKTsKKwkJc3RhdGF0dF9z ZXRfc2xvdCh2YWx1ZXMsIG51bGxzLCByZXBsYWNlcywKKwkJCQkJCSBTVEFUSVNUSUNfS0lORF9D T1JSRUxBVElPTiwKKwkJCQkJCSBsdF9vcHIsIGF0dHR5cGNvbGwsCisJCQkJCQkgc3RhbnVtYmVy cywgZmFsc2UsIDAsIHRydWUpOwogCX0KIAogCS8qIFNUQVRJU1RJQ19LSU5EX01DRUxFTSAqLwpA QCAtNDU0LDEwICs0NDEsMTAgQEAgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvKQogCiAJCWlmIChjb252ZXJ0ZWQpCiAJCXsKLQkJCXNldF9zdGF0c19z bG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAotCQkJCQkJICAgU1RBVElTVElDX0tJTkRfTUNF TEVNLAotCQkJCQkJICAgZWxlbV9lcV9vcHIsIGF0dHR5cGNvbGwsCi0JCQkJCQkgICBzdGFudW1i ZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBmYWxzZSk7CisJCQlzdGF0YXR0X3NldF9zbG90KHZhbHVl cywgbnVsbHMsIHJlcGxhY2VzLAorCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9NQ0VMRU0sCisJCQkJ CQkJIGVsZW1fZXFfb3ByLCBhdHR0eXBjb2xsLAorCQkJCQkJCSBzdGFudW1iZXJzLCBmYWxzZSwg c3RhdmFsdWVzLCBmYWxzZSk7CiAJCX0KIAkJZWxzZQogCQkJcmVzdWx0ID0gZmFsc2U7CkBAIC00 NjgsMTAgKzQ1NSwxMCBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8pCiAJewogCQlEYXR1bQkJc3RhbnVtYmVycyA9IFBHX0dFVEFSR19EQVRVTShF TEVNX0NPVU5UX0hJU1RPR1JBTV9BUkcpOwogCi0JCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVs bHMsIHJlcGxhY2VzLAotCQkJCQkgICBTVEFUSVNUSUNfS0lORF9ERUNISVNULAotCQkJCQkgICBl bGVtX2VxX29wciwgYXR0dHlwY29sbCwKLQkJCQkJICAgc3RhbnVtYmVycywgZmFsc2UsIDAsIHRy dWUpOworCQlzdGF0YXR0X3NldF9zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAorCQkJCQkJ IFNUQVRJU1RJQ19LSU5EX0RFQ0hJU1QsCisJCQkJCQkgZWxlbV9lcV9vcHIsIGF0dHR5cGNvbGws CisJCQkJCQkgc3RhbnVtYmVycywgZmFsc2UsIDAsIHRydWUpOwogCX0KIAogCS8qCkBAIC00OTQs MTAgKzQ4MSwxMCBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8pCiAKIAkJaWYgKGNvbnZlcnRlZCkKIAkJewotCQkJc2V0X3N0YXRzX3Nsb3QodmFs dWVzLCBudWxscywgcmVwbGFjZXMsCi0JCQkJCQkgICBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElT VE9HUkFNLAotCQkJCQkJICAgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwKLQkJCQkJCSAgIDAsIHRy dWUsIHN0YXZhbHVlcywgZmFsc2UpOworCQkJc3RhdGF0dF9zZXRfc2xvdCh2YWx1ZXMsIG51bGxz LCByZXBsYWNlcywKKwkJCQkJCQkgU1RBVElTVElDX0tJTkRfQk9VTkRTX0hJU1RPR1JBTSwKKwkJ CQkJCQkgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkgMCwgdHJ1ZSwgc3RhdmFsdWVz LCBmYWxzZSk7CiAJCX0KIAkJZWxzZQogCQkJcmVzdWx0ID0gZmFsc2U7CkBAIC01MjEsMTAgKzUw OCwxMCBAQCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8pCiAKIAkJaWYgKGNvbnZlcnRlZCkKIAkJewotCQkJc2V0X3N0YXRzX3Nsb3QodmFsdWVzLCBu dWxscywgcmVwbGFjZXMsCi0JCQkJCQkgICBTVEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElT VE9HUkFNLAotCQkJCQkJICAgRmxvYXQ4TGVzc09wZXJhdG9yLCBJbnZhbGlkT2lkLAotCQkJCQkJ ICAgc3RhbnVtYmVycywgZmFsc2UsIHN0YXZhbHVlcywgZmFsc2UpOworCQkJc3RhdGF0dF9zZXRf c2xvdCh2YWx1ZXMsIG51bGxzLCByZXBsYWNlcywKKwkJCQkJCQkgU1RBVElTVElDX0tJTkRfUkFO R0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgRmxvYXQ4TGVzc09wZXJhdG9yLCBJbnZhbGlk T2lkLAorCQkJCQkJCSBzdGFudW1iZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBmYWxzZSk7CiAJCX0K IAkJZWxzZQogCQkJcmVzdWx0ID0gZmFsc2U7CkBAIC01MzksMjkxICs1MjYsNiBAQCBhdHRyaWJ1 dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJcmV0dXJuIHJl c3VsdDsKIH0KIAotLyoKLSAqIElmIHRoaXMgcmVsYXRpb24gaXMgYW4gaW5kZXggYW5kIHRoYXQg aW5kZXggaGFzIGV4cHJlc3Npb25zIGluIGl0LCBhbmQKLSAqIHRoZSBhdHRudW0gc3BlY2lmaWVk IGlzIGtub3duIHRvIGJlIGFuIGV4cHJlc3Npb24sIHRoZW4gd2UgbXVzdCB3YWxrCi0gKiB0aGUg bGlzdCBhdHRyaWJ1dGVzIHVwIHRvIHRoZSBzcGVjaWZpZWQgYXR0bnVtIHRvIGdldCB0aGUgcmln aHQKLSAqIGV4cHJlc3Npb24uCi0gKi8KLXN0YXRpYyBOb2RlICoKLWdldF9hdHRyX2V4cHIoUmVs YXRpb24gcmVsLCBpbnQgYXR0bnVtKQotewotCUxpc3QJICAgKmluZGV4X2V4cHJzOwotCUxpc3RD ZWxsICAgKmluZGV4cHJfaXRlbTsKLQotCS8qIHJlbGF0aW9uIGlzIG5vdCBhbiBpbmRleCAqLwot CWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX0lOREVYICYmCi0JCXJlbC0+cmRf cmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVgpCi0JCXJldHVybiBOVUxM OwotCi0JaW5kZXhfZXhwcnMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMocmVsKTsKLQot CS8qIGluZGV4IGhhcyBubyBleHByZXNzaW9ucyB0byBnaXZlICovCi0JaWYgKGluZGV4X2V4cHJz ID09IE5JTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKgotCSAqIFRoZSBpbmRleCBhdHRudW0gcG9p bnRzIGRpcmVjdGx5IHRvIGEgcmVsYXRpb24gYXR0bnVtLCB0aGVuIGl0J3Mgbm90IGFuCi0JICog ZXhwcmVzc2lvbiBhdHRyaWJ1dGUuCi0JICovCi0JaWYgKHJlbC0+cmRfaW5kZXgtPmluZGtleS52 YWx1ZXNbYXR0bnVtIC0gMV0gIT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpbmRleHByX2l0ZW0g PSBsaXN0X2hlYWQocmVsLT5yZF9pbmRleHBycyk7Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8IGF0 dG51bSAtIDE7IGkrKykKLQkJaWYgKHJlbC0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNbaV0gPT0g MCkKLQkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KHJlbC0+cmRfaW5kZXhwcnMsIGluZGV4cHJfaXRl bSk7Ci0KLQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8K LQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7Ci0KLQly ZXR1cm4gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7Ci19Ci0KLS8qCi0gKiBEZXJpdmUg dHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhdHRyaWJ1dGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1n ZXRfYXR0cl9zdGF0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sCi0JCQkJICAg T2lkICphdHR0eXBpZCwgaW50MzIgKmF0dHR5cG1vZCwKLQkJCQkgICBjaGFyICphdHR0eXB0eXBl LCBPaWQgKmF0dHR5cGNvbGwsCi0JCQkJICAgT2lkICplcV9vcHIsIE9pZCAqbHRfb3ByKQotewot CVJlbGF0aW9uCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsb2lkLCBBY2Nlc3NTaGFyZUxvY2spOwot CUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7Ci0JSGVhcFR1cGxlCWF0dXA7Ci0JTm9kZQkgICAqZXhw cjsKLQlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGU7Ci0KLQlhdHVwID0gU2VhcmNoU3lzQ2FjaGUy KEFUVE5VTSwgT2JqZWN0SWRHZXREYXR1bShyZWxvaWQpLAotCQkJCQkJICAgSW50MTZHZXREYXR1 bShhdHRudW0pKTsKLQotCS8qIEF0dHJpYnV0ZSBub3QgZm91bmQgKi8KLQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYXR1cCkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfQ09MVU1OKSwKLQkJCQkgZXJybXNnKCJjb2x1bW4gJWQgb2YgcmVsYXRpb24gXCIl c1wiIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCWF0dG51bSwgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSkpKTsKLQotCWF0dHIgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHVw KTsKLQotCWlmIChhdHRyLT5hdHRpc2Ryb3BwZWQpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVy cmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKLQkJCQkgZXJybXNnKCJjb2x1bW4gJWQg b2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCWF0dG51bSwgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKLQotCWV4cHIgPSBnZXRfYXR0cl9leHByKHJlbCwg YXR0ci0+YXR0bnVtKTsKLQotCS8qCi0JICogV2hlbiBhbmFseXppbmcgYW4gZXhwcmVzc2lvbiBp bmRleCwgYmVsaWV2ZSB0aGUgZXhwcmVzc2lvbiB0cmVlJ3MgdHlwZQotCSAqIG5vdCB0aGUgY29s dW1uIGRhdGF0eXBlIC0tLSB0aGUgbGF0dGVyIG1pZ2h0IGJlIHRoZSBvcGNrZXl0eXBlIHN0b3Jh Z2UKLQkgKiB0eXBlIG9mIHRoZSBvcGNsYXNzLCB3aGljaCBpcyBub3QgaW50ZXJlc3RpbmcgZm9y IG91ciBwdXJwb3Nlcy4gVGhpcwotCSAqIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgZXhhbWluZV9h dHRyaWJ1dGUoKS4KLQkgKi8KLQlpZiAoZXhwciA9PSBOVUxMKQotCXsKLQkJKmF0dHR5cGlkID0g YXR0ci0+YXR0dHlwaWQ7Ci0JCSphdHR0eXBtb2QgPSBhdHRyLT5hdHR0eXBtb2Q7Ci0JCSphdHR0 eXBjb2xsID0gYXR0ci0+YXR0Y29sbGF0aW9uOwotCX0KLQllbHNlCi0JewotCQkqYXR0dHlwaWQg PSBleHByVHlwZShleHByKTsKLQkJKmF0dHR5cG1vZCA9IGV4cHJUeXBtb2QoZXhwcik7Ci0KLQkJ aWYgKE9pZElzVmFsaWQoYXR0ci0+YXR0Y29sbGF0aW9uKSkKLQkJCSphdHR0eXBjb2xsID0gYXR0 ci0+YXR0Y29sbGF0aW9uOwotCQllbHNlCi0JCQkqYXR0dHlwY29sbCA9IGV4cHJDb2xsYXRpb24o ZXhwcik7Ci0JfQotCVJlbGVhc2VTeXNDYWNoZShhdHVwKTsKLQotCS8qCi0JICogSWYgaXQncyBh IG11bHRpcmFuZ2UsIHN0ZXAgZG93biB0byB0aGUgcmFuZ2UgdHlwZSwgYXMgaXMgZG9uZSBieQot CSAqIG11bHRpcmFuZ2VfdHlwYW5hbHl6ZSgpLgotCSAqLwotCWlmICh0eXBlX2lzX211bHRpcmFu Z2UoKmF0dHR5cGlkKSkKLQkJKmF0dHR5cGlkID0gZ2V0X211bHRpcmFuZ2VfcmFuZ2UoKmF0dHR5 cGlkKTsKLQotCS8qIGZpbmRzIHRoZSByaWdodCBvcGVyYXRvcnMgZXZlbiBpZiBhdHR0eXBpZCBp cyBhIGRvbWFpbiAqLwotCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUoKmF0dHR5cGlkLCBU WVBFQ0FDSEVfTFRfT1BSIHwgVFlQRUNBQ0hFX0VRX09QUik7Ci0JKmF0dHR5cHR5cGUgPSB0eXBj YWNoZS0+dHlwdHlwZTsKLQkqZXFfb3ByID0gdHlwY2FjaGUtPmVxX29wcjsKLQkqbHRfb3ByID0g dHlwY2FjaGUtPmx0X29wcjsKLQotCS8qCi0JICogU3BlY2lhbCBjYXNlOiBjb2xsYXRpb24gZm9y IHRzdmVjdG9yIGlzIERFRkFVTFRfQ09MTEFUSU9OX09JRC4gU2VlCi0JICogY29tcHV0ZV90c3Zl Y3Rvcl9zdGF0cygpLgotCSAqLwotCWlmICgqYXR0dHlwaWQgPT0gVFNWRUNUT1JPSUQpCi0JCSph dHR0eXBjb2xsID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOwotCi0JcmVsYXRpb25fY2xvc2UocmVs LCBOb0xvY2spOwotfQotCi0vKgotICogRGVyaXZlIGVsZW1lbnQgdHlwZSBpbmZvcm1hdGlvbiBm cm9tIHRoZSBhdHRyaWJ1dGUgdHlwZS4KLSAqLwotc3RhdGljIGJvb2wKLWdldF9lbGVtX3N0YXRf dHlwZShPaWQgYXR0dHlwaWQsIGNoYXIgYXR0dHlwdHlwZSwKLQkJCQkgICBPaWQgKmVsZW10eXBp ZCwgT2lkICplbGVtX2VxX29wcikKLXsKLQlUeXBlQ2FjaGVFbnRyeSAqZWxlbXR5cGNhY2hlOwot Ci0JaWYgKGF0dHR5cGlkID09IFRTVkVDVE9ST0lEKQotCXsKLQkJLyoKLQkJICogU3BlY2lhbCBj YXNlOiBlbGVtZW50IHR5cGUgZm9yIHRzdmVjdG9yIGlzIHRleHQuIFNlZQotCQkgKiBjb21wdXRl X3RzdmVjdG9yX3N0YXRzKCkuCi0JCSAqLwotCQkqZWxlbXR5cGlkID0gVEVYVE9JRDsKLQl9Ci0J ZWxzZQotCXsKLQkJLyogZmluZCB1bmRlcmx5aW5nIGVsZW1lbnQgdHlwZSB0aHJvdWdoIGFueSBk b21haW4gKi8KLQkJKmVsZW10eXBpZCA9IGdldF9iYXNlX2VsZW1lbnRfdHlwZShhdHR0eXBpZCk7 Ci0JfQotCi0JaWYgKCFPaWRJc1ZhbGlkKCplbGVtdHlwaWQpKQotCQlyZXR1cm4gZmFsc2U7Ci0K LQkvKiBmaW5kcyB0aGUgcmlnaHQgb3BlcmF0b3IgZXZlbiBpZiBlbGVtdHlwaWQgaXMgYSBkb21h aW4gKi8KLQllbGVtdHlwY2FjaGUgPSBsb29rdXBfdHlwZV9jYWNoZSgqZWxlbXR5cGlkLCBUWVBF Q0FDSEVfRVFfT1BSKTsKLQlpZiAoIU9pZElzVmFsaWQoZWxlbXR5cGNhY2hlLT5lcV9vcHIpKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQkqZWxlbV9lcV9vcHIgPSBlbGVtdHlwY2FjaGUtPmVxX29wcjsK LQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogQ2FzdCBhIHRleHQgZGF0dW0gaW50byBhbiBh cnJheSB3aXRoIGVsZW1lbnQgdHlwZSBlbGVtdHlwaWQuCi0gKgotICogSWYgYW4gZXJyb3IgaXMg ZW5jb3VudGVyZWQsIGNhcHR1cmUgaXQgYW5kIHJlLXRocm93IGEgV0FSTklORywgYW5kIHNldCBv awotICogdG8gZmFsc2UuIElmIHRoZSByZXN1bHRpbmcgYXJyYXkgY29udGFpbnMgTlVMTHMsIHJh aXNlIGEgV0FSTklORyBhbmQgc2V0IG9rCi0gKiB0byBmYWxzZS4gT3RoZXJ3aXNlLCBzZXQgb2sg dG8gdHJ1ZS4KLSAqLwotc3RhdGljIERhdHVtCi10ZXh0X3RvX3N0YXZhbHVlcyhjb25zdCBjaGFy ICpzdGFuYW1lLCBGbWdySW5mbyAqYXJyYXlfaW4sIERhdHVtIGQsIE9pZCB0eXBpZCwKLQkJCQkg IGludDMyIHR5cG1vZCwgYm9vbCAqb2spCi17Ci0JTE9DQUxfRkNJTkZPKGZjaW5mbywgOCk7Ci0J Y2hhcgkgICAqczsKLQlEYXR1bQkJcmVzdWx0OwotCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0 ID0ge1RfRXJyb3JTYXZlQ29udGV4dH07Ci0KLQllc2NvbnRleHQuZGV0YWlsc193YW50ZWQgPSB0 cnVlOwotCi0JcyA9IFRleHREYXR1bUdldENTdHJpbmcoZCk7Ci0KLQlJbml0RnVuY3Rpb25DYWxs SW5mb0RhdGEoKmZjaW5mbywgYXJyYXlfaW4sIDMsIEludmFsaWRPaWQsCi0JCQkJCQkJIChOb2Rl ICopICZlc2NvbnRleHQsIE5VTEwpOwotCi0JZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gQ1N0cmlu Z0dldERhdHVtKHMpOwotCWZjaW5mby0+YXJnc1swXS5pc251bGwgPSBmYWxzZTsKLQlmY2luZm8t PmFyZ3NbMV0udmFsdWUgPSBPYmplY3RJZEdldERhdHVtKHR5cGlkKTsKLQlmY2luZm8tPmFyZ3Nb MV0uaXNudWxsID0gZmFsc2U7Ci0JZmNpbmZvLT5hcmdzWzJdLnZhbHVlID0gSW50MzJHZXREYXR1 bSh0eXBtb2QpOwotCWZjaW5mby0+YXJnc1syXS5pc251bGwgPSBmYWxzZTsKLQotCXJlc3VsdCA9 IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOwotCi0JcGZyZWUocyk7Ci0KLQlpZiAoZXNjb250 ZXh0LmVycm9yX29jY3VycmVkKQotCXsKLQkJZXNjb250ZXh0LmVycm9yX2RhdGEtPmVsZXZlbCA9 IFdBUk5JTkc7Ci0JCVRocm93RXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKLQkJKm9r ID0gZmFsc2U7Ci0JCXJldHVybiAoRGF0dW0pIDA7Ci0JfQotCi0JaWYgKGFycmF5X2NvbnRhaW5z X251bGxzKERhdHVtR2V0QXJyYXlUeXBlUChyZXN1bHQpKSkKLQl7Ci0JCWVyZXBvcnQoV0FSTklO RywKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkg ZXJybXNnKCJcIiVzXCIgYXJyYXkgbXVzdCBub3QgY29udGFpbiBudWxsIHZhbHVlcyIsIHN0YW5h bWUpKSk7Ci0JCSpvayA9IGZhbHNlOwotCQlyZXR1cm4gKERhdHVtKSAwOwotCX0KLQotCSpvayA9 IHRydWU7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogRmluZCBhbmQgdXBkYXRlIHRo ZSBzbG90IHdpdGggdGhlIGdpdmVuIHN0YWtpbmQsIG9yIHVzZSB0aGUgZmlyc3QgZW1wdHkKLSAq IHNsb3QuCi0gKi8KLXN0YXRpYyB2b2lkCi1zZXRfc3RhdHNfc2xvdChEYXR1bSAqdmFsdWVzLCBi b29sICpudWxscywgYm9vbCAqcmVwbGFjZXMsCi0JCQkgICBpbnQxNiBzdGFraW5kLCBPaWQgc3Rh b3AsIE9pZCBzdGFjb2xsLAotCQkJICAgRGF0dW0gc3RhbnVtYmVycywgYm9vbCBzdGFudW1iZXJz X2lzbnVsbCwKLQkJCSAgIERhdHVtIHN0YXZhbHVlcywgYm9vbCBzdGF2YWx1ZXNfaXNudWxsKQot ewotCWludAkJCXNsb3RpZHg7Ci0JaW50CQkJZmlyc3RfZW1wdHkgPSAtMTsKLQlBdHRyTnVtYmVy CXN0YWtpbmRfYXR0bnVtOwotCUF0dHJOdW1iZXIJc3Rhb3BfYXR0bnVtOwotCUF0dHJOdW1iZXIJ c3RhY29sbF9hdHRudW07Ci0KLQkvKiBmaW5kIGV4aXN0aW5nIHNsb3Qgd2l0aCBnaXZlbiBzdGFr aW5kICovCi0JZm9yIChzbG90aWR4ID0gMDsgc2xvdGlkeCA8IFNUQVRJU1RJQ19OVU1fU0xPVFM7 IHNsb3RpZHgrKykKLQl7Ci0JCXN0YWtpbmRfYXR0bnVtID0gQW51bV9wZ19zdGF0aXN0aWNfc3Rh a2luZDEgLSAxICsgc2xvdGlkeDsKLQotCQlpZiAoZmlyc3RfZW1wdHkgPCAwICYmCi0JCQlEYXR1 bUdldEludDE2KHZhbHVlc1tzdGFraW5kX2F0dG51bV0pID09IDApCi0JCQlmaXJzdF9lbXB0eSA9 IHNsb3RpZHg7Ci0JCWlmIChEYXR1bUdldEludDE2KHZhbHVlc1tzdGFraW5kX2F0dG51bV0pID09 IHN0YWtpbmQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoc2xvdGlkeCA+PSBTVEFUSVNUSUNfTlVN X1NMT1RTICYmIGZpcnN0X2VtcHR5ID49IDApCi0JCXNsb3RpZHggPSBmaXJzdF9lbXB0eTsKLQot CWlmIChzbG90aWR4ID49IFNUQVRJU1RJQ19OVU1fU0xPVFMpCi0JCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycm1zZygibWF4aW11bSBudW1iZXIgb2Ygc3RhdGlzdGljcyBzbG90cyBleGNlZWRlZDog JWQiLAotCQkJCQkJc2xvdGlkeCArIDEpKSk7Ci0KLQlzdGFraW5kX2F0dG51bSA9IEFudW1fcGdf c3RhdGlzdGljX3N0YWtpbmQxIC0gMSArIHNsb3RpZHg7Ci0Jc3Rhb3BfYXR0bnVtID0gQW51bV9w Z19zdGF0aXN0aWNfc3Rhb3AxIC0gMSArIHNsb3RpZHg7Ci0Jc3RhY29sbF9hdHRudW0gPSBBbnVt X3BnX3N0YXRpc3RpY19zdGFjb2xsMSAtIDEgKyBzbG90aWR4OwotCi0JaWYgKERhdHVtR2V0SW50 MTYodmFsdWVzW3N0YWtpbmRfYXR0bnVtXSkgIT0gc3Rha2luZCkKLQl7Ci0JCXZhbHVlc1tzdGFr aW5kX2F0dG51bV0gPSBJbnQxNkdldERhdHVtKHN0YWtpbmQpOwotCQlyZXBsYWNlc1tzdGFraW5k X2F0dG51bV0gPSB0cnVlOwotCX0KLQlpZiAoRGF0dW1HZXRPYmplY3RJZCh2YWx1ZXNbc3Rhb3Bf YXR0bnVtXSkgIT0gc3Rhb3ApCi0JewotCQl2YWx1ZXNbc3Rhb3BfYXR0bnVtXSA9IE9iamVjdElk R2V0RGF0dW0oc3Rhb3ApOwotCQlyZXBsYWNlc1tzdGFvcF9hdHRudW1dID0gdHJ1ZTsKLQl9Ci0J aWYgKERhdHVtR2V0T2JqZWN0SWQodmFsdWVzW3N0YWNvbGxfYXR0bnVtXSkgIT0gc3RhY29sbCkK LQl7Ci0JCXZhbHVlc1tzdGFjb2xsX2F0dG51bV0gPSBPYmplY3RJZEdldERhdHVtKHN0YWNvbGwp OwotCQlyZXBsYWNlc1tzdGFjb2xsX2F0dG51bV0gPSB0cnVlOwotCX0KLQlpZiAoIXN0YW51bWJl cnNfaXNudWxsKQotCXsKLQkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bWJlcnMxIC0g MSArIHNsb3RpZHhdID0gc3RhbnVtYmVyczsKLQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh bnVtYmVyczEgLSAxICsgc2xvdGlkeF0gPSBmYWxzZTsKLQkJcmVwbGFjZXNbQW51bV9wZ19zdGF0 aXN0aWNfc3RhbnVtYmVyczEgLSAxICsgc2xvdGlkeF0gPSB0cnVlOwotCX0KLQlpZiAoIXN0YXZh bHVlc19pc251bGwpCi0JewotCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAt IDEgKyBzbG90aWR4XSA9IHN0YXZhbHVlczsKLQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh dmFsdWVzMSAtIDEgKyBzbG90aWR4XSA9IGZhbHNlOwotCQlyZXBsYWNlc1tBbnVtX3BnX3N0YXRp c3RpY19zdGF2YWx1ZXMxIC0gMSArIHNsb3RpZHhdID0gdHJ1ZTsKLQl9Ci19Ci0KIC8qCiAgKiBV cHNlcnQgdGhlIHBnX3N0YXRpc3RpYyByZWNvcmQuCiAgKi8KQEAgLTg4MCw0NCArNTgyLDYgQEAg ZGVsZXRlX3BnX3N0YXRpc3RpYyhPaWQgcmVsb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwgYm9vbCBz dGFpbmhlcml0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qCi0gKiBJbml0aWFsaXplIHZhbHVl cyBhbmQgbnVsbHMgZm9yIGEgbmV3IHN0YXRzIHR1cGxlLgotICovCi1zdGF0aWMgdm9pZAotaW5p dF9lbXB0eV9zdGF0c190dXBsZShPaWQgcmVsb2lkLCBpbnQxNiBhdHRudW0sIGJvb2wgaW5oZXJp dGVkLAotCQkJCQkgICBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAqcmVwbGFjZXMp Ci17Ci0JbWVtc2V0KG51bGxzLCB0cnVlLCBzaXplb2YoYm9vbCkgKiBOYXR0c19wZ19zdGF0aXN0 aWMpOwotCW1lbXNldChyZXBsYWNlcywgdHJ1ZSwgc2l6ZW9mKGJvb2wpICogTmF0dHNfcGdfc3Rh dGlzdGljKTsKLQotCS8qIG11c3QgaW5pdGlhbGl6ZSBub24tTlVMTCBhdHRyaWJ1dGVzICovCi0K LQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhcmVsaWQgLSAxXSA9IE9iamVjdElkR2V0RGF0 dW0ocmVsb2lkKTsKLQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFyZWxpZCAtIDFdID0gZmFs c2U7Ci0JdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWF0dG51bSAtIDFdID0gSW50MTZHZXRE YXR1bShhdHRudW0pOwotCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YWF0dG51bSAtIDFdID0g ZmFsc2U7Ci0JdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWluaGVyaXQgLSAxXSA9IEJvb2xH ZXREYXR1bShpbmhlcml0ZWQpOwotCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YWluaGVyaXQg LSAxXSA9IGZhbHNlOwotCi0JdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0g MV0gPSBERUZBVUxUX05VTExfRlJBQzsKLQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudWxs ZnJhYyAtIDFdID0gZmFsc2U7Ci0JdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YXdpZHRoIC0g MV0gPSBERUZBVUxUX0FWR19XSURUSDsKLQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF3aWR0 aCAtIDFdID0gZmFsc2U7Ci0JdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWRpc3RpbmN0IC0g MV0gPSBERUZBVUxUX05fRElTVElOQ1Q7Ci0JbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlz dGluY3QgLSAxXSA9IGZhbHNlOwotCi0JLyogaW5pdGlhbGl6ZSBzdGFraW5kLCBzdGFvcCwgYW5k IHN0YWNvbGwgc2xvdHMgKi8KLQlmb3IgKGludCBzbG90bnVtID0gMDsgc2xvdG51bSA8IFNUQVRJ U1RJQ19OVU1fU0xPVFM7IHNsb3RudW0rKykKLQl7Ci0JCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3Rp Y19zdGFraW5kMSArIHNsb3RudW0gLSAxXSA9IChEYXR1bSkgMDsKLQkJbnVsbHNbQW51bV9wZ19z dGF0aXN0aWNfc3Rha2luZDEgKyBzbG90bnVtIC0gMV0gPSBmYWxzZTsKLQkJdmFsdWVzW0FudW1f cGdfc3RhdGlzdGljX3N0YW9wMSArIHNsb3RudW0gLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oSW52 YWxpZE9pZCk7Ci0JCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YW9wMSArIHNsb3RudW0gLSAx XSA9IGZhbHNlOwotCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhY29sbDEgKyBzbG90bnVt IC0gMV0gPSBPYmplY3RJZEdldERhdHVtKEludmFsaWRPaWQpOwotCQludWxsc1tBbnVtX3BnX3N0 YXRpc3RpY19zdGFjb2xsMSArIHNsb3RudW0gLSAxXSA9IGZhbHNlOwotCX0KLX0KLQogLyoKICAq IERlbGV0ZSBzdGF0aXN0aWNzIGZvciB0aGUgZ2l2ZW4gYXR0cmlidXRlLgogICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3Mvc3RhdF91dGlscy5jCmluZGV4IDBjMTM5YmY0M2E3Li4xYTdjNmIwMjRhMSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0X3V0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9zdGF0X3V0aWxzLmMKQEAgLTIxLDkgKzIxLDEyIEBACiAjaW5jbHVk ZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mv c3RhdF91dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxz L2FjbC5oIgpAQCAtMzMsNiArMzYsMTMgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCisKKyNkZWZpbmUgREVGQVVMVF9TVEFUQVRUX05VTExf RlJBQyAgICAgIEZsb2F0NEdldERhdHVtKDAuMCkKKyNkZWZpbmUgREVGQVVMVF9TVEFUQVRUX0FW R19XSURUSCAgICAgIEludDMyR2V0RGF0dW0oMCkgLyogdW5rbm93biAqLworI2RlZmluZSBERUZB VUxUX1NUQVRBVFRfTl9ESVNUSU5DVCAgICAgRmxvYXQ0R2V0RGF0dW0oMC4wKQkvKiB1bmtub3du ICovCisKK3N0YXRpYyBOb2RlICpnZXRfYXR0cl9leHByKFJlbGF0aW9uIHJlbCwgaW50IGF0dG51 bSk7CisKIC8qCiAgKiBFbnN1cmUgdGhhdCBhIGdpdmVuIGFyZ3VtZW50IGlzIG5vdCBudWxsLgog ICovCkBAIC0zNjUsMyArMzc1LDM2NSBAQCBzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19wYWly cyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJzX2ZjaW5mbywKIAogCXJldHVybiByZXN1bHQ7CiB9CisK Ky8qCisgKiBJZiB0aGlzIHJlbGF0aW9uIGlzIGFuIGluZGV4IGFuZCB0aGF0IGluZGV4IGhhcyBl eHByZXNzaW9ucyBpbiBpdCwgYW5kCisgKiB0aGUgYXR0bnVtIHNwZWNpZmllZCBpcyBrbm93biB0 byBiZSBhbiBleHByZXNzaW9uLCB0aGVuIHdlIG11c3Qgd2FsaworICogdGhlIGxpc3QgYXR0cmli dXRlcyB1cCB0byB0aGUgc3BlY2lmaWVkIGF0dG51bSB0byBnZXQgdGhlIHJpZ2h0CisgKiBleHBy ZXNzaW9uLgorICovCitzdGF0aWMgTm9kZSAqCitnZXRfYXR0cl9leHByKFJlbGF0aW9uIHJlbCwg aW50IGF0dG51bSkKK3sKKwlMaXN0CSAgICppbmRleF9leHByczsKKwlMaXN0Q2VsbCAgICppbmRl eHByX2l0ZW07CisKKwkvKiByZWxhdGlvbiBpcyBub3QgYW4gaW5kZXggKi8KKwlpZiAocmVsLT5y ZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9JTkRFWCAmJgorCQlyZWwtPnJkX3JlbC0+cmVsa2lu ZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYKQorCQlyZXR1cm4gTlVMTDsKKworCWluZGV4 X2V4cHJzID0gUmVsYXRpb25HZXRJbmRleEV4cHJlc3Npb25zKHJlbCk7CisKKwkvKiBpbmRleCBo YXMgbm8gZXhwcmVzc2lvbnMgdG8gZ2l2ZSAqLworCWlmIChpbmRleF9leHBycyA9PSBOSUwpCisJ CXJldHVybiBOVUxMOworCisJLyoKKwkgKiBUaGUgaW5kZXggYXR0bnVtIHBvaW50cyBkaXJlY3Rs eSB0byBhIHJlbGF0aW9uIGF0dG51bSwgdGhlbiBpdCdzIG5vdCBhbgorCSAqIGV4cHJlc3Npb24g YXR0cmlidXRlLgorCSAqLworCWlmIChyZWwtPnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2F0dG51 bSAtIDFdICE9IDApCisJCXJldHVybiBOVUxMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFk KHJlbC0+cmRfaW5kZXhwcnMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRudW0gLSAxOyBp KyspCisJCWlmIChyZWwtPnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2ldID09IDApCisJCQlpbmRl eHByX2l0ZW0gPSBsbmV4dChyZWwtPnJkX2luZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCisJaWYg KGluZGV4cHJfaXRlbSA9PSBOVUxMKQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJS T1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCisJcmV0dXJuIChOb2Rl ICopIGxmaXJzdChpbmRleHByX2l0ZW0pOworfQorCisvKgorICogRGVyaXZlIHR5cGUgaW5mb3Jt YXRpb24gZnJvbSB0aGUgYXR0cmlidXRlLgorICoKKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBzZXR0 aW5nIG1vc3Qgc2xvdCBzdGF0aXN0aWNzIGZvciBhbGwgZGF0YSB0eXBlcy4KKyAqCisgKiBUaGlz IGR1cGxpY2F0ZXMgdGhlIGxvZ2ljIGluIGV4YW1pbmVfYXR0cmlidXRlKCkgYnV0IGl0IHdpbGwg bm90IHNraXAgdGhlCisgKiBhdHRyaWJ1dGUgaWYgdGhlIGF0dHN0YXR0YXJnZXQgaXMgMC4KKyAq CisgKiBUaGUgaW5mb3JtYXRpb24gZmV0Y2hlZCBoZXJlIGlzIGEgcHJlcmVxdWlzaXRlIHRvIGNh bGxpbmcKKyAqIHRoZSBvdGhlciBzdGF0YXR0XyooKSBmdW5jdGlvbnMuCisgKi8KK3ZvaWQKK3N0 YXRhdHRfZ2V0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sCisJCQkJIE9pZCAq YXR0dHlwaWQsIGludDMyICphdHR0eXBtb2QsCisJCQkJIGNoYXIgKmF0dHR5cHR5cGUsIE9pZCAq YXR0dHlwY29sbCwKKwkJCQkgT2lkICplcV9vcHIsIE9pZCAqbHRfb3ByKQoreworCVJlbGF0aW9u CXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsb2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCUZvcm1fcGdf YXR0cmlidXRlIGF0dHI7CisJSGVhcFR1cGxlCWF0dXA7CisJTm9kZQkgICAqZXhwcjsKKwlUeXBl Q2FjaGVFbnRyeSAqdHlwY2FjaGU7CisKKwlhdHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwg T2JqZWN0SWRHZXREYXR1bShyZWxvaWQpLAorCQkJCQkJICAgSW50MTZHZXREYXR1bShhdHRudW0p KTsKKworCS8qIEF0dHJpYnV0ZSBub3QgZm91bmQgKi8KKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo YXR1cCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf Q09MVU1OKSwKKwkJCQkgZXJybXNnKCJjb2x1bW4gJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMg bm90IGV4aXN0IiwKKwkJCQkJCWF0dG51bSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkp KTsKKworCWF0dHIgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHVwKTsKKworCWlm IChhdHRyLT5hdHRpc2Ryb3BwZWQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkgZXJybXNnKCJjb2x1bW4gJWQgb2YgcmVsYXRp b24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCWF0dG51bSwgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSkpKTsKKworCWV4cHIgPSBnZXRfYXR0cl9leHByKHJlbCwgYXR0ci0+YXR0 bnVtKTsKKworCS8qCisJICogV2hlbiBhbmFseXppbmcgYW4gZXhwcmVzc2lvbiBpbmRleCwgYmVs aWV2ZSB0aGUgZXhwcmVzc2lvbiB0cmVlJ3MgdHlwZQorCSAqIG5vdCB0aGUgY29sdW1uIGRhdGF0 eXBlIC0tLSB0aGUgbGF0dGVyIG1pZ2h0IGJlIHRoZSBvcGNrZXl0eXBlIHN0b3JhZ2UKKwkgKiB0 eXBlIG9mIHRoZSBvcGNsYXNzLCB3aGljaCBpcyBub3QgaW50ZXJlc3RpbmcgZm9yIG91ciBwdXJw b3Nlcy4gVGhpcworCSAqIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgZXhhbWluZV9hdHRyaWJ1dGUo KS4KKwkgKi8KKwlpZiAoZXhwciA9PSBOVUxMKQorCXsKKwkJKmF0dHR5cGlkID0gYXR0ci0+YXR0 dHlwaWQ7CisJCSphdHR0eXBtb2QgPSBhdHRyLT5hdHR0eXBtb2Q7CisJCSphdHR0eXBjb2xsID0g YXR0ci0+YXR0Y29sbGF0aW9uOworCX0KKwllbHNlCisJeworCQkqYXR0dHlwaWQgPSBleHByVHlw ZShleHByKTsKKwkJKmF0dHR5cG1vZCA9IGV4cHJUeXBtb2QoZXhwcik7CisKKwkJaWYgKE9pZElz VmFsaWQoYXR0ci0+YXR0Y29sbGF0aW9uKSkKKwkJCSphdHR0eXBjb2xsID0gYXR0ci0+YXR0Y29s bGF0aW9uOworCQllbHNlCisJCQkqYXR0dHlwY29sbCA9IGV4cHJDb2xsYXRpb24oZXhwcik7CisJ fQorCVJlbGVhc2VTeXNDYWNoZShhdHVwKTsKKworCS8qCisJICogSWYgaXQncyBhIG11bHRpcmFu Z2UsIHN0ZXAgZG93biB0byB0aGUgcmFuZ2UgdHlwZSwgYXMgaXMgZG9uZSBieQorCSAqIG11bHRp cmFuZ2VfdHlwYW5hbHl6ZSgpLgorCSAqLworCWlmICh0eXBlX2lzX211bHRpcmFuZ2UoKmF0dHR5 cGlkKSkKKwkJKmF0dHR5cGlkID0gZ2V0X211bHRpcmFuZ2VfcmFuZ2UoKmF0dHR5cGlkKTsKKwor CS8qIGZpbmRzIHRoZSByaWdodCBvcGVyYXRvcnMgZXZlbiBpZiBhdHR0eXBpZCBpcyBhIGRvbWFp biAqLworCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUoKmF0dHR5cGlkLCBUWVBFQ0FDSEVf TFRfT1BSIHwgVFlQRUNBQ0hFX0VRX09QUik7CisJKmF0dHR5cHR5cGUgPSB0eXBjYWNoZS0+dHlw dHlwZTsKKwkqZXFfb3ByID0gdHlwY2FjaGUtPmVxX29wcjsKKwkqbHRfb3ByID0gdHlwY2FjaGUt Pmx0X29wcjsKKworCS8qCisJICogU3BlY2lhbCBjYXNlOiBjb2xsYXRpb24gZm9yIHRzdmVjdG9y IGlzIERFRkFVTFRfQ09MTEFUSU9OX09JRC4gU2VlCisJICogY29tcHV0ZV90c3ZlY3Rvcl9zdGF0 cygpLgorCSAqLworCWlmICgqYXR0dHlwaWQgPT0gVFNWRUNUT1JPSUQpCisJCSphdHR0eXBjb2xs ID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOworCisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2sp OworfQorCisvKgorICogRGVyaXZlIGVsZW1lbnQgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBh dHRyaWJ1dGUgdHlwZS4gVGhpcyBpbmZvcm1hdGlvbgorICogaXMgbmVlZGVkIHdoZW4gdGhlIGdp dmVuIHR5cGUgaXMgb25lIHRoYXQgY29udGFpbnMgZWxlbWVudHMgb2Ygb3RoZXIgdHlwZXMuCisg KgorICogVGhlIGF0dHR5cGlkIGFuZCBhdHR0eXB0eXBlIHNob3VsZCBiZSBkZXJpdmVkIGZyb20g YSBwcmV2aW91cyBjYWxsIHRvCisgKiBzdGF0YXR0X2dldF90eXBlKCkuCisgKi8KK2Jvb2wKK3N0 YXRhdHRfZ2V0X2VsZW1fdHlwZShPaWQgYXR0dHlwaWQsIGNoYXIgYXR0dHlwdHlwZSwKKwkJCQkJ ICBPaWQgKmVsZW10eXBpZCwgT2lkICplbGVtX2VxX29wcikKK3sKKwlUeXBlQ2FjaGVFbnRyeSAq ZWxlbXR5cGNhY2hlOworCisJaWYgKGF0dHR5cGlkID09IFRTVkVDVE9ST0lEKQorCXsKKwkJLyoK KwkJICogU3BlY2lhbCBjYXNlOiBlbGVtZW50IHR5cGUgZm9yIHRzdmVjdG9yIGlzIHRleHQuIFNl ZQorCQkgKiBjb21wdXRlX3RzdmVjdG9yX3N0YXRzKCkuCisJCSAqLworCQkqZWxlbXR5cGlkID0g VEVYVE9JRDsKKwl9CisJZWxzZQorCXsKKwkJLyogZmluZCB1bmRlcmx5aW5nIGVsZW1lbnQgdHlw ZSB0aHJvdWdoIGFueSBkb21haW4gKi8KKwkJKmVsZW10eXBpZCA9IGdldF9iYXNlX2VsZW1lbnRf dHlwZShhdHR0eXBpZCk7CisJfQorCisJaWYgKCFPaWRJc1ZhbGlkKCplbGVtdHlwaWQpKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKiBmaW5kcyB0aGUgcmlnaHQgb3BlcmF0b3IgZXZlbiBpZiBlbGVt dHlwaWQgaXMgYSBkb21haW4gKi8KKwllbGVtdHlwY2FjaGUgPSBsb29rdXBfdHlwZV9jYWNoZSgq ZWxlbXR5cGlkLCBUWVBFQ0FDSEVfRVFfT1BSKTsKKwlpZiAoIU9pZElzVmFsaWQoZWxlbXR5cGNh Y2hlLT5lcV9vcHIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqZWxlbV9lcV9vcHIgPSBlbGVtdHlw Y2FjaGUtPmVxX29wcjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ2FzdCBhIHRleHQg ZGF0dW0gaW50byBhbiBhcnJheSB3aXRoIGVsZW1lbnQgdHlwZSBlbGVtdHlwaWQuCisgKgorICog VGhlIHR5cGlkIGFuZCB0eXBtb2Qgc2hvdWxkIGJlIGRlcml2ZWQgZnJvbSBhIHByZXZpb3VzIGNh bGwgdG8KKyAqIHN0YXRhdHRfZ2V0X3R5cGUoKS4KKyAqCisgKiBJZiBhbiBlcnJvciBpcyBlbmNv dW50ZXJlZCwgY2FwdHVyZSBpdCBhbmQgcmUtdGhyb3cgYSBXQVJOSU5HLCBhbmQgc2V0IG9rCisg KiB0byBmYWxzZS4gSWYgdGhlIHJlc3VsdGluZyBhcnJheSBjb250YWlucyBOVUxMcywgcmFpc2Ug YSBXQVJOSU5HIGFuZCBzZXQgb2sKKyAqIHRvIGZhbHNlLiBPdGhlcndpc2UsIHNldCBvayB0byB0 cnVlLgorICovCitEYXR1bQordGV4dF90b19zdGF2YWx1ZXMoY29uc3QgY2hhciAqc3RhbmFtZSwg Rm1nckluZm8gKmFycmF5X2luLCBEYXR1bSBkLCBPaWQgdHlwaWQsCisJCQkJICBpbnQzMiB0eXBt b2QsIGJvb2wgKm9rKQoreworCUxPQ0FMX0ZDSU5GTyhmY2luZm8sIDgpOworCWNoYXIJICAgKnM7 CisJRGF0dW0JCXJlc3VsdDsKKwlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9y U2F2ZUNvbnRleHR9OworCisJZXNjb250ZXh0LmRldGFpbHNfd2FudGVkID0gdHJ1ZTsKKworCXMg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKGQpOworCisJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpm Y2luZm8sIGFycmF5X2luLCAzLCBJbnZhbGlkT2lkLAorCQkJCQkJCSAoTm9kZSAqKSAmZXNjb250 ZXh0LCBOVUxMKTsKKworCWZjaW5mby0+YXJnc1swXS52YWx1ZSA9IENTdHJpbmdHZXREYXR1bShz KTsKKwlmY2luZm8tPmFyZ3NbMF0uaXNudWxsID0gZmFsc2U7CisJZmNpbmZvLT5hcmdzWzFdLnZh bHVlID0gT2JqZWN0SWRHZXREYXR1bSh0eXBpZCk7CisJZmNpbmZvLT5hcmdzWzFdLmlzbnVsbCA9 IGZhbHNlOworCWZjaW5mby0+YXJnc1syXS52YWx1ZSA9IEludDMyR2V0RGF0dW0odHlwbW9kKTsK KwlmY2luZm8tPmFyZ3NbMl0uaXNudWxsID0gZmFsc2U7CisKKwlyZXN1bHQgPSBGdW5jdGlvbkNh bGxJbnZva2UoZmNpbmZvKTsKKworCXBmcmVlKHMpOworCisJaWYgKGVzY29udGV4dC5lcnJvcl9v Y2N1cnJlZCkKKwl7CisJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOwor CQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCSpvayA9IGZhbHNlOwor CQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCWlmIChhcnJheV9jb250YWluc19udWxscyhEYXR1 bUdldEFycmF5VHlwZVAocmVzdWx0KSkpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiXCIl c1wiIGFycmF5IG11c3Qgbm90IGNvbnRhaW4gbnVsbCB2YWx1ZXMiLCBzdGFuYW1lKSkpOworCQkq b2sgPSBmYWxzZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwkqb2sgPSB0cnVlOworCisJ cmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEZpbmQgYW5kIHVwZGF0ZSB0aGUgc2xvdCB3aXRo IHRoZSBnaXZlbiBzdGFraW5kLCBvciB1c2UgdGhlIGZpcnN0IGVtcHR5CisgKiBzbG90LgorICoK KyAqIENvcmUgc3RhdGlzdGljcyB0eXBlcyBleHBlY3QgdGhlIHN0YWtpbmQgdmFsdWUgbXVzdCBi ZSBvbmUgb2YgdGhlCisgKiBTVEFUSVNUSUNfS0lORF8qIGNvbnN0YW50cyBkZWZpbmVkIGluIHBn X3N0YXRpc3RpYy5oLCBidXQgdHlwZXMgZGVmaW5lZCBieQorICogZXh0ZW5zaW9ucyBhcmUgbm90 IHJlc3RyaWN0ZWQgdG8gdGhvc2UgdmFsdWVzLgorICoKKyAqIEluIHRoZSBjYXNlIG9mIGNvcmUg c3RhdGlzdGljcywgdGhlIHJlcXVpcmVkIHN0YW9wIGlzIGRldGVybWluZWQgYnkgdGhlCisgKiBz dGFraW5kIGdpdmVuIGFuZCB3aWxsIGVpdGhlciBiZSBhIGhhcmRjb2RlZCBvaWQsIG9yIHdpbGwg YmUgdGhlIGVxL2x0CisgKiBvcGVyYXRvciBkZXJpdmVkIGZyb20gc3RhdGF0dF9nZXRfdHlwZSgp LiBMaWtld2lzZSwgdHlwZXMgZGVmaW5lZCBieQorICogZXh0ZW5zaW9ucyBoYXZlIG5vIHN1Y2gg cmVzdHJpY3Rpb24uCisgKgorICogVGhlIHN0YWNvbGwgdmFsdWUgd2lsbCBlaXRoZXIgYmUgdGhl IGF0dHR5cGNvbGwgZGVyaXZlZCBmcm9tCisgKiBzdGF0YXR0X2dldF90eXBlKCkgb3IgYSBoYXJj b2RlZCB2YWx1ZSByZXF1aXJlZCBieSB0aGF0IHBhcnRpY3VsYXIgc3Rha2luZC4KKyAqCisgKiBU aGUgdmFsdWUvbnVsbCBwYWlycyBmb3Igc3RhbnVtYmVycyBhbmQgc3RhdmFsdWVzIHdpbGwgaGF2 ZSBiZWVuIGNhbGN1bGF0ZWQKKyAqIGJhc2VkIG9uIHRoZSBzdGFraW5kIGdpdmVuLgorICovCit2 b2lkCitzdGF0YXR0X3NldF9zbG90KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpy ZXBsYWNlcywKKwkJCQkgaW50MTYgc3Rha2luZCwgT2lkIHN0YW9wLCBPaWQgc3RhY29sbCwKKwkJ CQkgRGF0dW0gc3RhbnVtYmVycywgYm9vbCBzdGFudW1iZXJzX2lzbnVsbCwKKwkJCQkgRGF0dW0g c3RhdmFsdWVzLCBib29sIHN0YXZhbHVlc19pc251bGwpCit7CisJaW50CQkJc2xvdGlkeDsKKwlp bnQJCQlmaXJzdF9lbXB0eSA9IC0xOworCUF0dHJOdW1iZXIJc3Rha2luZF9hdHRudW07CisJQXR0 ck51bWJlcglzdGFvcF9hdHRudW07CisJQXR0ck51bWJlcglzdGFjb2xsX2F0dG51bTsKKworCS8q IGZpbmQgZXhpc3Rpbmcgc2xvdCB3aXRoIGdpdmVuIHN0YWtpbmQgKi8KKwlmb3IgKHNsb3RpZHgg PSAwOyBzbG90aWR4IDwgU1RBVElTVElDX05VTV9TTE9UUzsgc2xvdGlkeCsrKQorCXsKKwkJc3Rh a2luZF9hdHRudW0gPSBBbnVtX3BnX3N0YXRpc3RpY19zdGFraW5kMSAtIDEgKyBzbG90aWR4Owor CisJCWlmIChmaXJzdF9lbXB0eSA8IDAgJiYKKwkJCURhdHVtR2V0SW50MTYodmFsdWVzW3N0YWtp bmRfYXR0bnVtXSkgPT0gMCkKKwkJCWZpcnN0X2VtcHR5ID0gc2xvdGlkeDsKKwkJaWYgKERhdHVt R2V0SW50MTYodmFsdWVzW3N0YWtpbmRfYXR0bnVtXSkgPT0gc3Rha2luZCkKKwkJCWJyZWFrOwor CX0KKworCWlmIChzbG90aWR4ID49IFNUQVRJU1RJQ19OVU1fU0xPVFMgJiYgZmlyc3RfZW1wdHkg Pj0gMCkKKwkJc2xvdGlkeCA9IGZpcnN0X2VtcHR5OworCisJaWYgKHNsb3RpZHggPj0gU1RBVElT VElDX05VTV9TTE9UUykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJtYXhpbXVtIG51 bWJlciBvZiBzdGF0aXN0aWNzIHNsb3RzIGV4Y2VlZGVkOiAlZCIsCisJCQkJCQlzbG90aWR4ICsg MSkpKTsKKworCXN0YWtpbmRfYXR0bnVtID0gQW51bV9wZ19zdGF0aXN0aWNfc3Rha2luZDEgLSAx ICsgc2xvdGlkeDsKKwlzdGFvcF9hdHRudW0gPSBBbnVtX3BnX3N0YXRpc3RpY19zdGFvcDEgLSAx ICsgc2xvdGlkeDsKKwlzdGFjb2xsX2F0dG51bSA9IEFudW1fcGdfc3RhdGlzdGljX3N0YWNvbGwx IC0gMSArIHNsb3RpZHg7CisKKwlpZiAoRGF0dW1HZXRJbnQxNih2YWx1ZXNbc3Rha2luZF9hdHRu dW1dKSAhPSBzdGFraW5kKQorCXsKKwkJdmFsdWVzW3N0YWtpbmRfYXR0bnVtXSA9IEludDE2R2V0 RGF0dW0oc3Rha2luZCk7CisJCXJlcGxhY2VzW3N0YWtpbmRfYXR0bnVtXSA9IHRydWU7CisJfQor CWlmIChEYXR1bUdldE9iamVjdElkKHZhbHVlc1tzdGFvcF9hdHRudW1dKSAhPSBzdGFvcCkKKwl7 CisJCXZhbHVlc1tzdGFvcF9hdHRudW1dID0gT2JqZWN0SWRHZXREYXR1bShzdGFvcCk7CisJCXJl cGxhY2VzW3N0YW9wX2F0dG51bV0gPSB0cnVlOworCX0KKwlpZiAoRGF0dW1HZXRPYmplY3RJZCh2 YWx1ZXNbc3RhY29sbF9hdHRudW1dKSAhPSBzdGFjb2xsKQorCXsKKwkJdmFsdWVzW3N0YWNvbGxf YXR0bnVtXSA9IE9iamVjdElkR2V0RGF0dW0oc3RhY29sbCk7CisJCXJlcGxhY2VzW3N0YWNvbGxf YXR0bnVtXSA9IHRydWU7CisJfQorCWlmICghc3RhbnVtYmVyc19pc251bGwpCisJeworCQl2YWx1 ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhbnVtYmVyczEgLSAxICsgc2xvdGlkeF0gPSBzdGFudW1i ZXJzOworCQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSAtIDEgKyBzbG90aWR4 XSA9IGZhbHNlOworCQlyZXBsYWNlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSAtIDEg KyBzbG90aWR4XSA9IHRydWU7CisJfQorCWlmICghc3RhdmFsdWVzX2lzbnVsbCkKKwl7CisJCXZh bHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF2YWx1ZXMxIC0gMSArIHNsb3RpZHhdID0gc3RhdmFs dWVzOworCQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF2YWx1ZXMxIC0gMSArIHNsb3RpZHhd ID0gZmFsc2U7CisJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX3N0YXZhbHVlczEgLSAxICsg c2xvdGlkeF0gPSB0cnVlOworCX0KK30KKworLyoKKyAqIEluaXRpYWxpemUgdmFsdWVzIGFuZCBu dWxscyBmb3IgYSBuZXcgcGdfc3RhdGlzdGljIHR1cGxlLgorICoKKyAqIFRoZXJlIGFyZSB0d28g cG9zc2libGUgZGVzdGluYXRpb25zIGZvciB0aGUgdHVwbGUgY3JlYXRlZC4KKyAqCisgKiBUaGUg Zmlyc3QgaXMgdGhlIHBnX3N0YXRpc3RpYyB0YWJsZSwgaW4gd2hpY2ggY2FzZSB0aGUgcmVsb2lk LCBhdHRudW0sCisgKiBhbmQgaW5oZXJpdGVkIGZsYWdzIHNob3VsZCBhbGwgYmUgc2V0LgorICoK KyAqIFRoZSBzZWNvbmQgY2FzZSBpcyBhcyBhbiBlbGVtZW50IG9mIHRoZSBzdHhkZXhwciBhcnJh eSBvZiBhCisgKiBwZ19zdGF0aXN0aWNfZXh0X2RhdGEgdHVwbGUsIGluIHdoaWNoIGNhc2UgKHJl bG9pZCwgYXR0bnVtLCBpbmhlcml0ZWQpCisgKiBzaG91bGQgYmUgc2V0IHRvIChJbnZhbGlkT2lk LCBJbnZhbGlkQXR0ck51bWJlciwgZmFsc2UpLgorICovCit2b2lkCitzdGF0YXR0X2luaXRfZW1w dHlfdHVwbGUoT2lkIHJlbG9pZCwgaW50MTYgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKKwkJCQkJ CSBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAqcmVwbGFjZXMpCit7CisJbWVtc2V0 KG51bGxzLCB0cnVlLCBzaXplb2YoYm9vbCkgKiBOYXR0c19wZ19zdGF0aXN0aWMpOworCW1lbXNl dChyZXBsYWNlcywgdHJ1ZSwgc2l6ZW9mKGJvb2wpICogTmF0dHNfcGdfc3RhdGlzdGljKTsKKwor CS8qIG11c3QgaW5pdGlhbGl6ZSBub24tTlVMTCBhdHRyaWJ1dGVzICovCisKKwl2YWx1ZXNbQW51 bV9wZ19zdGF0aXN0aWNfc3RhcmVsaWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ocmVsb2lkKTsK KwludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFyZWxpZCAtIDFdID0gZmFsc2U7CisJdmFsdWVz W0FudW1fcGdfc3RhdGlzdGljX3N0YWF0dG51bSAtIDFdID0gSW50MTZHZXREYXR1bShhdHRudW0p OworCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YWF0dG51bSAtIDFdID0gZmFsc2U7CisJdmFs dWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWluaGVyaXQgLSAxXSA9IEJvb2xHZXREYXR1bShpbmhl cml0ZWQpOworCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YWluaGVyaXQgLSAxXSA9IGZhbHNl OworCisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0gPSBERUZBVUxU X1NUQVRBVFRfTlVMTF9GUkFDOworCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFj IC0gMV0gPSBmYWxzZTsKKwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhd2lkdGggLSAxXSA9 IERFRkFVTFRfU1RBVEFUVF9BVkdfV0lEVEg7CisJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh d2lkdGggLSAxXSA9IGZhbHNlOworCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0aW5j dCAtIDFdID0gREVGQVVMVF9TVEFUQVRUX05fRElTVElOQ1Q7CisJbnVsbHNbQW51bV9wZ19zdGF0 aXN0aWNfc3RhZGlzdGluY3QgLSAxXSA9IGZhbHNlOworCisJLyogaW5pdGlhbGl6ZSBzdGFraW5k LCBzdGFvcCwgYW5kIHN0YWNvbGwgc2xvdHMgKi8KKwlmb3IgKGludCBzbG90bnVtID0gMDsgc2xv dG51bSA8IFNUQVRJU1RJQ19OVU1fU0xPVFM7IHNsb3RudW0rKykKKwl7CisJCXZhbHVlc1tBbnVt X3BnX3N0YXRpc3RpY19zdGFraW5kMSArIHNsb3RudW0gLSAxXSA9IChEYXR1bSkgMDsKKwkJbnVs bHNbQW51bV9wZ19zdGF0aXN0aWNfc3Rha2luZDEgKyBzbG90bnVtIC0gMV0gPSBmYWxzZTsKKwkJ dmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW9wMSArIHNsb3RudW0gLSAxXSA9IE9iamVjdElk R2V0RGF0dW0oSW52YWxpZE9pZCk7CisJCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YW9wMSAr IHNsb3RudW0gLSAxXSA9IGZhbHNlOworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhY29s bDEgKyBzbG90bnVtIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKEludmFsaWRPaWQpOworCQludWxs c1tBbnVtX3BnX3N0YXRpc3RpY19zdGFjb2xsMSArIHNsb3RudW0gLSAxXSA9IGZhbHNlOworCX0K K30KCmJhc2UtY29tbWl0OiA4MGY2ZTJmYjRhZGRiMDNlMmUxNjNhMzgwYjVlNmUxZjRiMzIxMjg2 Ci0tIAoyLjUyLjAKCg== --0000000000009961d60645287624 Content-Type: text/x-patch; charset="US-ASCII"; name="v20-0002-Add-extended-statistics-support-functions.patch" Content-Disposition: attachment; filename="v20-0002-Add-extended-statistics-support-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mis1w7bn1 RnJvbSA5MzM1NjRjODRjZWUyMzgwZmFlYWMyYzZlMWJkMzY4Y2I3NGZjNTJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIFBhcXVpZXIgPG1pY2hhZWxAcGFxdWllci54eXo+ CkRhdGU6IFR1ZSwgMTEgTm92IDIwMjUgMTY6NTg6MjYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MCAyLzNdIEFkZCBleHRlbmRlZCBzdGF0aXN0aWNzIHN1cHBvcnQgZnVuY3Rpb25zLgoKQWRkIHBn X3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoKSBhbmQgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoKS4g VGhlc2UKZnVuY3Rpb25zIGNsb3NlbHkgbWlycm9yIHRoZWlyIHJlbGF0aW9uIGFuZCBhdHRyaWJ1 dGUgY291bnRlcnBhcnRzLApidXQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3MgKGkuZS4gIENSRUFU RSBTVEFUSVNUSUNTKSBvYmplY3RzLgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICAgICAgICAgICB8ICAgMTggKwogLi4uL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNf aW50ZXJuYWwuaCAgICAgIHwgICAxMiArCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVu Y2llcy5jICAgICAgICAgfCAgIDYzICsKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRf c3RhdHMuYyAgICAgICB8IDEyMDUgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvbWN2LmMgICAgICAgICAgICAgICAgICB8ICAxNDQgKysKIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvbXZkaXN0aW5jdC5jICAgICAgICAgICB8ICAgNjIgKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zdGF0c19pbXBvcnQub3V0ICAgIHwgIDU3OCArKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbCAgICAgICAgIHwgIDM2NCArKysrKwogZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sICAgICAgICAgICAgIHwgICA5OCArKwogOSBmaWxlcyBj aGFuZ2VkLCAyNTQ0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA2 NmFmMmQ5NmQ2Ny4uMzg5NzA5MzBmOTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTI2 MDIsNiArMTI2MDIsMjQgQEAKICAgcHJvbmFtZSA9PiAnZ2lzdF90cmFuc2xhdGVfY21wdHlwZV9j b21tb24nLCBwcm9yZXR0eXBlID0+ICdpbnQyJywKICAgcHJvYXJndHlwZXMgPT4gJ2ludDQnLCBw cm9zcmMgPT4gJ2dpc3RfdHJhbnNsYXRlX2NtcHR5cGVfY29tbW9uJyB9LAogCisjIEV4dGVuZGVk IFN0YXRpc3RpY3MgSW1wb3J0Cit7IG9pZCA9PiAnOTk0NycsCisgIGRlc2NyID0+ICdyZXN0b3Jl IHN0YXRpc3RpY3Mgb24gZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QnLAorICBwcm9uYW1lID0+ ICdwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9pc3N0 cmljdCA9PiAnZicsCisgIHByb3ZhcmlhZGljID0+ICdhbnknLAorICBwcm9wYXJhbGxlbCA9PiAn dScsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnYW55JywKKyAgcHJv YXJnbmFtZXMgPT4gJ3trd2FyZ3N9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3t2fScsCisgIHByb3Ny YyA9PiAncGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cycgfSwKK3sgb2lkID0+ICc5OTQ4JywKKyAg ZGVzY3IgPT4gJ2NsZWFyIHN0YXRpc3RpY3Mgb24gZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3Qn LAorICBwcm9uYW1lID0+ICdwZ19jbGVhcl9leHRlbmRlZF9zdGF0cycsIHByb3ZvbGF0aWxlID0+ ICd2JywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBwcm9wYXJhbGxlbCA9PiAndScsIHByb3JldHR5 cGUgPT4gJ3ZvaWQnLAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IGJvb2wnLAorICBwcm9h cmduYW1lcyA9PiAne3N0YXRpc3RpY3Nfc2NoZW1hbmFtZSxzdGF0aXN0aWNzX25hbWUsaW5oZXJp dGVkfScsCisgIHByb3NyYyA9PiAncGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMnIH0sCisKICMgQUlP IHJlbGF0ZWQgZnVuY3Rpb25zCiB7IG9pZCA9PiAnNjM5OScsIGRlc2NyID0+ICdpbmZvcm1hdGlv biBhYm91dCBpbi1wcm9ncmVzcyBhc3luY2hyb25vdXMgSU9zJywKICAgcHJvbmFtZSA9PiAncGdf Z2V0X2Fpb3MnLCBwcm9yb3dzID0+ICcxMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oIGIvc3Jj L2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCmluZGV4IGVmY2I3 ZGMzNTQ2Li4wNDJmMDdhNzYwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9l eHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvZXh0 ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaApAQCAtMTI3LDQgKzEyNywxNiBAQCBleHRlcm4gU2VsZWN0 aXZpdHkgbWN2X2NsYXVzZV9zZWxlY3Rpdml0eV9vcihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCQkJIFNlbGVjdGl2aXR5ICpvdmVybGFwX2Jhc2VzZWwsCiAJCQkJCQkJCQkJCSBTZWxlY3Rp dml0eSAqdG90YWxzZWwpOwogCitleHRlcm4gRGF0dW0gaW1wb3J0X21jdmxpc3QoSGVhcFR1cGxl IHR1cCwgaW50IGVsZXZlbCwgaW50IG51bWF0dHJzLAorCQkJCQkJCU9pZCAqYXR0dHlwaWRzLCBp bnQzMiAqYXR0dHlwbW9kcywgT2lkICphdHR0eXBjb2xscywKKwkJCQkJCQlpbnQgbml0ZW1zLCBE YXR1bSAqbWN2X2VsZW1zLCBib29sICptY3ZfbnVsbHMsCisJCQkJCQkJYm9vbCAqbWN2X2VsZW1f bnVsbHMsIGZsb2F0OCAqZnJlcXMsIGZsb2F0OCAqYmFzZV9mcmVxcyk7CitleHRlcm4gYm9vbCBw Z19uZGlzdGluY3RfdmFsaWRhdGVfaXRlbXMoTVZORGlzdGluY3QgKm5kaXN0aW5jdCwgaW50MnZl Y3RvciAqc3R4a2V5cywKKwkJCQkJCQkJCQlpbnQgbnVtZXhwcnMsIGludCBlbGV2ZWwpOworZXh0 ZXJuIHZvaWQgZnJlZV9wZ19uZGlzdGluY3QoTVZORGlzdGluY3QgKm5kaXN0aW5jdCk7CitleHRl cm4gYm9vbCBwZ19kZXBlbmRlbmNpZXNfdmFsaWRhdGVfZGVwcyhjb25zdCBNVkRlcGVuZGVuY2ll cyAqZGVwZW5kZW5jaWVzLAorCQkJCQkJCQkJCSAgY29uc3QgaW50MnZlY3RvciAqc3R4a2V5cywg aW50IG51bWV4cHJzLAorCQkJCQkJCQkJCSAgaW50IGVsZXZlbCk7CitleHRlcm4gdm9pZCBmcmVl X3BnX2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyAqZGVwZW5kZW5jaWVzKTsKKwogI2VuZGlm CQkJCQkJCS8qIEVYVEVOREVEX1NUQVRTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNz L2RlcGVuZGVuY2llcy5jCmluZGV4IGQ3YmY2YjdlODQ2Li4wYjY0MjI3MjIzYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYworKysgYi9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2RlcGVuZGVuY2llcy5jCkBAIC0xMDY1LDYgKzEwNjUsNTcgQEAgY2xhdXNl bGlzdF9hcHBseV9kZXBlbmRlbmNpZXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMs CiAJcmV0dXJuIHMxOwogfQogCisvKgorICogVmFsaWRhdGUgYW4gTVZEZXBlbmRlbmNpZXMgYWdh aW5zdCB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QgZGVmaW5pdGlvbi4KKyAqCisgKiBF dmVyeSBNVkRlcGVuZGVuY2llcyBtdXN0IGJlIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGF0 dG51bXMgaW4gdGhlCisgKiBhdHRyaWJ1dGVzIGxpc3QgY29ycmVzcG9uZCB0byBhdHRudW1zL2V4 cHJlc3Npb25zIGRlZmluZWQgYnkgdGhlCisgKiBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdC4K KyAqCisgKiBQb3NpdGl2ZSBhdHRudW1zIGFyZSBhdHRyaWJ1dGVzIHdoaWNoIG11c3QgYmUgZm91 bmQgaW4gdGhlIHN0eGtleXMsCisgKiB3aGlsZSBuZWdhdGl2ZSBhdHRudW1zIGNvcnJlc3BvbmQg dG8gYW4gZXhwciBudW1iZXIsIHNvIHRoZSBhdHRudW0KKyAqIGNhbid0IGJlIGJlbG93ICgwIC0g bnVtZXhwcnMpLgorICovCitib29sCitwZ19kZXBlbmRlbmNpZXNfdmFsaWRhdGVfZGVwcyhjb25z dCBNVkRlcGVuZGVuY2llcyAqZGVwZW5kZW5jaWVzLAorCQkJCQkJCSAgY29uc3QgaW50MnZlY3Rv ciAqc3R4a2V5cywKKwkJCQkJCQkgIGludCBudW1leHBycywgaW50IGVsZXZlbCkKK3sKKwlpbnQJ CQlhdHRudW1fZXhwcl9sb3dib3VuZCA9IDAgLSBudW1leHByczsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgZGVwZW5kZW5jaWVzLT5uZGVwczsgaSsrKQorCXsKKwkJY29uc3QgTVZEZXBlbmRlbmN5 ICpkZXAgPSBkZXBlbmRlbmNpZXMtPmRlcHNbaV07CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBk ZXAtPm5hdHRyaWJ1dGVzOyBqKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gZGVwLT5h dHRyaWJ1dGVzW2pdOworCQkJYm9vbAkJb2sgPSBmYWxzZTsKKworCQkJaWYgKGF0dG51bSA+IDAp CisJCQl7CisJCQkJZm9yIChpbnQgayA9IDA7IGsgPCBzdHhrZXlzLT5kaW0xOyBrKyspCisJCQkJ CWlmIChhdHRudW0gPT0gc3R4a2V5cy0+dmFsdWVzW2tdKQorCQkJCQl7CisJCQkJCQlvayA9IHRy dWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKGF0dG51bSA8IDAp ICYmIChhdHRudW0gPj0gYXR0bnVtX2V4cHJfbG93Ym91bmQpKQorCQkJCW9rID0gdHJ1ZTsKKwor CQkJaWYgKCFvaykKKwkJCXsKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkJCSBlcnJtc2coInBnX2Rl cGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9yIHRoaXMgc3RhdGlzdGljcyBvYmplY3Q6ICVk IiwgYXR0bnVtKSkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4g dHJ1ZTsKK30KKwogLyoKICAqIGRlcGVuZGVuY3lfaXNfY29tcGF0aWJsZV9leHByZXNzaW9uCiAg KgkJRGV0ZXJtaW5lcyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMKQEAgLTEyNDgsNiArMTI5OSwxOCBAQCBkZXBlbmRlbmN5X2lzX2Nv bXBhdGlibGVfZXhwcmVzc2lvbihOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBMaXN0ICpzdGF0 bGlzdCwgTgogCXJldHVybiBmYWxzZTsKIH0KIAorLyoKKyAqIEZyZWUgYWxsb2NhdGlvbnMgb2Yg YW4gTVZORGlzdGluY3QKKyAqLwordm9pZAorZnJlZV9wZ19kZXBlbmRlbmNpZXMoTVZEZXBlbmRl bmNpZXMgKmRlcGVuZGVuY2llcykKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IGRlcGVuZGVuY2ll cy0+bmRlcHM7IGkrKykKKwkJcGZyZWUoZGVwZW5kZW5jaWVzLT5kZXBzW2ldKTsKKworCXBmcmVl KGRlcGVuZGVuY2llcyk7Cit9CisKIC8qCiAgKiBkZXBlbmRlbmNpZXNfY2xhdXNlbGlzdF9zZWxl Y3Rpdml0eQogICoJCVJldHVybiB0aGUgZXN0aW1hdGVkIHNlbGVjdGl2aXR5IG9mIChhIHN1YnNl dCBvZikgdGhlIGdpdmVuIGNsYXVzZXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3Rp Y3MvZXh0ZW5kZWRfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3Rh dHMuYwppbmRleCBmMDAzZDdiNGE3My4uN2Y2NzI4MTk1ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTE4LDIxICsxOCwyOCBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL2RldG9hc3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRlICJhY2Nl c3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWNfZXh0X2RhdGEuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j cy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9v cHRpbWl6ZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3Rh dGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXRpc3RpY3Mv c3RhdF91dGlscy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mvc3RhdGlzdGljcy5oIgogI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC03Miw2ICs3OSw4 NCBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0RXh0RW50cnkKIAlMaXN0CSAgICpleHByczsJCQkvKiBl eHByZXNzaW9ucyAqLwogfSBTdGF0RXh0RW50cnk7CiAKKy8qCisgKiBBbiBpbmRleCBvZiB0aGUg YXJncyBmb3IgZXh0ZW5kZWRfc3RhdGlzdGljc191cGRhdGUoKS4KKyAqLworZW51bSBleHRlbmRl ZF9zdGF0c19hcmdudW0KK3sKKwlTVEFUU0NIRU1BX0FSRyA9IDAsCisJU1RBVE5BTUVfQVJHLAor CUlOSEVSSVRFRF9BUkcsCisJTkRJU1RJTkNUX0FSRywKKwlERVBFTkRFTkNJRVNfQVJHLAorCU1P U1RfQ09NTU9OX1ZBTFNfQVJHLAorCU1PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkcsCisJTU9TVF9D T01NT05fRlJFUVNfQVJHLAorCU1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHLAorCUVYUFJFU1NJ T05TX0FSRywKKwlOVU1fRVhURU5ERURfU1RBVFNfQVJHUworfTsKKworLyoKKyAqIFRoZSBhcmd1 bWVudCBuYW1lcyBhbmQgdHlwb2lkcyBvZiB0aGUgYXJndW1lbnRzIGZvcgorICogZXh0ZW5kZWRf c3RhdGlzdGljc191cGRhdGUoKS4KKyAqLworc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gZXh0 YXJnaW5mb1tdID0KK3sKKwlbU1RBVFNDSEVNQV9BUkddID0geyJzdGF0aXN0aWNzX3NjaGVtYW5h bWUiLCBURVhUT0lEfSwKKwlbU1RBVE5BTUVfQVJHXSA9IHsic3RhdGlzdGljc19uYW1lIiwgVEVY VE9JRH0sCisJW0lOSEVSSVRFRF9BUkddID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKKwlbTkRJ U1RJTkNUX0FSR10gPSB7Im5fZGlzdGluY3QiLCBQR19ORElTVElOQ1RPSUR9LAorCVtERVBFTkRF TkNJRVNfQVJHXSA9IHsiZGVwZW5kZW5jaWVzIiwgUEdfREVQRU5ERU5DSUVTT0lEfSwKKwlbTU9T VF9DT01NT05fVkFMU19BUkddID0geyJtb3N0X2NvbW1vbl92YWxzIiwgVEVYVEFSUkFZT0lEfSwK KwlbTU9TVF9DT01NT05fVkFMX05VTExTX0FSR10gPSB7Im1vc3RfY29tbW9uX3ZhbF9udWxscyIs IEJPT0xBUlJBWU9JRH0sCisJW01PU1RfQ09NTU9OX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9u X2ZyZXFzIiwgRkxPQVQ4QVJSQVlPSUR9LAorCVtNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSR10g PSB7Im1vc3RfY29tbW9uX2Jhc2VfZnJlcXMiLCBGTE9BVDhBUlJBWU9JRH0sCisJW0VYUFJFU1NJ T05TX0FSR10gPSB7ImV4cHJzIiwgVEVYVEFSUkFZT0lEfSwKKwlbTlVNX0VYVEVOREVEX1NUQVRT X0FSR1NdID0gezB9Cit9OworCisvKgorICogQW4gaW5kZXggb2YgdGhlIGVsZW1lbnRzIG9mIHRo ZSBzdHhkZXhwcnMgZGF0dW0sIHdoaWNoIHJlcGVhdCBmb3IgZWFjaAorICogZXhwcmVzc2lvbiBp biB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QuCisgKgorICogTk9URTogdGhlIFJBTkdF X0xFTkdUSCAmIFJBTkdFX0JPVU5EUyBzdGF0cyBhcmUgbm90IHlldCByZWZsZWN0ZWQgaW4gYW55 CisgKiB2ZXJzaW9uIG9mIHBnX3N0YXRfZXh0X2V4cHJzLgorICovCitlbnVtIGV4dGVuZGVkX3N0 YXRzX2V4cHJzX2VsZW1lbnQKK3sKKwlOVUxMX0ZSQUNfRUxFTSA9IDAsCisJQVZHX1dJRFRIX0VM RU0sCisJTl9ESVNUSU5DVF9FTEVNLAorCU1PU1RfQ09NTU9OX1ZBTFNfRUxFTSwKKwlNT1NUX0NP TU1PTl9GUkVRU19FTEVNLAorCUhJU1RPR1JBTV9CT1VORFNfRUxFTSwKKwlDT1JSRUxBVElPTl9F TEVNLAorCU1PU1RfQ09NTU9OX0VMRU1TX0VMRU0sCisJTU9TVF9DT01NT05fRUxFTV9GUkVRU19F TEVNLAorCUVMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU0sCisJTlVNX0FUVFJJQlVURV9TVEFUU19F TEVNUworfTsKKworLyoKKyAqIFRoZSBhcmd1bWVudCBuYW1lcyBhbmQgdHlwb2lkcyBvZiB0aGUg cmVwZWF0aW5nIGFyZ3VtZW50cyBmb3Igc3R4ZGV4cHJzLgorICovCitzdGF0aWMgc3RydWN0IFN0 YXRzQXJnSW5mbyBleHRleHByYXJnaW5mb1tdID0KK3sKKwlbTlVMTF9GUkFDX0VMRU1dID0geyJu dWxsX2ZyYWMiLCBGTE9BVDRPSUR9LAorCVtBVkdfV0lEVEhfRUxFTV0gPSB7ImF2Z193aWR0aCIs IElOVDRPSUR9LAorCVtOX0RJU1RJTkNUX0VMRU1dID0geyJuX2Rpc3RpbmN0IiwgRkxPQVQ0T0lE fSwKKwlbTU9TVF9DT01NT05fVkFMU19FTEVNXSA9IHsibW9zdF9jb21tb25fdmFscyIsIFRFWFRP SUR9LAorCVtNT1NUX0NPTU1PTl9GUkVRU19FTEVNXSA9IHsibW9zdF9jb21tb25fZnJlcXMiLCBG TE9BVDRBUlJBWU9JRH0sCisJW0hJU1RPR1JBTV9CT1VORFNfRUxFTV0gPSB7Imhpc3RvZ3JhbV9i b3VuZHMiLCBURVhUT0lEfSwKKwlbQ09SUkVMQVRJT05fRUxFTV0gPSB7ImNvcnJlbGF0aW9uIiwg RkxPQVQ0T0lEfSwKKwlbTU9TVF9DT01NT05fRUxFTVNfRUxFTV0gPSB7Im1vc3RfY29tbW9uX2Vs ZW1zIiwgVEVYVE9JRH0sCisJW01PU1RfQ09NTU9OX0VMRU1fRlJFUVNfRUxFTV0gPSB7Im1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMiLCBGTE9BVDRBUlJBWU9JRH0sCisJW0VMRU1fQ09VTlRfSElTVE9H UkFNX0VMRU1dID0geyJlbGVtX2NvdW50X2hpc3RvZ3JhbSIsIEZMT0FUNEFSUkFZT0lEfSwKKwlb TlVNX0FUVFJJQlVURV9TVEFUU19FTEVNU10gPSB7MH0KK307CisKK3N0YXRpYyBib29sIGV4dGVu ZGVkX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKIAogc3RhdGlj IExpc3QgKmZldGNoX3N0YXRlbnRyaWVzX2Zvcl9yZWxhdGlvbihSZWxhdGlvbiBwZ19zdGF0ZXh0 LCBPaWQgcmVsaWQpOwogc3RhdGljIFZhY0F0dHJTdGF0cyAqKmxvb2t1cF92YXJfYXR0cl9zdGF0 cyhCaXRtYXBzZXQgKmF0dHJzLCBMaXN0ICpleHBycywKQEAgLTk5LDYgKzE4NCwzMCBAQCBzdGF0 aWMgU3RhdHNCdWlsZERhdGEgKm1ha2VfYnVpbGRfZGF0YShSZWxhdGlvbiByZWwsIFN0YXRFeHRF bnRyeSAqc3RhdCwKIAkJCQkJCQkJCSAgIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJ CQkJCQkJCQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IHN0YXR0YXJnZXQpOwogCitzdGF0 aWMgSGVhcFR1cGxlIGdldF9wZ19zdGF0aXN0aWNfZXh0KFJlbGF0aW9uIHBnX3N0ZXh0LCBPaWQg bnNwb2lkLAorCQkJCQkJCQkJICBjb25zdCBjaGFyICpzdHhuYW1lKTsKK3N0YXRpYyBib29sIGRl bGV0ZV9wZ19zdGF0aXN0aWNfZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0ZWQpOwor Cit0eXBlZGVmIHN0cnVjdAoreworCWJvb2wJCW5kaXN0aW5jdDsKKwlib29sCQlkZXBlbmRlbmNp ZXM7CisJYm9vbAkJbWN2OworCWJvb2wJCWV4cHJlc3Npb25zOworfQkJCXN0YWtpbmRGbGFnczsK Kworc3RhdGljIHZvaWQgZXhwYW5kX3N0eGtpbmQoSGVhcFR1cGxlIHR1cCwgc3Rha2luZEZsYWdz ICogZW5hYmxlZCk7CitzdGF0aWMgdm9pZCB1cHNlcnRfcGdfc3RhdGlzdGljX2V4dF9kYXRhKGNv bnN0IERhdHVtICp2YWx1ZXMsCisJCQkJCQkJCQkJIGNvbnN0IGJvb2wgKm51bGxzLAorCQkJCQkJ CQkJCSBjb25zdCBib29sICpyZXBsYWNlcyk7CitzdGF0aWMgYm9vbCBjaGVja19tY3ZsaXN0X2Fy cmF5KEFycmF5VHlwZSAqYXJyLCBpbnQgYXJnaW5kZXgsCisJCQkJCQkJCWludCByZXF1aXJlZF9u ZGltcywgaW50IG1jdl9sZW5ndGgpOworc3RhdGljIERhdHVtIGltcG9ydF9leHByZXNzaW9ucyhS ZWxhdGlvbiBwZ3NkLCBpbnQgbnVtZXhwcnMsCisJCQkJCQkJCU9pZCAqYXR0dHlwaWRzLCBpbnQz MiAqYXR0dHlwbW9kcywKKwkJCQkJCQkJT2lkICphdHR0eXBjb2xscywgQXJyYXlUeXBlICpleHBy c19hcnIpOworc3RhdGljIGJvb2wgdGV4dF90b19mbG9hdDQoRGF0dW0gaW5wdXQsIERhdHVtICpv dXRwdXQpOworc3RhdGljIGJvb2wgdGV4dF90b19pbnQ0KERhdHVtIGlucHV0LCBEYXR1bSAqb3V0 cHV0KTsKKwogCiAvKgogICogQ29tcHV0ZSByZXF1ZXN0ZWQgZXh0ZW5kZWQgc3RhdHMsIHVzaW5n IHRoZSByb3dzIHNhbXBsZWQgZm9yIHRoZSBwbGFpbgpAQCAtMjYxMiwzICsyNzIxLDEwOTkgQEAg bWFrZV9idWlsZF9kYXRhKFJlbGF0aW9uIHJlbCwgU3RhdEV4dEVudHJ5ICpzdGF0LCBpbnQgbnVt cm93cywgSGVhcFR1cGxlICpyb3dzLAogCiAJcmV0dXJuIHJlc3VsdDsKIH0KKworLyoKKyAqIEZl dGNoIGEgcGdfc3RhdGlzdGljX2V4dCByb3cgYnkgbmFtZStuc3BvaWQuCisgKi8KK3N0YXRpYyBI ZWFwVHVwbGUKK2dldF9wZ19zdGF0aXN0aWNfZXh0KFJlbGF0aW9uIHBnX3N0ZXh0LCBPaWQgbnNw b2lkLCBjb25zdCBjaGFyICpzdHhuYW1lKQoreworCVNjYW5LZXlEYXRhIGtleVsyXTsKKwlTeXNT Y2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisJT2lkCQkJc3R4b2lkID0gSW52YWxpZE9p ZDsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0 eG5hbWUsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfTkFNRUVRLAorCQkJCUNT dHJpbmdHZXREYXR1bShzdHhuYW1lKSk7CisJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQlBbnVt X3BnX3N0YXRpc3RpY19leHRfc3R4bmFtZXNwYWNlLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwKKwkJCQlGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0obnNwb2lkKSk7CisKKwkvKgor CSAqIFRyeSB0byBmaW5kIG1hdGNoaW5nIHBnX3N0YXRpc3RpY19leHQgcm93LgorCSAqLworCXNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfc3RleHQsCisJCQkJCQkJICBTdGF0aXN0aWNFeHRO YW1lSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsCisJCQkJCQkJICBOVUxMLAorCQkJCQkJCSAgMiwK KwkJCQkJCQkgIGtleSk7CisKKwkvKiBVbmlxdWUgaW5kZXgsIHNvIHdlIGdldCAwIG9yIDEgdHVw bGVzLiAqLworCXR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisKKwlpZiAoSGVhcFR1cGxl SXNWYWxpZCh0dXApKQorCQlzdHhvaWQgPSAoKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RS VUNUKHR1cCkpLT5vaWQ7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJaWYgKCFPaWRJ c1ZhbGlkKHN0eG9pZCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIFNlYXJjaFN5c0NhY2hl Q29weTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShzdHhvaWQpKTsKK30KKworLyoKKyAq IERlY29kZSB0aGUgc3R4a2luZCBjb2x1bW4gc28gdGhhdCB3ZSBrbm93IHdoaWNoIHN0YXRzIHR5 cGVzIHRvIGV4cGVjdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9zdHhraW5kKEhlYXBUdXBs ZSB0dXAsIHN0YWtpbmRGbGFncyAqIGVuYWJsZWQpCit7CisJRGF0dW0JCWRhdHVtOworCUFycmF5 VHlwZSAgKmFycjsKKwljaGFyCSAgICpraW5kczsKKworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy Tm90TnVsbChTVEFURVhUT0lELAorCQkJCQkJCQkgICB0dXAsCisJCQkJCQkJCSAgIEFudW1fcGdf c3RhdGlzdGljX2V4dF9zdHhraW5kKTsKKwlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoZGF0dW0p OworCWlmIChBUlJfTkRJTShhcnIpICE9IDEgfHwgQVJSX0hBU05VTEwoYXJyKSB8fCBBUlJfRUxF TVRZUEUoYXJyKSAhPSBDSEFST0lEKQorCQllbG9nKEVSUk9SLCAic3R4a2luZCBpcyBub3QgYSAx LUQgY2hhciBhcnJheSIpOworCisJa2luZHMgPSAoY2hhciAqKSBBUlJfREFUQV9QVFIoYXJyKTsK KworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSX0RJTVMoYXJyKVswXTsgaSsrKQorCQlpZiAoa2lu ZHNbaV0gPT0gU1RBVFNfRVhUX05ESVNUSU5DVCkKKwkJCWVuYWJsZWQtPm5kaXN0aW5jdCA9IHRy dWU7CisJCWVsc2UgaWYgKGtpbmRzW2ldID09IFNUQVRTX0VYVF9ERVBFTkRFTkNJRVMpCisJCQll bmFibGVkLT5kZXBlbmRlbmNpZXMgPSB0cnVlOworCQllbHNlIGlmIChraW5kc1tpXSA9PSBTVEFU U19FWFRfTUNWKQorCQkJZW5hYmxlZC0+bWN2ID0gdHJ1ZTsKKwkJZWxzZSBpZiAoa2luZHNbaV0g PT0gU1RBVFNfRVhUX0VYUFJFU1NJT05TKQorCQkJZW5hYmxlZC0+ZXhwcmVzc2lvbnMgPSB0cnVl OworfQorCisvKgorICogUGVyZm9ybSB0aGUgYWN0dWFsIHN0b3JhZ2Ugb2YgYSBwZ19zdGF0aXN0 aWNfZXh0X2RhdGEgdHVwbGUuCisgKi8KK3N0YXRpYyB2b2lkCit1cHNlcnRfcGdfc3RhdGlzdGlj X2V4dF9kYXRhKGNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLAorCQkJCQkJ CSBjb25zdCBib29sICpyZXBsYWNlcykKK3sKKwlSZWxhdGlvbglwZ19zdGV4dGRhdGE7CisJSGVh cFR1cGxlCXN0eGR0dXA7CisJSGVhcFR1cGxlCW5ld3R1cDsKKworCXBnX3N0ZXh0ZGF0YSA9IHRh YmxlX29wZW4oU3RhdGlzdGljRXh0RGF0YVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJc3R4ZHR1cCA9IFNlYXJjaFN5c0NhY2hlMihTVEFURVhUREFUQVNUWE9JRCwKKwkJCQkJCQkg IHZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhvaWQgLSAxXSwKKwkJCQkJCQkg IHZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkaW5oZXJpdCAtIDFdKTsKKwor CWlmIChIZWFwVHVwbGVJc1ZhbGlkKHN0eGR0dXApKQorCXsKKwkJbmV3dHVwID0gaGVhcF9tb2Rp ZnlfdHVwbGUoc3R4ZHR1cCwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihwZ19zdGV4dGRh dGEpLAorCQkJCQkJCQkgICB2YWx1ZXMsCisJCQkJCQkJCSAgIG51bGxzLAorCQkJCQkJCQkgICBy ZXBsYWNlcyk7CisJCUNhdGFsb2dUdXBsZVVwZGF0ZShwZ19zdGV4dGRhdGEsICZuZXd0dXAtPnRf c2VsZiwgbmV3dHVwKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHN0eGR0dXApOworCX0KKwllbHNlCisJ eworCQluZXd0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihwZ19zdGV4dGRh dGEpLCB2YWx1ZXMsIG51bGxzKTsKKwkJQ2F0YWxvZ1R1cGxlSW5zZXJ0KHBnX3N0ZXh0ZGF0YSwg bmV3dHVwKTsKKwl9CisKKwloZWFwX2ZyZWV0dXBsZShuZXd0dXApOworCisJQ29tbWFuZENvdW50 ZXJJbmNyZW1lbnQoKTsKKworCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0ZGF0YSwgUm93RXhjbHVzaXZl TG9jayk7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgVXBkYXRlIEV4dGVuZGVkIFN0YXRpc3RpY3MK KyAqCisgKiBNYWpvciBlcnJvcnMsIHN1Y2ggYXMgdGhlIHRhYmxlIG5vdCBleGlzdGluZywgdGhl IHN0YXRpc3RpY3Mgb2JqZWN0IG5vdAorICogZXhpc3RpbmcsIG9yIGEgcGVybWlzc2lvbnMgZmFp bHVyZSBhcmUgYWx3YXlzIHJlcG9ydGVkIGF0IEVSUk9SLiBPdGhlcgorICogZXJyb3JzLCBzdWNo IGFzIGEgY29udmVyc2lvbiBmYWlsdXJlIG9uIG9uZSBzdGF0aXN0aWMga2luZCwgYXJlIHJlcG9y dGVkCisgKiBhcyBXQVJOSU5HcywgYW5kIG90aGVyIHN0YXRpc3RpYyBraW5kcyBtYXkgc3RpbGwg YmUgdXBkYXRlZC4KKyAqLworc3RhdGljIGJvb2wKK2V4dGVuZGVkX3N0YXRpc3RpY3NfdXBkYXRl KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQoreworCU9pZAkJCW5zcG9pZDsKKwljaGFyCSAgICpu c3BuYW1lOworCWNoYXIJICAgKnN0eG5hbWU7CisJYm9vbAkJaW5oZXJpdGVkOworCVJlbGF0aW9u CXBnX3N0ZXh0OworCUhlYXBUdXBsZQl0dXAgPSBOVUxMOworCisJc3Rha2luZEZsYWdzIGVuYWJs ZWQ7CisJc3Rha2luZEZsYWdzIGhhczsKKworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdHhmb3Jt OworCisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNfZXh0X2RhdGFdOworCWJvb2wJ CW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY19leHRfZGF0YV07CisJYm9vbAkJcmVwbGFjZXNbTmF0 dHNfcGdfc3RhdGlzdGljX2V4dF9kYXRhXTsKKworCWJvb2wJCXN1Y2Nlc3MgPSB0cnVlOworCisJ RGF0dW0JCWV4cHJkYXR1bTsKKwlib29sCQlpc251bGw7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7 CisJaW50CQkJbnVtYXR0bnVtcyA9IDA7CisJaW50CQkJbnVtZXhwcnMgPSAwOworCWludAkJCW51 bWF0dHJzID0gMDsKKworCS8qIGFycmF5cyBvZiB0eXBlIGluZm8sIGlmIHdlIG5lZWQgdGhlbSAq LworCU9pZAkJICAgKmF0dHR5cGlkcyA9IE5VTEw7CisJaW50MzIJICAgKmF0dHR5cG1vZHMgPSBO VUxMOworCU9pZAkJICAgKmF0dHR5cGNvbGxzID0gTlVMTDsKKwlSZWxhdGlvbglyZWw7CisJT2lk CQkJbG9ja2VkX3RhYmxlID0gSW52YWxpZE9pZDsKKworCW1lbXNldChudWxscywgZmFsc2UsIHNp emVvZihudWxscykpOworCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwltZW1z ZXQocmVwbGFjZXMsIDAsIHNpemVvZihyZXBsYWNlcykpOworCW1lbXNldCgmZW5hYmxlZCwgMCwg c2l6ZW9mKGVuYWJsZWQpKTsKKworCWhhcy5tY3YgPSAoIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1P Tl9WQUxTX0FSRykgJiYKKwkJCSAgICFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fVkFMX05VTExT X0FSRykgJiYKKwkJCSAgICFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fRlJFUVNfQVJHKSAmJgor CQkJICAgIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSRykpOworCWhhcy5u ZGlzdGluY3QgPSAhUEdfQVJHSVNOVUxMKE5ESVNUSU5DVF9BUkcpOworCWhhcy5kZXBlbmRlbmNp ZXMgPSAhUEdfQVJHSVNOVUxMKERFUEVOREVOQ0lFU19BUkcpOworCWhhcy5leHByZXNzaW9ucyA9 ICFQR19BUkdJU05VTEwoRVhQUkVTU0lPTlNfQVJHKTsKKworCWlmIChSZWNvdmVyeUluUHJvZ3Jl c3MoKSkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNU X05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCWVycm1zZygicmVjb3ZlcnkgaXMgaW4g cHJvZ3Jlc3MiKSwKKwkJCQllcnJoaW50KCJTdGF0aXN0aWNzIGNhbm5vdCBiZSBtb2RpZmllZCBk dXJpbmcgcmVjb3ZlcnkuIikpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJc3Rh dHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgU1RBVFNDSEVNQV9BUkcp OworCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShTVEFUU0NI RU1BX0FSRykpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8s IFNUQVROQU1FX0FSRyk7CisJc3R4bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJH X0RBVFVNKFNUQVROQU1FX0FSRykpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8s IGV4dGFyZ2luZm8sIElOSEVSSVRFRF9BUkcpOworCWluaGVyaXRlZCA9IFBHX0dFVEFSR19OQU1F KElOSEVSSVRFRF9BUkcpOworCisJbnNwb2lkID0gZ2V0X25hbWVzcGFjZV9vaWQobnNwbmFtZSwg dHJ1ZSk7CisJaWYgKG5zcG9pZCA9PSBJbnZhbGlkT2lkKQorCXsKKwkJZXJlcG9ydChXQVJOSU5H LAorCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQllcnJtc2coIk5h bWVzcGFjZSBcIiVzXCIgbm90IGZvdW5kLiIsIHN0eG5hbWUpKTsKKwkJUEdfUkVUVVJOX0JPT0wo ZmFsc2UpOworCX0KKworCXBnX3N0ZXh0ID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwl0dXAgPSBnZXRfcGdfc3RhdGlzdGljX2V4dChwZ19z dGV4dCwgbnNwb2lkLCBzdHhuYW1lKTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQor CXsKKwkJdGFibGVfY2xvc2UocGdfc3RleHQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCWVy cm1zZygiRXh0ZW5kZWQgU3RhdGlzdGljcyBPYmplY3QgXCIlc1wiLlwiJXNcIiBub3QgZm91bmQu IiwKKwkJCQkJICAgZ2V0X25hbWVzcGFjZV9uYW1lKG5zcG9pZCksIHN0eG5hbWUpKTsKKwkJUEdf UkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCXN0eGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNf ZXh0KSBHRVRTVFJVQ1QodHVwKTsKKwlleHBhbmRfc3R4a2luZCh0dXAsICZlbmFibGVkKTsKKwlu dW1hdHRudW1zID0gc3R4Zm9ybS0+c3R4a2V5cy5kaW0xOworCisJLyogZGVjb2RlIGV4cHJlc3Np b24gKGlmIGFueSkgKi8KKwlleHByZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9JRCwK KwkJCQkJCQkJdHVwLAorCQkJCQkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMsCisJ CQkJCQkJCSZpc251bGwpOworCisJaWYgKCFpc251bGwpCisJeworCQljaGFyCSAgICpzOworCisJ CXMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJkYXR1bSk7CisJCWV4cHJzID0gKExpc3QgKikg c3RyaW5nVG9Ob2RlKHMpOworCQlwZnJlZShzKTsKKworCQkvKgorCQkgKiBSdW4gdGhlIGV4cHJl c3Npb25zIHRocm91Z2ggZXZhbF9jb25zdF9leHByZXNzaW9ucy4gVGhpcyBpcyBub3QKKwkJICog anVzdCBhbiBvcHRpbWl6YXRpb24sIGJ1dCBpcyBuZWNlc3NhcnksIGJlY2F1c2UgdGhlIHBsYW5u ZXIgd2lsbCBiZQorCQkgKiBjb21wYXJpbmcgdGhlbSB0byBzaW1pbGFybHktcHJvY2Vzc2VkIHF1 YWwgY2xhdXNlcywgYW5kIG1heSBmYWlsIHRvCisJCSAqIGRldGVjdCB2YWxpZCBtYXRjaGVzIHdp dGhvdXQgdGhpcy4gIFdlIG11c3Qgbm90IHVzZQorCQkgKiBjYW5vbmljYWxpemVfcXVhbCwgaG93 ZXZlciwgc2luY2UgdGhlc2UgYXJlbid0IHF1YWwgZXhwcmVzc2lvbnMuCisJCSAqLworCQlleHBy cyA9IChMaXN0ICopIGV2YWxfY29uc3RfZXhwcmVzc2lvbnMoTlVMTCwgKE5vZGUgKikgZXhwcnMp OworCisJCS8qIE1heSBhcyB3ZWxsIGZpeCBvcGZ1bmNpZHMgdG9vICovCisJCWZpeF9vcGZ1bmNp ZHMoKE5vZGUgKikgZXhwcnMpOworCX0KKwludW1leHBycyA9IGxpc3RfbGVuZ3RoKGV4cHJzKTsK KwludW1hdHRycyA9IG51bWF0dG51bXMgKyBudW1leHByczsKKworCS8qIFJvdW5kYWJvdXQgd2F5 IG9mIGdldHRpbmcgYSBSYW5nZVZhciBvbiB0aGUgdW5kZXJseWluZyB0YWJsZSAqLworCXJlbCA9 IHJlbGF0aW9uX29wZW4oc3R4Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkv KiBubyBuZWVkIHRvIGZldGNoIHJlbG9pZCwgd2UgYWxyZWFkeSBoYXZlIGl0ICovCisJUmFuZ2VW YXJHZXRSZWxpZEV4dGVuZGVkKG1ha2VSYW5nZVZhcihuc3BuYW1lLAorCQkJCQkJCQkJCSAgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgLTEpLAorCQkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2ssIDAsCisJCQkJCQkJIFJhbmdlVmFyQ2FsbGJhY2tGb3JTdGF0cywgJmxvY2tlZF90 YWJsZSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAo aGFzLm1jdikKKwl7CisJCWlmICghZW5hYmxlZC5tY3YpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklO RywKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ ZXJybXNnKCJNQ1YgcGFyYW1ldGVycyBcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wi IHdlcmUgYWxsICIKKwkJCQkJCSAgICJzcGVjaWZpZWQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3Mg b2JqZWN0IHRoYXQgZG9lcyBub3QgZXhwZWN0IE1DViAiLAorCQkJCQkJICAgZXh0YXJnaW5mb1tN T1NUX0NPTU1PTl9WQUxTX0FSR10uYXJnbmFtZSwKKwkJCQkJCSAgIGV4dGFyZ2luZm9bTU9TVF9D T01NT05fVkFMX05VTExTX0FSR10uYXJnbmFtZSwKKwkJCQkJCSAgIGV4dGFyZ2luZm9bTU9TVF9D T01NT05fRlJFUVNfQVJHXS5hcmduYW1lLAorCQkJCQkJICAgZXh0YXJnaW5mb1tNT1NUX0NPTU1P Tl9CQVNFX0ZSRVFTX0FSR10uYXJnbmFtZSkpOworCQkJaGFzLm1jdiA9IGZhbHNlOworCQkJc3Vj Y2VzcyA9IGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIFRoZSBNQ1YgYXJncyBtdXN0 IGFsbCBiZSBOVUxMLiAqLworCQlpZiAoIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9WQUxTX0FS RykgfHwKKwkJCSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fVkFMX05VTExTX0FSRykgfHwKKwkJ CSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fRlJFUVNfQVJHKSB8fAorCQkJIVBHX0FSR0lTTlVM TChNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSRykpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywK KwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJy bXNnKCJNQ1YgcGFyYW1ldGVycyBcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiIG11 c3QgYmUgYWxsIHNwZWNpZmllZCBpZiBhbnkgYXJlIHNwZWNpZmllZCIsCisJCQkJCQkgICBleHRh cmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfQVJHXS5hcmduYW1lLAorCQkJCQkJICAgZXh0YXJnaW5m b1tNT1NUX0NPTU1PTl9WQUxfTlVMTFNfQVJHXS5hcmduYW1lLAorCQkJCQkJICAgZXh0YXJnaW5m b1tNT1NUX0NPTU1PTl9GUkVRU19BUkddLmFyZ25hbWUsCisJCQkJCQkgICBleHRhcmdpbmZvW01P U1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHXS5hcmduYW1lKSk7CisJCQlzdWNjZXNzID0gZmFsc2U7 CisJCX0KKwl9CisKKwlpZiAoaGFzLm5kaXN0aW5jdCAmJiAhZW5hYmxlZC5uZGlzdGluY3QpCisJ eworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIlBhcmFtZXRlcnMgXCIlc1wiIHdhcyBzcGVjaWZpZWQg Zm9yIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICIKKwkJCQkJICAgInRoYXQgZG9lcyBub3Qg ZXhwZWN0IFwiJXNcIiIsCisJCQkJCSAgIGV4dGFyZ2luZm9bTkRJU1RJTkNUX0FSR10uYXJnbmFt ZSwKKwkJCQkJICAgZXh0YXJnaW5mb1tORElTVElOQ1RfQVJHXS5hcmduYW1lKSk7CisJCWhhcy5u ZGlzdGluY3QgPSBmYWxzZTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCX0KKworCWlmIChoYXMuZGVw ZW5kZW5jaWVzICYmICFlbmFibGVkLmRlcGVuZGVuY2llcykKKwl7CisJCWVyZXBvcnQoV0FSTklO RywKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVy cm1zZygiUGFyYW1ldGVycyBcIiVzXCIgd2FzIHNwZWNpZmllZCBmb3IgZXh0ZW5kZWQgc3RhdGlz dGljcyBvYmplY3QgIgorCQkJCQkgICAidGhhdCBkb2VzIG5vdCBleHBlY3QgXCIlc1wiIiwKKwkJ CQkJICAgZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lLAorCQkJCQkgICBleHRh cmdpbmZvW0RFUEVOREVOQ0lFU19BUkddLmFyZ25hbWUpKTsKKwkJaGFzLmRlcGVuZGVuY2llcyA9 IGZhbHNlOworCQlzdWNjZXNzID0gZmFsc2U7CisJfQorCisJaWYgKGhhcy5leHByZXNzaW9ucyAm JiAhZW5hYmxlZC5leHByZXNzaW9ucykKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiUGFyYW1l dGVycyBcIiVzXCIgd2FzIHNwZWNpZmllZCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3Qg IgorCQkJCQkgICAidGhhdCBkb2VzIG5vdCBleHBlY3QgXCIlc1wiIiwKKwkJCQkJICAgZXh0YXJn aW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lLAorCQkJCQkgICBleHRhcmdpbmZvW0RFUEVO REVOQ0lFU19BUkddLmFyZ25hbWUpKTsKKwkJaGFzLmV4cHJlc3Npb25zID0gZmFsc2U7CisJCXN1 Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciBvZiB0aGVzZSBzdGF0c2lzdGlj IHR5cGVzIHJlcXVpcmVzIHRoYXQgd2Ugc3VwcGx5CisJICogc2VtaS1maWxsZWQtb3V0IFZhY0F0 dHJTdGF0UCBhcnJheS4KKwkgKgorCSAqCisJICogSXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0 aGUgZXhpc3RpbmcgbG9va3VwX3Zhcl9hdHRyX3N0YXRzKCkgYW5kCisJICogZXhhbWluZV9hdHRy aWJ1dGUoKSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNraXAgYXR0cmlidXRlcyBmb3IK KwkgKiB3aGljaCBhdHRzdGF0dGFyZ2V0IGlzIDAsIGFuZCB3ZSBtYXkgaGF2ZSBzdGF0cyB0byBp bXBvcnQgZm9yIHRob3NlCisJICogYXR0cmlidXRlcy4KKwkgKi8KKwlpZiAoaGFzLm1jdiB8fCBo YXMuZXhwcmVzc2lvbnMpCisJeworCQlhdHR0eXBpZHMgPSBwYWxsb2MwKG51bWF0dHJzICogc2l6 ZW9mKE9pZCkpOworCQlhdHR0eXBtb2RzID0gcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihpbnQz MikpOworCQlhdHR0eXBjb2xscyA9IHBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoT2lkKSk7CisK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1hdHRudW1zOyBpKyspCisJCXsKKwkJCUF0dHJOdW1i ZXIJYXR0bnVtID0gc3R4Zm9ybS0+c3R4a2V5cy52YWx1ZXNbaV07CisKKwkJCU9pZAkJCWx0X29w cjsKKwkJCU9pZAkJCWVxX29wcjsKKwkJCWNoYXIJCXR5cGV0eXBlOworCisJCQkvKgorCQkJICog ZmV0Y2ggYXR0cmlidXRlIGVudHJpZXMgdGhlIHNhbWUgYXMgYXJlIGRvbmUgZm9yIGF0dHJpYnV0 ZQorCQkJICogc3RhdHMKKwkJCSAqLworCQkJc3RhdGF0dF9nZXRfdHlwZShzdHhmb3JtLT5zdHhy ZWxpZCwKKwkJCQkJCQkgYXR0bnVtLAorCQkJCQkJCSAmYXR0dHlwaWRzW2ldLAorCQkJCQkJCSAm YXR0dHlwbW9kc1tpXSwKKwkJCQkJCQkgJnR5cGV0eXBlLAorCQkJCQkJCSAmYXR0dHlwY29sbHNb aV0sCisJCQkJCQkJICZsdF9vcHIsCisJCQkJCQkJICZlcV9vcHIpOworCQl9CisKKwkJZm9yIChp bnQgaSA9IG51bWF0dG51bXM7IGkgPCBudW1hdHRyczsgaSsrKQorCQl7CisJCQlOb2RlCSAgICpl eHByID0gbGlzdF9udGgoZXhwcnMsIGkgLSBudW1hdHRudW1zKTsKKworCQkJYXR0dHlwaWRzW2ld ID0gZXhwclR5cGUoZXhwcik7CisJCQlhdHR0eXBtb2RzW2ldID0gZXhwclR5cG1vZChleHByKTsK KwkJCWF0dHR5cGNvbGxzW2ldID0gZXhwckNvbGxhdGlvbihleHByKTsKKworCQkJLyoKKwkJCSAq IER1cGxpY2F0ZSBsb2dpYyBmcm9tIGdldF9hdHRyX3N0YXRfdHlwZQorCQkJICovCisKKwkJCS8q CisJCQkgKiBJZiBpdCdzIGEgbXVsdGlyYW5nZSwgc3RlcCBkb3duIHRvIHRoZSByYW5nZSB0eXBl LCBhcyBpcyBkb25lCisJCQkgKiBieSBtdWx0aXJhbmdlX3R5cGFuYWx5emUoKS4KKwkJCSAqLwor CQkJaWYgKHR5cGVfaXNfbXVsdGlyYW5nZShhdHR0eXBpZHNbaV0pKQorCQkJCWF0dHR5cGlkc1tp XSA9IGdldF9tdWx0aXJhbmdlX3JhbmdlKGF0dHR5cGlkc1tpXSk7CisKKwkJCS8qCisJCQkgKiBT cGVjaWFsIGNhc2U6IGNvbGxhdGlvbiBmb3IgdHN2ZWN0b3IgaXMgREVGQVVMVF9DT0xMQVRJT05f T0lELgorCQkJICogU2VlIGNvbXB1dGVfdHN2ZWN0b3Jfc3RhdHMoKS4KKwkJCSAqLworCQkJaWYg KGF0dHR5cGlkc1tpXSA9PSBUU1ZFQ1RPUk9JRCkKKwkJCQlhdHR0eXBjb2xsc1tpXSA9IERFRkFV TFRfQ09MTEFUSU9OX09JRDsKKworCQl9CisJfQorCisJLyogUHJpbWFyeSBLZXk6IGNhbm5vdCBi ZSBOVUxMIG9yIHJlcGxhY2VkLiAqLworCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0 YV9zdHhvaWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oc3R4Zm9ybS0+b2lkKTsKKwl2YWx1ZXNb QW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGluaGVyaXQgLSAxXSA9IEJvb2xHZXREYXR1 bShpbmhlcml0ZWQpOworCisJaWYgKGhhcy5uZGlzdGluY3QpCisJeworCQlEYXR1bQkJbmRpc3Rp bmN0X2RhdHVtID0gUEdfR0VUQVJHX0RBVFVNKE5ESVNUSU5DVF9BUkcpOworCQlieXRlYQkgICAq ZGF0YSA9IERhdHVtR2V0Qnl0ZWFQUChuZGlzdGluY3RfZGF0dW0pOworCQlNVk5EaXN0aW5jdCAq bmRpc3RpbmN0ID0gc3RhdGV4dF9uZGlzdGluY3RfZGVzZXJpYWxpemUoZGF0YSk7CisKKwkJaWYg KHBnX25kaXN0aW5jdF92YWxpZGF0ZV9pdGVtcyhuZGlzdGluY3QsICZzdHhmb3JtLT5zdHhrZXlz LCBudW1leHBycywgV0FSTklORykpCisJCXsKKwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19l eHRfZGF0YV9zdHhkbmRpc3RpbmN0IC0gMV0gPSBuZGlzdGluY3RfZGF0dW07CisJCQlyZXBsYWNl c1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkbmRpc3RpbmN0IC0gMV0gPSB0cnVlOwor CQl9CisJCWVsc2UKKwkJeworCQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4 ZG5kaXN0aW5jdCAtIDFdID0gdHJ1ZTsKKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCisJCWZy ZWVfcGdfbmRpc3RpbmN0KG5kaXN0aW5jdCk7CisJfQorCWVsc2UKKwkJbnVsbHNbQW51bV9wZ19z dGF0aXN0aWNfZXh0X2RhdGFfc3R4ZG5kaXN0aW5jdCAtIDFdID0gdHJ1ZTsKKworCWlmIChoYXMu ZGVwZW5kZW5jaWVzKQorCXsKKwkJRGF0dW0JCWRlcGVuZGVuY2llc19kYXR1bSA9IFBHX0dFVEFS R19EQVRVTShERVBFTkRFTkNJRVNfQVJHKTsKKwkJYnl0ZWEJICAgKmRhdGEgPSBEYXR1bUdldEJ5 dGVhUFAoZGVwZW5kZW5jaWVzX2RhdHVtKTsKKwkJTVZEZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2ll cyA9IHN0YXRleHRfZGVwZW5kZW5jaWVzX2Rlc2VyaWFsaXplKGRhdGEpOworCisJCWlmIChwZ19k ZXBlbmRlbmNpZXNfdmFsaWRhdGVfZGVwcyhkZXBlbmRlbmNpZXMsICZzdHhmb3JtLT5zdHhrZXlz LCBudW1leHBycywgV0FSTklORykpCisJCXsKKwkJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19l eHRfZGF0YV9zdHhkZGVwZW5kZW5jaWVzIC0gMV0gPSBkZXBlbmRlbmNpZXNfZGF0dW07CisJCQly ZXBsYWNlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkZGVwZW5kZW5jaWVzIC0gMV0g PSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0 X2RhdGFfc3R4ZGRlcGVuZGVuY2llcyAtIDFdID0gdHJ1ZTsKKwkJCXN1Y2Nlc3MgPSBmYWxzZTsK KwkJfQorCisJCWZyZWVfcGdfZGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7CisJfQorCWVsc2UK KwkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGRlcGVuZGVuY2llcyAtIDFd ID0gdHJ1ZTsKKworCWlmIChoYXMubWN2KQorCXsKKwkJRGF0dW0JCWRhdHVtOworCQlBcnJheVR5 cGUgICptY3ZfYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKE1PU1RfQ09NTU9OX1ZBTFNfQVJH KTsKKwkJQXJyYXlUeXBlICAqbnVsbHNfYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKE1PU1Rf Q09NTU9OX1ZBTF9OVUxMU19BUkcpOworCQlBcnJheVR5cGUgICpmcmVxc19hcnIgPSBQR19HRVRB UkdfQVJSQVlUWVBFX1AoTU9TVF9DT01NT05fRlJFUVNfQVJHKTsKKwkJQXJyYXlUeXBlICAqYmFz ZV9mcmVxc19hcnIgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoTU9TVF9DT01NT05fQkFTRV9GUkVR U19BUkcpOworCQlpbnQJCQluaXRlbXM7CisJCURhdHVtCSAgICptY3ZfZWxlbXM7CisJCWJvb2wJ ICAgKm1jdl9udWxsczsKKwkJaW50CQkJY2hlY2tfbnVtbWN2OworCisJCS8qCisJCSAqIFRoZSBt Y3ZfYXJyIGlzIGFuIGFycmF5IG9mIGFycmF5cyBvZiB0ZXh0LCBhbmQgd2UgdXNlIGl0IGFzIHRo ZQorCQkgKiByZWZlcmVuY2UgYXJyYXkgZm9yIGNoZWNraW5nIHRoZSBsZW5ndGhzIG9mIHRoZSBv dGhlciAzIGFycmF5cy4KKwkJICovCisJCWlmIChBUlJfTkRJTShtY3ZfYXJyKSAhPSAyKQorCQl7 CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiUGFyYW1ldGVycyBcIiVzXCIgbXVzdCBiZSBhIHRl eHQgYXJyYXkgb2YgMiBkaW1lbnNpb25zLiIsCisJCQkJCQkgICBleHRhcmdpbmZvW01PU1RfQ09N TU9OX1ZBTFNfQVJHXS5hcmduYW1lKSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJ bml0ZW1zID0gQVJSX0RJTVMobWN2X2FycilbMF07CisKKwkJLyogRml4ZWQgbGVuZ3RoIGFycmF5 cyB0aGF0IGNhbm5vdCBjb250YWluIE5VTExzLiAqLworCQlpZiAoIWNoZWNrX21jdmxpc3RfYXJy YXkobnVsbHNfYXJyLCBNT1NUX0NPTU1PTl9WQUxfTlVMTFNfQVJHLAorCQkJCQkJCQkgMiwgbml0 ZW1zKSB8fAorCQkJIWNoZWNrX21jdmxpc3RfYXJyYXkoZnJlcXNfYXJyLCBNT1NUX0NPTU1PTl9G UkVRU19BUkcsCisJCQkJCQkJCSAxLCBuaXRlbXMpIHx8CisJCQkhY2hlY2tfbWN2bGlzdF9hcnJh eShiYXNlX2ZyZXFzX2FyciwgTU9TVF9DT01NT05fQkFTRV9GUkVRU19BUkcsCisJCQkJCQkJCSAx LCBuaXRlbXMpKQorCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCisJCWRlY29uc3RydWN0X2FycmF5 X2J1aWx0aW4obWN2X2FyciwgVEVYVE9JRCwgJm1jdl9lbGVtcywKKwkJCQkJCQkJICAmbWN2X251 bGxzLCAmY2hlY2tfbnVtbWN2KTsKKworCQlBc3NlcnQoY2hlY2tfbnVtbWN2ID09IChuaXRlbXMg KiBudW1hdHRycykpOworCisJCWRhdHVtID0gaW1wb3J0X21jdmxpc3QodHVwLCBXQVJOSU5HLCBu dW1hdHRycywKKwkJCQkJCQkgICBhdHR0eXBpZHMsIGF0dHR5cG1vZHMsIGF0dHR5cGNvbGxzLAor CQkJCQkJCSAgIG5pdGVtcywgbWN2X2VsZW1zLCBtY3ZfbnVsbHMsCisJCQkJCQkJICAgKGJvb2wg KikgQVJSX0RBVEFfUFRSKG51bGxzX2FyciksCisJCQkJCQkJICAgKGZsb2F0OCAqKSBBUlJfREFU QV9QVFIoZnJlcXNfYXJyKSwKKwkJCQkJCQkgICAoZmxvYXQ4ICopIEFSUl9EQVRBX1BUUihiYXNl X2ZyZXFzX2FycikpOworCisJCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhk bWN2IC0gMV0gPSBkYXR1bTsKKwkJcmVwbGFjZXNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFf c3R4ZG1jdiAtIDFdID0gdHJ1ZTsKKwl9CisJZWxzZQorCQludWxsc1tBbnVtX3BnX3N0YXRpc3Rp Y19leHRfZGF0YV9zdHhkbWN2IC0gMV0gPSB0cnVlOworCisJaWYgKGhhcy5leHByZXNzaW9ucykK Kwl7CisJCURhdHVtCQlkYXR1bTsKKwkJUmVsYXRpb24JcGdzZDsKKworCQlwZ3NkID0gdGFibGVf b3BlbihTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCQkvKgorCQkg KiBHZW5lcmF0ZSB0aGUgZXhwcmVzc2lvbnMgYXJyYXkuCisJCSAqCisJCSAqIFRoZSBhdHR5dHlw aWRzLCBhdHR5dHlwbW9kcywgYW5kIGF0dHR5cGNvbHMgYXJyYXlzIGhhdmUgYWxsIHRoZSByZWd1 bGFyCisJCSAqIGF0dHJpYnV0ZXMgbGlzdGVkIGZpcnN0LCBzbyB3ZSBjYW4gcGFzcyB0aG9zZSBh cnJheXMgd2l0aCBhIHN0YXJ0IHBvaW50CisJCSAqIGFmdGVyIHRoZSBsYXN0IHJlZ3VsYXIgYXR0 cmlidXRlLCBhbmQgdGhlcmUgc2hvdWxkIGJlIG51bWV4cHJzIGVsZW1lbnRzCisJCSAqIHJlbWFp bmluZy4KKwkJICovCisJCWRhdHVtID0gaW1wb3J0X2V4cHJlc3Npb25zKHBnc2QsIG51bWV4cHJz LAorCQkJCQkJCQkgICAmYXR0dHlwaWRzW251bWF0dG51bXNdLCAmYXR0dHlwbW9kc1tudW1hdHRu dW1zXSwKKwkJCQkJCQkJICAgJmF0dHR5cGNvbGxzW251bWF0dG51bXNdLAorCQkJCQkJCQkgICBQ R19HRVRBUkdfQVJSQVlUWVBFX1AoRVhQUkVTU0lPTlNfQVJHKSk7CisKKwkJdGFibGVfY2xvc2Uo cGdzZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX2V4 dF9kYXRhX3N0eGRleHByIC0gMV0gPSBkYXR1bTsKKwkJcmVwbGFjZXNbQW51bV9wZ19zdGF0aXN0 aWNfZXh0X2RhdGFfc3R4ZGV4cHIgLSAxXSA9IHRydWU7CisJfQorCWVsc2UKKwkJbnVsbHNbQW51 bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGV4cHIgLSAxXSA9IHRydWU7CisKKwl1cHNlcnRf cGdfc3RhdGlzdGljX2V4dF9kYXRhKHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzKTsKKworCWhlYXBf ZnJlZXR1cGxlKHR1cCk7CisJdGFibGVfY2xvc2UocGdfc3RleHQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJaWYgKGF0dHR5cGlkcyAhPSBOVUxMKQorCQlwZnJlZShhdHR0eXBpZHMpOworCWlmIChh dHR0eXBtb2RzICE9IE5VTEwpCisJCXBmcmVlKGF0dHR5cG1vZHMpOworCWlmIChhdHR0eXBjb2xs cyAhPSBOVUxMKQorCQlwZnJlZShhdHR0eXBjb2xscyk7CisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisK Ky8qCisgKiBDb25zaXN0ZW5jeSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgb3RoZXIgbWN2bGlzdCBh cnJheXMgYXJlIGluIGFsaWdubWVudAorICogd2l0aCB0aGUgbWN2IGFycmF5LgorICovCitzdGF0 aWMgYm9vbAorY2hlY2tfbWN2bGlzdF9hcnJheShBcnJheVR5cGUgKmFyciwgaW50IGFyZ2luZGV4 LCBpbnQgcmVxdWlyZWRfbmRpbXMsCisJCQkJCWludCBtY3ZfbGVuZ3RoKQoreworCWlmIChBUlJf TkRJTShhcnIpICE9IHJlcXVpcmVkX25kaW1zKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJQ YXJhbWV0ZXIgXCIlc1wiIG11c3QgYmUgYW4gYXJyYXkgb2YgJWQgZGltZW5zaW9ucy4iLAorCQkJ CQkgICBleHRhcmdpbmZvW2FyZ2luZGV4XS5hcmduYW1lLCByZXF1aXJlZF9uZGltcykpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGFycmF5X2NvbnRhaW5zX251bGxzKGFycikpCisJewor CQllcmVwb3J0KFdBUk5JTkcsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQllcnJtc2coIkFycmF5IFwiJXNcIiBjYW5ub3QgY29udGFpbiBOVUxMcy4i LAorCQkJCQkgICBleHRhcmdpbmZvW2FyZ2luZGV4XS5hcmduYW1lKSk7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlpZiAoQVJSX0RJTVMoYXJyKVswXSAhPSBtY3ZfbGVuZ3RoKQorCXsKKwkJZXJl cG9ydChXQVJOSU5HLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJZXJybXNnKCJQYXJhbWV0ZXJzIFwiJXNcIiBtdXN0IGhhdmUgdGhlIHNhbWUgbnVt YmVyIG9mIGVsZW1lbnRzIGFzIFwiJXNcIiIsCisJCQkJCSAgIGV4dGFyZ2luZm9bYXJnaW5kZXhd LmFyZ25hbWUsCisJCQkJCSAgIGV4dGFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19BUkddLmFyZ25h bWUpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICog V2FybiBvZiB0eXBlIG1pc21hdGNoLiBDb21tb24gcGF0dGVybi4KKyAqLworc3RhdGljIERhdHVt Cit3YXJuX3R5cGVfbWlzbWF0Y2goRGF0dW0gZCwgY29uc3QgY2hhciAqYXJnbmFtZSkKK3sKKwlj aGFyCSAgICpzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkKTsKKworCWVyZXBvcnQoV0FSTklORywK KwkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQllcnJtc2co IkV4cHJlc3Npb24gJXMgZWxlbWVudCBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgaW5w dXQgdHlwZS4iLAorCQkJCSAgIGFyZ25hbWUsIHMpKTsKKwlyZXR1cm4gKERhdHVtKSAwOworfQor CisvKgorICogQ3JlYXRlIHRoZSBzdHhkZXhwcnMgZGF0dW0gdXNpbmcgdGhlIHVzZXIgaW5wdXQg aW4gYW4gYXJyYXkgb2YgYXJyYXkgb2YKKyAqIHRleHQsIHJlZmVyZW5jZWQgYWdhaW5zdCB0aGUg ZGF0YXR5cGVzIGZvciB0aGUgZXhwcmVzc2lvbnMuCisgKgorICogVGhpcyBkYXR1bSBpcyBuZWVk ZWQgdG8gZmlsbCBvdXQgYSBjb21wbGV0ZSBwZ19zdGF0aXN0aWNfZXh0X2RhdGEgdHVwbGUuCisg KgorICogVGhlIGlucHV0IGFycmF5cyBzaG91bGQgZWFjaCBoYXZlIG51bWV4cHJzIGVsZW1lbnRz IGluIHRoZW0gYW5kIHRoZXkgc2hvdWxkCisgKiBiZSB0aGUgaW4gdGhlIG9yZGVyIHRoYXQgdGhl IGV4cHJlc3Npb25zIGFwcGVhciBpbiB0aGUgc3RhdGlzdGljcyBvYmplY3QuCisgKi8KK3N0YXRp YyBEYXR1bQoraW1wb3J0X2V4cHJlc3Npb25zKFJlbGF0aW9uIHBnc2QsIGludCBudW1leHBycywK KwkJCQkgICBPaWQgKmF0dHR5cGlkcywgaW50MzIgKmF0dHR5cG1vZHMsCisJCQkJICAgT2lkICph dHR0eXBjb2xscywgQXJyYXlUeXBlICpleHByc19hcnIpCit7CisJRGF0dW0JICAgKmV4cHJzX2Vs ZW1zOworCWJvb2wJICAgKmV4cHJzX251bGxzOworCWludAkJCWNoZWNrX251bWV4cHJzOworCWlu dAkJCW9mZnNldCA9IDA7CisKKwlGbWdySW5mbwlhcnJheV9pbl9mbjsKKworCU9pZAkJCXBnc3R5 cG9pZCA9IGdldF9yZWxfdHlwZV9pZChTdGF0aXN0aWNSZWxhdGlvbklkKTsKKworCUFycmF5QnVp bGRTdGF0ZSAqYXN0YXRlID0gTlVMTDsKKworCS8qCisJICogVmVyaWZ5IHRoYXQgdGhlIGV4cHJz X2FycmF5IGlzIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgdGhlIGV4cGVjdGF0aW9ucworCSAqIHNl dCBieSBzdHhkZXhwcnMgZ2VuZXJhbGx5IGFuZCB0aGUgc3BlY2lmaWMgc3RhdGlzdGljcyBvYmpl Y3QgZGVmaW5pdGlvbi4KKwkgKi8KKwlpZiAoQVJSX05ESU0oZXhwcnNfYXJyKSAhPSAyKQorCXsK KwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJQYXJhbWV0ZXIgXCIlc1wiIG11c3QgYmUgYSB0ZXh0IGFy cmF5IG9mIDIgZGltZW5zaW9ucy4iLAorCQkJCQkgICBleHRhcmdpbmZvW0VYUFJFU1NJT05TX0FS R10uYXJnbmFtZSkpOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCWlmIChBUlJfRElNUyhl eHByc19hcnIpWzBdICE9IG51bWV4cHJzKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCWVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJQYXJh bWV0ZXIgXCIlc1wiIG11c3QgaGF2ZSBhbiBvdXRlciBkaW1lbnNpb24gb2YgJWQgZWxlbWVudHMu IiwKKwkJCQkJICAgZXh0YXJnaW5mb1tFWFBSRVNTSU9OU19BUkddLmFyZ25hbWUsIG51bWV4cHJz KSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCWlmIChBUlJfRElNUyhleHByc19hcnIpWzFd ICE9IE5VTV9BVFRSSUJVVEVfU1RBVFNfRUxFTVMpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJ CQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2co IlBhcmFtZXRlciBcIiVzXCIgbXVzdCBoYXZlIGFuIGlubmVyIGRpbWVuc2lvbiBvZiAlZCBlbGVt ZW50cy4iLAorCQkJCQkgICBleHRhcmdpbmZvW0VYUFJFU1NJT05TX0FSR10uYXJnbmFtZSwKKwkJ CQkJICAgTlVNX0FUVFJJQlVURV9TVEFUU19FTEVNUykpOworCQlyZXR1cm4gKERhdHVtKSAwOwor CX0KKworCWZtZ3JfaW5mbyhGX0FSUkFZX0lOLCAmYXJyYXlfaW5fZm4pOworCisJZGVjb25zdHJ1 Y3RfYXJyYXlfYnVpbHRpbihleHByc19hcnIsIFRFWFRPSUQsICZleHByc19lbGVtcywKKwkJCQkJ CQkgICZleHByc19udWxscywgJmNoZWNrX251bWV4cHJzKTsKKworCS8qCisJICogSXRlcmF0ZSBv dmVyIGVhY2ggZXhwZWN0ZWQgZXhwcmVzc2lvbi4KKwkgKgorCSAqIFRoZSB2YWx1ZXMvbnVsbHMv cmVwbGFjZXMgYXJyYXlzIGFyZSBkZWNvbnN0cnVjdGVkIGludG8gYSAxLUQgYXJyYXlzLCBzbwor CSAqIHdlIGhhdmUgdG8gYWR2YW5jZSBhbiBvZmZzZXQgYnkgTlVNX0FUVFJJQlVURV9TVEFUU19F TEVNUyB0byBnZXQgdG8gdGhlCisJICogbmV4dCByb3cgb2YgdGhlIDItRCBhcnJheS4KKwkgKi8K Kwlmb3IgKGludCBpID0gMDsgaSA8IG51bWV4cHJzOyBpKyspCisJeworCQlPaWQJCQl0eXBpZCA9 IGF0dHR5cGlkc1tpXTsKKwkJaW50MzIJCXR5cG1vZCA9IGF0dHR5cG1vZHNbaV07CisJCU9pZAkJ CXN0YWNvbGwgPSBhdHR0eXBjb2xsc1tpXTsKKwkJVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlOwor CisJCU9pZAkJCWVsZW10eXBpZCA9IEludmFsaWRPaWQ7CisJCU9pZAkJCWVsZW1fZXFfb3ByID0g SW52YWxpZE9pZDsKKworCQlib29sCQlvazsKKworCQlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3N0 YXRpc3RpY107CisJCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY107CisJCWJvb2wJCXJl cGxhY2VzW05hdHRzX3BnX3N0YXRpc3RpY107CisKKwkJSGVhcFR1cGxlCXBnc3R1cDsKKwkJRGF0 dW0JCXBnc3RkYXQ7CisKKwkJLyogQWR2YW5jZSB0aGUgaW5kZXhlcyB0byB0aGUgbmV4dCBvZmZz ZXQuICovCisJCWNvbnN0IGludAludWxsX2ZyYWNfaWR4ID0gb2Zmc2V0ICsgTlVMTF9GUkFDX0VM RU07CisJCWNvbnN0IGludAlhdmdfd2lkdGhfaWR4ID0gb2Zmc2V0ICsgQVZHX1dJRFRIX0VMRU07 CisJCWNvbnN0IGludAluX2Rpc3RpbmN0X2lkeCA9IG9mZnNldCArIE5fRElTVElOQ1RfRUxFTTsK KwkJY29uc3QgaW50CW1vc3RfY29tbW9uX3ZhbHNfaWR4ID0gb2Zmc2V0ICsgTU9TVF9DT01NT05f VkFMU19FTEVNOworCQljb25zdCBpbnQJbW9zdF9jb21tb25fZnJlcXNfaWR4ID0gb2Zmc2V0ICsg TU9TVF9DT01NT05fRlJFUVNfRUxFTTsKKwkJY29uc3QgaW50CWhpc3RvZ3JhbV9ib3VuZHNfaWR4 ID0gb2Zmc2V0ICsgSElTVE9HUkFNX0JPVU5EU19FTEVNOworCQljb25zdCBpbnQJY29ycmVsYXRp b25faWR4ID0gb2Zmc2V0ICsgQ09SUkVMQVRJT05fRUxFTTsKKwkJY29uc3QgaW50CW1vc3RfY29t bW9uX2VsZW1zX2lkeCA9IG9mZnNldCArIE1PU1RfQ09NTU9OX0VMRU1TX0VMRU07CisJCWNvbnN0 IGludAltb3N0X2NvbW1vbl9lbGVtc19mcmVxc19pZHggPSBvZmZzZXQgKyBNT1NUX0NPTU1PTl9F TEVNX0ZSRVFTX0VMRU07CisJCWNvbnN0IGludAllbGVtX2NvdW50X2hpc3RvZ3JhbV9pZHggPSBv ZmZzZXQgKyBFTEVNX0NPVU5UX0hJU1RPR1JBTV9FTEVNOworCisJCS8qIFRoaXMgZmluZHMgdGhl IHJpZ2h0IG9wZXJhdG9ycyBldmVuIGlmIGF0dHR5cGlkIGlzIGEgZG9tYWluICovCisJCXR5cGNh Y2hlID0gbG9va3VwX3R5cGVfY2FjaGUodHlwaWQsIFRZUEVDQUNIRV9MVF9PUFIgfCBUWVBFQ0FD SEVfRVFfT1BSKTsKKworCQlzdGF0YXR0X2luaXRfZW1wdHlfdHVwbGUoSW52YWxpZE9pZCwgSW52 YWxpZEF0dHJOdW1iZXIsIGZhbHNlLAorCQkJCQkJCQkgdmFsdWVzLCBudWxscywgcmVwbGFjZXMp OworCisJCS8qCisJCSAqIENoZWNrIGVhY2ggb2YgdGhlIGZpeGVkIGF0dHJpYnV0ZXMgdG8gc2Vl IGlmIHRoZXkgaGF2ZSB2YWx1ZXMgc2V0LiBJZiBub3QKKwkJICogc2V0LCB0aGVuIGp1c3QgbGV0 IHRoZW0gc3RheSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgaW4KKwkJICogc3RhdGF0dF9p bml0X2VtcHR5X3R1cGxlKCkuCisJCSAqLworCQlpZiAoIWV4cHJzX251bGxzW251bGxfZnJhY19p ZHhdKQorCQl7CisJCQlvayA9IHRleHRfdG9fZmxvYXQ0KGV4cHJzX2VsZW1zW251bGxfZnJhY19p ZHhdLAorCQkJCQkJCQkmdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0p OworCisJCQlpZiAoIW9rKQorCQkJCXJldHVybiB3YXJuX3R5cGVfbWlzbWF0Y2goZXhwcnNfZWxl bXNbbnVsbF9mcmFjX2lkeF0sCisJCQkJCQkJCQkJICBleHRleHByYXJnaW5mb1tOVUxMX0ZSQUNf RUxFTV0uYXJnbmFtZSk7CisJCX0KKworCQlpZiAoIWV4cHJzX251bGxzW2F2Z193aWR0aF9pZHhd KQorCQl7CisJCQlvayA9IHRleHRfdG9faW50NChleHByc19lbGVtc1thdmdfd2lkdGhfaWR4XSwK KwkJCQkJCQkgICZ2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rhd2lkdGggLSAxXSk7CisKKwkJ CWlmICghb2spCisJCQkJcmV0dXJuIHdhcm5fdHlwZV9taXNtYXRjaChleHByc19lbGVtc1thdmdf d2lkdGhfaWR4XSwKKwkJCQkJCQkJCQkgIGV4dGV4cHJhcmdpbmZvW0FWR19XSURUSF9FTEVNXS5h cmduYW1lKTsKKwkJfQorCisJCWlmICghZXhwcnNfbnVsbHNbbl9kaXN0aW5jdF9pZHhdKQorCQl7 CisJCQlvayA9IHRleHRfdG9fZmxvYXQ0KGV4cHJzX2VsZW1zW25fZGlzdGluY3RfaWR4XSwKKwkJ CQkJCQkJJnZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFkaXN0aW5jdCAtIDFdKTsKKworCQkJ aWYgKCFvaykKKwkJCQlyZXR1cm4gd2Fybl90eXBlX21pc21hdGNoKGV4cHJzX2VsZW1zW25fZGlz dGluY3RfaWR4XSwKKwkJCQkJCQkJCQkgIGV4dGV4cHJhcmdpbmZvW05fRElTVElOQ1RfRUxFTV0u YXJnbmFtZSk7CisJCX0KKworCQkvKgorCQkgKiBUaGUgU1RBS0lORCBzdGF0aXN0aWNzIGFyZSB0 aGUgc2FtZSBhcyB0aGUgb25lcyBmb3VuZCBpbiBhdHRyaWJ1dGUKKwkJICogc3RhdHMuIEhvd2V2 ZXIsIHRoZXNlIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRleHQgY29sdW1ucywgd2hlcmVhcworCQkg KiB0aGUgb25lcyBkZXJpdmVkIGZvciBhdHRyaWJ1dGUgc3RhdHMgYXJlIGEgbWl4IG9mIGRhdGF0 eXBlcy4gVGhpcworCQkgKiBsaW1pdHMgdGhlIG9wcG9ydHVuaXRpZXMgZm9yIGNvZGUgc2hhcmlu ZyBiZXR3ZWVuIHRoZSB0d28uCisJCSAqCisJCSAqIFNvbWUgc3RhdGlzdGljIGtpbmRzIGhhdmUg Ym90aCBhIHN0YW51bWJlcnMgYW5kIGEgc3RhdmFsdWVzIGNvbXBvbmVudHMuCisJCSAqIEluIHRo b3NlIGNhc2VzLCBib3RoIHZhbHVlcyBtdXN0IGVpdGhlciBiZSBOT1QgTlVMTCBvciBib3RoIE5V TEwsIGFuZAorCQkgKiBpZiB0aGV5IGFyZW4ndCB0aGVuIHdlIG5lZWQgdG8gcmVqZWN0IHRoYXQg c3Rha2luZCBjb21wbGV0ZWx5LiBDdXJyZW50bHkKKwkJICogd2UgZ28gYSBzdGVwIGZ1cnRoZXIg YW5kIHJlamVjdCB0aGUgZXhwcmVzc2lvbiBhcnJheSBjb21wbGV0ZWx5LgorCQkgKgorCQkgKiBP bmNlIGl0IGlzIGVzdGFibGlzaGVkIHRoYXQgdGhlIHBhaXJzIGFyZSBpbiBOVUxML05PVC1OVUxM IGFsaWdubWVudCwKKwkJICogd2UgY2FuIHRlc3QgZWl0aGVyIGV4cHJfbnVsbHNbXSB2YWx1ZSB0 byBzZWUgaWYgdGhlIHN0YWtpbmQgaGFzIHZhbHVlKHMpCisJCSAqIHRoYXQgd2UgY2FuIHNldCBv ciBub3QuCisJCSAqLworCisJCS8qIFNUQVRJU1RJQ19LSU5EX01DViAqLworCQlpZiAoZXhwcnNf bnVsbHNbbW9zdF9jb21tb25fdmFsc19pZHhdICE9CisJCQlleHByc19udWxsc1ttb3N0X2NvbW1v bl9mcmVxc19pZHhdKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiRXhwcmVzc2lvbiAl cyBhbmQgJXMgbXVzdCBib3RoIGJlIE5PVCBOVUxMIG9yIGJvdGggTlVMTC4iLAorCQkJCQkJICAg ZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19FTEVNXS5hcmduYW1lLAorCQkJCQkJICAg ZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fRlJFUVNfRUxFTV0uYXJnbmFtZSkpOworCQkJcmV0 dXJuIChEYXR1bSkgMDsKKwkJfQorCisJCWlmICghZXhwcnNfbnVsbHNbbW9zdF9jb21tb25fdmFs c19pZHhdKQorCQl7CisJCQlEYXR1bQkJc3RhdmFsdWVzOworCQkJRGF0dW0JCXN0YW51bWJlcnM7 CisKKwkJCXN0YXZhbHVlcyA9IHRleHRfdG9fc3RhdmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1Rf Q09NTU9OX1ZBTFNfRUxFTV0uYXJnbmFtZSwKKwkJCQkJCQkJCQkgICZhcnJheV9pbl9mbiwgZXhw cnNfZWxlbXNbbW9zdF9jb21tb25fdmFsc19pZHhdLAorCQkJCQkJCQkJCSAgdHlwaWQsIHR5cG1v ZCwgJm9rKTsKKworCQkJaWYgKCFvaykKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCQlzdGFu dW1iZXJzID0gdGV4dF90b19zdGF2YWx1ZXMoZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fRlJF UVNfRUxFTV0uYXJnbmFtZSwKKwkJCQkJCQkJCQkgICAmYXJyYXlfaW5fZm4sIGV4cHJzX2VsZW1z W21vc3RfY29tbW9uX2ZyZXFzX2lkeF0sCisJCQkJCQkJCQkJICAgRkxPQVQ0T0lELCAtMSwgJm9r KTsKKworCQkJaWYgKCFvaykKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCQlzdGF0YXR0X3Nl dF9zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAorCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9N Q1YsCisJCQkJCQkJIHR5cGNhY2hlLT5lcV9vcHIsIHN0YWNvbGwsCisJCQkJCQkJIHN0YW51bWJl cnMsIGZhbHNlLCBzdGF2YWx1ZXMsIGZhbHNlKTsKKwkJfQorCisJCS8qIFNUQVRJU1RJQ19LSU5E X0hJU1RPR1JBTSAqLworCQlpZiAoIWV4cHJzX251bGxzW2hpc3RvZ3JhbV9ib3VuZHNfaWR4XSkK KwkJeworCQkJRGF0dW0JCXN0YXZhbHVlczsKKworCQkJc3RhdmFsdWVzID0gdGV4dF90b19zdGF2 YWx1ZXMoZXh0ZXhwcmFyZ2luZm9bSElTVE9HUkFNX0JPVU5EU19FTEVNXS5hcmduYW1lLAorCQkJ CQkJCQkJCSAgJmFycmF5X2luX2ZuLCBleHByc19lbGVtc1toaXN0b2dyYW1fYm91bmRzX2lkeF0s CisJCQkJCQkJCQkJICB0eXBpZCwgdHlwbW9kLCAmb2spOworCisJCQlpZiAoIW9rKQorCQkJCXJl dHVybiAoRGF0dW0pIDA7CisKKwkJCXN0YXRhdHRfc2V0X3Nsb3QodmFsdWVzLCBudWxscywgcmVw bGFjZXMsCisJCQkJCQkJIFNUQVRJU1RJQ19LSU5EX0hJU1RPR1JBTSwKKwkJCQkJCQkgdHlwY2Fj aGUtPmx0X29wciwgc3RhY29sbCwKKwkJCQkJCQkgMCwgdHJ1ZSwgc3RhdmFsdWVzLCBmYWxzZSk7 CisJCX0KKworCQkvKiBTVEFUSVNUSUNfS0lORF9DT1JSRUxBVElPTiAqLworCQlpZiAoIWV4cHJz X251bGxzW2NvcnJlbGF0aW9uX2lkeF0pCisJCXsKKwkJCURhdHVtCQljb3JyW10gPSB7KERhdHVt KSAwfTsKKwkJCUFycmF5VHlwZSAgKmFycnk7CisJCQlEYXR1bQkJc3RhbnVtYmVyczsKKworCQkJ b2sgPSB0ZXh0X3RvX2Zsb2F0NChleHByc19lbGVtc1tjb3JyZWxhdGlvbl9pZHhdLCAmY29yclsw XSk7CisKKwkJCWlmICghb2spCisJCQl7CisJCQkJY2hhcgkgICAqcyA9IFRleHREYXR1bUdldENT dHJpbmcoZXhwcnNfZWxlbXNbY29ycmVsYXRpb25faWR4XSk7CisKKwkJCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJZXJybXNnKCJFeHByZXNzaW9uICVzIGVsZW1lbnQgXCIlc1wiIGRvZXMgbm90IG1hdGNoIGV4 cGVjdGVkIGlucHV0IHR5cGUuIiwKKwkJCQkJCQkgICBleHRleHByYXJnaW5mb1tDT1JSRUxBVElP Tl9FTEVNXS5hcmduYW1lLCBzKSk7CisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKworCQkJ YXJyeSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGNvcnIsIDEsIEZMT0FUNE9JRCk7CisKKwkJ CXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0oYXJyeSk7CisKKwkJCXN0YXRhdHRfc2V0X3Ns b3QodmFsdWVzLCBudWxscywgcmVwbGFjZXMsCisJCQkJCQkJIFNUQVRJU1RJQ19LSU5EX0NPUlJF TEFUSU9OLAorCQkJCQkJCSB0eXBjYWNoZS0+bHRfb3ByLCBzdGFjb2xsLAorCQkJCQkJCSBzdGFu dW1iZXJzLCBmYWxzZSwgMCwgdHJ1ZSk7CisJCX0KKworCQkvKiBTVEFUSVNUSUNfS0lORF9NQ0VM RU0gKi8KKwkJaWYgKGV4cHJzX251bGxzW21vc3RfY29tbW9uX2VsZW1zX2lkeF0gIT0KKwkJCWV4 cHJzX251bGxzW21vc3RfY29tbW9uX2VsZW1zX2ZyZXFzX2lkeF0pCisJCXsKKwkJCWVyZXBvcnQo V0FSTklORywKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJZXJybXNnKCJFeHByZXNzaW9uICVzIGFuZCAlcyBtdXN0IGJvdGggYmUgTk9UIE5VTEwg b3IgYm90aCBOVUxMLiIsCisJCQkJCQkgICBleHRleHByYXJnaW5mb1tNT1NUX0NPTU1PTl9FTEVN U19FTEVNXS5hcmduYW1lLAorCQkJCQkJICAgZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fRUxF TV9GUkVRU19FTEVNXS5hcmduYW1lKSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJ LyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGZldGNoIGVsZW1lbnQgdHlwZSBhbmQgZXEgb3BlcmF0 b3IgaWYgd2UgaGF2ZSBhCisJCSAqIHN0YXQgb2YgdHlwZSBNQ0VMRU0gb3IgREVDSElTVCwgb3Ro ZXJ3aXNlIHRoZSB2YWx1ZXMgYXJlIHVubmVjZXNzYXJ5CisJCSAqIGFuZCBub3QgbWVhbmluZ2Z1 bC4KKwkJICovCisJCWlmICghZXhwcnNfbnVsbHNbbW9zdF9jb21tb25fZWxlbXNfaWR4XSB8fAor CQkJIWV4cHJzX251bGxzW2VsZW1fY291bnRfaGlzdG9ncmFtX2lkeF0pCisJCXsKKwkJCWlmICgh c3RhdGF0dF9nZXRfZWxlbV90eXBlKHR5cGlkLCB0eXBjYWNoZS0+dHlwdHlwZSwKKwkJCQkJCQkJ CSAgICZlbGVtdHlwaWQsICZlbGVtX2VxX29wcikpCisJCQl7CisJCQkJZXJlcG9ydChXQVJOSU5H LAorCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CWVycm1zZygidW5hYmxlIHRvIGRldGVybWluZSBlbGVtZW50IHR5cGUgb2YgZXhwcmVzc2lvbiIp KTsKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJfQorCQl9CisKKwkJaWYgKCFleHByc19udWxs c1ttb3N0X2NvbW1vbl9lbGVtc19pZHhdKQorCQl7CisJCQlEYXR1bQkJc3RhdmFsdWVzOworCQkJ RGF0dW0JCXN0YW51bWJlcnM7CisKKwkJCXN0YXZhbHVlcyA9IHRleHRfdG9fc3RhdmFsdWVzKGV4 dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX0VMRU1TX0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJCQkJ ICAmYXJyYXlfaW5fZm4sCisJCQkJCQkJCQkJICBleHByc19lbGVtc1ttb3N0X2NvbW1vbl9lbGVt c19pZHhdLAorCQkJCQkJCQkJCSAgZWxlbXR5cGlkLCB0eXBtb2QsICZvayk7CisKKwkJCWlmICgh b2spCisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJc3RhbnVtYmVycyA9IHRleHRfdG9fc3Rh dmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX0VMRU1fRlJFUVNfRUxFTV0uYXJnbmFt ZSwKKwkJCQkJCQkJCQkgICAmYXJyYXlfaW5fZm4sCisJCQkJCQkJCQkJICAgZXhwcnNfZWxlbXNb bW9zdF9jb21tb25fZWxlbXNfZnJlcXNfaWR4XSwKKwkJCQkJCQkJCQkgICBGTE9BVDRPSUQsIC0x LCAmb2spOworCisJCQlpZiAoIW9rKQorCQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCXN0YXRh dHRfc2V0X3Nsb3QodmFsdWVzLCBudWxscywgcmVwbGFjZXMsCisJCQkJCQkJIFNUQVRJU1RJQ19L SU5EX01DRUxFTSwKKwkJCQkJCQkgZWxlbV9lcV9vcHIsIHN0YWNvbGwsCisJCQkJCQkJIHN0YW51 bWJlcnMsIGZhbHNlLCBzdGF2YWx1ZXMsIGZhbHNlKTsKKwkJfQorCisJCWlmICghZXhwcnNfbnVs bHNbZWxlbV9jb3VudF9oaXN0b2dyYW1faWR4XSkKKwkJeworCQkJRGF0dW0JCXN0YW51bWJlcnM7 CisKKwkJCXN0YW51bWJlcnMgPSB0ZXh0X3RvX3N0YXZhbHVlcyhleHRleHByYXJnaW5mb1tFTEVN X0NPVU5UX0hJU1RPR1JBTV9FTEVNXS5hcmduYW1lLAorCQkJCQkJCQkJCSAgICZhcnJheV9pbl9m biwKKwkJCQkJCQkJCQkgICBleHByc19lbGVtc1tlbGVtX2NvdW50X2hpc3RvZ3JhbV9pZHhdLAor CQkJCQkJCQkJCSAgIEZMT0FUNE9JRCwgLTEsICZvayk7CisKKwkJCWlmICghb2spCisJCQkJcmV0 dXJuIChEYXR1bSkgMDsKKworCQkJc3RhdGF0dF9zZXRfc2xvdCh2YWx1ZXMsIG51bGxzLCByZXBs YWNlcywgU1RBVElTVElDX0tJTkRfREVDSElTVCwKKwkJCQkJCQkgZWxlbV9lcV9vcHIsIHN0YWNv bGwsCisJCQkJCQkJIHN0YW51bWJlcnMsIGZhbHNlLCAwLCB0cnVlKTsKKwkJfQorCisJCS8qCisJ CSAqIEN1cnJlbnRseSB0aGVyZSBhcmUgbm8gZXh0ZW5kZWQgc3RhdHMgZXhwb3J0cyBvZiB0aGUg c3RhdGlzdGljCisJCSAqIGtpbmRzIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19ISVNUT0dSQU0gb3IK KwkJICogU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSBzbyB0aGVzZSBjYW5u b3QgYmUgaW1wb3J0ZWQuCisJCSAqIFRoZXNlIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgor CQkgKi8KKworCQlwZ3N0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihwZ3Nk KSwgdmFsdWVzLCBudWxscyk7CisJCXBnc3RkYXQgPSBoZWFwX2NvcHlfdHVwbGVfYXNfZGF0dW0o cGdzdHVwLCBSZWxhdGlvbkdldERlc2NyKHBnc2QpKTsKKwkJYXN0YXRlID0gYWNjdW1BcnJheVJl c3VsdChhc3RhdGUsIHBnc3RkYXQsIGZhbHNlLCBwZ3N0eXBvaWQsCisJCQkJCQkJCSAgQ3VycmVu dE1lbW9yeUNvbnRleHQpOworCisJCW9mZnNldCArPSBOVU1fQVRUUklCVVRFX1NUQVRTX0VMRU1T OworCX0KKworCXBmcmVlKGV4cHJzX2VsZW1zKTsKKwlwZnJlZShleHByc19udWxscyk7CisKKwly ZXR1cm4gbWFrZUFycmF5UmVzdWx0KGFzdGF0ZSwgQ3VycmVudE1lbW9yeUNvbnRleHQpOworfQor CisvKgorICogU2FmZSBjb252ZXJzaW9uIG9mIHRleHQgdG8gZmxvYXQ0LgorICoKKyAqIFRoZXJl IGlzIG5vIG5lZWQgZm9yIHRoZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlLgorICovCitzdGF0aWMg Ym9vbAordGV4dF90b19mbG9hdDQoRGF0dW0gaW5wdXQsIERhdHVtICpvdXRwdXQpCit7CisJRXJy b3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCWNoYXIJ ICAgKnM7CisJYm9vbAkJb2s7CisKKwlzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhpbnB1dCk7CisJ b2sgPSBEaXJlY3RJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoZmxvYXQ0aW4sIHMsIEludmFsaWRPaWQs IC0xLAorCQkJCQkJCQkJIChOb2RlICopICZlc2NvbnRleHQsIG91dHB1dCk7CisKKwlwZnJlZShz KTsKKwlyZXR1cm4gb2s7Cit9CisKKworLyoKKyAqIFNhZmUgY29udmVyc2lvbiBvZiB0ZXh0IHRv IGludDQuCisgKgorICogVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIHNwZWNpZmljIGVycm9yIG1l c3NhZ2UuCisgKi8KK3N0YXRpYyBib29sCit0ZXh0X3RvX2ludDQoRGF0dW0gaW5wdXQsIERhdHVt ICpvdXRwdXQpCit7CisJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVD b250ZXh0fTsKKworCWNoYXIJICAgKnM7CisJYm9vbAkJb2s7CisKKwlzID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhpbnB1dCk7CisJb2sgPSBEaXJlY3RJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoaW50NGlu LCBzLCBJbnZhbGlkT2lkLCAtMSwKKwkJCQkJCQkJCSAoTm9kZSAqKSAmZXNjb250ZXh0LCBvdXRw dXQpOworCisJcGZyZWUocyk7CisJcmV0dXJuIG9rOworfQorCisvKgorICogUmVtb3ZlIGFuIGV4 aXN0aW5nIHBnX3N0YXRpc3RpY19leHRfZGF0YSByb3cgZm9yIGEgZ2l2ZW4gcGdfc3RhdGlzdGlj X2V4dAorICogcm93ICsgaW5oZXJpdGVkIHBhaXIuCisgKi8KK3N0YXRpYyBib29sCitkZWxldGVf cGdfc3RhdGlzdGljX2V4dF9kYXRhKE9pZCBzdHhvaWQsIGJvb2wgaW5oZXJpdGVkKQoreworCVJl bGF0aW9uCXNlZCA9IHRhYmxlX29wZW4oU3RhdGlzdGljRXh0RGF0YVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCUhlYXBUdXBsZQlvbGR0dXA7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7 CisKKwkvKiBJcyB0aGVyZSBhbHJlYWR5IGEgcGdfc3RhdGlzdGljIHR1cGxlIGZvciB0aGlzIGF0 dHJpYnV0ZT8gKi8KKwlvbGR0dXAgPSBTZWFyY2hTeXNDYWNoZTIoU1RBVEVYVERBVEFTVFhPSUQs CisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oc3R4b2lkKSwKKwkJCQkJCQkgQm9vbEdldERhdHVt KGluaGVyaXRlZCkpOworCisJaWYgKEhlYXBUdXBsZUlzVmFsaWQob2xkdHVwKSkKKwl7CisJCUNh dGFsb2dUdXBsZURlbGV0ZShzZWQsICZvbGR0dXAtPnRfc2VsZik7CisJCVJlbGVhc2VTeXNDYWNo ZShvbGR0dXApOworCQlyZXN1bHQgPSB0cnVlOworCX0KKworCXRhYmxlX2Nsb3NlKHNlZCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIFJlc3RvcmUgKGluc2VydCBvciByZXBsYWNlKSBzdGF0aXN0 aWNzIGZvciB0aGUgZ2l2ZW4gc3RhdGlzdGljcyBvYmplY3QuCisgKi8KK0RhdHVtCitwZ19yZXN0 b3JlX2V4dGVuZGVkX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTE9DQUxfRkNJTkZPKHBv c2l0aW9uYWxfZmNpbmZvLCBOVU1fRVhURU5ERURfU1RBVFNfQVJHUyk7CisJYm9vbAkJcmVzdWx0 ID0gdHJ1ZTsKKworCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgqcG9zaXRpb25hbF9mY2luZm8s IE5VTEwsIE5VTV9FWFRFTkRFRF9TVEFUU19BUkdTLAorCQkJCQkJCSBJbnZhbGlkT2lkLCBOVUxM LCBOVUxMKTsKKworCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdfcGFpcnMoZmNpbmZv LCBwb3NpdGlvbmFsX2ZjaW5mbywgZXh0YXJnaW5mbykpCisJCXJlc3VsdCA9IGZhbHNlOworCisJ aWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mbykpCisJCXJl c3VsdCA9IGZhbHNlOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworLyoKKyAqIERl bGV0ZSBzdGF0aXN0aWNzIGZvciB0aGUgZ2l2ZW4gc3RhdGlzdGljcyBvYmplY3QuCisgKi8KK0Rh dHVtCitwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ ICAgKm5zcG5hbWU7CisJT2lkCQkJbnNwb2lkOworCWNoYXIJICAgKnN0eG5hbWU7CisJYm9vbAkJ aW5oZXJpdGVkOworCVJlbGF0aW9uCXBnX3N0ZXh0OworCUhlYXBUdXBsZQl0dXA7CisJUmVsYXRp b24JcmVsOworCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CisKKwlGb3JtX3BnX3N0 YXRpc3RpY19leHQgc3R4Zm9ybTsKKworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8s IGV4dGFyZ2luZm8sIFNUQVRTQ0hFTUFfQVJHKTsKKwluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhQR19HRVRBUkdfREFUVU0oU1RBVFNDSEVNQV9BUkcpKTsKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBTVEFUTkFNRV9BUkcpOworCXN0eG5hbWUgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShTVEFUTkFNRV9BUkcpKTsKKwlzdGF0 c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBJTkhFUklURURfQVJHKTsK Kwlpbmhlcml0ZWQgPSBQR19HRVRBUkdfTkFNRShJTkhFUklURURfQVJHKTsKKworCWlmIChSZWNv dmVyeUluUHJvZ3Jlc3MoKSkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCWVycm1zZygicmVj b3ZlcnkgaXMgaW4gcHJvZ3Jlc3MiKSwKKwkJCQllcnJoaW50KCJTdGF0aXN0aWNzIGNhbm5vdCBi ZSBtb2RpZmllZCBkdXJpbmcgcmVjb3ZlcnkuIikpOworCQlQR19SRVRVUk5fVk9JRCgpOworCX0K KworCW5zcG9pZCA9IGdldF9uYW1lc3BhY2Vfb2lkKG5zcG5hbWUsIHRydWUpOworCWlmIChuc3Bv aWQgPT0gSW52YWxpZE9pZCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJjb2RlKEVS UkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJZXJybXNnKCJOYW1lc3BhY2UgXCIlc1wiIG5v dCBmb3VuZC4iLCBzdHhuYW1lKSk7CisJCVBHX1JFVFVSTl9WT0lEKCk7CisJfQorCisJcGdfc3Rl eHQgPSB0YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCXR1cCA9IGdldF9wZ19zdGF0aXN0aWNfZXh0KHBnX3N0ZXh0LCBuc3BvaWQsIHN0eG5hbWUp OworCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJeworCQl0YWJsZV9jbG9zZShwZ19z dGV4dCwgUm93RXhjbHVzaXZlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShF UlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCWVycm1zZygiRXh0ZW5kZWQgU3RhdGlzdGlj cyBPYmplY3QgXCIlc1wiLlwiJXNcIiBub3QgZm91bmQuIiwKKwkJCQkJICAgbnNwbmFtZSwgc3R4 bmFtZSkpOworCQlQR19SRVRVUk5fVk9JRCgpOworCX0KKworCXN0eGZvcm0gPSAoRm9ybV9wZ19z dGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1QodHVwKTsKKworCS8qIFJvdW5kYWJvdXQgd2F5IG9mIGdl dHRpbmcgYSBSYW5nZVZhciBvbiB0aGUgdW5kZXJseWluZyB0YWJsZSAqLworCXJlbCA9IHJlbGF0 aW9uX29wZW4oc3R4Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBubyBu ZWVkIHRvIGZldGNoIHJlbG9pZCwgd2UgYWxyZWFkeSBoYXZlIGl0ICovCisJUmFuZ2VWYXJHZXRS ZWxpZEV4dGVuZGVkKG1ha2VSYW5nZVZhcihuc3BuYW1lLAorCQkJCQkJCQkJCSAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSwgLTEpLAorCQkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2ssIDAsCisJCQkJCQkJIFJhbmdlVmFyQ2FsbGJhY2tGb3JTdGF0cywgJmxvY2tlZF90YWJsZSk7 CisKKwlyZWxhdGlvbl9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkZWxldGVfcGdf c3RhdGlzdGljX2V4dF9kYXRhKHN0eGZvcm0tPm9pZCwgaW5oZXJpdGVkKTsKKwloZWFwX2ZyZWV0 dXBsZSh0dXApOworCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNz L21jdi5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwppbmRleCAyOGY5MjVmMzk3ZS4u ZmUyZjA0Y2NiNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKKysr IGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwpAQCAtMjE3MywzICsyMTczLDE0NyBAQCBt Y3ZfY2xhdXNlX3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LCBTdGF0aXN0aWNFeHRJ bmZvICpzdGF0LAogCiAJcmV0dXJuIHM7CiB9CisKKy8qCisgICogVGhlIE1DViBpcyBhbiBhcnJh eSBvZiByZWNvcmRzLCBidXQgdGhpcyBpcyBleHBlY3RlZCBhcyA0IHNlcGFyYXRlIGFycmF5cy4K KyAgKiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhIGdlbmVyaWMgaW5wdXQgZnVuY3Rpb24g Zm9yIHBnX21jdl9saXN0CisgICogYmVjYXVzZSB0aGUgbW9zdF9jb21tb25fdmFsdWVzIGlzIGEg Y29tcG9zaXRlIHR5cGUgd2l0aCBlbGVtZW50IHR5cGVzCisgICogZGVmaW5lZCBieSB0aGUgc3Bl Y2lmaWMgc3RhdGlzdGljcyBvYmplY3QuCisgICovCitEYXR1bQoraW1wb3J0X21jdmxpc3QoSGVh cFR1cGxlIHR1cCwgaW50IGVsZXZlbCwgaW50IG51bWF0dHJzLCBPaWQgKmF0dHR5cGlkcywKKwkJ CSAgIGludDMyICphdHR0eXBtb2RzLCBPaWQgKmF0dHR5cGNvbGxzLCBpbnQgbml0ZW1zLAorCQkJ ICAgRGF0dW0gKm1jdl9lbGVtcywgYm9vbCAqbWN2X251bGxzLAorCQkJICAgYm9vbCAqbWN2X2Vs ZW1fbnVsbHMsIGZsb2F0OCAqZnJlcXMsIGZsb2F0OCAqYmFzZV9mcmVxcykKK3sKKwlNQ1ZMaXN0 ICAgICptY3ZsaXN0OworCWJ5dGVhCSAgICpieXRlczsKKworCUhlYXBUdXBsZSAgKnZhdHVwbGVz OworCVZhY0F0dHJTdGF0cyAqKnZhc3RhdHM7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBNQ1Yg bGlzdCBzdHJ1Y3R1cmUsIHNldCB0aGUgZ2xvYmFsIHBhcmFtZXRlcnMuCisJICovCisJbWN2bGlz dCA9IChNQ1ZMaXN0ICopIHBhbGxvYzAob2Zmc2V0b2YoTUNWTGlzdCwgaXRlbXMpICsKKwkJCQkJ CQkJICAoc2l6ZW9mKE1DVkl0ZW0pICogbml0ZW1zKSk7CisKKwltY3ZsaXN0LT5tYWdpYyA9IFNU QVRTX01DVl9NQUdJQzsKKwltY3ZsaXN0LT50eXBlID0gU1RBVFNfTUNWX1RZUEVfQkFTSUM7CisJ bWN2bGlzdC0+bmRpbWVuc2lvbnMgPSBudW1hdHRyczsKKwltY3ZsaXN0LT5uaXRlbXMgPSBuaXRl bXM7CisKKwkvKiBTZXQgdGhlIHZhbHVlcyBmb3IgdGhlIDEtRCBhcnJheXMgYW5kIGFsbG9jYXRl IHNwYWNlIGZvciB0aGUgMi1EIGFycmF5cyAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbml0ZW1z OyBpKyspCisJeworCQlNQ1ZJdGVtICAgICppdGVtID0gJm1jdmxpc3QtPml0ZW1zW2ldOworCisJ CWl0ZW0tPmZyZXF1ZW5jeSA9IGZyZXFzW2ldOworCQlpdGVtLT5iYXNlX2ZyZXF1ZW5jeSA9IGJh c2VfZnJlcXNbaV07CisJCWl0ZW0tPnZhbHVlcyA9IChEYXR1bSAqKSBwYWxsb2MwKHNpemVvZihE YXR1bSkgKiBudW1hdHRycyk7CisJCWl0ZW0tPmlzbnVsbCA9IChib29sICopIHBhbGxvYzAoc2l6 ZW9mKGJvb2wpICogbnVtYXR0cnMpOworCX0KKworCS8qIFdhbGsgdGhyb3VnaCBlYWNoIGRpbWVu c2lvbiAqLworCWZvciAoaW50IGogPSAwOyBqIDwgbnVtYXR0cnM7IGorKykKKwl7CisJCUZtZ3JJ bmZvCWZpbmZvOworCQlPaWQJCQlpb3BhcmFtOworCQlPaWQJCQlpbmZ1bmM7CisJCWludAkJCWlu ZGV4ID0gajsKKworCQlnZXRUeXBlSW5wdXRJbmZvKGF0dHR5cGlkc1tqXSwgJmluZnVuYywgJmlv cGFyYW0pOworCQlmbWdyX2luZm8oaW5mdW5jLCAmZmluZm8pOworCisJCS8qIHN0b3JlIGluZm8g YWJvdXQgZGF0YSB0eXBlIE9JRHMgKi8KKwkJbWN2bGlzdC0+dHlwZXNbal0gPSBhdHR0eXBpZHNb al07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwkJeworCQkJTUNWSXRl bSAgICAqaXRlbSA9ICZtY3ZsaXN0LT5pdGVtc1tpXTsKKworCQkJLyogVGhlc2Ugc2hvdWxkIGJl IGluIGFncmVlbWVudCwgYnV0IGp1c3QgdG8gYmUgc2FmZSBjaGVjayBib3RoICovCisJCQlpZiAo bWN2X2VsZW1fbnVsbHNbaW5kZXhdIHx8IG1jdl9udWxsc1tpbmRleF0pCisJCQl7CisJCQkJaXRl bS0+dmFsdWVzW2pdID0gKERhdHVtKSAwOworCQkJCWl0ZW0tPmlzbnVsbFtqXSA9IHRydWU7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJY2hhcgkgICAqcyA9IFRleHREYXR1bUdldENTdHJpbmco bWN2X2VsZW1zW2luZGV4XSk7CisJCQkJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9F cnJvclNhdmVDb250ZXh0fTsKKworCQkJCWlmICghSW5wdXRGdW5jdGlvbkNhbGxTYWZlKCZmaW5m bywgcywgaW9wYXJhbSwgYXR0dHlwbW9kc1tqXSwKKwkJCQkJCQkJCQkgICAoTm9kZSAqKSAmZXNj b250ZXh0LCAmaXRlbS0+dmFsdWVzW2pdKSkKKwkJCQl7CisJCQkJCWVyZXBvcnQoZWxldmVsLAor CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ CSBlcnJtc2coIk1DViBlbGVtZW1lbnQgXCIlc1wiIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGlu cHV0IHR5cGUuIiwgcykpKTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQl9CisKKwkJCQlw ZnJlZShzKTsKKwkJCX0KKworCQkJaW5kZXggKz0gbnVtYXR0cnM7CisJCX0KKwl9CisKKwkvKgor CSAqIFRoZSBmdW5jdGlvbiBzdGF0ZXh0X21jdl9zZXJpYWxpemUoKSByZXF1aXJlcyBhbiBhcnJh eSBvZiBwb2ludGVycyB0bworCSAqIFZhY0F0dHJTdGF0cyByZWNvcmRzLCBidXQgb25seSBhIGZl dyBmaWVsZHMgd2l0aGluIHRob3NlIHJlY29yZHMgaGF2ZQorCSAqIHRvIGJlIGZpbGxlZCBvdXQu CisJICovCisJdmFzdGF0cyA9IChWYWNBdHRyU3RhdHMgKiopIHBhbGxvYzAobnVtYXR0cnMgKiBz aXplb2YoVmFjQXR0clN0YXRzKSk7CisJdmF0dXBsZXMgPSAoSGVhcFR1cGxlICopIHBhbGxvYzAo bnVtYXR0cnMgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51 bWF0dHJzOyBpKyspCisJeworCQlPaWQJCQl0eXBpZCA9IGF0dHR5cGlkc1tpXTsKKwkJSGVhcFR1 cGxlCXR5cHR1cGxlOworCisJCXR5cHR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShUWVBFT0lE LCBPYmplY3RJZEdldERhdHVtKHR5cGlkKSk7CisKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5 cHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1 IiwgdHlwaWQpOworCisJCXZhdHVwbGVzW2ldID0gdHlwdHVwbGU7CisKKwkJdmFzdGF0c1tpXSA9 IHBhbGxvYzAoc2l6ZW9mKFZhY0F0dHJTdGF0cykpOworCisJCXZhc3RhdHNbaV0tPmF0dHJ0eXBl ID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cGxlKTsKKwkJdmFzdGF0c1tpXS0+YXR0 cnR5cGlkID0gdHlwaWQ7CisJCXZhc3RhdHNbaV0tPmF0dHJjb2xsaWQgPSBhdHR0eXBjb2xsc1tp XTsKKwl9CisKKwlieXRlcyA9IHN0YXRleHRfbWN2X3NlcmlhbGl6ZShtY3ZsaXN0LCB2YXN0YXRz KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwl7CisJCXBmcmVlKHZh dHVwbGVzW2ldKTsKKwkJcGZyZWUodmFzdGF0c1tpXSk7CisJfQorCXBmcmVlKCh2b2lkICopIHZh dHVwbGVzKTsKKwlwZnJlZSgodm9pZCAqKSB2YXN0YXRzKTsKKworCWlmIChieXRlcyA9PSBOVUxM KQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiVW5hYmxlIHRvIGltcG9ydCBtY3YgbGlzdCIp KSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRl bXM7IGkrKykKKwl7CisJCU1DVkl0ZW0gICAgKml0ZW0gPSAmbWN2bGlzdC0+aXRlbXNbaV07CisK KwkJcGZyZWUoaXRlbS0+dmFsdWVzKTsKKwkJcGZyZWUoaXRlbS0+aXNudWxsKTsKKwl9CisJcGZy ZWUobWN2bGlzdCk7CisJcGZyZWUobWN2X2VsZW1zKTsKKwlwZnJlZShtY3ZfbnVsbHMpOworCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShieXRlcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbXZkaXN0 aW5jdC5jCmluZGV4IGZlNDUyZjUzYWU0Li4wMjg3ZWQ3ZWNiMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9tdmRpc3RpbmN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9tdmRpc3RpbmN0LmMKQEAgLTU5OSw2ICs1OTksNjggQEAgZ2VuZXJhdGVfY29tYmluYXRpb25z X3JlY3Vyc2UoQ29tYmluYXRpb25HZW5lcmF0b3IgKnN0YXRlLAogCX0KIH0KIAorLyoKKyAqIEZy ZWUgYWxsb2NhdGlvbnMgb2YgYW4gTVZORGlzdGluY3QKKyAqLwordm9pZAorZnJlZV9wZ19uZGlz dGluY3QoTVZORGlzdGluY3QgKm5kaXN0aW5jdCkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IG5k aXN0aW5jdC0+bml0ZW1zOyBpKyspCisJCXBmcmVlKG5kaXN0aW5jdC0+aXRlbXNbaV0uYXR0cmli dXRlcyk7CisKKwlwZnJlZShuZGlzdGluY3QpOworfQorCisvKgorICogVmFsaWRhdGUgYW4gTVZO RGlzdGluY3QgYWdhaW5zdCB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QgZGVmaW5pdGlv bi4KKyAqCisgKiBFdmVyeSBNVk5EaXN0aW5jdEl0ZW0gbXVzdCBiZSBjaGVja2VkIHRvIGVuc3Vy ZSB0aGF0IHRoZSBhdHRudW1zIGluIHRoZQorICogYXR0cmlidXRlcyBsaXN0IGNvcnJlc3BvbmQg dG8gYXR0bnVtcy9leHByZXNzaW9ucyBkZWZpbmVkIGJ5IHRoZQorICogZXh0ZW5kZWQgc3RhdGlz dGljcyBvYmplY3QuCisgKgorICogUG9zaXRpdmUgYXR0bnVtcyBhcmUgYXR0cmlidXRlcyB3aGlj aCBtdXN0IGJlIGZvdW5kIGluIHRoZSBzdHhrZXlzLAorICogd2hpbGUgbmVnYXRpdmUgYXR0bnVt cyBjb3JyZXNwb25kIHRvIGFuIGV4cHIgbnVtYmVyLCBzbyB0aGUgYXR0bnVtCisgKiBjYW4ndCBi ZSBiZWxvdyAoMCAtIG51bWV4cHJzKS4KKyAqLworYm9vbAorcGdfbmRpc3RpbmN0X3ZhbGlkYXRl X2l0ZW1zKE1WTkRpc3RpbmN0ICpuZGlzdGluY3QsIGludDJ2ZWN0b3IgKnN0eGtleXMsIGludCBu dW1leHBycywgaW50IGVsZXZlbCkKK3sKKwlpbnQJCQlhdHRudW1fZXhwcl9sb3dib3VuZCA9IDAg LSBudW1leHByczsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmRpc3RpbmN0LT5uaXRlbXM7IGkr KykKKwl7CisJCU1WTkRpc3RpbmN0SXRlbSBpdGVtID0gbmRpc3RpbmN0LT5pdGVtc1tpXTsKKwor CQlmb3IgKGludCBqID0gMDsgaiA8IGl0ZW0ubmF0dHJpYnV0ZXM7IGorKykKKwkJeworCQkJQXR0 ck51bWJlcglhdHRudW0gPSBpdGVtLmF0dHJpYnV0ZXNbal07CisJCQlib29sCQlvayA9IGZhbHNl OworCisJCQlpZiAoYXR0bnVtID4gMCkKKwkJCXsKKwkJCQlmb3IgKGludCBrID0gMDsgayA8IHN0 eGtleXMtPmRpbTE7IGsrKykKKwkJCQkJaWYgKGF0dG51bSA9PSBzdHhrZXlzLT52YWx1ZXNba10p CisJCQkJCXsKKwkJCQkJCW9rID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQl9CisJ CQllbHNlIGlmICgoYXR0bnVtIDwgMCkgJiYgKGF0dG51bSA+PSBhdHRudW1fZXhwcl9sb3dib3Vu ZCkpCisJCQkJb2sgPSB0cnVlOworCisJCQlpZiAoIW9rKQorCQkJeworCQkJCWVyZXBvcnQoZWxl dmVsLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04p LAorCQkJCQkJIGVycm1zZygicGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBmb3IgdGhpcyBz dGF0aXN0aWNzIG9iamVjdDogJWQiLCBhdHRudW0pKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJ fQorCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCisKIC8qCiAgKiBnZW5lcmF0ZV9jb21iaW5h dGlvbnMKICAqCQlnZW5lcmF0ZSBhbGwgay1jb21iaW5hdGlvbnMgb2YgTiBlbGVtZW50cwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0CmluZGV4IDk4Y2U3ZGMyODQx Li5kNjk3NzFhZGQxMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0 c19pbXBvcnQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfaW1wb3J0 Lm91dApAQCAtMTA4NCwxMSArMTA4NCwxNSBAQCBTRUxFQ1QgMywgJ3RyZScsICgzLCAzLjMsICdU UkUnLCAnMjAwMy0wMy0wMycsIE5VTEwpOjpzdGF0c19pbXBvcnQuY29tcGxleF90eXBlLAogVU5J T04gQUxMCiBTRUxFQ1QgNCwgJ2ZvdXInLCBOVUxMLCBpbnQ0cmFuZ2UoMCwxMDApLCBOVUxMOwog Q1JFQVRFIElOREVYIGlzX29kZCBPTiBzdGF0c19pbXBvcnQudGVzdCgoKGNvbXApLmEgJSAyID0g MSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0LnRlc3Rfc3RhdCBPTiBuYW1lLCBj b21wLCBsb3dlcihhcmFuZ2UpLCBhcnJheV9sZW5ndGgodGFncywxKQorRlJPTSBzdGF0c19pbXBv cnQudGVzdDsKIC0tIEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCiBBTkFM WVpFIHN0YXRzX2ltcG9ydC50ZXN0OwogQ1JFQVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0X2Ns b25lICggTElLRSBzdGF0c19pbXBvcnQudGVzdCApCiAgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOwogQ1JFQVRFIElOREVYIGlzX29kZF9jbG9uZSBPTiBzdGF0c19pbXBvcnQu dGVzdF9jbG9uZSgoKGNvbXApLmEgJSAyID0gMSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNf aW1wb3J0LnRlc3Rfc3RhdF9jbG9uZSBPTiBuYW1lLCBjb21wLCBsb3dlcihhcmFuZ2UpLCBhcnJh eV9sZW5ndGgodGFncywxKQorRlJPTSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZTsKIC0tCiAtLSBD b3B5IHN0YXRzIGZyb20gdGVzdCB0byB0ZXN0X2Nsb25lLCBhbmQgaXNfb2RkIHRvIGlzX29kZF9j bG9uZQogLS0KQEAgLTEzNDIsNiArMTM0Niw1ODAgQEAgQU5EIGF0dG5hbWUgPSAnaSc7CiAoMSBy b3cpCiAKIERST1AgVEFCTEUgc3RhdHNfdGVtcDsKKy0tIHNldCBuX2Rpc3RpbmN0IHVzaW5nIGF0 IGF0dG51bSAoMSkgdGhhdCBpcyBub3QgaW4gdGhlIHN0YXRpc3RpY3Mgb2JqZWN0CitTRUxFQ1QK KyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0 aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3Nf bmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisg ICAgICAgICduX2Rpc3RpbmN0JywgJ1t7ImF0dHJpYnV0ZXMiIDogWzMsLTFdLCAibmRpc3RpbmN0 IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFszLC0yXSwg Im5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIg OiBbLTEsLTJdLCAibmRpc3RpbmN0IiA6IDN9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJh dHRyaWJ1dGVzIiA6IFsyLDMsLTFdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLDMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAg ICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLC0xLC0yXSwgIm5kaXN0aW5j dCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBbMywtMSwt Ml0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0 ZXMiIDogWzEsMiwzLC0xLC0yXSwgIm5kaXN0aW5jdCIgOiA0fV0nOjpwZ19uZGlzdGluY3QKKyAg ICAgICk7CitXQVJOSU5HOiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBmb3IgdGhpcyBz dGF0aXN0aWNzIG9iamVjdDogMQorIHBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIHNldCBuX2Rpc3RpbmN0IHVz aW5nIGF0IGF0dG51bSB0aGF0IGlzIDAKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9y ZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0 c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScs CisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ25fZGlzdGluY3QnLCAnW3si YXR0cmlidXRlcyIgOiBbMywtMV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAg ICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAg ICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFstMSwtMl0sICJuZGlzdGluY3QiIDog M30sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIsMywtMV0sICJu ZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDog WzIsMywtMl0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0 dHJpYnV0ZXMiIDogWzIsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFswLDIsMywtMSwtMl0sICJuZGlzdGluY3QiIDogNH1d Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworRVJST1I6ICBtYWxmb3JtZWQgcGdfbmRpc3RpbmN0 OiAiW3siYXR0cmlidXRlcyIgOiBbMywtMV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAg ICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAor ICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFstMSwtMl0sICJuZGlzdGlu Y3QiIDogM30sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIsMywt MV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0 ZXMiIDogWzIsMywtMl0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAg ICB7ImF0dHJpYnV0ZXMiIDogWzIsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAg ICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFswLDIsMywtMSwtMl0sICJuZGlzdGluY3Qi IDogNH1dIgorTElORSA2OiAgICAgICAgICduX2Rpc3RpbmN0JywgJ1t7ImF0dHJpYnV0ZXMiIDog WzMsLTFdLCAibmRpc3RpbmN0IiAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K K0RFVEFJTDogIEludmFsaWQgImF0dHJpYnV0ZXMiIGVsZW1lbnQ6IDAuCistLSBzZXQgbl9kaXN0 aW5jdCB1c2luZyBhdCBhdHRudW0gdGhhdCBpcyBvdXRzaWRlIHRoZSBleHByZXNzaW9uIGJvdW5k cyhiZWxvdyAtMikKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9z dGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAor ICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdp bmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ25fZGlzdGluY3QnLCAnW3siYXR0cmlidXRlcyIg OiBbMywtMV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0 dHJpYnV0ZXMiIDogWzMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAg ICAgICAgeyJhdHRyaWJ1dGVzIiA6IFstMSwtMl0sICJuZGlzdGluY3QiIDogM30sCisgICAgICAg ICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzMsLTEsLTRdLCAibmRpc3RpbmN0IiA6 IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFszLC0yLC00XSwg Im5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIg OiBbLTEsLTIsLTRdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAg eyJhdHRyaWJ1dGVzIiA6IFszLC0xLC0yLC00XSwgIm5kaXN0aW5jdCIgOiA0fV0nOjpwZ19uZGlz dGluY3QKKyAgICAgICk7CitXQVJOSU5HOiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBm b3IgdGhpcyBzdGF0aXN0aWNzIG9iamVjdDogLTQKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBvaworU0VM RUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAn c3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0 aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNl LAorICAgICAgICAnbl9kaXN0aW5jdCcsICdbeyJhdHRyaWJ1dGVzIiA6IFsyLDNdLCAibmRpc3Rp bmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLC0x XSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRl cyIgOiBbMywtMV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7 ImF0dHJpYnV0ZXMiIDogWzMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFstMSwtMl0sICJuZGlzdGluY3QiIDogM30sCisgICAg ICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIsMywtMV0sICJuZGlzdGluY3Qi IDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIsMywtMl0s ICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMi IDogWzIsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAg eyJhdHRyaWJ1dGVzIiA6IFsyLDMsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9XSc6OnBnX25kaXN0 aW5jdAorICAgICAgKTsKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QKKyAgICByZXBsYWNlKGUubl9k aXN0aW5jdCwgICAnfSwgJywgRSd9LFxuJykgQVMgbl9kaXN0aW5jdCwKKyAgICBlLmRlcGVuZGVu Y2llcywKKyAgICBlLm1vc3RfY29tbW9uX3ZhbHMsIGUubW9zdF9jb21tb25fdmFsX251bGxzLAor ICAgIGUubW9zdF9jb21tb25fZnJlcXMsIGUubW9zdF9jb21tb25fYmFzZV9mcmVxcworRlJPTSBw Z19zdGF0c19leHQgQVMgZQorV0hFUkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNf aW1wb3J0JworQU5EIGUuc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0FORCBl LmluaGVyaXRlZCA9IGZhbHNlCitcZ3gKKy1bIFJFQ09SRCAxIF0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbl9kaXN0aW5jdCAgICAg ICAgICAgICB8IFt7ImF0dHJpYnV0ZXMiOiBbMiwgM10sICJuZGlzdGluY3QiOiA0fSwgICAgICAg KworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsyLCAtMV0sICJuZGlz dGluY3QiOiA0fSwgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRl cyI6IFszLCAtMV0sICJuZGlzdGluY3QiOiA0fSwgICAgICAgKworICAgICAgICAgICAgICAgICAg ICAgICB8IHsiYXR0cmlidXRlcyI6IFszLCAtMl0sICJuZGlzdGluY3QiOiA0fSwgICAgICAgKwor ICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFstMSwgLTJdLCAibmRpc3Rp bmN0IjogM30sICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6 IFsyLCAzLCAtMV0sICJuZGlzdGluY3QiOiA0fSwgICAgKworICAgICAgICAgICAgICAgICAgICAg ICB8IHsiYXR0cmlidXRlcyI6IFsyLCAzLCAtMl0sICJuZGlzdGluY3QiOiA0fSwgICAgKworICAg ICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsyLCAtMSwgLTJdLCAibmRpc3Rp bmN0IjogNH0sICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsy LCAzLCAtMSwgLTJdLCAibmRpc3RpbmN0IjogNH1dCitkZXBlbmRlbmNpZXMgICAgICAgICAgIHwg Cittb3N0X2NvbW1vbl92YWxzICAgICAgIHwgCittb3N0X2NvbW1vbl92YWxfbnVsbHMgIHwgCitt b3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgCittb3N0X2NvbW1vbl9iYXNlX2ZyZXFzIHwgCisKKy0t IHNldCBkZXBlbmRlbmNpZXMgdXNpbmcgYXQgYXR0bnVtICgxKSB0aGF0IGlzIG5vdCBpbiB0aGUg c3RhdGlzdGljcyBvYmplY3QKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRl bmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBv cnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAg ICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVuZGVuY2llcycsICdbeyJhdHRy aWJ1dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IDEsICJkZWdyZWUiOiAxLjAwMDAwMH1dJzo6cGdf ZGVwZW5kZW5jaWVzCisgICAgICApOworV0FSTklORzogIHBnX2RlcGVuZGVuY2llczogaW52YWxp ZCBhdHRudW0gZm9yIHRoaXMgc3RhdGlzdGljcyBvYmplY3Q6IDEKKyBwZ19yZXN0b3JlX2V4dGVu ZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCist LSBzZXQgZGVwZW5kZW5jaWVzIHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIDAKK1NFTEVDVAorICAg IHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3Rp Y3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1l JywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAg ICAgJ2RlcGVuZGVuY2llcycsICdbeyJhdHRyaWJ1dGVzIjogWzBdLCAiZGVwZW5kZW5jeSI6IC0x LCAiZGVncmVlIjogMS4wMDAwMDB9XSc6OnBnX2RlcGVuZGVuY2llcworICAgICAgKTsKK0VSUk9S OiAgbWFsZm9ybWVkIHBnX2RlcGVuZGVuY2llczogIlt7ImF0dHJpYnV0ZXMiOiBbMF0sICJkZXBl bmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH1dIgorTElORSA2OiAgICAgICAgICdkZXBl bmRlbmNpZXMnLCAnW3siYXR0cmlidXRlcyI6IFswXSwgImRlcGVuZGVuY3kiOiAuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgSW52YWxpZCAiYXR0cmlidXRl cyIgZWxlbWVudDogMC4KKy0tIHNldCBkZXBlbmRlbmNpZXMgdXNpbmcgYXQgYXR0bnVtIHRoYXQg aXMgb3V0c2lkZSB0aGUgZXhwcmVzc2lvbiBib3VuZHMoYmVsb3cgLTIpCitTRUxFQ1QKKyAgICBw Z19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNz X3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScs ICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAg ICdkZXBlbmRlbmNpZXMnLCAnW3siYXR0cmlidXRlcyI6IFsyXSwgImRlcGVuZGVuY3kiOiAtMywg ImRlZ3JlZSI6IDEuMDAwMDAwfV0nOjpwZ19kZXBlbmRlbmNpZXMKKyAgICAgICk7CitXQVJOSU5H OiAgcGdfZGVwZW5kZW5jaWVzOiBpbnZhbGlkIGF0dG51bSBmb3IgdGhpcyBzdGF0aXN0aWNzIG9i amVjdDogLTMKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBvaworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5w Z19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1l JywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0 X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnZGVwZW5kZW5j aWVzJywgJ1t7ImF0dHJpYnV0ZXMiOiBbMl0sICJkZXBlbmRlbmN5IjogMywgImRlZ3JlZSI6IDEu MDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWzJdLCAi ZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAg ICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMl0sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAx LjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFszXSwg ImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAg ICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbM10sICJkZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAx LjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFszXSwg ImRlcGVuZGVuY3kiOiAtMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWy0xXSwgImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjog MC41MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbLTFd LCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAwLjUwMDAwMH0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFstMV0sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUi OiAxLjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFst Ml0sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDAuNTAwMDAwfSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWy0yXSwgImRlcGVuZGVuY3kiOiAzLCAiZGVncmVl IjogMC41MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBb LTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAg ICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMiwzXSwgImRlcGVuZGVuY3kiOiAtMSwgImRl Z3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVz IjogWzIsM10sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFsyLC0xXSwgImRlcGVuZGVuY3kiOiAz LCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJp YnV0ZXMiOiBbMiwtMV0sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFsyLC0yXSwgImRlcGVuZGVu Y3kiOiAzLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7 ImF0dHJpYnV0ZXMiOiBbMiwtMl0sICJkZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAw MH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFszLC0xXSwgImRl cGVuZGVuY3kiOiAyLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAg ICAgICB7ImF0dHJpYnV0ZXMiOiBbMywtMV0sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAx LjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFszLC0y XSwgImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAg ICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMywtMl0sICJkZXBlbmRlbmN5IjogLTEsICJkZWdy ZWUiOiAxLjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6 IFstMSwtMl0sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDAuNTAwMDAwfSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWy0xLC0yXSwgImRlcGVuZGVuY3kiOiAz LCAiZGVncmVlIjogMC41MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJp YnV0ZXMiOiBbMiwzLC0yXSwgImRlcGVuZGVuY3kiOiAtMSwgImRlZ3JlZSI6IDEuMDAwMDAwfSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWzIsLTEsLTJdLCAiZGVw ZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHsiYXR0cmlidXRlcyI6IFszLC0xLC0yXSwgImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjog MS4wMDAwMDB9XSc6OnBnX2RlcGVuZGVuY2llcworICAgICAgKTsKKyBwZ19yZXN0b3JlX2V4dGVu ZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitT RUxFQ1QKKyAgICByZXBsYWNlKGUubl9kaXN0aW5jdCwgICAnfSwgJywgRSd9LFxuJykgQVMgbl9k aXN0aW5jdCwKKyAgICByZXBsYWNlKGUuZGVwZW5kZW5jaWVzLCAnfSwgJywgRSd9LFxuJykgQVMg ZGVwZW5kZW5jaWVzLAorICAgIGUubW9zdF9jb21tb25fdmFscywgZS5tb3N0X2NvbW1vbl92YWxf bnVsbHMsCisgICAgZS5tb3N0X2NvbW1vbl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFz CitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9 ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25l JworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2UKK1xneAorLVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwgW3siYXR0cmlidXRlcyI6IFsyLCAz XSwgIm5kaXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAg ICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzIsIC0xXSwgIm5kaXN0aW5jdCI6IDR9LCAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRy aWJ1dGVzIjogWzMsIC0xXSwgIm5kaXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzMsIC0yXSwgIm5k aXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAg ICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWy0xLCAtMl0sICJuZGlzdGluY3QiOiAzfSwgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVz IjogWzIsIDMsIC0xXSwgIm5kaXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICArCisg ICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzIsIDMsIC0yXSwgIm5kaXN0 aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAg IHwgeyJhdHRyaWJ1dGVzIjogWzIsIC0xLCAtMl0sICJuZGlzdGluY3QiOiA0fSwgICAgICAgICAg ICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzIs IDMsIC0xLCAtMl0sICJuZGlzdGluY3QiOiA0fV0KK2RlcGVuZGVuY2llcyAgICAgICAgICAgfCBb eyJhdHRyaWJ1dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAxLjAwMDAwMH0s ICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMl0sICJk ZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAg ICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMl0sICJkZXBlbmRlbmN5IjogLTIsICJkZWdy ZWUiOiAxLjAwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJp YnV0ZXMiOiBbM10sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwgICAgICAg ICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbM10sICJkZXBlbmRl bmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAgICAgICAg ICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbM10sICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAx LjAwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMi OiBbLTFdLCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAwLjUwMDAwMH0sICAgICAgICsKKyAg ICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTFdLCAiZGVwZW5kZW5jeSI6 IDMsICJkZWdyZWUiOiAwLjUwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAg fCB7ImF0dHJpYnV0ZXMiOiBbLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4wMDAw MDB9LCAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTJd LCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAwLjUwMDAwMH0sICAgICAgICsKKyAgICAgICAg ICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTJdLCAiZGVwZW5kZW5jeSI6IDMsICJk ZWdyZWUiOiAwLjUwMDAwMH0sICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0 dHJpYnV0ZXMiOiBbLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9LCAg ICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgM10sICJk ZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICsKKyAgICAgICAgICAgICAg ICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgM10sICJkZXBlbmRlbmN5IjogLTIsICJkZWdy ZWUiOiAxLjAwMDAwMH0sICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0 ZXMiOiBbMiwgLTFdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICsK KyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgLTFdLCAiZGVwZW5k ZW5jeSI6IC0yLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICsKKyAgICAgICAgICAgICAgICAgICAg ICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgLTJdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAx LjAwMDAwMH0sICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBb MiwgLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICsKKyAgICAg ICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMywgLTFdLCAiZGVwZW5kZW5jeSI6 IDIsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7 ImF0dHJpYnV0ZXMiOiBbMywgLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4wMDAw MDB9LCAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMywgLTJd LCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICsKKyAgICAgICAgICAg ICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMywgLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAi ZGVncmVlIjogMS4wMDAwMDB9LCAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJp YnV0ZXMiOiBbLTEsIC0yXSwgImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjogMC41MDAwMDB9LCAg ICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTEsIC0yXSwgImRl cGVuZGVuY3kiOiAzLCAiZGVncmVlIjogMC41MDAwMDB9LCAgICsKKyAgICAgICAgICAgICAgICAg ICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgMywgLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVn cmVlIjogMS4wMDAwMDB9LCsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMi OiBbMiwgLTEsIC0yXSwgImRlcGVuZGVuY3kiOiAzLCAiZGVncmVlIjogMS4wMDAwMDB9LCsKKyAg ICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMywgLTEsIC0yXSwgImRlcGVu ZGVuY3kiOiAyLCAiZGVncmVlIjogMS4wMDAwMDB9XQorbW9zdF9jb21tb25fdmFscyAgICAgICB8 IAorbW9zdF9jb21tb25fdmFsX251bGxzICB8IAorbW9zdF9jb21tb25fZnJlcXMgICAgICB8IAor bW9zdF9jb21tb25fYmFzZV9mcmVxcyB8IAorCistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVj aWZpZWQsIGFsbCBmb3VyIG11c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDEpCitTRUxFQ1QKKyAgICBw Z19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNz X3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScs ICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAg ICdtb3N0X2NvbW1vbl92YWxzJywgJ3t7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9O RSwwMS0wMS0yMDAxLFwie1wiXCJ4a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJl LCIoMywzLjMsVFJFLDAzLTAzLTIwMDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0y MDAyLFwiW3RydWUsIDQsIFwiXCJzaXhcIlwiXVwiKSIsMSwyfX0nOjp0ZXh0W10KKyAgICAgICk7 CitXQVJOSU5HOiAgTUNWIHBhcmFtZXRlcnMgIm1vc3RfY29tbW9uX3ZhbHMiLCAibW9zdF9jb21t b25fdmFsX251bGxzIiwgIm1vc3RfY29tbW9uX2ZyZXFzIiwgYW5kICJtb3N0X2NvbW1vbl9iYXNl X2ZyZXFzIiBtdXN0IGJlIGFsbCBzcGVjaWZpZWQgaWYgYW55IGFyZSBzcGVjaWZpZWQKKyBwZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgor KDEgcm93KQorCistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVjaWZpZWQsIGFsbCBmb3VyIG11 c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDIpCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3Rv cmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3Rh dHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUn LAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxf bnVsbHMnLCAne3tmLHQsZix0fSx7ZixmLGYsZn0se2YsZixmLGZ9LHtmLGYsZixmfX0nOjpib29s ZWFuW10KKyAgICAgICk7CitXQVJOSU5HOiAgTUNWIHBhcmFtZXRlcnMgIm1vc3RfY29tbW9uX3Zh bHMiLCAibW9zdF9jb21tb25fdmFsX251bGxzIiwgIm1vc3RfY29tbW9uX2ZyZXFzIiwgYW5kICJt b3N0X2NvbW1vbl9iYXNlX2ZyZXFzIiBtdXN0IGJlIGFsbCBzcGVjaWZpZWQgaWYgYW55IGFyZSBz cGVjaWZpZWQKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVjaWZp ZWQsIGFsbCBmb3VyIG11c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDMpCitTRUxFQ1QKKyAgICBwZ19j YXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3Nj aGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0 ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdt b3N0X2NvbW1vbl9mcmVxcycsICd7MC4yNSwwLjI1LDAuMjUsMC4yNX0nOjpkb3VibGUgcHJlY2lz aW9uW10KKyAgICAgICk7CitXQVJOSU5HOiAgTUNWIHBhcmFtZXRlcnMgIm1vc3RfY29tbW9uX3Zh bHMiLCAibW9zdF9jb21tb25fdmFsX251bGxzIiwgIm1vc3RfY29tbW9uX2ZyZXFzIiwgYW5kICJt b3N0X2NvbW1vbl9iYXNlX2ZyZXFzIiBtdXN0IGJlIGFsbCBzcGVjaWZpZWQgaWYgYW55IGFyZSBz cGVjaWZpZWQKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVjaWZp ZWQsIGFsbCBmb3VyIG11c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDQpCitTRUxFQ1QKKyAgICBwZ19j YXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3Nj aGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0 ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdt b3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgJ3swLjAwMzkwNjI1LDAuMDE1NjI1LDAuMDAzOTA2MjUs MC4wMTU2MjV9Jzo6ZG91YmxlIHByZWNpc2lvbltdCisgICAgICApOworV0FSTklORzogIE1DViBw YXJhbWV0ZXJzICJtb3N0X2NvbW1vbl92YWxzIiwgIm1vc3RfY29tbW9uX3ZhbF9udWxscyIsICJt b3N0X2NvbW1vbl9mcmVxcyIsIGFuZCAibW9zdF9jb21tb25fYmFzZV9mcmVxcyIgbXVzdCBiZSBh bGwgc3BlY2lmaWVkIGlmIGFueSBhcmUgc3BlY2lmaWVkCisgcGdfcmVzdG9yZV9leHRlbmRlZF9z dGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gb2sK K1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAg ICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3Rh dGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBm YWxzZSwKKyAgICAgICAgJ21vc3RfY29tbW9uX3ZhbHMnLCAne3tmb3VyLE5VTEwsMCxOVUxMfSx7 b25lLCIoMSwxLjEsT05FLDAxLTAxLTIwMDEsXCJ7XCJcInhrZXlcIlwiOiBcIlwieHZhbFwiXCJ9 XCIpIiwxLDJ9LHt0cmUsIigzLDMuMyxUUkUsMDMtMDMtMjAwMywpIiwtMSwzfSx7dHdvLCIoMiwy LjIsVFdPLDAyLTAyLTIwMDIsXCJbdHJ1ZSwgNCwgXCJcInNpeFwiXCJdXCIpIiwxLDJ9fSc6OnRl eHRbXSwKKyAgICAgICAgJ21vc3RfY29tbW9uX3ZhbF9udWxscycsICd7e2YsdCxmLHR9LHtmLGYs ZixmfSx7ZixmLGYsZn0se2YsZixmLGZ9fSc6OmJvb2xlYW5bXSwKKyAgICAgICAgJ21vc3RfY29t bW9uX2ZyZXFzJywgJ3swLjI1LDAuMjUsMC4yNSwwLjI1fSc6OmRvdWJsZSBwcmVjaXNpb25bXSwK KyAgICAgICAgJ21vc3RfY29tbW9uX2Jhc2VfZnJlcXMnLCAnezAuMDAzOTA2MjUsMC4wMTU2MjUs MC4wMDM5MDYyNSwwLjAxNTYyNX0nOjpkb3VibGUgcHJlY2lzaW9uW10KKyAgICAgICk7CisgcGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworU0VMRUNUCisgICAgcmVwbGFjZShlLm5fZGlzdGluY3QsICAgJ30sICcsIEUn fSxcbicpIEFTIG5fZGlzdGluY3QsCisgICAgcmVwbGFjZShlLmRlcGVuZGVuY2llcywgJ30sICcs IEUnfSxcbicpIEFTIGRlcGVuZGVuY2llcywKKyAgICBlLm1vc3RfY29tbW9uX3ZhbHMsIGUubW9z dF9jb21tb25fdmFsX251bGxzLAorICAgIGUubW9zdF9jb21tb25fZnJlcXMsIGUubW9zdF9jb21t b25fYmFzZV9mcmVxcworRlJPTSBwZ19zdGF0c19leHQgQVMgZQorV0hFUkUgZS5zdGF0aXN0aWNz X3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlzdGljc19uYW1lID0gJ3Rl c3Rfc3RhdF9jbG9uZScKK0FORCBlLmluaGVyaXRlZCA9IGZhbHNlCitcZ3gKKy1bIFJFQ09SRCAx IF0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwg W3siYXR0cmlidXRlcyI6IFsyLCAzXSwgIm5kaXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMi OiBbMiwgLTFdLCAibmRpc3RpbmN0IjogNH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFszLCAtMV0sICJu ZGlzdGluY3QiOiA0fSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzMsIC0yXSwgIm5kaXN0aW5jdCI6IDR9 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAg ICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTEsIC0yXSwgIm5kaXN0aW5jdCI6IDN9LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmli dXRlcyI6IFsyLCAzLCAtMV0sICJuZGlzdGluY3QiOiA0fSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzIsIDMs IC0yXSwgIm5kaXN0aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg ICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgLTEsIC0yXSwgIm5kaXN0 aW5jdCI6IDR9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAg ICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsyLCAzLCAtMSwgLTJdLCAibmRpc3RpbmN0IjogNH1d CitkZXBlbmRlbmNpZXMgICAgICAgICAgIHwgW3siYXR0cmlidXRlcyI6IFsyXSwgImRlcGVuZGVu Y3kiOiAzLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAg ICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMl0sICJkZXBlbmRlbmN5IjogLTEsICJkZWdy ZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8 IHsiYXR0cmlidXRlcyI6IFsyXSwgImRlcGVuZGVuY3kiOiAtMiwgImRlZ3JlZSI6IDEuMDAwMDAw fSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVz IjogWzNdLCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbM10sICJkZXBl bmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAg ICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFszXSwgImRlcGVuZGVuY3kiOiAtMiwg ImRlZ3JlZSI6IDEuMDAwMDAwfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAg ICAgIHwgeyJhdHRyaWJ1dGVzIjogWy0xXSwgImRlcGVuZGVuY3kiOiAyLCAiZGVncmVlIjogMC41 MDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJp YnV0ZXMiOiBbLTFdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAwLjUwMDAwMH0sICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFstMV0s ICJkZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWy0yXSwgImRlcGVuZGVuY3ki OiAyLCAiZGVncmVlIjogMC41MDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAg ICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTJdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUi OiAwLjUwMDAwMH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsi YXR0cmlidXRlcyI6IFstMl0sICJkZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0s ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjog WzIsIDNdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMiwgM10sICJkZXBl bmRlbmN5IjogLTIsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAg ICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsyLCAtMV0sICJkZXBlbmRlbmN5IjogMywg ImRlZ3JlZSI6IDEuMDAwMDAwfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAg IHwgeyJhdHRyaWJ1dGVzIjogWzIsIC0xXSwgImRlcGVuZGVuY3kiOiAtMiwgImRlZ3JlZSI6IDEu MDAwMDAwfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0 ZXMiOiBbMiwgLTJdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFsyLCAtMl0s ICJkZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAg ICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzMsIC0xXSwgImRlcGVuZGVuY3ki OiAyLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAg ICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbMywgLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVl IjogMS4wMDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0 cmlidXRlcyI6IFszLCAtMl0sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwgeyJhdHRyaWJ1dGVzIjogWzMs IC0yXSwgImRlcGVuZGVuY3kiOiAtMSwgImRlZ3JlZSI6IDEuMDAwMDAwfSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK KyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMiOiBbLTEsIC0yXSwgImRlcGVu ZGVuY3kiOiAyLCAiZGVncmVlIjogMC41MDAwMDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAg ICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFstMSwgLTJdLCAiZGVwZW5kZW5jeSI6IDMsICJk ZWdyZWUiOiAwLjUwMDAwMH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgIHwg eyJhdHRyaWJ1dGVzIjogWzIsIDMsIC0yXSwgImRlcGVuZGVuY3kiOiAtMSwgImRlZ3JlZSI6IDEu MDAwMDAwfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgfCB7ImF0dHJpYnV0ZXMi OiBbMiwgLTEsIC0yXSwgImRlcGVuZGVuY3kiOiAzLCAiZGVncmVlIjogMS4wMDAwMDB9LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICAgICAgICAgICAgICAgICAgICB8IHsiYXR0cmlidXRlcyI6IFszLCAtMSwgLTJd LCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAxLjAwMDAwMH1dCittb3N0X2NvbW1vbl92YWxz ICAgICAgIHwge3tmb3VyLE5VTEwsMCxOVUxMfSx7b25lLCIoMSwxLjEsT05FLDAxLTAxLTIwMDEs XCJ7XCJcInhrZXlcIlwiOiBcIlwieHZhbFwiXCJ9XCIpIiwxLDJ9LHt0cmUsIigzLDMuMyxUUkUs MDMtMDMtMjAwMywpIiwtMSwzfSx7dHdvLCIoMiwyLjIsVFdPLDAyLTAyLTIwMDIsXCJbdHJ1ZSwg NCwgXCJcInNpeFwiXCJdXCIpIiwxLDJ9fQorbW9zdF9jb21tb25fdmFsX251bGxzICB8IHt7Zix0 LGYsdH0se2YsZixmLGZ9LHtmLGYsZixmfSx7ZixmLGYsZn19Cittb3N0X2NvbW1vbl9mcmVxcyAg ICAgIHwgezAuMjUsMC4yNSwwLjI1LDAuMjV9Cittb3N0X2NvbW1vbl9iYXNlX2ZyZXFzIHwgezAu MDAzOTA2MjUsMC4wMTU2MjUsMC4wMDM5MDYyNSwwLjAxNTYyNX0KKworU0VMRUNUCisgICAgcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19z Y2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAn dGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAn ZXhwcnMnLCAne3swLDQsLTAuNzUsInsxfSIsInswLjV9Iiwiey0xLDB9IiwtMC42LE5VTEwsTlVM TCxOVUxMfSx7MC4yNSw0LC0wLjUsInsyfSIsInswLjV9IixOVUxMLDEsTlVMTCxOVUxMLE5VTEx9 fSc6OnRleHRbXQorICAgICAgKTsKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QKKyAgICBlLmluaGVy aXRlZCwgZS5udWxsX2ZyYWMsIGUuYXZnX3dpZHRoLCBlLm5fZGlzdGluY3QsIGUubW9zdF9jb21t b25fdmFscywKKyAgICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLmhpc3RvZ3JhbV9ib3VuZHMsIGUu Y29ycmVsYXRpb24sCisgICAgZS5tb3N0X2NvbW1vbl9lbGVtcywgZS5tb3N0X2NvbW1vbl9lbGVt X2ZyZXFzLCBlLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBB UyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQg ZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworYW5kIGUuaW5oZXJpdGVkID0g ZmFsc2UKK1xneAorLVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLQoraW5oZXJpdGVkICAg ICAgICAgICAgICB8IGYKK251bGxfZnJhYyAgICAgICAgICAgICAgfCAwCithdmdfd2lkdGggICAg ICAgICAgICAgIHwgNAorbl9kaXN0aW5jdCAgICAgICAgICAgICB8IC0wLjc1Cittb3N0X2NvbW1v bl92YWxzICAgICAgIHwgezF9Cittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgezAuNX0KK2hpc3Rv Z3JhbV9ib3VuZHMgICAgICAgfCB7LTEsMH0KK2NvcnJlbGF0aW9uICAgICAgICAgICAgfCAtMC42 Cittb3N0X2NvbW1vbl9lbGVtcyAgICAgIHwgCittb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgCitl bGVtX2NvdW50X2hpc3RvZ3JhbSAgIHwgCistWyBSRUNPUkQgMiBdLS0tLS0tLS0tLSstLS0tLS0t Citpbmhlcml0ZWQgICAgICAgICAgICAgIHwgZgorbnVsbF9mcmFjICAgICAgICAgICAgICB8IDAu MjUKK2F2Z193aWR0aCAgICAgICAgICAgICAgfCA0CituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwg LTAuNQorbW9zdF9jb21tb25fdmFscyAgICAgICB8IHsyfQorbW9zdF9jb21tb25fZnJlcXMgICAg ICB8IHswLjV9CitoaXN0b2dyYW1fYm91bmRzICAgICAgIHwgCitjb3JyZWxhdGlvbiAgICAgICAg ICAgIHwgMQorbW9zdF9jb21tb25fZWxlbXMgICAgICB8IAorbW9zdF9jb21tb25fZWxlbV9mcmVx cyB8IAorZWxlbV9jb3VudF9oaXN0b2dyYW0gICB8IAorCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9n LnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUg PT4gJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0 X2Nsb25lJywKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlKTsKKyBwZ19jbGVhcl9leHRlbmRl ZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IENPVU5UKCopCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2No ZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9z dGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2U7CisgY291bnQgCistLS0tLS0tCisg ICAgIDAKKygxIHJvdykKKworU0VMRUNUIENPVU5UKCopCitGUk9NIHBnX3N0YXRzX2V4dF9leHBy cyBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitB TkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVk ID0gZmFsc2U7CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworLS0KKy0tIENv cHkgc3RhdHMgZnJvbSB0ZXN0X3N0YXQgdG8gdGVzdF9zdGF0X2Nsb25lCistLQorU0VMRUNUCisg ICAgZS5zdGF0aXN0aWNzX25hbWUsCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVk X3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgZS5zdGF0aXN0aWNzX3Nj aGVtYW5hbWU6OnRleHQsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Ns b25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGUuaW5oZXJpdGVkLAorICAgICAgICAnbl9kaXN0 aW5jdCcsIGUubl9kaXN0aW5jdCwKKyAgICAgICAgJ2RlcGVuZGVuY2llcycsIGUuZGVwZW5kZW5j aWVzLAorICAgICAgICAnbW9zdF9jb21tb25fdmFscycsIGUubW9zdF9jb21tb25fdmFscywKKyAg ICAgICAgJ21vc3RfY29tbW9uX3ZhbF9udWxscycsIGUubW9zdF9jb21tb25fdmFsX251bGxzLAor ICAgICAgICAnbW9zdF9jb21tb25fZnJlcXMnLCBlLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAg ICAnbW9zdF9jb21tb25fYmFzZV9mcmVxcycsIGUubW9zdF9jb21tb25fYmFzZV9mcmVxcywKKyAg ICAgICAgJ2V4cHJzJywgeC5leHBycworICAgICkKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUKK0NS T1NTIEpPSU4gTEFURVJBTCAoCisgICAgU0VMRUNUCisgICAgICAgIGFycmF5X2FnZygKKyAgICAg ICAgICAgIEFSUkFZW2VlLm51bGxfZnJhYzo6dGV4dCwgZWUuYXZnX3dpZHRoOjp0ZXh0LAorICAg ICAgICAgICAgICAgICAgZWUubl9kaXN0aW5jdDo6dGV4dCwgZWUubW9zdF9jb21tb25fdmFsczo6 dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLm1vc3RfY29tbW9uX2ZyZXFzOjp0ZXh0LCBlZS5o aXN0b2dyYW1fYm91bmRzOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUuY29ycmVsYXRpb246 OnRleHQsIGVlLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUu bW9zdF9jb21tb25fZWxlbV9mcmVxczo6dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLmVsZW1f Y291bnRfaGlzdG9ncmFtOjp0ZXh0XSkKKyAgICBGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBl ZQorICAgIFdIRVJFIGVlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9IGUuc3RhdGlzdGljc19zY2hl bWFuYW1lCisgICAgQU5EIGVlLnN0YXRpc3RpY3NfbmFtZSA9IGUuc3RhdGlzdGljc19uYW1lCisg ICAgQU5EIGVlLmluaGVyaXRlZCA9IGUuaW5oZXJpdGVkCisgICAgKSBBUyB4KGV4cHJzKQorV0hF UkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlz dGljc19uYW1lID0gJ3Rlc3Rfc3RhdCc7Cisgc3RhdGlzdGljc19uYW1lIHwgcGdfcmVzdG9yZV9l eHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIHRlc3Rfc3RhdCAgICAgICB8IHQKKygxIHJvdykKKworU0VMRUNUIG8uaW5oZXJpdGVk LAorICAgICAgIG8ubl9kaXN0aW5jdCwgby5kZXBlbmRlbmNpZXMsIG8ubW9zdF9jb21tb25fdmFs cywKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbF9udWxscywgby5tb3N0X2NvbW1vbl9mcmVxcywK KyAgICAgICBvLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIG8K K1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0 YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnCitFWENFUFQKK1NFTEVDVCBuLmluaGVyaXRlZCwK KyAgICAgICBuLm5fZGlzdGluY3QsIG4uZGVwZW5kZW5jaWVzLCBuLm1vc3RfY29tbW9uX3ZhbHMs CisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG4ubW9zdF9jb21tb25fZnJlcXMsCisg ICAgICAgbi5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBuCitX SEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0 aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJzsKKyBpbmhlcml0ZWQgfCBuX2Rpc3RpbmN0 IHwgZGVwZW5kZW5jaWVzIHwgbW9zdF9jb21tb25fdmFscyB8IG1vc3RfY29tbW9uX3ZhbF9udWxs cyB8IG1vc3RfY29tbW9uX2ZyZXFzIHwgbW9zdF9jb21tb25fYmFzZV9mcmVxcyAKKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCBuLmluaGVyaXRlZCwKKyAgICAgICBuLm5fZGlzdGlu Y3QsIG4uZGVwZW5kZW5jaWVzLCBuLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgbi5tb3N0X2Nv bW1vbl92YWxfbnVsbHMsIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5tb3N0X2NvbW1v bl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nf c2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVz dF9zdGF0X2Nsb25lJworRVhDRVBUCitTRUxFQ1Qgby5pbmhlcml0ZWQsCisgICAgICAgby5uX2Rp c3RpbmN0LCBvLmRlcGVuZGVuY2llcywgby5tb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9z dF9jb21tb25fdmFsX251bGxzLCBvLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG8ubW9zdF9j b21tb25fYmFzZV9mcmVxcworRlJPTSBwZ19zdGF0c19leHQgQVMgbworV0hFUkUgby5zdGF0aXN0 aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG8uc3RhdGlzdGljc19uYW1lID0g J3Rlc3Rfc3RhdCc7CisgaW5oZXJpdGVkIHwgbl9kaXN0aW5jdCB8IGRlcGVuZGVuY2llcyB8IG1v c3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl92YWxfbnVsbHMgfCBtb3N0X2NvbW1vbl9mcmVx cyB8IG1vc3RfY29tbW9uX2Jhc2VfZnJlcXMgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitT RUxFQ1Qgby5pbmhlcml0ZWQsCisgICAgICAgby5udWxsX2ZyYWMsIG8uYXZnX3dpZHRoLCBvLm5f ZGlzdGluY3QsCisgICAgICAgby5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1vc3RfY29tbW9u X3ZhbHMsCisgICAgICAgby5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLmhpc3RvZ3JhbV9i b3VuZHM6OnRleHQgQVMgaGlzdG9ncmFtX2JvdW5kcywKKyAgICAgICBvLmNvcnJlbGF0aW9uLAor ICAgICAgIG8ubW9zdF9jb21tb25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25fZWxlbXMsCisg ICAgICAgby5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBvLmVsZW1fY291bnRfaGlzdG9ncmFtCitG Uk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBvCitXSEVSRSBvLnN0YXRpc3RpY3Nfc2NoZW1hbmFt ZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgby5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0Jwor RVhDRVBUCitTRUxFQ1Qgbi5pbmhlcml0ZWQsCisgICAgICAgbi5udWxsX2ZyYWMsIG4uYXZnX3dp ZHRoLCBuLm5fZGlzdGluY3QsCisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1v c3RfY29tbW9uX3ZhbHMsCisgICAgICAgbi5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBuLmhp c3RvZ3JhbV9ib3VuZHM6OnRleHQgQVMgaGlzdG9ncmFtX2JvdW5kcywKKyAgICAgICBuLmNvcnJl bGF0aW9uLAorICAgICAgIG4ubW9zdF9jb21tb25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25f ZWxlbXMsCisgICAgICAgbi5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBuLmVsZW1fY291bnRfaGlz dG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nf c2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVz dF9zdGF0X2Nsb25lJzsKKyBpbmhlcml0ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lkdGggfCBuX2Rp c3RpbmN0IHwgbW9zdF9jb21tb25fdmFscyB8IG1vc3RfY29tbW9uX2ZyZXFzIHwgaGlzdG9ncmFt X2JvdW5kcyB8IGNvcnJlbGF0aW9uIHwgbW9zdF9jb21tb25fZWxlbXMgfCBtb3N0X2NvbW1vbl9l bGVtX2ZyZXFzIHwgZWxlbV9jb3VudF9oaXN0b2dyYW0gCistLS0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKDAg cm93cykKKworU0VMRUNUIG4uaW5oZXJpdGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193 aWR0aCwgbi5uX2Rpc3RpbmN0LAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBt b3N0X2NvbW1vbl92YWxzLAorICAgICAgIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5o aXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3Jy ZWxhdGlvbiwKKyAgICAgICBuLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9u X2VsZW1zLAorICAgICAgIG4ubW9zdF9jb21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hp c3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNz X3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rl c3Rfc3RhdF9jbG9uZScKK0VYQ0VQVAorU0VMRUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubnVs bF9mcmFjLCBvLmF2Z193aWR0aCwgby5uX2Rpc3RpbmN0LAorICAgICAgIG8ubW9zdF9jb21tb25f dmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9jb21tb25fZnJl cXMsCisgICAgICAgby5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMs CisgICAgICAgby5jb3JyZWxhdGlvbiwKKyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0 IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG8ubW9zdF9jb21tb25fZWxlbV9mcmVxcywg by5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgbworV0hF UkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG8uc3RhdGlz dGljc19uYW1lID0gJ3Rlc3Rfc3RhdCc7CisgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dp ZHRoIHwgbl9kaXN0aW5jdCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8 IGhpc3RvZ3JhbV9ib3VuZHMgfCBjb3JyZWxhdGlvbiB8IG1vc3RfY29tbW9uX2VsZW1zIHwgbW9z dF9jb21tb25fZWxlbV9mcmVxcyB8IGVsZW1fY291bnRfaGlzdG9ncmFtIAorLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKIERST1AgU0NIRU1BIHN0YXRzX2ltcG9ydCBDQVNDQURFOwogTk9U SUNFOiAgZHJvcCBjYXNjYWRlcyB0byA2IG90aGVyIG9iamVjdHMKIERFVEFJTDogIGRyb3AgY2Fz Y2FkZXMgdG8gdHlwZSBzdGF0c19pbXBvcnQuY29tcGxleF90eXBlCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3RhdHNfaW1wb3J0LnNxbAppbmRleCBkMTQwNzMzYTc1MC4uNzQ3MDA1NTRjOWMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbApAQCAtNzY2LDYgKzc2Niw5IEBAIFNFTEVDVCA0 LCAnZm91cicsIE5VTEwsIGludDRyYW5nZSgwLDEwMCksIE5VTEw7CiAKIENSRUFURSBJTkRFWCBp c19vZGQgT04gc3RhdHNfaW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEpKTsKIAorQ1JFQVRF IFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0LnRlc3Rfc3RhdCBPTiBuYW1lLCBjb21wLCBsb3dlcihh cmFuZ2UpLCBhcnJheV9sZW5ndGgodGFncywxKQorRlJPTSBzdGF0c19pbXBvcnQudGVzdDsKKwog LS0gR2VuZXJhdGUgc3RhdGlzdGljcyBvbiB0YWJsZSB3aXRoIGRhdGEKIEFOQUxZWkUgc3RhdHNf aW1wb3J0LnRlc3Q7CiAKQEAgLTc3NCw2ICs3NzcsOSBAQCBDUkVBVEUgVEFCTEUgc3RhdHNfaW1w b3J0LnRlc3RfY2xvbmUgKCBMSUtFIHN0YXRzX2ltcG9ydC50ZXN0ICkKIAogQ1JFQVRFIElOREVY IGlzX29kZF9jbG9uZSBPTiBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSgoKGNvbXApLmEgJSAyID0g MSkpOwogCitDUkVBVEUgU1RBVElTVElDUyBzdGF0c19pbXBvcnQudGVzdF9zdGF0X2Nsb25lIE9O IG5hbWUsIGNvbXAsIGxvd2VyKGFyYW5nZSksIGFycmF5X2xlbmd0aCh0YWdzLDEpCitGUk9NIHN0 YXRzX2ltcG9ydC50ZXN0X2Nsb25lOworCiAtLQogLS0gQ29weSBzdGF0cyBmcm9tIHRlc3QgdG8g dGVzdF9jbG9uZSwgYW5kIGlzX29kZCB0byBpc19vZGRfY2xvbmUKIC0tCkBAIC05NzAsNCArOTc2 LDM2MiBAQCBBTkQgdGFibGVuYW1lID0gJ3N0YXRzX3RlbXAnCiBBTkQgaW5oZXJpdGVkID0gZmFs c2UKIEFORCBhdHRuYW1lID0gJ2knOwogRFJPUCBUQUJMRSBzdGF0c190ZW1wOworCistLSBzZXQg bl9kaXN0aW5jdCB1c2luZyBhdCBhdHRudW0gKDEpIHRoYXQgaXMgbm90IGluIHRoZSBzdGF0aXN0 aWNzIG9iamVjdAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0 YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisg ICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2lu aGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbl9kaXN0aW5jdCcsICdbeyJhdHRyaWJ1dGVzIiA6 IFszLC0xXSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0 cmlidXRlcyIgOiBbMywtMl0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAg ICAgICB7ImF0dHJpYnV0ZXMiIDogWy0xLC0yXSwgIm5kaXN0aW5jdCIgOiAzfSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBbMiwzLC0xXSwgIm5kaXN0aW5jdCIgOiA0 fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBbMiwzLC0yXSwgIm5k aXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBb MiwtMSwtMl0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0 dHJpYnV0ZXMiIDogWzMsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsxLDIsMywtMSwtMl0sICJuZGlzdGluY3QiIDogNH1d Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworCistLSBzZXQgbl9kaXN0aW5jdCB1c2luZyBhdCBh dHRudW0gdGhhdCBpcyAwCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5k ZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0 JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAg ICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICduX2Rpc3RpbmN0JywgJ1t7ImF0dHJpYnV0 ZXMiIDogWzMsLTFdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAg eyJhdHRyaWJ1dGVzIiA6IFszLC0yXSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBbLTEsLTJdLCAibmRpc3RpbmN0IiA6IDN9LAorICAg ICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLDMsLTFdLCAibmRpc3RpbmN0 IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLDMsLTJd LCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVz IiA6IFsyLC0xLC0yXSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHsiYXR0cmlidXRlcyIgOiBbMCwyLDMsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9XSc6OnBnX25k aXN0aW5jdAorICAgICAgKTsKKworLS0gc2V0IG5fZGlzdGluY3QgdXNpbmcgYXQgYXR0bnVtIHRo YXQgaXMgb3V0c2lkZSB0aGUgZXhwcmVzc2lvbiBib3VuZHMoYmVsb3cgLTIpCitTRUxFQ1QKKyAg ICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0 aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFt ZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAg ICAgICduX2Rpc3RpbmN0JywgJ1t7ImF0dHJpYnV0ZXMiIDogWzMsLTFdLCAibmRpc3RpbmN0IiA6 IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFszLC0yXSwgIm5k aXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBb LTEsLTJdLCAibmRpc3RpbmN0IiA6IDN9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRy aWJ1dGVzIiA6IFszLC0xLC00XSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAg ICAgICAgIHsiYXR0cmlidXRlcyIgOiBbMywtMiwtNF0sICJuZGlzdGluY3QiIDogNH0sCisgICAg ICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWy0xLC0yLC00XSwgIm5kaXN0aW5j dCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyIgOiBbMywtMSwt MiwtNF0sICJuZGlzdGluY3QiIDogNH1dJzo6cGdfbmRpc3RpbmN0CisgICAgICApOworCistLSBv aworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAg ICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdz dGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcs IGZhbHNlLAorICAgICAgICAnbl9kaXN0aW5jdCcsICdbeyJhdHRyaWJ1dGVzIiA6IFsyLDNdLCAi bmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6 IFsyLC0xXSwgIm5kaXN0aW5jdCIgOiA0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0 cmlidXRlcyIgOiBbMywtMV0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAg ICAgICB7ImF0dHJpYnV0ZXMiIDogWzMsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAg ICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIiA6IFstMSwtMl0sICJuZGlzdGluY3QiIDogM30s CisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIsMywtMV0sICJuZGlz dGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiIDogWzIs MywtMl0sICJuZGlzdGluY3QiIDogNH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJp YnV0ZXMiIDogWzIsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9LAorICAgICAgICAgICAgICAgICAg ICAgICAgeyJhdHRyaWJ1dGVzIiA6IFsyLDMsLTEsLTJdLCAibmRpc3RpbmN0IiA6IDR9XSc6OnBn X25kaXN0aW5jdAorICAgICAgKTsKKworU0VMRUNUCisgICAgcmVwbGFjZShlLm5fZGlzdGluY3Qs ICAgJ30sICcsIEUnfSxcbicpIEFTIG5fZGlzdGluY3QsCisgICAgZS5kZXBlbmRlbmNpZXMsCisg ICAgZS5tb3N0X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICBlLm1v c3RfY29tbW9uX2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNf ZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcK K0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0 ZWQgPSBmYWxzZQorXGd4CisKKy0tIHNldCBkZXBlbmRlbmNpZXMgdXNpbmcgYXQgYXR0bnVtICgx KSB0aGF0IGlzIG5vdCBpbiB0aGUgc3RhdGlzdGljcyBvYmplY3QKK1NFTEVDVAorICAgIHBnX2Nh dGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2No ZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rl c3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2Rl cGVuZGVuY2llcycsICdbeyJhdHRyaWJ1dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IDEsICJkZWdy ZWUiOiAxLjAwMDAwMH1dJzo6cGdfZGVwZW5kZW5jaWVzCisgICAgICApOworCistLSBzZXQgZGVw ZW5kZW5jaWVzIHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIDAKK1NFTEVDVAorICAgIHBnX2NhdGFs b2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1h bmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rf c3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVu ZGVuY2llcycsICdbeyJhdHRyaWJ1dGVzIjogWzBdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVl IjogMS4wMDAwMDB9XSc6OnBnX2RlcGVuZGVuY2llcworICAgICAgKTsKKworLS0gc2V0IGRlcGVu ZGVuY2llcyB1c2luZyBhdCBhdHRudW0gdGhhdCBpcyBvdXRzaWRlIHRoZSBleHByZXNzaW9uIGJv dW5kcyhiZWxvdyAtMikKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRl ZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQn LAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAg ICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVuZGVuY2llcycsICdbeyJhdHRyaWJ1 dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IC0zLCAiZGVncmVlIjogMS4wMDAwMDB9XSc6OnBnX2Rl cGVuZGVuY2llcworICAgICAgKTsKKworLS0gb2sKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScs ICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9j bG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVuZGVuY2ll cycsICdbeyJhdHRyaWJ1dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IDMsICJkZWdyZWUiOiAxLjAw MDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFsyXSwgImRl cGVuZGVuY3kiOiAtMSwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgeyJhdHRyaWJ1dGVzIjogWzJdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4w MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbM10sICJk ZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgeyJhdHRyaWJ1dGVzIjogWzNdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4w MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbM10sICJk ZXBlbmRlbmN5IjogLTIsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHsiYXR0cmlidXRlcyI6IFstMV0sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDAu NTAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWy0xXSwg ImRlcGVuZGVuY3kiOiAzLCAiZGVncmVlIjogMC41MDAwMDB9LAorICAgICAgICAgICAgICAgICAg ICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjog MS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbLTJd LCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAwLjUwMDAwMH0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFstMl0sICJkZXBlbmRlbmN5IjogMywgImRlZ3JlZSI6 IDAuNTAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWy0y XSwgImRlcGVuZGVuY3kiOiAtMSwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWzIsM10sICJkZXBlbmRlbmN5IjogLTEsICJkZWdy ZWUiOiAxLjAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6 IFsyLDNdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAg ICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMiwtMV0sICJkZXBlbmRlbmN5IjogMywg ImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1 dGVzIjogWzIsLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAg ICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMiwtMl0sICJkZXBlbmRlbmN5 IjogMywgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJh dHRyaWJ1dGVzIjogWzIsLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVlIjogMS4wMDAwMDB9 LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMywtMV0sICJkZXBl bmRlbmN5IjogMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgeyJhdHRyaWJ1dGVzIjogWzMsLTFdLCAiZGVwZW5kZW5jeSI6IC0yLCAiZGVncmVlIjogMS4w MDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBbMywtMl0s ICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgeyJhdHRyaWJ1dGVzIjogWzMsLTJdLCAiZGVwZW5kZW5jeSI6IC0xLCAiZGVncmVl IjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImF0dHJpYnV0ZXMiOiBb LTEsLTJdLCAiZGVwZW5kZW5jeSI6IDIsICJkZWdyZWUiOiAwLjUwMDAwMH0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFstMSwtMl0sICJkZXBlbmRlbmN5IjogMywg ImRlZ3JlZSI6IDAuNTAwMDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhdHRyaWJ1 dGVzIjogWzIsMywtMl0sICJkZXBlbmRlbmN5IjogLTEsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHsiYXR0cmlidXRlcyI6IFsyLC0xLC0yXSwgImRlcGVu ZGVuY3kiOiAzLCAiZGVncmVlIjogMS4wMDAwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAg ICB7ImF0dHJpYnV0ZXMiOiBbMywtMSwtMl0sICJkZXBlbmRlbmN5IjogMiwgImRlZ3JlZSI6IDEu MDAwMDAwfV0nOjpwZ19kZXBlbmRlbmNpZXMKKyAgICAgICk7CisKK1NFTEVDVAorICAgIHJlcGxh Y2UoZS5uX2Rpc3RpbmN0LCAgICd9LCAnLCBFJ30sXG4nKSBBUyBuX2Rpc3RpbmN0LAorICAgIHJl cGxhY2UoZS5kZXBlbmRlbmNpZXMsICd9LCAnLCBFJ30sXG4nKSBBUyBkZXBlbmRlbmNpZXMsCisg ICAgZS5tb3N0X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICBlLm1v c3RfY29tbW9uX2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNf ZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcK K0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0 ZWQgPSBmYWxzZQorXGd4CisKKy0tIGlmIGFueSBvbmUgbWN2IHBhcmFtIHNwZWNpZmllZCwgYWxs IGZvdXIgbXVzdCBiZSBzcGVjaWZpZWQgKHBhcnQgMSkKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cu cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFt ZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3Rh dF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ21vc3RfY29t bW9uX3ZhbHMnLCAne3tmb3VyLE5VTEwsMCxOVUxMfSx7b25lLCIoMSwxLjEsT05FLDAxLTAxLTIw MDEsXCJ7XCJcInhrZXlcIlwiOiBcIlwieHZhbFwiXCJ9XCIpIiwxLDJ9LHt0cmUsIigzLDMuMyxU UkUsMDMtMDMtMjAwMywpIiwtMSwzfSx7dHdvLCIoMiwyLjIsVFdPLDAyLTAyLTIwMDIsXCJbdHJ1 ZSwgNCwgXCJcInNpeFwiXCJdXCIpIiwxLDJ9fSc6OnRleHRbXQorICAgICAgKTsKKworLS0gaWYg YW55IG9uZSBtY3YgcGFyYW0gc3BlY2lmaWVkLCBhbGwgZm91ciBtdXN0IGJlIHNwZWNpZmllZCAo cGFydCAyKQorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRz KAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAg ICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVy aXRlZCcsIGZhbHNlLAorICAgICAgICAnbW9zdF9jb21tb25fdmFsX251bGxzJywgJ3t7Zix0LGYs dH0se2YsZixmLGZ9LHtmLGYsZixmfSx7ZixmLGYsZn19Jzo6Ym9vbGVhbltdCisgICAgICApOwor CistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVjaWZpZWQsIGFsbCBmb3VyIG11c3QgYmUgc3Bl Y2lmaWVkIChwYXJ0IDMpCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5k ZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0 JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAg ICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl9mcmVxcycsICd7MC4y NSwwLjI1LDAuMjUsMC4yNX0nOjpkb3VibGUgcHJlY2lzaW9uW10KKyAgICAgICk7CisKKy0tIGlm IGFueSBvbmUgbWN2IHBhcmFtIHNwZWNpZmllZCwgYWxsIGZvdXIgbXVzdCBiZSBzcGVjaWZpZWQg KHBhcnQgNCkKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0 cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAg ICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhl cml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ21vc3RfY29tbW9uX2Jhc2VfZnJlcXMnLCAnezAuMDAz OTA2MjUsMC4wMTU2MjUsMC4wMDM5MDYyNSwwLjAxNTYyNX0nOjpkb3VibGUgcHJlY2lzaW9uW10K KyAgICAgICk7CisKKy0tIG9rCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0 ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1w b3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAg ICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxzJywgJ3t7 Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAxLFwie1wiXCJ4a2V5 XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJFLDAzLTAzLTIwMDMs KSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUsIDQsIFwiXCJzaXhc IlwiXVwiKSIsMSwyfX0nOjp0ZXh0W10sCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxfbnVsbHMn LCAne3tmLHQsZix0fSx7ZixmLGYsZn0se2YsZixmLGZ9LHtmLGYsZixmfX0nOjpib29sZWFuW10s CisgICAgICAgICdtb3N0X2NvbW1vbl9mcmVxcycsICd7MC4yNSwwLjI1LDAuMjUsMC4yNX0nOjpk b3VibGUgcHJlY2lzaW9uW10sCisgICAgICAgICdtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgJ3sw LjAwMzkwNjI1LDAuMDE1NjI1LDAuMDAzOTA2MjUsMC4wMTU2MjV9Jzo6ZG91YmxlIHByZWNpc2lv bltdCisgICAgICApOworCitTRUxFQ1QKKyAgICByZXBsYWNlKGUubl9kaXN0aW5jdCwgICAnfSwg JywgRSd9LFxuJykgQVMgbl9kaXN0aW5jdCwKKyAgICByZXBsYWNlKGUuZGVwZW5kZW5jaWVzLCAn fSwgJywgRSd9LFxuJykgQVMgZGVwZW5kZW5jaWVzLAorICAgIGUubW9zdF9jb21tb25fdmFscywg ZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2NvbW1vbl9mcmVxcywgZS5tb3N0 X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitXSEVSRSBlLnN0YXRp c3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUg PSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2UKK1xneAorCitTRUxF Q1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdz dGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3Rp Y3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2Us CisgICAgICAgICdleHBycycsICd7ezAsNCwtMC43NSwiezF9IiwiezAuNX0iLCJ7LTEsMH0iLC0w LjYsTlVMTCxOVUxMLE5VTEx9LHswLjI1LDQsLTAuNSwiezJ9IiwiezAuNX0iLE5VTEwsMSxOVUxM LE5VTEwsTlVMTH19Jzo6dGV4dFtdCisgICAgICApOworCitTRUxFQ1QKKyAgICBlLmluaGVyaXRl ZCwgZS5udWxsX2ZyYWMsIGUuYXZnX3dpZHRoLCBlLm5fZGlzdGluY3QsIGUubW9zdF9jb21tb25f dmFscywKKyAgICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLmhpc3RvZ3JhbV9ib3VuZHMsIGUuY29y cmVsYXRpb24sCisgICAgZS5tb3N0X2NvbW1vbl9lbGVtcywgZS5tb3N0X2NvbW1vbl9lbGVtX2Zy ZXFzLCBlLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBl CitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5z dGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworYW5kIGUuaW5oZXJpdGVkID0gZmFs c2UKK1xneAorCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRz KAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgICAg ICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgaW5oZXJp dGVkID0+IGZhbHNlKTsKKworU0VMRUNUIENPVU5UKCopCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBl CitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5z dGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFs c2U7CisKK1NFTEVDVCBDT1VOVCgqKQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgZQorV0hF UkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlz dGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0FORCBlLmluaGVyaXRlZCA9IGZhbHNlOwor CistLQorLS0gQ29weSBzdGF0cyBmcm9tIHRlc3Rfc3RhdCB0byB0ZXN0X3N0YXRfY2xvbmUKKy0t CitTRUxFQ1QKKyAgICBlLnN0YXRpc3RpY3NfbmFtZSwKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3Rv cmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCBlLnN0 YXRpc3RpY3Nfc2NoZW1hbmFtZTo6dGV4dCwKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0 ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZS5pbmhlcml0ZWQsCisgICAg ICAgICduX2Rpc3RpbmN0JywgZS5uX2Rpc3RpbmN0LAorICAgICAgICAnZGVwZW5kZW5jaWVzJywg ZS5kZXBlbmRlbmNpZXMsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxzJywgZS5tb3N0X2NvbW1v bl92YWxzLAorICAgICAgICAnbW9zdF9jb21tb25fdmFsX251bGxzJywgZS5tb3N0X2NvbW1vbl92 YWxfbnVsbHMsCisgICAgICAgICdtb3N0X2NvbW1vbl9mcmVxcycsIGUubW9zdF9jb21tb25fZnJl cXMsCisgICAgICAgICdtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgZS5tb3N0X2NvbW1vbl9iYXNl X2ZyZXFzLAorICAgICAgICAnZXhwcnMnLCB4LmV4cHJzCisgICAgKQorRlJPTSBwZ19zdGF0c19l eHQgQVMgZQorQ1JPU1MgSk9JTiBMQVRFUkFMICgKKyAgICBTRUxFQ1QKKyAgICAgICAgYXJyYXlf YWdnKAorICAgICAgICAgICAgQVJSQVlbZWUubnVsbF9mcmFjOjp0ZXh0LCBlZS5hdmdfd2lkdGg6 OnRleHQsCisgICAgICAgICAgICAgICAgICBlZS5uX2Rpc3RpbmN0Ojp0ZXh0LCBlZS5tb3N0X2Nv bW1vbl92YWxzOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUubW9zdF9jb21tb25fZnJlcXM6 OnRleHQsIGVlLmhpc3RvZ3JhbV9ib3VuZHM6OnRleHQsCisgICAgICAgICAgICAgICAgICBlZS5j b3JyZWxhdGlvbjo6dGV4dCwgZWUubW9zdF9jb21tb25fZWxlbXM6OnRleHQsCisgICAgICAgICAg ICAgICAgICBlZS5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOjp0ZXh0LAorICAgICAgICAgICAgICAg ICAgZWUuZWxlbV9jb3VudF9oaXN0b2dyYW06OnRleHRdKQorICAgIEZST00gcGdfc3RhdHNfZXh0 X2V4cHJzIEFTIGVlCisgICAgV0hFUkUgZWUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gZS5zdGF0 aXN0aWNzX3NjaGVtYW5hbWUKKyAgICBBTkQgZWUuc3RhdGlzdGljc19uYW1lID0gZS5zdGF0aXN0 aWNzX25hbWUKKyAgICBBTkQgZWUuaW5oZXJpdGVkID0gZS5pbmhlcml0ZWQKKyAgICApIEFTIHgo ZXhwcnMpCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitB TkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JzsKKworU0VMRUNUIG8uaW5oZXJpdGVk LAorICAgICAgIG8ubl9kaXN0aW5jdCwgby5kZXBlbmRlbmNpZXMsIG8ubW9zdF9jb21tb25fdmFs cywKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbF9udWxscywgby5tb3N0X2NvbW1vbl9mcmVxcywK KyAgICAgICBvLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIG8K K1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0 YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnCitFWENFUFQKK1NFTEVDVCBuLmluaGVyaXRlZCwK KyAgICAgICBuLm5fZGlzdGluY3QsIG4uZGVwZW5kZW5jaWVzLCBuLm1vc3RfY29tbW9uX3ZhbHMs CisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG4ubW9zdF9jb21tb25fZnJlcXMsCisg ICAgICAgbi5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBuCitX SEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0 aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJzsKKworU0VMRUNUIG4uaW5oZXJpdGVkLAor ICAgICAgIG4ubl9kaXN0aW5jdCwgbi5kZXBlbmRlbmNpZXMsIG4ubW9zdF9jb21tb25fdmFscywK KyAgICAgICBuLm1vc3RfY29tbW9uX3ZhbF9udWxscywgbi5tb3N0X2NvbW1vbl9mcmVxcywKKyAg ICAgICBuLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIG4KK1dI RVJFIG4uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBuLnN0YXRp c3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitFWENFUFQKK1NFTEVDVCBvLmluaGVyaXRl ZCwKKyAgICAgICBvLm5fZGlzdGluY3QsIG8uZGVwZW5kZW5jaWVzLCBvLm1vc3RfY29tbW9uX3Zh bHMsCisgICAgICAgby5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG8ubW9zdF9jb21tb25fZnJlcXMs CisgICAgICAgby5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBv CitXSEVSRSBvLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgby5z dGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JzsKKworU0VMRUNUIG8uaW5oZXJpdGVkLAorICAg ICAgIG8ubnVsbF9mcmFjLCBvLmF2Z193aWR0aCwgby5uX2Rpc3RpbmN0LAorICAgICAgIG8ubW9z dF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9j b21tb25fZnJlcXMsCisgICAgICAgby5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3Jh bV9ib3VuZHMsCisgICAgICAgby5jb3JyZWxhdGlvbiwKKyAgICAgICBvLm1vc3RfY29tbW9uX2Vs ZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG8ubW9zdF9jb21tb25fZWxl bV9mcmVxcywgby5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMg QVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5E IG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCcKK0VYQ0VQVAorU0VMRUNUIG4uaW5oZXJp dGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193aWR0aCwgbi5uX2Rpc3RpbmN0LAorICAg ICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAg IG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFT IGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3JyZWxhdGlvbiwKKyAgICAgICBuLm1vc3Rf Y29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG4ubW9zdF9j b21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19l eHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1w b3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZSc7CisKK1NFTEVD VCBuLmluaGVyaXRlZCwKKyAgICAgICBuLm51bGxfZnJhYywgbi5hdmdfd2lkdGgsIG4ubl9kaXN0 aW5jdCwKKyAgICAgICBuLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMgbW9zdF9jb21tb25fdmFs cywKKyAgICAgICBuLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG4uaGlzdG9ncmFtX2JvdW5k czo6dGV4dCBBUyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAgIG4uY29ycmVsYXRpb24sCisgICAg ICAgbi5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0X2NvbW1vbl9lbGVtcywKKyAgICAg ICBuLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIG4uZWxlbV9jb3VudF9oaXN0b2dyYW0KK0ZST00g cGdfc3RhdHNfZXh0X2V4cHJzIEFTIG4KK1dIRVJFIG4uc3RhdGlzdGljc19zY2hlbWFuYW1lID0g J3N0YXRzX2ltcG9ydCcKK0FORCBuLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUn CitFWENFUFQKK1NFTEVDVCBvLmluaGVyaXRlZCwKKyAgICAgICBvLm51bGxfZnJhYywgby5hdmdf d2lkdGgsIG8ubl9kaXN0aW5jdCwKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMg bW9zdF9jb21tb25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG8u aGlzdG9ncmFtX2JvdW5kczo6dGV4dCBBUyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAgIG8uY29y cmVsYXRpb24sCisgICAgICAgby5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0X2NvbW1v bl9lbGVtcywKKyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIG8uZWxlbV9jb3VudF9o aXN0b2dyYW0KK0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIG8KK1dIRVJFIG8uc3RhdGlzdGlj c19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0 ZXN0X3N0YXQnOworCiBEUk9QIFNDSEVNQSBzdGF0c19pbXBvcnQgQ0FTQ0FERTsKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtYWRtaW4uc2dtbAppbmRleCAxYjQ2NWJjOGJhNy4uNTc0ZDRhMzVhNjQgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv ZnVuYy9mdW5jLWFkbWluLnNnbWwKQEAgLTIxNjcsNiArMjE2NywxMDQgQEAgU0VMRUNUIHBnX3Jl c3RvcmVfYXR0cmlidXRlX3N0YXRzKAogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9lbnRyeT4K ICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJs ZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJt PgorICAgICAgICAgPHByaW1hcnk+cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0czwvcHJpbWFyeT4K KyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19yZXN0b3JlX2V4dGVu ZGVkX3N0YXRzPC9mdW5jdGlvbj4gKAorICAgICAgICA8bGl0ZXJhbD5WQVJJQURJQzwvbGl0ZXJh bD4gPHBhcmFtZXRlcj5rd2FyZ3M8L3BhcmFtZXRlcj4gPHR5cGU+ImFueSI8L3R5cGU+ICkKKyAg ICAgICAgPHJldHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVlPgorICAgICAgICA8L3BhcmE+ CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQ3JlYXRlcyBvciB1cGRhdGVzIHN0YXRpc3RpY3Mg Zm9yIHN0YXRpc3RpY3Mgb2JqZWN0cy4gIE9yZGluYXJpbHksCisgICAgICAgICB0aGVzZSBzdGF0 aXN0aWNzIGFyZSBjb2xsZWN0ZWQgYXV0b21hdGljYWxseSBvciB1cGRhdGVkIGFzIGEgcGFydCBv ZgorICAgICAgICAgPHhyZWYgbGlua2VuZD0ic3FsLXZhY3V1bSIvPiBvciA8eHJlZiBsaW5rZW5k PSJzcWwtYW5hbHl6ZSIvPiwgc28KKyAgICAgICAgIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBjYWxs IHRoaXMgZnVuY3Rpb24uICBIb3dldmVyLCBpdCBpcyB1c2VmdWwKKyAgICAgICAgIGFmdGVyIGEg cmVzdG9yZSB0byBlbmFibGUgdGhlIG9wdGltaXplciB0byBjaG9vc2UgYmV0dGVyIHBsYW5zIGlm CisgICAgICAgICA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBoYXMgbm90IGJlZW4gcnVuIHll dC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSB0cmFja2Vk IHN0YXRpc3RpY3MgbWF5IGNoYW5nZSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiwgc28KKyAgICAg ICAgIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIHBhaXJzIG9mIDxyZXBsYWNlYWJsZT5hcmduYW1l PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgIGFuZCA8cmVwbGFjZWFibGU+YXJndmFsdWU8L3JlcGxh Y2VhYmxlPiBpbiB0aGUgZm9ybToKKzxwcm9ncmFtbGlzdGluZz4KKyBTRUxFQ1QgcGdfcmVzdG9y ZV9leHRlbmRlZF9zdGF0cygKKyAgICAnPHJlcGxhY2VhYmxlPmFyZzFuYW1lPC9yZXBsYWNlYWJs ZT4nLCAnPHJlcGxhY2VhYmxlPmFyZzF2YWx1ZTwvcmVwbGFjZWFibGU+Jzo6PHJlcGxhY2VhYmxl PmFyZzF0eXBlPC9yZXBsYWNlYWJsZT4sCisgICAgJzxyZXBsYWNlYWJsZT5hcmcybmFtZTwvcmVw bGFjZWFibGU+JywgJzxyZXBsYWNlYWJsZT5hcmcydmFsdWU8L3JlcGxhY2VhYmxlPic6OjxyZXBs YWNlYWJsZT5hcmcydHlwZTwvcmVwbGFjZWFibGU+LAorICAgICc8cmVwbGFjZWFibGU+YXJnM25h bWU8L3JlcGxhY2VhYmxlPicsICc8cmVwbGFjZWFibGU+YXJnM3ZhbHVlPC9yZXBsYWNlYWJsZT4n Ojo8cmVwbGFjZWFibGU+YXJnM3R5cGU8L3JlcGxhY2VhYmxlPik7Cis8L3Byb2dyYW1saXN0aW5n PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgRm9yIGV4YW1wbGUs IHRvIHNldCB0aGUgPHN0cnVjdGZpZWxkPm5fZGlzdGluY3Q8L3N0cnVjdGZpZWxkPiwKKyAgICAg ICAgIDxzdHJ1Y3RmaWVsZD5kZXBlbmRlbmNpZXM8L3N0cnVjdGZpZWxkPiwgYW5kIDxzdHJ1Y3Rm aWVsZD5leHByczwvc3RydWN0ZmllbGQ+CisgICAgICAgICB2YWx1ZXMgZm9yIHRoZSBzdGF0aXN0 aWNzIG9iamVjdCA8c3RydWN0bmFtZT5teXNjaGVtYS5teXN0YXRzb2JqPC9zdHJ1Y3RuYW1lPjoK Kzxwcm9ncmFtbGlzdGluZz4KKyBTRUxFQ1QgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAg ICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ215c2NoZW1hJzo6bmFtZSwKKyAgICAnc3RhdGlz dGljc19uYW1lJywgICAgICAgJ215dGFibGUnOjpuYW1lLAorICAgICdpbmhlcml0ZWQnLCAgICAg ICAgICAgICBmYWxzZSwKKyAgICAnbl9kaXN0aW5jdCcsICAgICAgICAgICAgJ3siMiwgMyI6IDQs ICIyLCAtMSI6IDQsICIyLCAtMiI6IDQsICIzLCAtMSI6IDQsICIzLCAtMiI6IDR9Jzo6cGdfbmRp c3RpbmN0LAorICAgICdkZXBlbmRlbmNpZXMnLCAgICAgICAgICAneyIyID0+IDEiOiAxLjAwMDAw MCwgIjIgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4gLTIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRl bmNpZXMKKyAgICAnZXhwcnMnLCAgICAgICAgICAgICAgICAgJ3t7MCw0LC0wLjc1LCJ7MX0iLCJ7 MC41fSIsInstMSwwfSIsLTAuNixOVUxMLE5VTEwsTlVMTH0sezAuMjUsNCwtMC41LCJ7Mn0iLCJ7 MC41fSIsTlVMTCwxLE5VTEwsTlVMTCxOVUxMfX0nOjp0ZXh0W10pOworPC9wcm9ncmFtbGlzdGlu Zz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSByZXF1aXJl ZCBhcmd1bWVudHMgYXJlIDxsaXRlcmFsPnN0YXRpc3RpY3Nfc2NoZW1hbmFtZTwvbGl0ZXJhbD4g d2l0aCBhIHZhbHVlCisgICAgICAgICBvZiB0eXBlIDx0eXBlPm5hbWU8L3R5cGU+LCB3aGljaCBz cGVjaWZpZXMgdGhlIHN0YXRpc3RpY3Mgb2JqZWN0J3Mgc2NoZW1hOworICAgICAgICAgPGxpdGVy YWw+c3RhdGlzdGljc19uYW1lPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgb2YgdHlwZSA8dHlwZT5u YW1lPC90eXBlPiwgd2hpY2ggc3BlY2lmaWVzCisgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgc3Rh dGlzdGljcyBvYmplY3Q7IGFuZCA8bGl0ZXJhbD5pbmhlcml0ZWQ8L2xpdGVyYWw+LCB3aGljaAor ICAgICAgICAgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHN0YXRpc3RpY3MgaW5jbHVkZSB2YWx1ZXMg ZnJvbSBjaGlsZCB0YWJsZXMuCisgICAgICAgICBPdGhlciBhcmd1bWVudHMgYXJlIHRoZSBuYW1l cyBhbmQgdmFsdWVzIG9mIHN0YXRpc3RpY3MgY29ycmVzcG9uZGluZworICAgICAgICAgdG8gY29s dW1ucyBpbiA8bGluayBsaW5rZW5kPSJ2aWV3LXBnLXN0YXRzLWV4dCI+PHN0cnVjdG5hbWU+cGdf c3RhdHNfZXh0PC9zdHJ1Y3RuYW1lPgorICAgICAgICAgPC9saW5rPi4gVG8gYWNjZXB0IHN0YXRp c3RpY3MgZm9yIGFueSBleHByZXNzaW9ucyBpbiB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmpl Y3QsIHRoZQorICAgICAgICAgcGFyYW1ldGVyIDxsaXRlcmFsPmV4cHJzPC9saXRlcmFsPiB3aXRo IGEgdHlwZSA8dHlwZT50ZXh0W108L3R5cGU+IGlzIGF2YWlsYWJsZSwgdGhlIGFycmF5CisgICAg ICAgICBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCB3aXRoIGFuIG91dGVyIGFycmF5IGluIGxlbmd0 aCBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluCisgICAgICAgICB0aGUgb2Jq ZWN0LCBhbmQgdGhlIGlubmVyIGFycmF5IGVsZW1lbnRzIGZvciBlYWNoIG9mIHRoZSBzdGF0aXN0 aWNhbCBjb2x1bW5zIGluIDxsaW5rCisgICAgICAgICBsaW5rZW5kPSJ2aWV3LXBnLXN0YXRzLWV4 dC1leHBycyI+PHN0cnVjdG5hbWU+cGdfc3RhdHNfZXh0X2V4cHJzPC9zdHJ1Y3RuYW1lPjwvbGlu az4sIHNvbWUKKyAgICAgICAgIG9mIHdoaWNoIGFyZSB0aGVtc2VsdmVzIGFycmF5cy4KKyAgICAg ICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhpcyBm dW5jdGlvbiBhY2NlcHRzIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgIDxsaXRlcmFsPnZlcnNpb248 L2xpdGVyYWw+IG9mIHR5cGUgPHR5cGU+aW50ZWdlcjwvdHlwZT4sIHdoaWNoCisgICAgICAgICBz cGVjaWZpZXMgdGhlIHNlcnZlciB2ZXJzaW9uIGZyb20gd2hpY2ggdGhlIHN0YXRpc3RpY3Mgb3Jp Z2luYXRlZC4KKyAgICAgICAgIFRoaXMgaXMgYW50aWNpcGF0ZWQgdG8gYmUgaGVscGZ1bCBpbiBw b3J0aW5nIHN0YXRpc3RpY3MgZnJvbSBvbGRlcgorICAgICAgICAgdmVyc2lvbnMgb2YgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAg ICA8cGFyYT4KKyAgICAgICAgIE1pbm9yIGVycm9ycyBhcmUgcmVwb3J0ZWQgYXMgYSA8bGl0ZXJh bD5XQVJOSU5HPC9saXRlcmFsPiBhbmQKKyAgICAgICAgIGlnbm9yZWQsIGFuZCByZW1haW5pbmcg c3RhdGlzdGljcyB3aWxsIHN0aWxsIGJlIHJlc3RvcmVkLiBJZiBhbGwKKyAgICAgICAgIHNwZWNp ZmllZCBzdGF0aXN0aWNzIGFyZSBzdWNjZXNzZnVsbHkgcmVzdG9yZWQsIHJldHVybnMKKyAgICAg ICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCBvdGhlcndpc2UgPGxpdGVyYWw+ZmFsc2U8L2xp dGVyYWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIGNh bGxlciBtdXN0IGhhdmUgdGhlIDxsaXRlcmFsPk1BSU5UQUlOPC9saXRlcmFsPiBwcml2aWxlZ2Ug b24gdGhlCisgICAgICAgICB0YWJsZSBvciBiZSB0aGUgb3duZXIgb2YgdGhlIGRhdGFiYXNlLgor ICAgICAgICA8L3BhcmE+CisgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJv dz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+CisgICAgICAgIDxwYXJh IHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAg PHByaW1hcnk+cGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHM8L3ByaW1hcnk+CisgICAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgICAgIDxmdW5jdGlvbj5wZ19jbGVhcl9leHRlbmRlZF9zdGF0czwvZnVu Y3Rpb24+ICgKKyAgICAgICAgIDxwYXJhbWV0ZXI+c3RhdGlzdGljc19zY2hlbWFuYW1lPC9wYXJh bWV0ZXI+IDx0eXBlPm5hbWU8L3R5cGU+LAorICAgICAgICAgPHBhcmFtZXRlcj5zdGF0aXN0aWNz X25hbWU8L3BhcmFtZXRlcj4gPHR5cGU+bmFtZTwvdHlwZT4sCisgICAgICAgICA8cGFyYW1ldGVy PmluaGVyaXRlZDwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPiApCisgICAgICAgICA8 cmV0dXJudmFsdWU+dm9pZDwvcmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBDbGVhcnMgc3RhdGlzdGljcyBmb3IgdGhlIGdpdmVuIHN0YXRpc3Rp Y3Mgb2JqZWN0LCBhcworICAgICAgICAgdGhvdWdoIHRoZSBvYmplY3Qgd2FzIG5ld2x5IGNyZWF0 ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgY2FsbGVy IG11c3QgaGF2ZSB0aGUgPGxpdGVyYWw+TUFJTlRBSU48L2xpdGVyYWw+IHByaXZpbGVnZSBvbgor ICAgICAgICAgdGhlIHRhYmxlIG9yIGJlIHRoZSBvd25lciBvZiB0aGUgZGF0YWJhc2UuCisgICAg ICAgIDwvcGFyYT4KKyAgICAgICA8L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJvZHk+ CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgotLSAKMi41Mi4wCgo= --0000000000009961d60645287624 Content-Type: text/x-patch; charset="US-ASCII"; name="v20-0003-Include-Extended-Statistics-in-pg_dump.patch" Content-Disposition: attachment; filename="v20-0003-Include-Extended-Statistics-in-pg_dump.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mis1w9yx2 RnJvbSBjZmQwNGZiNTlhODBmNDNlOTk5YjI1NWRmMzI5NTJjMDY4OWY2MjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCA1IE5vdiAyMDI1IDAxOjEzOjA0IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 MjAgMy8zXSBJbmNsdWRlIEV4dGVuZGVkIFN0YXRpc3RpY3MgaW4gcGdfZHVtcC4KCkluY29ycG9y YXRlIHRoZSBuZXcgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygpIGZ1bmN0aW9uIGludG8gcGdf ZHVtcC4KVGhpcyBkZXRlY3RzIHRoZSBleGlzdGVuY2Ugb2YgZXh0ZW5kZWQgc3RhdGlzdGljcyBz dGF0aXN0aWNzIChpLmUuCnBnX3N0YXRpc3RpY19leHRfZGF0YSByb3dzKS4KClRoaXMgaGFuZGxl cyBtYW55IG9mIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBoYXBwZW5lZCB0byBleHRlbmRlZApzdGF0 aXN0aWMgc3RhdGlzdGljcyBvdmVyIHRoZSB2YXJpb3VzIHZlcnNpb25zLCBpbmNsdWRpbmc6Cgoq IEZvcm1hdCBjaGFuZ2UgZm9yIHBnX25kaXN0aW5jdCBhbmQgcGdfZGVwZW5kZW5jaWVzIGluIGN1 cnJlbnQKICBkZXZlbG9wbWVudCB2ZXJzaW9uLiBFYXJsaWVyIHZlcnNpb25zIGhhdmUgdGhlIGZv cm1hdCB0cmFuc2xhdGVkIHZpYQogIHRoZSBwZ19kdW1wIFNRTCBzdGF0ZW1lbnQuCgoqIEluaGVy aXRlZCBleHRlbmRlZCBzdGF0aXN0aWNzIHdlcmUgaW50cm9kdWNlZCBpbiB2MTUuCgoqIEV4cHJl c3Npb25zIHdlcmUgaW50cm9kdWNlZCB0byBleHRlbmRlZCBzdGF0aXN0aWNzIGluIHYxNC4KCiog TUNWIGV4dGVuZGVkIHN0YXRpc3RpY3Mgd2VyZSBpbnRyb2R1Y2VkIGluIHYxMy4KCiogcGdfc3Rh dGlzdGljX2V4dF9kYXRhIGFuZCBwZ19zdGF0c19leHQgaW50cm9kdWNlZCBpbiB2MTIsIHByaW9y IHRvCiAgdGhhdCBuZHN0aW5jdCBhbmQgZGVwZGVuZGVuY2llcyBkYXRhICh0aGUgb25seSBraW5k IG9mIHN0YXRzIHRoYXQKICBleGlzdGVkIHdlcmUgZGlyZWN0bHkgb24gcGdfc3RhdGlzdGljX2V4 dC4KCiogRXh0ZW5kZWQgU3RhdGlzdGljcyB3ZXJlIGludHJvZHVjZWQgaW4gdjEwLCBzbyB0aGVy ZSBpcyBubyBzdXBwb3J0IGZvcgogIHByaW9yIHZlcnNpb25zIG5lY2Vzc2FyeS4KLS0tCiBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgICAzICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j ICAgICAgICAgICAgfCAyNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgfCAgMjggKysrCiA0IGZpbGVzIGNoYW5nZWQsIDI4 NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGQ5MDQx ZGFkNzIwLi4yZjhkOTc5OWMzMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtNjgsNiArNjgsNyBAQCBl bnVtIF9kdW1wUHJlcGFyZWRRdWVyaWVzCiAJUFJFUFFVRVJZX0RVTVBDT01QT1NJVEVUWVBFLAog CVBSRVBRVUVSWV9EVU1QRE9NQUlOLAogCVBSRVBRVUVSWV9EVU1QRU5VTVRZUEUsCisJUFJFUFFV RVJZX0RVTVBFWFRTVEFUU09CSlNUQVRTLAogCVBSRVBRVUVSWV9EVU1QRlVOQywKIAlQUkVQUVVF UllfRFVNUE9QUiwKIAlQUkVQUVVFUllfRFVNUFJBTkdFVFlQRSwKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYwppbmRleCBjODRiMDE3ZjIxYi4uYWI5Y2I3NWE4NmYgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTMwMDgsNyArMzAwOCw4IEBAIF90b2NFbnRyeVJl cXVpcmVkKFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUg KkFIKQogCQlzdHJjbXAodGUtPmRlc2MsICJTRUFSQ0hQQVRIIikgPT0gMCkKIAkJcmV0dXJuIFJF UV9TUEVDSUFMOwogCi0JaWYgKHN0cmNtcCh0ZS0+ZGVzYywgIlNUQVRJU1RJQ1MgREFUQSIpID09 IDApCisJaWYgKChzdHJjbXAodGUtPmRlc2MsICJTVEFUSVNUSUNTIERBVEEiKSA9PSAwKSB8fAor CQkoc3RyY21wKHRlLT5kZXNjLCAiRVhURU5ERUQgU1RBVElTVElDUyBEQVRBIikgPT0gMCkpCiAJ ewogCQlpZiAoIXJvcHQtPmR1bXBTdGF0aXN0aWNzKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpp bmRleCAyNDQ1MDg1ZGJiZC4uMjA3ZjQ3Y2M0OTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMzI0LDYgKzMy NCw3IEBAIHN0YXRpYyB2b2lkIGR1bXBTZXF1ZW5jZURhdGEoQXJjaGl2ZSAqZm91dCwgY29uc3Qg VGFibGVEYXRhSW5mbyAqdGRpbmZvKTsKIHN0YXRpYyB2b2lkIGR1bXBJbmRleChBcmNoaXZlICpm b3V0LCBjb25zdCBJbmR4SW5mbyAqaW5keGluZm8pOwogc3RhdGljIHZvaWQgZHVtcEluZGV4QXR0 YWNoKEFyY2hpdmUgKmZvdXQsIGNvbnN0IEluZGV4QXR0YWNoSW5mbyAqYXR0YWNoaW5mbyk7CiBz dGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljc0V4dChBcmNoaXZlICpmb3V0LCBjb25zdCBTdGF0c0V4 dEluZm8gKnN0YXRzZXh0aW5mbyk7CitzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljc0V4dFN0YXRz KEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN0YXRzRXh0SW5mbyAqc3RhdHNleHRpbmZvKTsKIHN0YXRp YyB2b2lkIGR1bXBDb25zdHJhaW50KEFyY2hpdmUgKmZvdXQsIGNvbnN0IENvbnN0cmFpbnRJbmZv ICpjb25pbmZvKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZUNvbnN0cmFpbnRDb21tZW50KEFyY2hp dmUgKmZvdXQsIGNvbnN0IENvbnN0cmFpbnRJbmZvICpjb25pbmZvKTsKIHN0YXRpYyB2b2lkIGR1 bXBUU1BhcnNlcihBcmNoaXZlICpmb3V0LCBjb25zdCBUU1BhcnNlckluZm8gKnByc2luZm8pOwpA QCAtODI1OCw2ICs4MjU5LDkgQEAgZ2V0RXh0ZW5kZWRTdGF0aXN0aWNzKEFyY2hpdmUgKmZvdXQp CiAKIAkJLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVjdER1 bXBhYmxlU3RhdGlzdGljc09iamVjdCgmKHN0YXRzZXh0aW5mb1tpXSksIGZvdXQpOworCisJCWlm IChmb3V0LT5kb3B0LT5kdW1wU3RhdGlzdGljcykKKwkJCXN0YXRzZXh0aW5mb1tpXS5kb2JqLmNv bXBvbmVudHMgfD0gRFVNUF9DT01QT05FTlRfU1RBVElTVElDUzsKIAl9CiAKIAlQUWNsZWFyKHJl cyk7CkBAIC0xMTcxMiw2ICsxMTcxNiw3IEBAIGR1bXBEdW1wYWJsZU9iamVjdChBcmNoaXZlICpm b3V0LCBEdW1wYWJsZU9iamVjdCAqZG9iaikKIAkJCWJyZWFrOwogCQljYXNlIERPX1NUQVRTRVhU OgogCQkJZHVtcFN0YXRpc3RpY3NFeHQoZm91dCwgKGNvbnN0IFN0YXRzRXh0SW5mbyAqKSBkb2Jq KTsKKwkJCWR1bXBTdGF0aXN0aWNzRXh0U3RhdHMoZm91dCwgKGNvbnN0IFN0YXRzRXh0SW5mbyAq KSBkb2JqKTsKIAkJCWJyZWFrOwogCQljYXNlIERPX1JFRlJFU0hfTUFUVklFVzoKIAkJCXJlZnJl c2hNYXRWaWV3RGF0YShmb3V0LCAoY29uc3QgVGFibGVEYXRhSW5mbyAqKSBkb2JqKTsKQEAgLTE4 NTE0LDYgKzE4NTE5LDI1NSBAQCBkdW1wU3RhdGlzdGljc0V4dChBcmNoaXZlICpmb3V0LCBjb25z dCBTdGF0c0V4dEluZm8gKnN0YXRzZXh0aW5mbykKIAlmcmVlKHFzdGF0c2V4dG5hbWUpOwogfQog CisvKgorICogZHVtcFN0YXRpc3RpY3NFeHRTdGF0cworICoJICB3cml0ZSBvdXQgdG8gZm91dCB0 aGUgc3RhdHMgZm9yIGFuIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0CisgKi8KK3N0YXRpYyB2 b2lkCitkdW1wU3RhdGlzdGljc0V4dFN0YXRzKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN0YXRzRXh0 SW5mbyAqc3RhdHNleHRpbmZvKQoreworCUR1bXBPcHRpb25zICpkb3B0ID0gZm91dC0+ZG9wdDsK KwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisJaW50CQkJbnN0YXRzOwor CisJLyogRG8gbm90aGluZyBpZiBub3QgZHVtcGluZyBzdGF0aXN0aWNzICovCisJaWYgKCFkb3B0 LT5kdW1wU3RhdGlzdGljcykKKwkJcmV0dXJuOworCisJaWYgKCFmb3V0LT5pc19wcmVwYXJlZFtQ UkVQUVVFUllfRFVNUEVYVFNUQVRTT0JKU1RBVFNdKQorCXsKKwkJUFFFeHBCdWZmZXIgcHEgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCS8qCisJCSAqIFNldCB1cCBxdWVyeSBmb3IgY29uc3Ry YWludC1zcGVjaWZpYyBkZXRhaWxzLgorCQkgKgorCQkgKiAxOSs6IHF1ZXJ5IHBnX3N0YXRzX2V4 dCBhbmQgcGdfc3RhdHNfZXh0X2V4cHJzIGFzLWlzIDE1LTE4OiBxdWVyeQorCQkgKiBwZ19zdGF0 c19leHQgdHJhbnNsYXRpbmcgdGhlIG5kaXN0aW5jdCBhbmQgZGVwZW5kZW5jaWVzLCAxNDoKKwkJ ICogaW5oZXJpdGVkIGlzIGFsd2F5cyBOVUxMIDEyLTEzOiBubyBwZ19zdGF0c19leHRfZXhwcnMg MTAtMTE6IG5vCisJCSAqIHBnX3N0YXRzX2V4dCwgam9pbiBwZ19zdGF0aXN0aWNfZXh0IGFuZCBw Z19uYW1lc3BhY2UKKwkJICovCisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsCisJCQkJCQkJ ICJQUkVQQVJFIGdldEV4dFN0YXRzU3RhdHMocGdfY2F0YWxvZy5uYW1lLCBwZ19jYXRhbG9nLm5h bWUpIEFTXG4iCisJCQkJCQkJICJTRUxFQ1QgIik7CisKKwkJLyoKKwkJICogVmVyc2lvbnMgMTUr IGhhdmUgaW5oZXJpdGVkIHN0YXRzLgorCQkgKgorCQkgKiBDcmVhdGUgdGhpcyBjb2x1bW4gaW4g YWxsIHZlcnNpb24gYmVjYXVzZSB3ZSBuZWVkIHRvIG9yZGVyIGJ5IGl0CisJCSAqIGxhdGVyLgor CQkgKi8KKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocHEsICJlLmluaGVyaXRlZCwgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHBxLCAiZmFsc2UgQVMgaW5oZXJpdGVkLCAiKTsKKworCQkvKgorCQkgKiBUaGUg bmRpc3Rpbm5jdCBhbmQgZGVwZGVuZGVuY2llcyBmb3JtYXRzIGNoYW5nZWQgaW4gdjE5LCBzbwor CQkgKiBldmVyeXRoaW5nIGJlZm9yZSB0aGF0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQuCisJCSAq CisJCSAqIFRoZSBuZGlzdGluY3QgdHJhbnNsYXRpb24gY29udmVydHMgdGhpczoKKwkJICoKKwkJ ICogeyIzLCA0IjogMTEsICIzLCA2IjogMTEsICI0LCA2IjogMTEsICIzLCA0LCA2IjogMTF9CisJ CSAqCisJCSAqIHRvIHRoaXM6CisJCSAqCisJCSAqIFsgeyJhdHRyaWJ1dGVzIjogWzMsNF0sICJu ZGlzdGluY3QiOiAxMX0sIHsiYXR0cmlidXRlcyI6IFszLDZdLAorCQkgKiAibmRpc3RpbmN0Ijog MTF9LCB7ImF0dHJpYnV0ZXMiOiBbNCw2XSwgIm5kaXN0aW5jdCI6IDExfSwKKwkJICogeyJhdHRy aWJ1dGVzIjogWzMsNCw2XSwgIm5kaXN0aW5jdCI6IDExfSBdCisJCSAqCisJCSAqIGFuZCB0aGUg ZGVwZW5kZW5jaWVzIHRyYW5zbGF0aW9uIGNvbnZlcnRzIHRoaXM6CisJCSAqCisJCSAqIHsiMyA9 PiA0IjogMS4wMDAwMDAsICIzID0+IDYiOiAxLjAwMDAwMCwgIjQgPT4gNiI6IDEuMDAwMDAwLCAi MywgNAorCQkgKiA9PiA2IjogMS4wMDAwMDAsICIzLCA2ID0+IDQiOiAxLjAwMDAwMH0KKwkJICoK KwkJICogdG8gdGhpczoKKwkJICoKKwkJICogWyB7ImF0dHJpYnV0ZXMiOiBbM10sICJkZXBlbmRl bmN5IjogNCwgImRlZ3JlZSI6IDEuMDAwMDAwfSwKKwkJICogeyJhdHRyaWJ1dGVzIjogWzNdLCAi ZGVwZW5kZW5jeSI6IDYsICJkZWdyZWUiOiAxLjAwMDAwMH0sCisJCSAqIHsiYXR0cmlidXRlcyI6 IFs0XSwgImRlcGVuZGVuY3kiOiA2LCAiZGVncmVlIjogMS4wMDAwMDB9LAorCQkgKiB7ImF0dHJp YnV0ZXMiOiBbMyw0XSwgImRlcGVuZGVuY3kiOiA2LCAiZGVncmVlIjogMS4wMDAwMDB9LAorCQkg KiB7ImF0dHJpYnV0ZXMiOiBbMyw2XSwgImRlcGVuZGVuY3kiOiA0LCAiZGVncmVlIjogMS4wMDAw MDB9IF0KKwkJICovCisJCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE5MDAwMCkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHBxLCAiZS5uX2Rpc3RpbmN0LCBlLmRlcGVuZGVuY2llcywgIik7 CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBxLAorCQkJCQkJCQkgIiggIgorCQkJ CQkJCQkgIlNFTEVDVCBqc29uX2FnZyggIgorCQkJCQkJCQkgIiAgICBqc29uX2J1aWxkX29iamVj dCggIgorCQkJCQkJCQkgIiAgICAgICAgJ2F0dHJpYnV0ZXMnLCAiCisJCQkJCQkJCSAiICAgICAg ICAgc3RyaW5nX3RvX2FycmF5KGt2LmtleSwgJywgJyk6OmludGVnZXJbXSwgIgorCQkJCQkJCQkg IiAgICAgICAgJ25kaXN0aW5jdCcsICIKKwkJCQkJCQkJICIgICAgICAgIGt2LnZhbHVlOjpiaWdp bnQgKSkgIgorCQkJCQkJCQkgIkZST00ganNvbl9lYWNoX3RleHQoZS5uX2Rpc3RpbmN0Ojp0ZXh0 Ojpqc29uKSBBUyBrdiIKKwkJCQkJCQkJICIpIEFTIG5fZGlzdGluY3QsICIKKwkJCQkJCQkJICIo ICIKKwkJCQkJCQkJICJTRUxFQ1QganNvbl9hZ2coICIKKwkJCQkJCQkJICIgICAganNvbl9idWls ZF9vYmplY3QoICIKKwkJCQkJCQkJICIgICAgICAgICdhdHRyaWJ1dGVzJywgIgorCQkJCQkJCQkg IiAgICAgICAgc3RyaW5nX3RvX2FycmF5KCAiCisJCQkJCQkJCSAiICAgICAgICAgICAgc3BsaXRf cGFydChrdi5rZXksICcgPT4gJywgMSksICIKKwkJCQkJCQkJICIgICAgICAgICAgICAnLCAnKTo6 aW50ZWdlcltdLCAiCisJCQkJCQkJCSAiICAgICAgICAnZGVwZW5kZW5jeScsICIKKwkJCQkJCQkJ ICIgICAgICAgIHNwbGl0X3BhcnQoa3Yua2V5LCAnID0+ICcsIDIpOjppbnRlZ2VyLCAiCisJCQkJ CQkJCSAiICAgICAgICAnZGVncmVlJywgIgorCQkJCQkJCQkgIiAgICAgICAga3YudmFsdWU6OmRv dWJsZSBwcmVjaXNpb24gKSkgIgorCQkJCQkJCQkgIkZST00ganNvbl9lYWNoX3RleHQoZS5kZXBl bmRlbmNpZXM6OnRleHQ6Ompzb24pIEFTIGt2ICIKKwkJCQkJCQkJICIpIEFTIGRlcGVuZGVuY2ll cywgIik7CisKKwkJLyogTUNWIHdhcyBpbnRyb2R1Y2VkIHYxMyAqLworCQlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA+PSAxMzAwMDApCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwcSwKKwkJCQkJ CQkJICJlLm1vc3RfY29tbW9uX3ZhbHMsIGUubW9zdF9jb21tb25fdmFsX251bGxzLCAiCisJCQkJ CQkJCSAiZS5tb3N0X2NvbW1vbl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzLCAiKTsK KwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsCisJCQkJCQkJCSAiTlVMTCBBUyBt b3N0X2NvbW1vbl92YWxzLCBOVUxMIEFTIG1vc3RfY29tbW9uX3ZhbF9udWxscywgIgorCQkJCQkJ CQkgIk5VTEwgQVMgbW9zdF9jb21tb25fZnJlcXMsIE5VTEwgQVMgbW9zdF9jb21tb25fYmFzZV9m cmVxcywgIik7CisKKwkJLyogRXhwcmVzc2lvbnMgd2VyZSBpbnRyb2R1Y2VkIGluIHYxNCAqLwor CQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCisJCXsKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHBxLAorCQkJCQkJCQkgIiggIgorCQkJCQkJCQkgIlNFTEVDVCBhcnJheV9hZ2co ICIKKwkJCQkJCQkJICIgICAgQVJSQVlbZWUubnVsbF9mcmFjOjp0ZXh0LCBlZS5hdmdfd2lkdGg6 OnRleHQsICIKKwkJCQkJCQkJICIgICAgICAgICAgZWUubl9kaXN0aW5jdDo6dGV4dCwgZWUubW9z dF9jb21tb25fdmFsczo6dGV4dCwgIgorCQkJCQkJCQkgIiAgICAgICAgICBlZS5tb3N0X2NvbW1v bl9mcmVxczo6dGV4dCwgZWUuaGlzdG9ncmFtX2JvdW5kczo6dGV4dCwgIgorCQkJCQkJCQkgIiAg ICAgICAgICBlZS5jb3JyZWxhdGlvbjo6dGV4dCwgZWUubW9zdF9jb21tb25fZWxlbXM6OnRleHQs ICIKKwkJCQkJCQkJICIgICAgICAgICAgZWUubW9zdF9jb21tb25fZWxlbV9mcmVxczo6dGV4dCwg IgorCQkJCQkJCQkgIiAgICAgICAgICBlZS5lbGVtX2NvdW50X2hpc3RvZ3JhbTo6dGV4dF0pICIK KwkJCQkJCQkJICJGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBlZSAiCisJCQkJCQkJCSAiV0hF UkUgZWUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJDEgIgorCQkJCQkJCQkgIkFORCBlZS5zdGF0 aXN0aWNzX25hbWUgPSAkMiAiKTsKKworCQkJLyogSW5oZXJpdGVkIGV4cHJlc3Npb25zIGludHJv ZHVjZWQgaW4gdjE1ICovCisJCQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCisJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsICJBTkQgZWUuaW5oZXJpdGVkID0gZS5pbmhlcml0 ZWQiKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsICIpIEFTIGV4cHJzICIpOworCQl9 CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBxLCAiTlVMTCBBUyBleHBycyAiKTsK KworCQkvKiBwZ19zdGF0c19leHQgaW50cm9kdWNlZCBpbiB2MTIgKi8KKwkJaWYgKGZvdXQtPnJl bW90ZVZlcnNpb24gPj0gMTIwMDAwKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsCisJCQkJ CQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRzX2V4dCBBUyBlICIKKwkJCQkJCQkJICJXSEVS RSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICQxICIKKwkJCQkJCQkJICJBTkQgZS5zdGF0aXN0 aWNzX25hbWUgPSAkMiAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsCisJ CQkJCQkJCSAiRlJPTSAoICIKKwkJCQkJCQkJICJTRUxFQ1Qgcy5zdHhuZGlzdGluY3QgQVMgbl9k aXN0aW5jdCwgIgorCQkJCQkJCQkgIiAgICBzLnN0eGRlcGVuZGVuY2llcyBBUyBkZXBlbmRlbmNp ZXMgIgorCQkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19zdGF0aXN0aWNzX2V4dCBBUyBzICIK KwkJCQkJCQkJICJKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIEFTIG4gIgorCQkJCQkJCQkg Ik9OIG4ub2lkID0gcy5zdHhuYW1lc3BhY2UgIgorCQkJCQkJCQkgIldIRVJFIG4ubnNwbmFtZSA9 ICQxICIKKwkJCQkJCQkJICJBTkQgZS5zdHhuYW1lID0gJDIgIgorCQkJCQkJCQkgIikgQVMgZSAi KTsKKworCQkvKiB3ZSBhbHdheXMgaGF2ZSBhbiBpbmhlcml0ZWQgY29sdW1uLCBidXQgaXQgbWF5 IGJlIGEgY29uc3RhbnQgKi8KKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocHEsICJPUkRFUiBCWSBp bmhlcml0ZWQiKTsKKworCQlFeGVjdXRlU3FsU3RhdGVtZW50KGZvdXQsIHBxLT5kYXRhKTsKKwor CQlmb3V0LT5pc19wcmVwYXJlZFtQUkVQUVVFUllfRFVNUEVYVFNUQVRTT0JKU1RBVFNdID0gdHJ1 ZTsKKworCQlkZXN0cm95UFFFeHBCdWZmZXIocHEpOworCX0KKworCXF1ZXJ5ID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiRVhFQ1VURSBnZXRF eHRTdGF0c1N0YXRzKCIpOworCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxdWVyeSwgc3RhdHNleHRp bmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLCBmb3V0KTsKKwlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIjo6cGdfY2F0YWxvZy5uYW1lLCAiKTsKKwlhcHBlbmRTdHJpbmdMaXRlcmFs QUgocXVlcnksIHN0YXRzZXh0aW5mby0+ZG9iai5uYW1lLCBmb3V0KTsKKwlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIjo6cGdfY2F0YWxvZy5uYW1lKSIpOworCisJcmVzID0gRXhlY3V0ZVNx bFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOworCisJZGVzdHJveVBR RXhwQnVmZmVyKHF1ZXJ5KTsKKworCW5zdGF0cyA9IFBRbnR1cGxlcyhyZXMpOworCisJaWYgKG5z dGF0cyA+IDApCisJeworCQlQUUV4cEJ1ZmZlciBvdXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CisJCWludAkJCWlfaW5oZXJpdGVkID0gUFFmbnVtYmVyKHJlcywgImluaGVyaXRlZCIpOworCQlp bnQJCQlpX25kaXN0aW5jdCA9IFBRZm51bWJlcihyZXMsICJuX2Rpc3RpbmN0Iik7CisJCWludAkJ CWlfZGVwZW5kZW5jaWVzID0gUFFmbnVtYmVyKHJlcywgImRlcGVuZGVuY2llcyIpOworCQlpbnQJ CQlpX21jdiA9IFBRZm51bWJlcihyZXMsICJtb3N0X2NvbW1vbl92YWxzIik7CisJCWludAkJCWlf bWN2X251bGxzID0gUFFmbnVtYmVyKHJlcywgIm1vc3RfY29tbW9uX3ZhbF9udWxscyIpOworCQlp bnQJCQlpX21jZiA9IFBRZm51bWJlcihyZXMsICJtb3N0X2NvbW1vbl9mcmVxcyIpOworCQlpbnQJ CQlpX21jYmYgPSBQUWZudW1iZXIocmVzLCAibW9zdF9jb21tb25fYmFzZV9mcmVxcyIpOworCQlp bnQJCQlpX2V4cHJzID0gUFFmbnVtYmVyKHJlcywgImV4cHJzIik7CisKKwkJZm9yIChpbnQgaSA9 IDA7IGkgPCBuc3RhdHM7IGkrKykKKwkJeworCQkJaWYgKFBRZ2V0aXNudWxsKHJlcywgaSwgaV9p bmhlcml0ZWQpKQorCQkJCXBnX2ZhdGFsKCJpbmhlcml0ZWQgY2Fubm90IGJlIE5VTEwiKTsKKwor CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3V0LAorCQkJCQkJCQkgIlNFTEVDVCAqIEZST00gcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKFxuIik7CisJCQlhcHBlbmRQUUV4cEJ1 ZmZlcihvdXQsICJcdCd2ZXJzaW9uJywgJyVkJzo6aW50ZWdlcixcbiIsCisJCQkJCQkJICBmb3V0 LT5yZW1vdGVWZXJzaW9uKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG91dCwgIlx0J3N0YXRp c3RpY3Nfc2NoZW1hbmFtZScsICIpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbEFIKG91dCwgc3Rh dHNleHRpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLCBmb3V0KTsKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKG91dCwgIixcblx0J3N0YXRpc3RpY3NfbmFtZScsICIpOworCQkJYXBwZW5k U3RyaW5nTGl0ZXJhbEFIKG91dCwgc3RhdHNleHRpbmZvLT5kb2JqLm5hbWUsIGZvdXQpOworCQkJ YXBwZW5kTmFtZWRBcmd1bWVudChvdXQsIGZvdXQsICJpbmhlcml0ZWQiLCAiYm9vbGVhbiIsCisJ CQkJCQkJCVBRZ2V0dmFsdWUocmVzLCBpLCBpX2luaGVyaXRlZCkpOworCisJCQlpZiAoIVBRZ2V0 aXNudWxsKHJlcywgaSwgaV9uZGlzdGluY3QpKQorCQkJCWFwcGVuZE5hbWVkQXJndW1lbnQob3V0 LCBmb3V0LCAibl9kaXN0aW5jdCIsICJwZ19uZGlzdGluY3QiLAorCQkJCQkJCQkJUFFnZXR2YWx1 ZShyZXMsIGksIGlfbmRpc3RpbmN0KSk7CisKKwkJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCBp X2RlcGVuZGVuY2llcykpCisJCQkJYXBwZW5kTmFtZWRBcmd1bWVudChvdXQsIGZvdXQsICJkZXBl bmRlbmNpZXMiLCAicGdfZGVwZW5kZW5jaWVzIiwKKwkJCQkJCQkJCVBRZ2V0dmFsdWUocmVzLCBp LCBpX2RlcGVuZGVuY2llcykpOworCisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgaV9tY3Yp KQorCQkJCWFwcGVuZE5hbWVkQXJndW1lbnQob3V0LCBmb3V0LCAibW9zdF9jb21tb25fdmFscyIs ICJ0ZXh0W10iLAorCQkJCQkJCQkJUFFnZXR2YWx1ZShyZXMsIGksIGlfbWN2KSk7CisKKwkJCWlm ICghUFFnZXRpc251bGwocmVzLCBpLCBpX21jdl9udWxscykpCisJCQkJYXBwZW5kTmFtZWRBcmd1 bWVudChvdXQsIGZvdXQsICJtb3N0X2NvbW1vbl92YWxfbnVsbHMiLCAiYm9vbGVhbltdIiwKKwkJ CQkJCQkJCVBRZ2V0dmFsdWUocmVzLCBpLCBpX21jdl9udWxscykpOworCisJCQlpZiAoIVBRZ2V0 aXNudWxsKHJlcywgaSwgaV9tY2YpKQorCQkJCWFwcGVuZE5hbWVkQXJndW1lbnQob3V0LCBmb3V0 LCAibW9zdF9jb21tb25fZnJlcXMiLCAiZG91YmxlIHByZWNpc2lvbltdIiwKKwkJCQkJCQkJCVBR Z2V0dmFsdWUocmVzLCBpLCBpX21jZikpOworCisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwg aV9tY2JmKSkKKwkJCQlhcHBlbmROYW1lZEFyZ3VtZW50KG91dCwgZm91dCwgIm1vc3RfY29tbW9u X2Jhc2VfZnJlcXMiLCAiZG91YmxlIHByZWNpc2lvbltdIiwKKwkJCQkJCQkJCVBRZ2V0dmFsdWUo cmVzLCBpLCBpX21jYmYpKTsKKworCQkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIGlfZXhwcnMp KQorCQkJCWFwcGVuZE5hbWVkQXJndW1lbnQob3V0LCBmb3V0LCAiZXhwcnMiLCAidGV4dFtdIiwK KwkJCQkJCQkJCVBRZ2V0dmFsdWUocmVzLCBpLCBpX2V4cHJzKSk7CisKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKG91dCwgIlxuKTtcbiIpOworCQl9CisKKwkJQXJjaGl2ZUVudHJ5KGZvdXQsIG5p bENhdGFsb2dJZCwgY3JlYXRlRHVtcElkKCksCisJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHN0 YXRzZXh0aW5mby0+ZG9iai5uYW1lLAorCQkJCQkJCQkgIC5uYW1lc3BhY2UgPSBzdGF0c2V4dGlu Zm8tPmRvYmoubmFtZXNwYWNlLT5kb2JqLm5hbWUsCisJCQkJCQkJCSAgLm93bmVyID0gc3RhdHNl eHRpbmZvLT5yb2xuYW1lLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJFWFRFTkRFRCBTVEFU SVNUSUNTIERBVEEiLAorCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QT1NUX0RBVEEsCisJ CQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBvdXQtPmRhdGEsCisJCQkJCQkJCSAgLmRlcHMgPSAmc3Rh dHNleHRpbmZvLT5kb2JqLmR1bXBJZCwKKwkJCQkJCQkJICAubkRlcHMgPSAxKSk7CisJCWRlc3Ry b3lQUUV4cEJ1ZmZlcihvdXQpOworCX0KKwlQUWNsZWFyKHJlcyk7Cit9CisKIC8qCiAgKiBkdW1w Q29uc3RyYWludAogICoJICB3cml0ZSBvdXQgdG8gZm91dCBhIHVzZXItZGVmaW5lZCBjb25zdHJh aW50CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGUzM2FhOTVmNmZmLi45YWI4MmY5NzI3 NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTQ3NzIsNiArNDc3MiwzNCBAQCBteSAl dGVzdHMgPSAoCiAJCX0sCiAJfSwKIAorCSMKKwkjIEVYVEVOREVEIHN0YXRzIHdpbGwgZW5kIHVw IGluIFNFQ1RJT05fUE9TVF9EQVRBLgorCSMKKwknZXh0ZW5kZWRfc3RhdGlzdGljc19pbXBvcnQn ID0+IHsKKwkJY3JlYXRlX3NxbCA9PiAnCisJCQlDUkVBVEUgVEFCTEUgZHVtcF90ZXN0Lmhhc19l eHRfc3RhdHMKKwkJCUFTIFNFTEVDVCBnLmcgQVMgeCwgZy5nIC8gMiBBUyB5IEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwKSBBUyBnKGcpOworCQkJQ1JFQVRFIFNUQVRJU1RJQ1MgZHVtcF90ZXN0 LmVzMSBPTiB4LCAoeSAlIDIpIEZST00gZHVtcF90ZXN0Lmhhc19leHRfc3RhdHM7CisJCQlBTkFM WVpFIGR1bXBfdGVzdC5oYXNfZXh0X3N0YXRzOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUVNF TEVDVCAqIEZST00gcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKFxFXHMrL3ht LAorCQlsaWtlID0+IHsKKwkJCSVmdWxsX3J1bnMsCisJCQklZHVtcF90ZXN0X3NjaGVtYV9ydW5z LAorCQkJbm9fZGF0YV9ub19zY2hlbWEgPT4gMSwKKwkJCW5vX3NjaGVtYSA9PiAxLAorCQkJc2Vj dGlvbl9wb3N0X2RhdGEgPT4gMSwKKwkJCXN0YXRpc3RpY3Nfb25seSA9PiAxLAorCQkJc2NoZW1h X29ubHlfd2l0aF9zdGF0aXN0aWNzID0+IDEsCisJCX0sCisJCXVubGlrZSA9PiB7CisJCQlleGNs dWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwKKwkJCW5vX3N0YXRpc3RpY3MgPT4gMSwKKwkJCW9u bHlfZHVtcF9tZWFzdXJlbWVudCA9PiAxLAorCQkJc2NoZW1hX29ubHkgPT4gMSwKKwkJfSwKKwl9 LAorCiAJIwogCSMgV2hpbGUgYXR0cmlidXRlIHN0YXRzIChha2EgcGdfc3RhdGlzdGljIHN0YXRz KSBvbmx5IGFwcGVhciBmb3IgdGFibGVzCiAJIyB0aGF0IGhhdmUgYmVlbiBhbmFseXplZCwgYWxs IHRhYmxlcyB3aWxsIGhhdmUgcmVsYXRpb24gc3RhdHMgYmVjYXVzZQotLSAKMi41Mi4wCgo= --0000000000009961d60645287624--