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 1w2OOQ-000FRK-0j for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 06:59:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2OOP-00GqRs-0R for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 06:59:05 +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 1w2OOO-00GqR5-1R for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 06:59:04 +0000 Received: from mail-yx1-xb135.google.com ([2607:f8b0:4864:20::b135]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2OOJ-0000000096t-0ZUl for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 06:59:03 +0000 Received: by mail-yx1-xb135.google.com with SMTP id 956f58d0204a3-64e8ae85700so408792d50.1 for ; Mon, 16 Mar 2026 23:59:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773730740; cv=none; d=google.com; s=arc-20240605; b=NHyLIY4ivAx1KNrYVJNBZJ/4FIEer3xgzLmr3dukSCcA62/aqzqZsPlSAM+XZCn14N LV3Tvs2NAOP+0O/cOKl6Ncj11TyVxJmIwobcB63Fa12oFs7tMJvRLdoS+xezgCg4EbvL 44AgMkN9GAtjrzEvEOfSAJUAd8BRZCGFBR0lzbf5qxd3UZiyCp3ow0t9ruEN4dGTpeYx Q2o7pJBrovSOwwVQ8wsEXRcUZkJmW7cJ+aYpPd6im1k0qk+K9ijia5kjWZhxj72mylFF MaA2+IGiXdBgAbcFhEpgM209W7ssTeUJlYJieK2qe6UV+xhVQoCImXjVBRjaHGbjbJoE emWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=yWvYq5jV7m7ZH+p/yGdCCOEcwMOc068Hw3fueSIF6r4=; fh=/xQD0XwhGGS6bF6uoPgrZcDseIbd/ZDG4X3ndHKZDg0=; b=WopSt753I5ZtNTQednpZhcsuZc29ztT+RChkfimX0PTsSxyEe51/qs0bDli/xY+6ME 2YJK5EZecv7YINGRf3Pm/e2MyCCA66ia2XVyehd64pw0CV2Pl+Xu6h+e3hqmPUxNWWhb oafiTJT37HguMVwesGU+Z16wray/B84wkUXRNLHgpDqMW7AWg1PuHlDqZZy7oZdvCYd4 Bleembm0fa4iRHmgaiGAHQAW60uE/RGh8moNrij3A0LoWdGPUpnZhDzdM/6Gghb8W7A+ SlCS947ygHoqsjMBdcKkmQeo1FMGsKGoOfeKByLDr4pq6RGHMdhyQsauT70dt18ykzq7 DQxQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773730740; x=1774335540; 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=yWvYq5jV7m7ZH+p/yGdCCOEcwMOc068Hw3fueSIF6r4=; b=hXsE5mz7aCmyh03DES2rq60nL9QT2Uya6UW5wltrADDfQtk1TB8IDe+N4nlNYkQcbN Bqp1KQGV9S7nA/o74VYHyeT5iBFv4lGeahdFbkEhzSJpsXpL37Tgckr7jpExOK4ReMlP qLshKWubEhWdRz+jwrQNkVnMA85/Ta7pF435IKRJVquDbkuMciq3VIttZaYK6SeV+/ld sBsKHhUoayqDRHczdP/z1JTQ84fUfpialw5BMm/iu6sBKikEm+8vNCHfz3P0TK7QNDi5 DinZDZwA4VZa6ApnLTMJoIkLLF+M7+9sku42QRWvCKz7T1PdCIjJB9Q/1riVbGrP+Fob vBtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773730740; x=1774335540; 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=yWvYq5jV7m7ZH+p/yGdCCOEcwMOc068Hw3fueSIF6r4=; b=olebVOIFRomaHWfGUKvG1SG2DqSEkow6bQW9B65tdCyYSnoVJRUROMEeqoVLsnpZJ1 +hVHquVchA/Hh8ft0sXKCfrtHNWIO8qSSGp4YJgigYnY381P9Xi1O/lYgBmlzp4KHKwj KjaPLakhbYgnLfW8hwwd8aGe5jKkeI8ndz3RDVrTQeL3M3RYQ0QO4ghfToiWaaG/by41 HkAkZ5O/jTs54ilfQbaNv6ZaCNWokWVE9dVemLuc6+0+uoRYfexS1Tqc2fwPrmntNLnd FJPnKi5rh3TCyjSqxdDlo++ZnMfgBuvVEAVJsbYc5TK4/DJlKY0sbXj/KNXEcxV29idy lpMA== X-Forwarded-Encrypted: i=1; AJvYcCVk+HmTLSZCzpgLgh5LUSGctubOd4SNHsqOnjBalv/DOJqnpuT6Key5IPWyu1Xjhv6KKikkMcqWC9reJqbE@lists.postgresql.org X-Gm-Message-State: AOJu0Yygx4HgbW8xti8sVktMTWGx7R8S3yueuTQJgWc2ci/wUnYPbBWX 8DqQsslTKllm4EPw2RfNumIY93294shSiKrzH/0lj39U9RLfCYjAnkf1dyxM7xbz41XNGddr0pj 9WDRcS+/cjef7yBmWZKzgCNAAMvaEu66Vqc1X X-Gm-Gg: ATEYQzzXQgHsF5zSPl+JOvE5h2hEqKGM+rgMc8PnAGfaxgnV++qhVwDJ1RA/kczs4Kk 8Ufjyg9z1SYLmu2QOY3ohsYQpeXNfbP99UtxeXNG6qizRkbRGwjylyOYuyneJLIzx9cfR9H9lWj jGWzh4a4Jf39xd1mEqVG6KsoLztvw1uMIzNLvqHnpb+nKuLibgUxk4LCN68zWtSWPCAIStkn8GP wQUULPgpKZcKSHXn23x0KlW9NnAsAFH0DoK7NuNyQe082XYHAoKXJAPxPrZc1mQU0HDUxtYwJKM YTveUg4zgQ1Qgh3x/JVHzh/vFTfARJ6fMlGTRBtR1cPsEfEgvZrH8uC3r4vDSguUCjb452t1OkH ay+GU9RXM0UnhVSL0JhNqUjfBNeeaYhlGYam8FllbLTyH9dd9ZU/l/HYUKQ== X-Received: by 2002:a53:ecc5:0:b0:649:e440:26a5 with SMTP id 956f58d0204a3-64e62f562e5mr13144138d50.15.1773730740021; Mon, 16 Mar 2026 23:59:00 -0700 (PDT) MIME-Version: 1.0 References: <4166.1773289811@sss.pgh.pa.us> In-Reply-To: From: Pavel Stehule Date: Tue, 17 Mar 2026 07:58:20 +0100 X-Gm-Features: AaiRm53h4ifG-Lv5MouWlbTXqMoq8Wre0-EcoE-HiXEvsPu0vtVAhA4JXq3cYB0 Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Tom Lane Cc: Peter Eisentraut , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000afdab5064d32de36" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000afdab5064d32de36 Content-Type: multipart/alternative; boundary="000000000000afdab3064d32de34" --000000000000afdab3064d32de34 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi =C4=8Dt 12. 3. 2026 v 8:00 odes=C3=ADlatel Pavel Stehule napsal: > Hi > > =C4=8Dt 12. 3. 2026 v 5:30 odes=C3=ADlatel Tom Lane n= apsal: > >> Peter Eisentraut writes: >> > Maybe this could be written in such a way that it doesn't hardcode JSO= N >> > arrays specifically, but a type could have an iteration helper functio= n >> > that would feed this feature? >> >> +1. ISTM that this feature would make sense for subscriptable types, >> so one way to shoehorn it into the system without a lot of new overhead >> could be to extend struct SubscriptRoutines to offer optional support >> function(s) for iterating through all the elements of a subscriptable >> object. >> > > attached patch do this - new interface has two methods: CreateForeachAIterator and iterate diff --git a/src/include/nodes/subscripting.h b/src/include/nodes/subscripting.h index 301f21dac2f..08bfe59ede4 100644 --- a/src/include/nodes/subscripting.h +++ b/src/include/nodes/subscripting.h @@ -154,6 +154,32 @@ typedef void (*SubscriptExecSetup) (const SubscriptingRef *sbsref, SubscriptingRefState *sbsrefstate, SubscriptExecSteps *methods); +typedef struct _ForeachAIterator ForeachAIterator; + +/* + * ForeachAIiterator is used by PLpgSQL FOREACH IN ARRAY statement. + * Input value should not be null, and inside CreateForeachAIterator + * routine must be copied to current (statement) context. "iterate" + * routine is called under short life memory context, that is resetted + * after any call. + */ +struct _ForeachAIterator +{ + bool (*iterate) (ForeachAIterator *self, + Datum *value, + bool *isnull, + Oid *typid, + int32 *typmod); + /* Private fields might appear beyond this point... */ +}; + +typedef ForeachAIterator * (*CreateForeachAIterator) (Datum value, + Oid typid, + int32 typmod, + int slice, + Oid target_typid, + int32 target_typmod); + /* Struct returned by the SQL-visible subscript handler function */ typedef struct SubscriptRoutines { @@ -163,6 +189,9 @@ typedef struct SubscriptRoutines bool fetch_leakproof; /* is fetch SubscriptingRef leakproof? */ bool store_leakproof; /* is assignment SubscriptingRef * leakproof? */ + + /* returns iterator used by PL/pgSQL FOREACH statement */ + CreateForeachAIterator create_foreach_a_iterator; } SubscriptRoutines; #endif /* SUBSCRIPTING_H */ Regards Pavel > > > Regards > > Pavel > > >> >> regards, tom lane >> > --000000000000afdab3064d32de34 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

=C4=8Dt 12. 3. 2026 v=C2=A08:= 00 odes=C3=ADlatel Pavel Stehule <pavel.stehule@gmail.com> napsal:
Hi

=C4=8Dt 12. 3. 2026 = v=C2=A05:30 odes=C3=ADlatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
Peter Eisentraut <peter@eisentraut.org> wri= tes:
> Maybe this could be written in such a way that it doesn't hardcode= JSON
> arrays specifically, but a type could have an iteration helper functio= n
> that would feed this feature?

+1.=C2=A0 ISTM that this feature would make sense for subscriptable types,<= br> so one way to shoehorn it into the system without a lot of new overhead
could be to extend struct SubscriptRoutines to offer optional support
function(s) for iterating through all the elements of a subscriptable
object.


attached patch do this - new interface has t= wo methods:=C2=A0CreateForeachAIterator and iterate

diff --git a/src/include/nodes/subscripting.h b/src/include/nodes/subscri= pting.h
index 301f21dac2f..08bfe59ede4 100644
--- a/src/include/nodes= /subscripting.h
+++ b/src/include/nodes/subscripting.h
@@ -154,6 +154= ,32 @@ typedef void (*SubscriptExecSetup) (const SubscriptingRef *sbsref,=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SubscriptingRefState *= sbsrefstate,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Subscrip= tExecSteps *methods);
=C2=A0
+typedef struct _ForeachAIterator Foreac= hAIterator;
+
+/*
+ * ForeachAIiterator is used by PLpgSQL FOREACH= IN ARRAY statement.
+ * Input value should not be null, and inside Crea= teForeachAIterator
+ * routine must be copied to current (statement) con= text. "iterate"
+ * routine is called under short life memory = context, that is resetted
+ * after any call.
+ */
+struct _Foreac= hAIterator
+{
+ =C2=A0 bool =C2=A0 =C2=A0 =C2=A0 =C2=A0(*iterate) (Fo= reachAIterator *self,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Datum *value,
+ =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 bool *isnull,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Oid *typid,
+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 i= nt32 *typmod);
+ =C2=A0 /* Private fields might appear beyond this point= ... */
+};
+ =C2=A0 =C2=A0
+typedef ForeachAIterator * (*CreateFo= reachAIterator) (Datum value,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Oid t= ypid,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int32 typmod,
+ =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 int slice,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 O= id target_typid,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int32 target_typmod= );
+
=C2=A0/* Struct returned by the SQL-visible subscript handler fu= nction */
=C2=A0typedef struct SubscriptRoutines
=C2=A0{
@@ -163,6= +189,9 @@ typedef struct SubscriptRoutines
=C2=A0 =C2=A0 bool =C2=A0 = =C2=A0 =C2=A0 =C2=A0fetch_leakproof; =C2=A0 =C2=A0/* is fetch SubscriptingR= ef leakproof? */
=C2=A0 =C2=A0 bool =C2=A0 =C2=A0 =C2=A0 =C2=A0store_lea= kproof; =C2=A0 =C2=A0/* is assignment SubscriptingRef
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* leakproof? */
+ =C2=A0 =C2=A0=
+ =C2=A0 /* returns iterator used by PL/pgSQL FOREACH statement */
= + =C2=A0 CreateForeachAIterator create_foreach_a_iterator;
=C2=A0} Subsc= riptRoutines;

=C2=A0#endif =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* SUBSCRIPTING_H */

Regards

Pavel
=C2=A0
=C2=A0

Regards

<= div class=3D"gmail_quote">Pavel
=C2=A0=

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 regards, tom lane
--000000000000afdab3064d32de34-- --000000000000afdab5064d32de36 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260317-7-0001-FOREACH-scalar-IN-ARRAY-jsonb_expr.patch" Content-Disposition: attachment; filename="v20260317-7-0001-FOREACH-scalar-IN-ARRAY-jsonb_expr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmu9elri0 RnJvbSBiN2I2NTA5MzgxYTdkNmI0NjI5YjNiMjVlYmI0YTE4OWIxZWIzNGJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gQVJSQVkganNvbmJfZXhwcgoKdGhpcyBwYXRjaCBpbnRy b2R1Y2Ugc3VwcG9ydCBGT1JFQUNIIHNjYWxhcl92YXIgSU4gQVJSQVkgZXhwciwgd2hlbiB0aGUK cmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIGNhbiBiZSBKc29uYi4gVGhlIGRlc2lnbiBpcyBiYXNl ZApvbiBiZWhhdmUgb2YganNvbmJfYXJyYXlfZWxlbWVudHMgZnVuY3Rpb25zLiBJbiB0aGlzIGNh c2UsIEZPUkVBQ0ggZW5mb3JjZQpjYXN0aW5nIHRvIHRhcmdldCB0eXBlIChiZWNhdXNlIHdlIGtu b3cgdGFyZ2V0IHR5cGUpIGFuZCB0cnkgdG8gcmVkdWNlCklPIGNhc3RpbmcuIEF0dGVudGlvbjog SU8gY2FzdGluZyBjYW4gYmUgbW9yZSBzdHJpY3QsIHRoZW4gY2FzdGluZyBiYXNlZApvbiBjYXN0 IGZ1bmN0aW9ucy4KCkRFQ0xBUkUgdCBpbnQ7CkJFR0lOCiAgLS0gdGhpcyBjYW4gd29yayBiZWNh dXNlIHdlIHVzZSBjYXN0IG51bWVyaWMgLT4gaW50CiAgRk9SRUFDSCB0IElOIEFSUkFZICdbMSwy LDMuMTRdJzo6anNvbmIKICBMT09QCgogIC0tIHRoaXMgZmFpbHMsIGJlY2F1c2UgSU8gY2FzdCBp cyB1c2VkLCBhbmQgaW50ZWdlciBpbnB1dCBmdW5jdGlvbgogIC0tIGFsbG93cyBvbmx5IGRpZ2l0 cwogIEZPUkVBQyB0IElOIEpTT04gQVJSQVkgJ1sxLDIsMywiMy4xNCJdJzo6anNvbmIKICBMT09Q CgpDb25jZXB0dWFsIHF1ZXN0aW9uIGlzIGlmIGNhc3Rpbmcgc2hvdWxkIGJlIHN0cmljdCBsaWtl ICJvbGQiIFBvc3RncmVTUUwKanNvbiBmdW5jdGlvbiBvciBsYXggYXMgIm5ldyIgU1FML0pTT04g ZnVuY3Rpb25zPyBJIGNhbiBpbWFnaW5lIGxheCBtb2RlCmFzIGRlZmF1bHQgd2l0aCBwb3NzaWJp bGl0eSB0byBzd2l0Y2ggdG8gc3RyaWN0IG1vZGUgKHRoaXMgaXMgbm90IGltcGxlbWVudGVkCm5v dyk6CgogIEZPUkVBQ0ggdCBJTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1Ig T04gRVJST1IKICBMT09QCiAgICAuLi4KCkJlY2F1c2Ugd2UgdXNlICJvbGQiIHN5bnRheCAtIEZP UkVBQ0ggSU4gQVJSQVksIEkgcHJlZmVyICJvbGQiIGJlaGF2aW91ciwKdGhhdCBpcyBtb3JlIHNp bWlsYXIgdG8gaXRlcmF0aW9uIG92ZXIgYW4gYXJyYXkuCgpUaGUgcGVyZm9ybWFuY2UgKGJlc3Qg Y2FzZSBmb3IgaXRlcmF0aW9uIG92ZXIgMTAwMCBmaWVsZHMgYXJyYXkpIGlzIGFib3V0CjR4IGJl dHRlciB0aGFuIHdoZW4gRk9SIElOIFNFTEVDVCBqc29uYl9hcnJheV9lbGVtZW50cyBpcyB1c2Vk LgotLS0KIGRvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICA2 MiArKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlzdWJzLmMgICAgICAgICAgICAgfCAg OTcgKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMgICAgICAgICAgICAg fCAxODEgKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3N1YnNjcmlwdGluZy5oICAgICAg ICAgICAgICB8ICAyOSArKwogc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgIHwgICAyICstCiAuLi4vcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9mb3JlYWNo Lm91dCAgfCAyOTcgKysrKysrKysrKysrKysrKysrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMu YyAgICAgICAgICAgICAgICAgIHwgMTg5ICsrKysrLS0tLS0tCiBzcmMvcGwvcGxwZ3NxbC9zcmMv cGxwZ3NxbC5oICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9wbC9wbHBnc3FsL3NyYy9z cWwvcGxwZ3NxbF9mb3JlYWNoLnNxbCAgICB8IDI1MiArKysrKysrKysrKysrKysKIDEwIGZpbGVz IGNoYW5nZWQsIDEwMTYgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFj aC5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sIGIvZG9jL3NyYy9z Z21sL3BscGdzcWwuc2dtbAppbmRleCA1NjFmNmU1MGQ2My4uNmJjOWZiMDJlMWUgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3BscGdzcWwu c2dtbApAQCAtMjY5NywxMiArMjY5NywxMiBAQCBFTkQgTE9PUCA8b3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5sYWJlbDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+OwogICAgPC9zZWN0Mj4KIAogICAg PHNlY3QyIGlkPSJwbHBnc3FsLWZvcmVhY2gtYXJyYXkiPgotICAgIDx0aXRsZT5Mb29waW5nIHRo cm91Z2ggQXJyYXlzPC90aXRsZT4KKyAgICA8dGl0bGU+TG9vcGluZyB0aHJvdWdoIEFycmF5cyBv ciBKc29uYiBhcnJheXM8L3RpdGxlPgogCiAgICAgPHBhcmE+CiAgICAgIFRoZSA8bGl0ZXJhbD5G T1JFQUNIPC9saXRlcmFsPiBsb29wIGlzIG11Y2ggbGlrZSBhIDxsaXRlcmFsPkZPUjwvbGl0ZXJh bD4gbG9vcCwKICAgICAgYnV0IGluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHJvd3Mg cmV0dXJuZWQgYnkgYW4gU1FMIHF1ZXJ5LAotICAgICBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBl bGVtZW50cyBvZiBhbiBhcnJheSB2YWx1ZS4KKyAgICAgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUg ZWxlbWVudHMgb2YgYW4gYXJyYXkgdmFsdWUgb3Igb2YganNvbmIgYXJyYXkgdmFsdWUuCiAgICAg IChJbiBnZW5lcmFsLCA8bGl0ZXJhbD5GT1JFQUNIPC9saXRlcmFsPiBpcyBtZWFudCBmb3IgbG9v cGluZyB0aHJvdWdoCiAgICAgIGNvbXBvbmVudHMgb2YgYSBjb21wb3NpdGUtdmFsdWVkIGV4cHJl c3Npb247IHZhcmlhbnRzIGZvciBsb29waW5nCiAgICAgIHRocm91Z2ggY29tcG9zaXRlcyBiZXNp ZGVzIGFycmF5cyBtYXkgYmUgYWRkZWQgaW4gZnV0dXJlLikKQEAgLTI3NzgsNiArMjc3OCw2NCBA QCBOT1RJQ0U6ICByb3cgPSB7Nyw4LDl9CiBOT1RJQ0U6ICByb3cgPSB7MTAsMTEsMTJ9CiA8L3By b2dyYW1saXN0aW5nPgogICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBUaGUgPGxpdGVy YWw+U0xJQ0U8L2xpdGVyYWw+IGhpZ2hlciB0aGFuIHplcm8gY2Fubm90IGJlIHVzZWQgd2hlbiBp dGVyYXRlcworICAgICB0aHJvdWdoIGpzb25iIGFycmF5cy4KKyAgICA8L3BhcmE+CisKKyAgICA8 cGFyYT4KKyAgICAgVGhlIDxsaXRlcmFsPkZPUkVBQ0g8L2xpdGVyYWw+IGxvb3Agb3ZlciBqc29u YiBhcnJheXMgdXNlcworICAgICBzYW1lIHN5bnRheCBsaWtlIDxsaXRlcmFsPkZPUkVBQ0g8L2xp dGVyYWw+IGxvb3Agb3ZlciBhcnJheXMsCisgICAgIGJ1dCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0 aHJvdWdoIGVsZW1lbnRzIG9mIHRoZSBhcnJheSwKKyAgICAgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0 aGUgZWxlbWVudHMgb2YgYSBKc29uYiBhcnJheSB2YWx1ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8 cGFyYT4KKyAgICAgVGhlIHRhcmdldCBjYW4gYmUgYSBzY2FsYXIgdmFyaWFibGUsIGEgY29tcG9z aXRlIHZhcmlhYmxlLCBvciBhIGxpc3QKKyAgICAgb2Ygc2NhbGFyIHZhcmlhYmxlcy4gV2hlbiB2 YXJpYWJsZSBpcyBub3Qgc2NhbGFyLCB0aGVuIGFzc2lnbmVkIHZhbHVlCisgICAgIHNob3VsZCBi ZSBhIEpTT04gb2JqZWN0IGFuZCB0aGUgSlNPTiBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBieSBu YW1lcy4KKworPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIEZVTkNUSU9OIHByaW50X2VsZW1lbnRz KGpzb25iKSBSRVRVUk5TIHZvaWQgQVMgJCQKK0RFQ0xBUkUKKyAgeCBpbnQ7CitCRUdJTgorICBG T1JFQUNIIHggSU4gQVJSQVkgJDEKKyAgTE9PUAorICAgIFJBSVNFIE5PVElDRSAncm93ID0gJScs IHg7CisgIEVORCBMT09QOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUIHBy aW50X2VsZW1lbnRzKCdbMSwyLDNdJyk7CitOT1RJQ0U6ICByb3cgPSAxCitOT1RJQ0U6ICByb3cg PSAyCitOT1RJQ0U6ICByb3cgPSAzCisKK0NSRUFURSBGVU5DVElPTiBwcmludF9maWVsZHMoanNv bmIpIFJFVFVSTlMgdm9pZCBBUyAkJAorREVDTEFSRQorICB4IGludDsgeSB2YXJjaGFyOworQkVH SU4KKyAgRk9SRUFDSCB4LCB5IElOIEFSUkFZICQxCisgIExPT1AKKyAgICBSQUlTRSBOT1RJQ0Ug J3g6ICUsIHk6ICUnLCB4LCB5OworICBFTkQgTE9PUDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdz cWw7CisKK1NFTEVDVCBwcmludF9maWVsZHMoJ1t7fSx7IngiOjEwfSx7InkiOiJIaSJ9LHsieSI6 IkhpIiwgIngiOjEwMDB9XScpOworTk9USUNFOiAgeDogJmx0O05VTEwmZ3Q7LCB5OiAmbHQ7TlVM TCZndDsKK05PVElDRTogIHg6IDEwLCB5OiAmbHQ7TlVMTCZndDsKK05PVElDRTogIHg6ICZsdDtO VUxMJmd0OywgeTogSGkKK05PVElDRTogIHg6IDEwMDAsIHk6IEhpCis8L3Byb2dyYW1saXN0aW5n PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBUaGUgdGFyZ2V0IHZhcmlhYmxlIGNh biBiZSBvZiB0eXBlIDxsaXRlcmFsPlJFQ09SRDwvbGl0ZXJhbD4sIGJ1dCB0aGUgcmVhbCBzdHJ1 Y3R1cmUgaGFzIHRvIGJlCisgICAgIGFzc2lnbmVkIGJlZm9yZSB1c2FnZSBpbiB0aGUgPGxpdGVy YWw+Rk9SRUFDSDwvbGl0ZXJhbD4gc3RhdGVtZW50LgorICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+ CiAKICAgIDxzZWN0MiBpZD0icGxwZ3NxbC1lcnJvci10cmFwcGluZyI+CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlzdWJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv YXJyYXlzdWJzLmMKaW5kZXggMmJmOWU5NTA5ZmIuLmE0MjI0OGVkNjMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlzdWJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2FycmF5c3Vicy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NvZXJjZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9leHByLmgiCiAjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIApAQCAtNDYsNiAr NDcsOTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXJyYXlTdWJXb3Jrc3BhY2UKIAlpbnQJCQlsb3dlcmlu ZGV4W01BWERJTV07CiB9IEFycmF5U3ViV29ya3NwYWNlOwogCit0eXBlZGVmIHN0cnVjdAorewor CUZvcmVhY2hBSXRlcmF0b3IgcHViOworCUFycmF5SXRlcmF0b3IgaXQ7CisJT2lkCQkJcmVzdWx0 X3R5cGlkOworCWludDMyCQlyZXN1bHRfdHlwbW9kOworfSBGb3JlYWNoQUFycmF5SXRlclN0YXRl OworCitzdGF0aWMgYm9vbAorZm9yZWFjaF9hX2FycmF5X2l0ZXJhdGUoRm9yZWFjaEFJdGVyYXRv ciAqc2VsZiwKKwkJCQkJCURhdHVtICp2YWx1ZSwgYm9vbCAqaXNudWxsLAorCQkJCQkJT2lkICp0 eXBpZCwgaW50MzIgKnR5cG1vZCkKK3sKKwlGb3JlYWNoQUFycmF5SXRlclN0YXRlICppdGVyID0g KEZvcmVhY2hBQXJyYXlJdGVyU3RhdGUgKikgc2VsZjsKKworCSp0eXBpZCA9IGl0ZXItPnJlc3Vs dF90eXBpZDsKKwkqdHlwbW9kID0gaXRlci0+cmVzdWx0X3R5cG1vZDsKKworCXJldHVybiBhcnJh eV9pdGVyYXRlKGl0ZXItPml0LCB2YWx1ZSwgaXNudWxsKTsKK30KKworLyoKKyAqIFVzZWQgYnkg cGxwZ3NxbCBGT1JFQUNIIElOIEFSUkFZIHdoZW4gaW5wdXQgZXhwcmVzc2lvbiBpcyBhbiBhcnJh eQorICovCitzdGF0aWMgRm9yZWFjaEFJdGVyYXRvciAqCitjcmVhdGVfZm9yZWFjaF9hX2FycmF5 X2l0ZXJhdG9yKERhdHVtIHZhbHVlLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkJCQkJ aW50IHNsaWNlLCBPaWQgdGFyZ2V0X3R5cGlkLCBpbnQzMiB0YXJnZXRfdHlwbW9kKQoreworCUZv cmVhY2hBQXJyYXlJdGVyU3RhdGUgKml0ZXIgPSBwYWxsb2MwKHNpemVvZihGb3JlYWNoQUFycmF5 SXRlclN0YXRlKSk7CisJQXJyYXlUeXBlICAqYXJyOworCU9pZAkJCXRhcmdldF9lbGVtX3R5cGlk OworCisJLyogY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gLSBtdXN0IGJlIGFuIGFy cmF5ICovCisJaWYgKCFPaWRJc1ZhbGlkKGdldF9lbGVtZW50X3R5cGUodHlwaWQpKSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJ CQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCB5aWVsZCBhbiBhcnJheSwgbm90IHR5 cGUgJXMiLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUodHlwaWQpKSkpOworCisJLyoKKwkgKiBXZSBt dXN0IGNvcHkgdGhlIGFycmF5IGludG8gY3VycmVudCBjb250ZXh0LCBiZWNhdXNlIGlucHV0IGV4 cHJlc3Npb24KKwkgKiBpcyBldmFsdWF0ZWQgaW4gY29udGV4dCBjbGVhbmVkIGJ5IGV4ZWNfZXZh bF9jbGVhbnVwLgorCSAqLworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUENvcHkodmFsdWUpOwor CisJLyogU2xpY2UgZGltZW5zaW9uIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFycmF5 IGRpbWVuc2lvbiAqLworCWlmIChzbGljZSA8IDAgfHwgc2xpY2UgPiBBUlJfTkRJTShhcnIpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQVJSQVlfU1VCU0NSSVBUX0VS Uk9SKSwKKwkJCQkgZXJybXNnKCJzbGljZSBkaW1lbnNpb24gKCVkKSBpcyBvdXQgb2YgdGhlIHZh bGlkIHJhbmdlIDAuLiVkIiwKKwkJCQkJCXNsaWNlLCBBUlJfTkRJTShhcnIpKSkpOworCisJLyoK KwkgKiBTYW5pdHktY2hlY2sgdGhlIHRhcmdldCB0eXBlLiAgV2UgZG9uJ3QgdHJ5IHZlcnkgaGFy ZCBoZXJlLCBhbmQKKwkgKiBzaG91bGQgbm90IGJlIHRvbyBwaWNreSBzaW5jZSBpdCdzIHBvc3Np YmxlIHRoYXQgZXhlY19hc3NpZ25fdmFsdWUgY2FuCisJICogY29lcmNlIHZhbHVlcyBvZiBkaWZm ZXJlbnQgdHlwZXMuICBCdXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0byBjb21wbGFpbgorCSAqIGlm IHRoZSBhcnJheS1uZXNzIG9mIHRoZSBsb29wIHZhcmlhYmxlIGlzIG5vdCByaWdodC4KKwkgKi8K Kwl0YXJnZXRfZWxlbV90eXBpZCA9IGdldF9lbGVtZW50X3R5cGUodGFyZ2V0X3R5cGlkKTsKKwor CWlmIChzbGljZSA+IDAgJiYgdGFyZ2V0X2VsZW1fdHlwaWQgPT0gSW52YWxpZE9pZCkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJ CQkgZXJybXNnKCJGT1JFQUNIIC4uLiBTTElDRSBsb29wIHZhcmlhYmxlIG11c3QgYmUgb2YgYW4g YXJyYXkgdHlwZSIpKSk7CisJaWYgKHNsaWNlID09IDAgJiYgdGFyZ2V0X2VsZW1fdHlwaWQgIT0g SW52YWxpZE9pZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFU WVBFX01JU01BVENIKSwKKwkJCQkgZXJybXNnKCJGT1JFQUNIIGxvb3AgdmFyaWFibGUgbXVzdCBu b3QgYmUgb2YgYW4gYXJyYXkgdHlwZSIpKSk7CisKKwkvKiBJZGVudGlmeSBpdGVyYXRvciByZXN1 bHQgdHlwZSAqLworCWlmIChzbGljZSA+IDApCisJeworCQkvKiBXaGVuIHNsaWNpbmcsIG5vbWlu YWwgdHlwZSBvZiByZXN1bHQgaXMgc2FtZSBhcyBhcnJheSB0eXBlICovCisJCWl0ZXItPnJlc3Vs dF90eXBpZCA9IHR5cGlkOworCQlpdGVyLT5yZXN1bHRfdHlwbW9kID0gdHlwbW9kOworCX0KKwll bHNlCisJeworCQkvKiBXaXRob3V0IHNsaWNpbmcsIHJlc3VsdHMgYXJlIGluZGl2aWR1YWwgYXJy YXkgZWxlbWVudHMgKi8KKwkJaXRlci0+cmVzdWx0X3R5cGlkID0gQVJSX0VMRU1UWVBFKGFycik7 CisJCWl0ZXItPnJlc3VsdF90eXBtb2QgPSB0eXBtb2Q7CisJfQorCisJLyogQ3JlYXRlIGFuIGl0 ZXJhdG9yIHRvIHN0ZXAgdGhyb3VnaCB0aGUgYXJyYXkgKi8KKwlpdGVyLT5pdCA9IGFycmF5X2Ny ZWF0ZV9pdGVyYXRvcihhcnIsIHNsaWNlLCBOVUxMKTsKKworCWl0ZXItPnB1Yi5pdGVyYXRlID0g Zm9yZWFjaF9hX2FycmF5X2l0ZXJhdGU7CisKKwlyZXR1cm4gKEZvcmVhY2hBSXRlcmF0b3IgKikg aXRlcjsKK30KIAogLyoKICAqIEZpbmlzaCBwYXJzZSBhbmFseXNpcyBvZiBhIFN1YnNjcmlwdGlu Z1JlZiBleHByZXNzaW9uIGZvciBhbiBhcnJheS4KQEAgLTU0NSw3ICs2MzYsOCBAQCBhcnJheV9z dWJzY3JpcHRfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuZXhlY19zZXR1cCA9IGFycmF5 X2V4ZWNfc2V0dXAsCiAJCS5mZXRjaF9zdHJpY3QgPSB0cnVlLAkvKiBmZXRjaCByZXR1cm5zIE5V TEwgZm9yIE5VTEwgaW5wdXRzICovCiAJCS5mZXRjaF9sZWFrcHJvb2YgPSB0cnVlLAkvKiBmZXRj aCByZXR1cm5zIE5VTEwgZm9yIGJhZCBzdWJzY3JpcHQgKi8KLQkJLnN0b3JlX2xlYWtwcm9vZiA9 IGZhbHNlCS8qIC4uLiBidXQgYXNzaWdubWVudCB0aHJvd3MgZXJyb3IgKi8KKwkJLnN0b3JlX2xl YWtwcm9vZiA9IGZhbHNlLAkvKiAuLi4gYnV0IGFzc2lnbm1lbnQgdGhyb3dzIGVycm9yICovCisJ CS5jcmVhdGVfZm9yZWFjaF9hX2l0ZXJhdG9yID0gY3JlYXRlX2ZvcmVhY2hfYV9hcnJheV9pdGVy YXRvcgogCX07CiAKIAlQR19SRVRVUk5fUE9JTlRFUigmc2Jzcm91dGluZXMpOwpAQCAtNTcyLDcg KzY2NCw4IEBAIHJhd19hcnJheV9zdWJzY3JpcHRfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CQkuZXhlY19zZXR1cCA9IGFycmF5X2V4ZWNfc2V0dXAsCiAJCS5mZXRjaF9zdHJpY3QgPSB0cnVl LAkvKiBmZXRjaCByZXR1cm5zIE5VTEwgZm9yIE5VTEwgaW5wdXRzICovCiAJCS5mZXRjaF9sZWFr cHJvb2YgPSB0cnVlLAkvKiBmZXRjaCByZXR1cm5zIE5VTEwgZm9yIGJhZCBzdWJzY3JpcHQgKi8K LQkJLnN0b3JlX2xlYWtwcm9vZiA9IGZhbHNlCS8qIC4uLiBidXQgYXNzaWdubWVudCB0aHJvd3Mg ZXJyb3IgKi8KKwkJLnN0b3JlX2xlYWtwcm9vZiA9IGZhbHNlLAkvKiAuLi4gYnV0IGFzc2lnbm1l bnQgdGhyb3dzIGVycm9yICovCisJCS5jcmVhdGVfZm9yZWFjaF9hX2l0ZXJhdG9yID0gY3JlYXRl X2ZvcmVhY2hfYV9hcnJheV9pdGVyYXRvcgogCX07CiAKIAlQR19SRVRVUk5fUE9JTlRFUigmc2Jz cm91dGluZXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCmluZGV4IGYyNzQ1YjI5YTNmLi5h ZDJlZGY1MjVkZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYnN1YnMuYwpAQCAtMjIsNiArMjIsNyBA QAogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9leHByLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25mdW5j cy5oIgogCiAKIC8qIFN1YnNjcmlwdGluZ1JlZlN0YXRlLndvcmtzcGFjZSBmb3IganNvbmIgc3Vi c2NyaXB0aW5nIGV4ZWN1dGlvbiAqLwpAQCAtMzMsNiArMzQsMTcgQEAgdHlwZWRlZiBzdHJ1Y3Qg SnNvbmJTdWJXb3Jrc3BhY2UKIAlEYXR1bQkgICAqaW5kZXg7CQkJLyogU3Vic2NyaXB0IHZhbHVl cyBpbiBEYXR1bSBmb3JtYXQgKi8KIH0gSnNvbmJTdWJXb3Jrc3BhY2U7CiAKK3R5cGVkZWYgc3Ry dWN0Cit7CisJRm9yZWFjaEFJdGVyYXRvciBwdWI7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJYm9v bAkJc2tpcF9uZXN0ZWQ7CisJT2lkCQkJdGFyZ2V0X3R5cGlkOworCWludDMyCQl0YXJnZXRfdHlw bW9kOworCisJTWVtb3J5Q29udGV4dCBjYWNoZV9tY3h0OworCXZvaWQJICAgKmNhY2hlOworfSBG b3JlYWNoQUpzb25iSXRlclN0YXRlOwogCiAvKgogICogRmluaXNoIHBhcnNlIGFuYWx5c2lzIG9m IGEgU3Vic2NyaXB0aW5nUmVmIGV4cHJlc3Npb24gZm9yIGEganNvbmIuCkBAIC0zOTQsNiArNDA2 LDE3MiBAQCBqc29uYl9leGVjX3NldHVwKGNvbnN0IFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLAog CW1ldGhvZHMtPnNic19mZXRjaF9vbGQgPSBqc29uYl9zdWJzY3JpcHRfZmV0Y2hfb2xkOwogfQog CisvKgorICogQ29udmVydCBKc29uYlZhbHVlIHRvIERhdHVtLiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgaW4KKyAqIGdlbmVyaWMgYXJyYXkgaXRlcmF0b3IsIHRoYXQgaXMgdXNlZCBieSBGT1JFQUNI IHBscGdzcWwKKyAqIHN0YXRlbWVudC4gQWdhaW5zdCBvdGhlciBjYXNlcywgdGhlIHJlc3VsdCBz aG91bGQgbm90IGJlCisgKiBuZWNlc3Nhcnkgb2YgZXhwZWN0ZWRfdHlwaWQsIGJlY2F1c2UgdGhl IHZhbHVlIGNhbiBiZQorICogY29udmVydGVkIGxhdGVyIHdoZW4gdGhlIHZhbHVlIGlzIGFzc2ln bmVkIHRvIFBML3BnU1FMCisgKiB2YXJpYWJsZS4gVGhpcyBjYW4gYmUgbW9yZSBlZmZlY3RpdmUg dGhhbiBnZW5lcmljIElPCisgKiBjYXN0IHVzZWQgYnkganNvbl9wb3B1bGF0ZV90eXBlLgorICov CitzdGF0aWMgRGF0dW0KK0pzb25iVmFsdWVUb0RhdHVtKEpzb25iVmFsdWUgKmpidiwKKwkJCQkg IE9pZCAqdHlwaWQsIGludDMyICp0eXBtb2QsIGJvb2wgKmlzbnVsbCwKKwkJCQkgIE9pZCBleHBl Y3RlZF90eXBpZCwgaW50MzIgZXhwZWN0ZWRfdHlwbW9kLAorCQkJCSAgdm9pZCAqKmNhY2hlLCBN ZW1vcnlDb250ZXh0IG1jeHQpCit7CisJRGF0dW0JCXJlc3VsdDsKKworCSppc251bGwgPSBmYWxz ZTsKKwkqdHlwbW9kID0gLTE7CisKKwkvKgorCSAqIFRoZXNlIHR5cGVzIGNhbiBob2xkcyBKU09O IG51bGwsIHNvIG11c3QgYmUgcHJvY2Vzc2VkCisJICogYmVmb3JlIHByb2Nlc3NpbmcgamJ2TnVs bC4gV2UgZG9uJ3Qgd2FudCB0byBjb252ZXJ0CisJICogSlNPTiBudWxsLCB0byBTUUwgbnVsbCwg d2hlbiB0YXJnZXIgaXMgb2YgSlNPTi4KKwkgKi8KKwlpZiAoZXhwZWN0ZWRfdHlwaWQgPT0gSlNP TkJPSUQgfHwgZXhwZWN0ZWRfdHlwaWQgPT0gSlNPTk9JRCkKKwl7CisJCUpzb25iCSAgICpqYiA9 IEpzb25iVmFsdWVUb0pzb25iKGpidik7CisKKwkJaWYgKGV4cGVjdGVkX3R5cGlkID09IEpTT05P SUQpCisJCXsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJc3RyID0gSnNvbmJUb0NTdHJpbmcoTlVM TCwgJmpiLT5yb290LCBWQVJTSVpFKGpiKSk7CisJCQlyZXN1bHQgPSBQb2ludGVyR2V0RGF0dW0o Y3N0cmluZ190b190ZXh0KHN0cikpOworCQl9CisJCWVsc2UKKwkJCXJlc3VsdCA9IFBvaW50ZXJH ZXREYXR1bShqYik7CisKKwkJKnR5cGlkID0gZXhwZWN0ZWRfdHlwaWQ7CisJfQorCisJLyoKKwkg KiBGb3Igc3BlY2lhbCBjYXNlcyB3ZSBjYW4gc2tpcCBjb252ZXJzaW9uIHRvIEpzb25iCisJICog YW5kIHBvc3NpYmx5IElPIGNhc3QuCisJICovCisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidk51 bGwpCisJeworCQlyZXN1bHQgPSAoRGF0dW0pIDA7CisJCSppc251bGwgPSB0cnVlOworCQkqdHlw aWQgPSBleHBlY3RlZF90eXBpZDsKKwl9CisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidlN0cmlu ZykKKwl7CisJCXRleHQJICAgKnR4dCA9IGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihqYnYtPnZh bC5zdHJpbmcudmFsLAorCQkJCQkJCQkJCQkJICAgamJ2LT52YWwuc3RyaW5nLmxlbik7CisKKwkJ cmVzdWx0ID0gUG9pbnRlckdldERhdHVtKHR4dCk7CisJCSp0eXBpZCA9IFRFWFRPSUQ7CisJfQor CWVsc2UgaWYgKGpidi0+dHlwZSA9PSBqYnZOdW1lcmljKQorCXsKKwkJcmVzdWx0ID0gUG9pbnRl ckdldERhdHVtKGpidi0+dmFsLm51bWVyaWMpOworCQkqdHlwaWQgPSBOVU1FUklDT0lEOworCX0K KwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2Qm9vbCkKKwl7CisJCXJlc3VsdCA9IEJvb2xHZXRE YXR1bShqYnYtPnZhbC5ib29sZWFuKTsKKwkJKnR5cGlkID0gQk9PTE9JRDsKKwl9CisKKwkvKiBn ZW5lcmljIGNvbnZlcnNpb24gKi8KKwllbHNlCisJeworCQlKc29uYgkgICAqamIgPSBKc29uYlZh bHVlVG9Kc29uYihqYnYpOworCisJCXJlc3VsdCA9IGpzb25fcG9wdWxhdGVfdHlwZShQb2ludGVy R2V0RGF0dW0oamIpLCBKU09OQk9JRCwKKwkJCQkJCQkJCWV4cGVjdGVkX3R5cGlkLCBleHBlY3Rl ZF90eXBtb2QsCisJCQkJCQkJCQljYWNoZSwgbWN4dCwKKwkJCQkJCQkJCWlzbnVsbCwgZmFsc2Us IE5VTEwpOworCisJCSp0eXBpZCA9IGV4cGVjdGVkX3R5cGlkOworCQkqdHlwbW9kID0gZXhwZWN0 ZWRfdHlwbW9kOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sCitmb3Jl YWNoX2FfanNvbmJfaXRlcmF0ZShGb3JlYWNoQUl0ZXJhdG9yICpzZWxmLAorCQkJCQkJRGF0dW0g KnZhbHVlLCBib29sICppc251bGwsCisJCQkJCQlPaWQgKnR5cGlkLCBpbnQzMiAqdHlwbW9kKQor eworCUZvcmVhY2hBSnNvbmJJdGVyU3RhdGUgKml0ZXIgPSAoRm9yZWFjaEFKc29uYkl0ZXJTdGF0 ZSAqKSBzZWxmOworCUpzb25iSXRlcmF0b3JUb2tlbiByOworCUpzb25iVmFsdWUJamJ2OworCisJ d2hpbGUgKChyID0gSnNvbmJJdGVyYXRvck5leHQoJml0ZXItPml0LCAmamJ2LCBpdGVyLT5za2lw X25lc3RlZCkpICE9IFdKQl9ET05FKQorCXsKKwkJaXRlci0+c2tpcF9uZXN0ZWQgPSB0cnVlOwor CisJCWlmIChyID09IFdKQl9FTEVNKQorCQl7CisJCQkqdmFsdWUgPSBKc29uYlZhbHVlVG9EYXR1 bSgmamJ2LCB0eXBpZCwgdHlwbW9kLCBpc251bGwsCisJCQkJCQkJCQkgICBpdGVyLT50YXJnZXRf dHlwaWQsIGl0ZXItPnRhcmdldF90eXBtb2QsCisJCQkJCQkJCQkgICAmaXRlci0+Y2FjaGUsIGl0 ZXItPmNhY2hlX21jeHQpOworCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyoKKyAqIENyZWF0ZSBmb3JlYWNoIGFycmF5IGl0ZXJhdG9yIGZvciBqc29u YiBhcnJheQorICovCitzdGF0aWMgRm9yZWFjaEFJdGVyYXRvciAqCitjcmVhdGVfZm9yZWFjaF9h X2pzb25iX2l0ZXJhdG9yKERhdHVtIHZhbHVlLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwKKwkJ CQkJCQkJaW50IHNsaWNlLCBPaWQgdGFyZ2V0X3R5cGlkLCBpbnQzMiB0YXJnZXRfdHlwbW9kKQor eworCUZvcmVhY2hBSnNvbmJJdGVyU3RhdGUgKml0ZXIgPSBwYWxsb2MwKHNpemVvZihGb3JlYWNo QUpzb25iSXRlclN0YXRlKSk7CisJSnNvbmIJICAgKmpiOworCisJaWYgKHR5cGlkICE9IEpTT05C T0lEKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBzb3VyY2UgdHlwZSIpOworCisJaWYgKHNs aWNlID4gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygianNvbmIgYXJyYXkgaXRlcmF0b3IgZG9lc24n dCBzdXBwb3J0IHNsaWNpbmciKSkpOworCisJLyoKKwkgKiBXZSBtdXN0IGNvcHkgdGhlIEpTT04g aW50byBjdXJyZW50IGNvbnRleHQsIGJlY2F1c2UgaW5wdXQgZXhwcmVzc2lvbgorCSAqIGlzIGV2 YWx1YXRlZCBpbiBjb250ZXh0IGNsZWFuZWQgYnkgZXhlY19ldmFsX2NsZWFudXAuCisJICovCisJ amIgPSBEYXR1bUdldEpzb25iUENvcHkodmFsdWUpOworCisJLyoKKwkgKiBKc29uYiBpdGVyYXRv ciBpcyBkZXNpZ25lZCBsaWtlIGpzb25iX2FycmF5X2VsZW1lbnQuIElucHV0IHZhbHVlCisJICog bXVzdCBiZSBqc29uIGFycmF5LgorCSAqLworCWlmIChKQl9ST09UX0lTX1NDQUxBUihqYikpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygiRk9SRUFDSCBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8g YSBKU09OIGFycmF5IiksCisJCQkJIGVycmhpbnQoIkNhbm5vdCBpdGVyYXRlIG92ZXIgYSBzY2Fs YXIgdmFsdWUuIikpKTsKKwllbHNlIGlmIChKQl9ST09UX0lTX09CSkVDVChqYikpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJIGVycm1zZygiRk9SRUFDSCBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gYSBKU09O IGFycmF5IiksCisJCQkJIGVycmRldGFpbCgiQ2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3Qg dmFsdWUuIikpKTsKKworCUFzc2VydChKQl9ST09UX0lTX0FSUkFZKGpiKSk7CisKKwlpdGVyLT5p dCA9IEpzb25iSXRlcmF0b3JJbml0KCZqYi0+cm9vdCk7CisKKwlpdGVyLT50YXJnZXRfdHlwaWQg PSB0YXJnZXRfdHlwaWQ7CisJaXRlci0+dGFyZ2V0X3R5cG1vZCA9IHRhcmdldF90eXBtb2Q7CisJ aXRlci0+Y2FjaGVfbWN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJaXRlci0+cHViLml0 ZXJhdGUgPSBmb3JlYWNoX2FfanNvbmJfaXRlcmF0ZTsKKworCXJldHVybiAoRm9yZWFjaEFJdGVy YXRvciAqKSBpdGVyOworfQorCiAvKgogICoganNvbmJfc3Vic2NyaXB0X2hhbmRsZXIKICAqCQlT dWJzY3JpcHRpbmcgaGFuZGxlciBmb3IganNvbmIuCkBAIC00MDcsNyArNTg1LDggQEAganNvbmJf c3Vic2NyaXB0X2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmV4ZWNfc2V0dXAgPSBqc29u Yl9leGVjX3NldHVwLAogCQkuZmV0Y2hfc3RyaWN0ID0gdHJ1ZSwJLyogZmV0Y2ggcmV0dXJucyBO VUxMIGZvciBOVUxMIGlucHV0cyAqLwogCQkuZmV0Y2hfbGVha3Byb29mID0gdHJ1ZSwJLyogZmV0 Y2ggcmV0dXJucyBOVUxMIGZvciBiYWQgc3Vic2NyaXB0ICovCi0JCS5zdG9yZV9sZWFrcHJvb2Yg PSBmYWxzZQkvKiAuLi4gYnV0IGFzc2lnbm1lbnQgdGhyb3dzIGVycm9yICovCisJCS5zdG9yZV9s ZWFrcHJvb2YgPSBmYWxzZSwJLyogLi4uIGJ1dCBhc3NpZ25tZW50IHRocm93cyBlcnJvciAqLwor CQkuY3JlYXRlX2ZvcmVhY2hfYV9pdGVyYXRvciA9IGNyZWF0ZV9mb3JlYWNoX2FfanNvbmJfaXRl cmF0b3IKIAl9OwogCiAJUEdfUkVUVVJOX1BPSU5URVIoJnNic3JvdXRpbmVzKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3N1YnNjcmlwdGluZy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv c3Vic2NyaXB0aW5nLmgKaW5kZXggMzAxZjIxZGFjMmYuLjA4YmZlNTllZGU0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9zdWJzY3JpcHRpbmcuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9zdWJzY3JpcHRpbmcuaApAQCAtMTU0LDYgKzE1NCwzMiBAQCB0eXBlZGVmIHZvaWQgKCpTdWJz Y3JpcHRFeGVjU2V0dXApIChjb25zdCBTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwKIAkJCQkJCQkJ CVN1YnNjcmlwdGluZ1JlZlN0YXRlICpzYnNyZWZzdGF0ZSwKIAkJCQkJCQkJCVN1YnNjcmlwdEV4 ZWNTdGVwcyAqbWV0aG9kcyk7CiAKK3R5cGVkZWYgc3RydWN0IF9Gb3JlYWNoQUl0ZXJhdG9yIEZv cmVhY2hBSXRlcmF0b3I7CisKKy8qCisgKiBGb3JlYWNoQUlpdGVyYXRvciBpcyB1c2VkIGJ5IFBM cGdTUUwgRk9SRUFDSCBJTiBBUlJBWSBzdGF0ZW1lbnQuCisgKiBJbnB1dCB2YWx1ZSBzaG91bGQg bm90IGJlIG51bGwsIGFuZCBpbnNpZGUgQ3JlYXRlRm9yZWFjaEFJdGVyYXRvcgorICogcm91dGlu ZSBtdXN0IGJlIGNvcGllZCB0byBjdXJyZW50IChzdGF0ZW1lbnQpIGNvbnRleHQuICJpdGVyYXRl IgorICogcm91dGluZSBpcyBjYWxsZWQgdW5kZXIgc2hvcnQgbGlmZSBtZW1vcnkgY29udGV4dCwg dGhhdCBpcyByZXNldHRlZAorICogYWZ0ZXIgYW55IGNhbGwuCisgKi8KK3N0cnVjdCBfRm9yZWFj aEFJdGVyYXRvcgoreworCWJvb2wJCSgqaXRlcmF0ZSkgKEZvcmVhY2hBSXRlcmF0b3IgKnNlbGYs CisJCQkJCQkJRGF0dW0gKnZhbHVlLAorCQkJCQkJCWJvb2wgKmlzbnVsbCwKKwkJCQkJCQlPaWQg KnR5cGlkLAorCQkJCQkJCWludDMyICp0eXBtb2QpOworCS8qIFByaXZhdGUgZmllbGRzIG1pZ2h0 IGFwcGVhciBiZXlvbmQgdGhpcyBwb2ludC4uLiAqLworfTsKKwordHlwZWRlZiBGb3JlYWNoQUl0 ZXJhdG9yICogKCpDcmVhdGVGb3JlYWNoQUl0ZXJhdG9yKSAoRGF0dW0gdmFsdWUsCisJCQkJCQkJ CQkJCQkJICBPaWQgdHlwaWQsCisJCQkJCQkJCQkJCQkJICBpbnQzMiB0eXBtb2QsCisJCQkJCQkJ CQkJCQkJICBpbnQgc2xpY2UsCisJCQkJCQkJCQkJCQkJICBPaWQgdGFyZ2V0X3R5cGlkLAorCQkJ CQkJCQkJCQkJCSAgaW50MzIgdGFyZ2V0X3R5cG1vZCk7CisKIC8qIFN0cnVjdCByZXR1cm5lZCBi eSB0aGUgU1FMLXZpc2libGUgc3Vic2NyaXB0IGhhbmRsZXIgZnVuY3Rpb24gKi8KIHR5cGVkZWYg c3RydWN0IFN1YnNjcmlwdFJvdXRpbmVzCiB7CkBAIC0xNjMsNiArMTg5LDkgQEAgdHlwZWRlZiBz dHJ1Y3QgU3Vic2NyaXB0Um91dGluZXMKIAlib29sCQlmZXRjaF9sZWFrcHJvb2Y7CS8qIGlzIGZl dGNoIFN1YnNjcmlwdGluZ1JlZiBsZWFrcHJvb2Y/ICovCiAJYm9vbAkJc3RvcmVfbGVha3Byb29m OwkvKiBpcyBhc3NpZ25tZW50IFN1YnNjcmlwdGluZ1JlZgogCQkJCQkJCQkJICogbGVha3Byb29m PyAqLworCisJLyogcmV0dXJucyBpdGVyYXRvciB1c2VkIGJ5IFBML3BnU1FMIEZPUkVBQ0ggc3Rh dGVtZW50ICovCisJQ3JlYXRlRm9yZWFjaEFJdGVyYXRvciBjcmVhdGVfZm9yZWFjaF9hX2l0ZXJh dG9yOwogfSBTdWJzY3JpcHRSb3V0aW5lczsKIAogI2VuZGlmCQkJCQkJCS8qIFNVQlNDUklQVElO R19IICovCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUgYi9zcmMvcGwv cGxwZ3NxbC9zcmMvTWFrZWZpbGUKaW5kZXggNjNjYjk2ZmFlM2UuLjViZDBjZjMxZGZjIDEwMDY0 NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL3BsL3BscGdzcWwv c3JjL01ha2VmaWxlCkBAIC0zNSw3ICszNSw3IEBAIFJFR1JFU1NfT1BUUyA9IC0tZGJuYW1lPSQo UExfVEVTVERCKQogUkVHUkVTUyA9IHBscGdzcWxfYXJyYXkgcGxwZ3NxbF9jYWNoZSBwbHBnc3Fs X2NhbGwgcGxwZ3NxbF9jb250cm9sIFwKIAlwbHBnc3FsX2NvcHkgcGxwZ3NxbF9kb21haW4gcGxw Z3NxbF9taXNjIFwKIAlwbHBnc3FsX3JlY29yZCBwbHBnc3FsX3NpbXBsZSBwbHBnc3FsX3RyYW5z YWN0aW9uIFwKLQlwbHBnc3FsX3RyYXAgcGxwZ3NxbF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMK KwlwbHBnc3FsX3RyYXAgcGxwZ3NxbF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMgcGxwZ3NxbF9m b3JlYWNoCiAKICMgd2hlcmUgdG8gZmluZCBnZW5fa2V5d29yZGxpc3QucGwgYW5kIHN1YnNpZGlh cnkgZmlsZXMKIFRPT0xTRElSID0gJCh0b3Bfc3JjZGlyKS9zcmMvdG9vbHMKZGlmZiAtLWdpdCBh L3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0IGIvc3JjL3Bs L3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRkYzU3MWYzYzc5Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQKQEAgLTAsMCAr MSwyOTcgQEAKKy0tIGlucHV0IG11c3QgYmUgYSBKU09OIGFycmF5CitkbyAkJAorZGVjbGFyZSB4 IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkgTlVMTDo6anNvbmIgLS0gZmFp bAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7Cisk JDsKK0VSUk9SOiAgRk9SRUFDSCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwKK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgRk9SRUFDSCBv dmVyIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHgg aW4gYXJyYXkganNvbmIgJzEwJyAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUn LCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBGT1JFQUNIIGV4cHJlc3Npb24g bXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkKK0hJTlQ6ICBDYW5ub3QgaXRlcmF0ZSBvdmVy IGEgc2NhbGFyIHZhbHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2Rl X2Jsb2NrIGxpbmUgNCBhdCBGT1JFQUNIIG92ZXIgYXJyYXkKK2RvICQkCitkZWNsYXJlIHggbnVt ZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAne30nIC0tIGZhaWwKKyAg bG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitF UlJPUjogIEZPUkVBQ0ggZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIGEgSlNPTiBhcnJheQor REVUQUlMOiAgQ2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdmFsdWUuCitDT05URVhUOiAg UEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA0IGF0IEZPUkVBQ0ggb3Zl ciBhcnJheQorLS0gbnVtZXJpYyB0byBudW1lcmljCitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7 CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxMCwyMCwzMCwzLjE0LCBudWxs XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOwor JCQ7CitOT1RJQ0U6ICAxMAorTk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0 CitOT1RJQ0U6ICA8TlVMTD4KKy0tIG51bWVyaWMgdG8gaW50IGJ5IGNhc3QKK2RvICQkCitkZWNs YXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbMTAsMjAsMzAs My4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9v cDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorTk9U SUNFOiAgMworTk9USUNFOiAgPE5VTEw+CistLSB0ZXN0IG9mIEZPVU5EIHZhcmlhYmxlCitkbyAk JAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAnWzEw XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworICByYWlz ZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJ Q0U6ICBGT1VORDogdAorLS0gdGVzdCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUg eCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1tdJworICBsb29wCisg ICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CisgIHJhaXNlIG5vdGljZSAnRk9V TkQ6ICUnLCBmb3VuZDsKK2VuZDsKKyQkOworTk9USUNFOiAgRk9VTkQ6IGYKKy0tIGNvbnZlcnNp b24gIjMuMTQiIHRvIGludCBzaG91bGQgdG8gZmFpbCBkdWUgSU8gY2FzdAorZG8gJCQKK2RlY2xh cmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1siMTAiLDIwLDMw LCIzLjE0Il0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsK K2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorRVJST1I6 ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiMy4xNCIKK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgRk9SRUFDSCBv dmVyIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGJvb2xlYW47CitiZWdpbgorICBmb3JlYWNoIHgg aW4gYXJyYXkganNvbmIgJ1t0cnVlLCBmYWxzZV0nCisgIGxvb3AKKyAgaWYgeCB0aGVuCisgICAg cmFpc2Ugbm90aWNlICd0cnVlJzsKKyAgZWxzZQorICAgIHJhaXNlIG5vdGljZSAnZmFsc2UnOwor ICBlbmQgaWY7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICB0cnVlCitOT1RJQ0U6 ICBmYWxzZQorLS0ganNvbmIgdG8ganNvbmIKK2RvICQkCitkZWNsYXJlIHgganNvbmI7CitiZWdp bgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGki XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOwor JCQ7CitOT1RJQ0U6ICAxMAorTk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0 CitOT1RJQ0U6ICBudWxsCitOT1RJQ0U6ICAiSGkiCistLSBqc29uYiB0byBqc29uCitkbyAkJAor ZGVjbGFyZSB4IGpzb247CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxMCwy MCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7 CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxMAorTk9USUNFOiAgMjAKK05PVElD RTogIDMwCitOT1RJQ0U6ICAzLjE0CitOT1RJQ0U6ICBudWxsCitOT1RJQ0U6ICAiSGkiCistLSBp dGVyYXRpb24gb3ZlciBjb21wb3NpdGVzCitkbyAkJAorZGVjbGFyZSB4IGludDsgeSBudW1lcmlj OyB6IHZhcmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHksIHogaW4gYXJyYXkganNvbmIgJ1t7 fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1d JworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgeCwgeSwgejsK KyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6 OiA8TlVMTD4KK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiBIaQorTk9USUNFOiAg eDogPE5VTEw+LCB5OiAzLjE0LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDEwLCB5OiAzLjE0LCB6 OiBIaQorY3JlYXRlIHR5cGUgdDMgYXMgKHggaW50LCB5IG51bWVyaWMsIHogdmFyY2hhcik7Citk byAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFjaCBjIGluIGFycmF5IGpzb25iICdb e30sIHsieiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9 XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIGMueCwgYy55 LCBjLno7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxO VUxMPiwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogSGkKK05P VElDRTogIHg6IDxOVUxMPiwgeTogMy4xNCwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwgeTog My4xNCwgejogSGkKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMueCwg Yy55LCBjLnogaW4gYXJyYXkganNvbmIgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsi eiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4 OiAlLCB5OiAlLCB6OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsK K05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDxO VUxMPiwgeTogPE5VTEw+LCB6OiBIaQorTk9USUNFOiAgeDogPE5VTEw+LCB5OiAzLjE0LCB6OiA8 TlVMTD4KK05PVElDRTogIHg6IDEwLCB5OiAzLjE0LCB6OiBIaQorZHJvcCB0eXBlIHQzOworLS0g dGFyZ2V0IGNhbiBiZSBhIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGludFtdOworYmVnaW4KKyAg Zm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbWzEsMiwzXSxbNCw1LDZdXScKKyAgbG9vcAorICAg IHJhaXNlIG5vdGljZSAnJSAlICUnLCB4WzFdLCB4WzJdLCB4WzNdOworICBlbmQgbG9vcDsKK2Vu ZDsKKyQkOworTk9USUNFOiAgMSAyIDMKK05PVElDRTogIDQgNSA2CitkbyAkJAorZGVjbGFyZSB4 IHZhcmNoYXJbXTsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAnW1siSGkiLCJI ZWxsbyJdLFsiSGVsbG8iLCJIaSJdXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywg eFsxXSwgeFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIEhpIEhlbGxvCitO T1RJQ0U6ICBIZWxsbyBIaQorZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBm b3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0n CisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29w OworZW5kOworJCQ7CitOT1RJQ0U6ICBIaSBIZWxsbworTk9USUNFOiAgSGVsbG8gSGkKK2RvICQk CitkZWNsYXJlIHggaW50W107IHkgdmFyY2hhcjsKK2JlZ2luCisgIGZvcmVhY2ggeCwgeSBpbiBh cnJheSBqc29uYiAnW3sieCI6WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUsNl0sICJ5Ijoi SGkifV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywgeFsxXSwgeFsy XSwgeFszXSwgeTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEgMiAzLCB5OiBI aQorTk9USUNFOiAgNCA1IDYsIHk6IEhpCitjcmVhdGUgdHlwZSB0MiBhcyAoeCBpbnRbXSwgeSB2 YXJjaGFyKTsKK2RvICQkCitkZWNsYXJlIGMgdDI7CitiZWdpbgorICBmb3JlYWNoIGMgaW4gYXJy YXkganNvbmIgJ1t7IngiOlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4IjpbNCw1LDZdLCAieSI6Ikhp In1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJSwgeTogJScsIGMueFsxXSwgYy54 WzJdLCBjLnhbM10sIGMueTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEgMiAz LCB5OiBIaQorTk9USUNFOiAgNCA1IDYsIHk6IEhpCitkcm9wIHR5cGUgdDI7CistLSBFWElUIGFu ZCBDT05USU5VRSBjYW4gYmUgdHJpZ2dlcmVkIGJ5IExPT1BfUkNfUFJPQ0VTU0lORworZG8gJCQK K2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgICdbMSwy LDMsNCw1XScKKyAgbG9vcAorICAgIGV4aXQgd2hlbiB4ID0gMzsKKyAgICByYWlzZSBub3RpY2Ug JyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMQorTk9USUNFOiAgMgor ZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIg J1sxLDIsMyw0LDVdJworICBsb29wCisgICAgY29udGludWUgd2hlbiB4ICUgMiA9IDA7CisgICAg cmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEK K05PVElDRTogIDMKK05PVElDRTogIDUKKy0tIFZhcmlhYmxlIGluc3RlYWQgb2Ygc3RyaW5nCitE TyAkJAorZGVjbGFyZQorICB4IGludDsKKyAgYXJyIGpzb25iOworYmVnaW4KKyAgc2VsZWN0IGpz b25iX2FnZyhpKSBpbnRvIGFycgorICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMykgZyhpKTsK KworICBmb3JlYWNoIHggaW4gYXJyYXkgYXJyCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUn LCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMQorTk9USUNFOiAgMgorTk9U SUNFOiAgMwpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkIGIvc3Jj L3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkCmluZGV4IDZmZjI3MDA2Y2ZjLi42MDllZWQ3YTI4 ZCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9w bC9wbHBnc3FsL3NyYy9tZXNvbi5idWlsZApAQCAtODgsNiArODgsNyBAQCB0ZXN0cyArPSB7CiAg ICAgICAncGxwZ3NxbF90cmFwJywKICAgICAgICdwbHBnc3FsX3RyaWdnZXInLAogICAgICAgJ3Bs cGdzcWxfdmFycHJvcHMnLAorICAgICAgJ3BscGdzcWxfZm9yZWFjaCcsCiAgICAgXSwKICAgfSwK IH0KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgYi9zcmMvcGwvcGxw Z3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IDg0NTUyZTMyYzg3Li4zMzFkNjQxMTljMSAxMDA2NDQK LS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9z cmMvcGxfZXhlYy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAibWIvc3RyaW5naW5mb19t Yi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgorI2luY2x1ZGUgIm5vZGVzL3N1YnNjcmlwdGluZy5oIgogI2luY2x1ZGUgIm5vZGVzL3N1cHBv cnRub2Rlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJw YXJzZXIvcGFyc2VfY29lcmNlLmgiCkBAIC0yOTk0LDQwICsyOTk1LDQ5IEBAIGV4ZWNfc3RtdF9m b3JjKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9mb3JjICpzdG10KQog CXJldHVybiByYzsKIH0KIAotCiAvKiAtLS0tLS0tLS0tCi0gKiBleGVjX3N0bXRfZm9yZWFjaF9h CQkJTG9vcCBvdmVyIGVsZW1lbnRzIG9yIHNsaWNlcyBvZiBhbiBhcnJheQotICoKLSAqIFdoZW4g bG9vcGluZyBvdmVyIGVsZW1lbnRzLCB0aGUgbG9vcCB2YXJpYWJsZSBpcyB0aGUgc2FtZSB0eXBl IHRoYXQgdGhlCi0gKiBhcnJheSBzdG9yZXMgKGVnOiBpbnRlZ2VyKSwgd2hlbiBsb29waW5nIHRo cm91Z2ggc2xpY2VzLCB0aGUgbG9vcCB2YXJpYWJsZQotICogaXMgYW4gYXJyYXkgb2Ygc2l6ZSBh bmQgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgc2xpY2UuCi0gKiAtLS0tLS0t LS0tCisgKiBleGVjX3N0bXRfZm9yZWFjaF9hCQkJTG9vcCBvdmVyIGVsZW1lbnRzIGluIGFuIGFy cmF5IG9yIGpzb25iIGFycmF5CisgICogLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50CiBleGVj X3N0bXRfZm9yZWFjaF9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9m b3JlYWNoX2EgKnN0bXQpCiB7Ci0JQXJyYXlUeXBlICAqYXJyOwotCU9pZAkJCWFycnR5cGU7Ci0J aW50MzIJCWFycnR5cG1vZDsKLQlQTHBnU1FMX2RhdHVtICpsb29wX3ZhcjsKLQlPaWQJCQlsb29w X3Zhcl9lbGVtX3R5cGU7Ci0JYm9vbAkJZm91bmQgPSBmYWxzZTsKKwlEYXR1bQkJZXhwcjsKKwlP aWQJCQlleHByX3R5cGlkOworCWludDMyCQlleHByX3R5cG1vZDsKKwlib29sCQlpc251bGw7CisJ UExwZ1NRTF9kYXR1bSAqdGFyZ2V0X3ZhcjsKKwlPaWQJCQl0YXJnZXRfdHlwaWQ7CisJaW50MzIJ CXRhcmdldF90eXBtb2Q7CisJT2lkCQkJdGFyZ2V0X2NvbGxhdGlvbjsKKwlEYXR1bQkJdmFsdWU7 CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKIAlpbnQJCQlyYyA9IFBMUEdTUUxfUkNf T0s7CisJY29uc3Qgc3RydWN0IFN1YnNjcmlwdFJvdXRpbmVzICpzYnJvdXRpbmVzOworCUZvcmVh Y2hBSXRlcmF0b3IgKml0ZXJhdG9yOwogCU1lbW9yeUNvbnRleHQgc3RtdF9tY29udGV4dDsKKwlN ZW1vcnlDb250ZXh0IHRtcF9jeHQ7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCUFycmF5 SXRlcmF0b3IgYXJyYXlfaXRlcmF0b3I7Ci0JT2lkCQkJaXRlcmF0b3JfcmVzdWx0X3R5cGU7Ci0J aW50MzIJCWl0ZXJhdG9yX3Jlc3VsdF90eXBtb2Q7Ci0JRGF0dW0JCXZhbHVlOwotCWJvb2wJCWlz bnVsbDsKKwlib29sCQlmb3VuZCA9IGZhbHNlOwogCi0JLyogZ2V0IHRoZSB2YWx1ZSBvZiB0aGUg YXJyYXkgZXhwcmVzc2lvbiAqLwotCXZhbHVlID0gZXhlY19ldmFsX2V4cHIoZXN0YXRlLCBzdG10 LT5leHByLCAmaXNudWxsLCAmYXJydHlwZSwgJmFycnR5cG1vZCk7CisJLyogZ2V0IHRoZSB2YWx1 ZSBvZiB0aGUgZXhwcmVzc2lvbiAqLworCWV4cHIgPSBleGVjX2V2YWxfZXhwcihlc3RhdGUsIHN0 bXQtPmV4cHIsICZpc251bGwsCisJCQkJCQkgICZleHByX3R5cGlkLCAmZXhwcl90eXBtb2QpOwog CWlmIChpc251bGwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9OVUxM X1ZBTFVFX05PVF9BTExPV0VEKSwKIAkJCQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVz dCBub3QgYmUgbnVsbCIpKSk7CiAKKwlzYnJvdXRpbmVzID0gZ2V0U3Vic2NyaXB0aW5nUm91dGlu ZXMoZXhwcl90eXBpZCwgTlVMTCk7CisJaWYgKCFzYnJvdXRpbmVzKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCSBlcnJtc2co ImNhbm5vdCBpdGVyYXRlIG92ZXIgdHlwZSAlcyBiZWNhdXNlIGl0IGRvZXMgbm90IHN1cHBvcnQg c3Vic2NyaXB0aW5nIiwKKwkJCQkJCWZvcm1hdF90eXBlX2JlKGV4cHJfdHlwaWQpKSkpOworCisJ QXNzZXJ0KHNicm91dGluZXMtPmNyZWF0ZV9mb3JlYWNoX2FfaXRlcmF0b3IpOworCiAJLyoKIAkg KiBEbyBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIHRoZSBjb2RlIGJlbG93IGluIHN0bXRfbWNvbnRl eHQsIHRvIGF2b2lkIGFueQogCSAqIGxlYWtzIGZyb20gY2FsbGVkIHN1YnJvdXRpbmVzLiAgV2Ug bmVlZCBhIHByaXZhdGUgc3RtdF9tY29udGV4dCBzaW5jZQpAQCAtMzAzNyw3OSArMzA0NywzNCBA QCBleGVjX3N0bXRfZm9yZWFjaF9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxf c3RtdF9mb3JlYWNoX2EgKnN0bXQpCiAJcHVzaF9zdG10X21jb250ZXh0KGVzdGF0ZSk7CiAJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdG10X21jb250ZXh0KTsKIAotCS8qIGNo ZWNrIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIC0gbXVzdCBiZSBhbiBhcnJheSAqLwotCWlm ICghT2lkSXNWYWxpZChnZXRfZWxlbWVudF90eXBlKGFycnR5cGUpKSkKLQkJZXJlcG9ydChFUlJP UiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKLQkJCQkgZXJybXNn KCJGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCB5aWVsZCBhbiBhcnJheSwgbm90IHR5cGUgJXMiLAot CQkJCQkJZm9ybWF0X3R5cGVfYmUoYXJydHlwZSkpKSk7CisJLyogU2V0IHVwIHRoZSB0YXJnZXQg KGxvb3ApIHZhcmlhYmxlICovCisJdGFyZ2V0X3ZhciA9IGVzdGF0ZS0+ZGF0dW1zW3N0bXQtPnZh cm5vXTsKKworCXBscGdzcWxfZXhlY19nZXRfZGF0dW1fdHlwZV9pbmZvKGVzdGF0ZSwgdGFyZ2V0 X3ZhciwKKwkJCQkJCQkJCSAmdGFyZ2V0X3R5cGlkLCAmdGFyZ2V0X3R5cG1vZCwKKwkJCQkJCQkJ CSAmdGFyZ2V0X2NvbGxhdGlvbik7CiAKIAkvKgotCSAqIFdlIG11c3QgY29weSB0aGUgYXJyYXkg aW50byBzdG10X21jb250ZXh0LCBlbHNlIGl0IHdpbGwgZGlzYXBwZWFyIGluCi0JICogZXhlY19l dmFsX2NsZWFudXAuICBUaGlzIGlzIGFubm95aW5nLCBidXQgY2xlYW51cCB3aWxsIGNlcnRhaW5s eSBoYXBwZW4KLQkgKiB3aGlsZSBydW5uaW5nIHRoZSBsb29wIGJvZHksIHNvIHdlIGhhdmUgbGl0 dGxlIGNob2ljZS4KKwkgKiBpbnNpZGUgaXRlcmF0b3IgY29uc3Ryb2N0b3IsIHRoZSBleHByIHNo b3VsZCBiZSBjb3BpZWQgdG8KKwkgKiBjdXJyZW50IG1lbW9yeSBjb250ZXh0IChzdG10X21jb250 ZXh0KS4gV2l0aG91dCBpdCwgaXQgd2lsbCBiZSByZWxlYXNlZAorCSAqIGJ5IG5leHQgZXhlY19l dmFsX2NsZWFudXAuIFRoZSBpdGVyYXRvciBjb25zdHJ1Y3RvciBzaG91bGQKKwkgKiBiZSBjYWxs ZWQgdW5kZXIgc3RtdCBtZW1vcnkgY29udGV4dC4KIAkgKi8KLQlhcnIgPSBEYXR1bUdldEFycmF5 VHlwZVBDb3B5KHZhbHVlKTsKKwlpdGVyYXRvciA9IHNicm91dGluZXMtPmNyZWF0ZV9mb3JlYWNo X2FfaXRlcmF0b3IoZXhwciwKKwkJCQkJCQkJCQkJCQkgZXhwcl90eXBpZCwgZXhwcl90eXBtb2Qs CisJCQkJCQkJCQkJCQkJIHN0bXQtPnNsaWNlLCB0YXJnZXRfdHlwaWQsCisJCQkJCQkJCQkJCQkJ IHRhcmdldF90eXBtb2QpOwogCiAJLyogQ2xlYW4gdXAgYW55IGxlZnRvdmVyIHRlbXBvcmFyeSBt ZW1vcnkgKi8KIAlleGVjX2V2YWxfY2xlYW51cChlc3RhdGUpOwogCi0JLyogU2xpY2UgZGltZW5z aW9uIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFycmF5IGRpbWVuc2lvbiAqLwotCWlm IChzdG10LT5zbGljZSA8IDAgfHwgc3RtdC0+c2xpY2UgPiBBUlJfTkRJTShhcnIpKQotCQllcmVw b3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfQVJSQVlfU1VCU0NSSVBUX0VSUk9SKSwK LQkJCQkgZXJybXNnKCJzbGljZSBkaW1lbnNpb24gKCVkKSBpcyBvdXQgb2YgdGhlIHZhbGlkIHJh bmdlIDAuLiVkIiwKLQkJCQkJCXN0bXQtPnNsaWNlLCBBUlJfTkRJTShhcnIpKSkpOwotCi0JLyog U2V0IHVwIHRoZSBsb29wIHZhcmlhYmxlIGFuZCBzZWUgaWYgaXQgaXMgb2YgYW4gYXJyYXkgdHlw ZSAqLwotCWxvb3BfdmFyID0gZXN0YXRlLT5kYXR1bXNbc3RtdC0+dmFybm9dOwotCWlmIChsb29w X3Zhci0+ZHR5cGUgPT0gUExQR1NRTF9EVFlQRV9SRUMgfHwKLQkJbG9vcF92YXItPmR0eXBlID09 IFBMUEdTUUxfRFRZUEVfUk9XKQotCXsKLQkJLyoKLQkJICogUmVjb3JkL3JvdyB2YXJpYWJsZSBp cyBjZXJ0YWlubHkgbm90IG9mIGFycmF5IHR5cGUsIGFuZCBtaWdodCBub3QKLQkJICogYmUgaW5p dGlhbGl6ZWQgYXQgYWxsIHlldCwgc28gZG9uJ3QgdHJ5IHRvIGdldCBpdHMgdHlwZQotCQkgKi8K LQkJbG9vcF92YXJfZWxlbV90eXBlID0gSW52YWxpZE9pZDsKLQl9Ci0JZWxzZQotCQlsb29wX3Zh cl9lbGVtX3R5cGUgPSBnZXRfZWxlbWVudF90eXBlKHBscGdzcWxfZXhlY19nZXRfZGF0dW1fdHlw ZShlc3RhdGUsCi0JCQkJCQkJCQkJCQkJCQkJCQkgIGxvb3BfdmFyKSk7CisJdG1wX2N4dCA9IEFs bG9jU2V0Q29udGV4dENyZWF0ZShzdG10X21jb250ZXh0LAorCQkJCQkJCQkJIkZPUkVBQ0ggSU4g QVJSQVkgdGVtcG9yYXJ5IGN4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsK IAotCS8qCi0JICogU2FuaXR5LWNoZWNrIHRoZSBsb29wIHZhcmlhYmxlIHR5cGUuICBXZSBkb24n dCB0cnkgdmVyeSBoYXJkIGhlcmUsIGFuZAotCSAqIHNob3VsZCBub3QgYmUgdG9vIHBpY2t5IHNp bmNlIGl0J3MgcG9zc2libGUgdGhhdCBleGVjX2Fzc2lnbl92YWx1ZSBjYW4KLQkgKiBjb2VyY2Ug dmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcy4gIEJ1dCBpdCBzZWVtcyB3b3J0aHdoaWxlIHRvIGNv bXBsYWluCi0JICogaWYgdGhlIGFycmF5LW5lc3Mgb2YgdGhlIGxvb3AgdmFyaWFibGUgaXMgbm90 IHJpZ2h0LgotCSAqLwotCWlmIChzdG10LT5zbGljZSA+IDAgJiYgbG9vcF92YXJfZWxlbV90eXBl ID09IEludmFsaWRPaWQpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBVFlQRV9NSVNNQVRDSCksCi0JCQkJIGVycm1zZygiRk9SRUFDSCAuLi4gU0xJQ0UgbG9vcCB2 YXJpYWJsZSBtdXN0IGJlIG9mIGFuIGFycmF5IHR5cGUiKSkpOwotCWlmIChzdG10LT5zbGljZSA9 PSAwICYmIGxvb3BfdmFyX2VsZW1fdHlwZSAhPSBJbnZhbGlkT2lkKQotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAotCQkJCSBlcnJtc2co IkZPUkVBQ0ggbG9vcCB2YXJpYWJsZSBtdXN0IG5vdCBiZSBvZiBhbiBhcnJheSB0eXBlIikpKTsK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wX2N4dCk7CiAKLQkvKiBDcmVhdGUgYW4gaXRlcmF0 b3IgdG8gc3RlcCB0aHJvdWdoIHRoZSBhcnJheSAqLwotCWFycmF5X2l0ZXJhdG9yID0gYXJyYXlf Y3JlYXRlX2l0ZXJhdG9yKGFyciwgc3RtdC0+c2xpY2UsIE5VTEwpOwotCi0JLyogSWRlbnRpZnkg aXRlcmF0b3IgcmVzdWx0IHR5cGUgKi8KLQlpZiAoc3RtdC0+c2xpY2UgPiAwKQotCXsKLQkJLyog V2hlbiBzbGljaW5nLCBub21pbmFsIHR5cGUgb2YgcmVzdWx0IGlzIHNhbWUgYXMgYXJyYXkgdHlw ZSAqLwotCQlpdGVyYXRvcl9yZXN1bHRfdHlwZSA9IGFycnR5cGU7Ci0JCWl0ZXJhdG9yX3Jlc3Vs dF90eXBtb2QgPSBhcnJ0eXBtb2Q7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIFdpdGhvdXQgc2xpY2lu ZywgcmVzdWx0cyBhcmUgaW5kaXZpZHVhbCBhcnJheSBlbGVtZW50cyAqLwotCQlpdGVyYXRvcl9y ZXN1bHRfdHlwZSA9IEFSUl9FTEVNVFlQRShhcnIpOwotCQlpdGVyYXRvcl9yZXN1bHRfdHlwbW9k ID0gYXJydHlwbW9kOwotCX0KLQotCS8qIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXkgZWxlbWVudHMg b3Igc2xpY2VzICovCi0Jd2hpbGUgKGFycmF5X2l0ZXJhdGUoYXJyYXlfaXRlcmF0b3IsICZ2YWx1 ZSwgJmlzbnVsbCkpCisJd2hpbGUgKGl0ZXJhdG9yLT5pdGVyYXRlKGl0ZXJhdG9yLCAmdmFsdWUs ICZpc251bGwsICZ0eXBpZCwgJnR5cG1vZCkpCiAJewogCQlmb3VuZCA9IHRydWU7CQkJLyogbG9v cGVkIGF0IGxlYXN0IG9uY2UgKi8KIApAQCAtMzExNywxMiArMzA4Miw5IEBAIGV4ZWNfc3RtdF9m b3JlYWNoX2EoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgUExwZ1NRTF9zdG10X2ZvcmVhY2hf YSAqc3RtdCkKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJCS8qIEFz c2lnbiBjdXJyZW50IGVsZW1lbnQvc2xpY2UgdG8gdGhlIGxvb3AgdmFyaWFibGUgKi8KLQkJZXhl Y19hc3NpZ25fdmFsdWUoZXN0YXRlLCBsb29wX3ZhciwgdmFsdWUsIGlzbnVsbCwKLQkJCQkJCSAg aXRlcmF0b3JfcmVzdWx0X3R5cGUsIGl0ZXJhdG9yX3Jlc3VsdF90eXBtb2QpOworCQlleGVjX2Fz c2lnbl92YWx1ZShlc3RhdGUsIHRhcmdldF92YXIsIHZhbHVlLCBpc251bGwsIHR5cGlkLCB0eXBt b2QpOwogCi0JCS8qIEluIHNsaWNlIGNhc2UsIHZhbHVlIGlzIHRlbXBvcmFyeTsgbXVzdCBmcmVl IGl0IHRvIGF2b2lkIGxlYWthZ2UgKi8KLQkJaWYgKHN0bXQtPnNsaWNlID4gMCkKLQkJCXBmcmVl KERhdHVtR2V0UG9pbnRlcih2YWx1ZSkpOworCQlNZW1vcnlDb250ZXh0UmVzZXQodG1wX2N4dCk7 CiAKIAkJLyoKIAkJICogRXhlY3V0ZSB0aGUgc3RhdGVtZW50cwpAQCAtMzEzMSw3ICszMDkzLDcg QEAgZXhlY19zdG10X2ZvcmVhY2hfYShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FM X3N0bXRfZm9yZWFjaF9hICpzdG10KQogCiAJCUxPT1BfUkNfUFJPQ0VTU0lORyhzdG10LT5sYWJl bCwgYnJlYWspOwogCi0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdG10X21jb250ZXh0KTsKKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcF9jeHQpOwogCX0KIAogCS8qIFJlc3RvcmUgbWVtb3J5 IGNvbnRleHQgc3RhdGUgKi8KQEAgLTU1MzcsNiArNTQ5OSw1MyBAQCBwbHBnc3FsX2V4ZWNfZ2V0 X2RhdHVtX3R5cGVfaW5mbyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCWJyZWFrOwog CQkJfQogCisJCWNhc2UgUExQR1NRTF9EVFlQRV9ST1c6CisJCQl7CisJCQkJUExwZ1NRTF9yb3cg KnJvdyA9IChQTHBnU1FMX3JvdyAqKSBkYXR1bTsKKworCQkJCWlmICghcm93LT5yb3d0dXBkZXNj KQorCQkJCXsKKwkJCQkJaW50CQkJaTsKKworCQkJCQlyb3ctPnJvd3R1cGRlc2MgPSBDcmVhdGVU ZW1wbGF0ZVR1cGxlRGVzYyhyb3ctPm5maWVsZHMpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBy b3ctPm5maWVsZHM7IGkrKykKKwkJCQkJeworCQkJCQkJUExwZ1NRTF9kYXR1bSAqdmFyID0gZXN0 YXRlLT5kYXR1bXNbcm93LT52YXJub3NbaV1dOworCQkJCQkJT2lkCQkJdmFydHlwaWQ7CisJCQkJ CQlpbnQzMgkJdmFydHlwbW9kOworCQkJCQkJT2lkCQkJdmFyY29sbGF0aW9uOworCisJCQkJCQkv KgorCQkJCQkJICogV2UgY2Fubm90IHVzZSBmaWVsZG5hbWVzIGZvciB0dXBkZXNjZW50cnksIGJl Y2F1c2UKKwkJCQkJCSAqIHRoZXNlIG5hbWVzIGNhbiBiZSBzdWZmaXhlZCBieSBuYW1lIG9mIHJv dyB2YXJpYWJsZS4KKwkJCQkJCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBQTHBnU1FMX3JlY2ZpZWxk IGlzIG5vdCBjYXN0ZWQgdG8KKwkJCQkJCSAqIFBMcGdTUUxfdmFyaWFibGUuCisJCQkJCQkgKi8K KwkJCQkJCXBscGdzcWxfZXhlY19nZXRfZGF0dW1fdHlwZV9pbmZvKGVzdGF0ZSwgdmFyLAorCQkJ CQkJCQkJCQkJCQkgJnZhcnR5cGlkLCAmdmFydHlwbW9kLAorCQkJCQkJCQkJCQkJCQkgJnZhcmNv bGxhdGlvbik7CisKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeShyb3ctPnJvd3R1cGRlc2MsIGkg KyAxLAorCQkJCQkJCQkJCSAgIHZhci0+cmVmbmFtZSwgdmFydHlwaWQsIHZhcnR5cG1vZCwKKwkJ CQkJCQkJCQkgICAwKTsKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlvbihyb3ctPnJv d3R1cGRlc2MsIGkgKyAxLAorCQkJCQkJCQkJCQkJCXZhcmNvbGxhdGlvbik7CisJCQkJCX0KKwor CQkJCQlUdXBsZURlc2NGaW5hbGl6ZShyb3ctPnJvd3R1cGRlc2MpOworCisJCQkJCS8qIE1ha2Ug c3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHlwZS90eXBtb2Qgc2V0dGluZyAqLworCQkJCQlCbGVzc1R1 cGxlRGVzYyhyb3ctPnJvd3R1cGRlc2MpOworCQkJCX0KKworCQkJCSp0eXBlSWQgPSByb3ctPnJv d3R1cGRlc2MtPnRkdHlwZWlkOworCQkJCSp0eXBNb2QgPSByb3ctPnJvd3R1cGRlc2MtPnRkdHlw bW9kOworCQkJCS8qIGNvbXBvc2l0ZSB0eXBlcyBhcmUgbmV2ZXIgY29sbGF0YWJsZSAqLworCQkJ CSpjb2xsYXRpb24gPSBJbnZhbGlkT2lkOworCQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2UgUExQ R1NRTF9EVFlQRV9SRUM6CiAJCQl7CiAJCQkJUExwZ1NRTF9yZWMgKnJlYyA9IChQTHBnU1FMX3Jl YyAqKSBkYXR1bTsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmggYi9z cmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCmluZGV4IGFkZGIxNGE5OTU5Li41Y2JkYjRlY2Q5 ZCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaAorKysgYi9zcmMvcGwv cGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCkBAIC0yOTksNiArMjk5LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg UExwZ1NRTF9kYXR1bQogewogCVBMcGdTUUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlpbnQJCQlkbm87 CisJY2hhcgkgICAqcmVmbmFtZTsKIH0gUExwZ1NRTF9kYXR1bTsKIAogLyoKQEAgLTQ0NCw5ICs0 NDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3JlY2ZpZWxkCiB7CiAJUExwZ1NRTF9kYXR1 bV90eXBlIGR0eXBlOwogCWludAkJCWRubzsKKwljaGFyCSAgICpmaWVsZG5hbWU7CQkvKiBuYW1l IG9mIGZpZWxkICovCiAJLyogZW5kIG9mIFBMcGdTUUxfZGF0dW0gZmllbGRzICovCiAKLQljaGFy CSAgICpmaWVsZG5hbWU7CQkvKiBuYW1lIG9mIGZpZWxkICovCiAJaW50CQkJcmVjcGFyZW50bm87 CS8qIGRubyBvZiBwYXJlbnQgcmVjb3JkICovCiAJaW50CQkJbmV4dGZpZWxkOwkJLyogZG5vIG9m IG5leHQgY2hpbGQsIG9yIC0xIGlmIG5vbmUgKi8KIAl1aW50NjQJCXJlY3R1cGxlZGVzY2lkOyAv KiByZWNvcmQncyB0dXBsZWRlc2MgSUQgYXMgb2YgbGFzdCBsb29rdXAgKi8KZGlmZiAtLWdpdCBh L3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbCBiL3NyYy9wbC9wbHBn c3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYTY0MDA0NDE3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGwvcGxw Z3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwKQEAgLTAsMCArMSwyNTIgQEAKKy0tIGlu cHV0IG11c3QgYmUgYSBKU09OIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdp bgorICBmb3JlYWNoIHggaW4gYXJyYXkgTlVMTDo6anNvbmIgLS0gZmFpbAorICBsb29wCisgICAg cmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2Rl Y2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICcxMCcg LS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7Citl bmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4 IGluIGFycmF5IGpzb25iICd7fScgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICcl JywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gbnVtZXJpYyB0byBudW1lcmljCitk byAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNv bmIgJ1sxMCwyMCwzMCwzLjE0LCBudWxsXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScs IHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIG51bWVyaWMgdG8gaW50IGJ5IGNhc3QK K2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25i ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4 OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSB0ZXN0IG9mIEZPVU5EIHZhcmlhYmxlCitk byAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAn WzEwXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworICBy YWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7CiskJDsKKworLS0gdGVzdCBvZiBG T1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHgg aW4gYXJyYXkganNvbmIgJ1tdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAg ZW5kIGxvb3A7CisgIHJhaXNlIG5vdGljZSAnRk9VTkQ6ICUnLCBmb3VuZDsKK2VuZDsKKyQkOwor CistLSBjb252ZXJzaW9uICIzLjE0IiB0byBpbnQgc2hvdWxkIHRvIGZhaWwgZHVlIElPIGNhc3QK K2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25i ICdbIjEwIiwyMCwzMCwiMy4xNCJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsK KyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBib29sZWFuOworYmVn aW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbdHJ1ZSwgZmFsc2VdJworICBsb29wCisg IGlmIHggdGhlbgorICAgIHJhaXNlIG5vdGljZSAndHJ1ZSc7CisgIGVsc2UKKyAgICByYWlzZSBu b3RpY2UgJ2ZhbHNlJzsKKyAgZW5kIGlmOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBq c29uYiB0byBqc29uYgorZG8gJCQKK2RlY2xhcmUgeCBqc29uYjsKK2JlZ2luCisgIGZvcmVhY2gg eCBpbiBhcnJheSBqc29uYiAnWzEwLDIwLDMwLDMuMTQsIG51bGwsICJIaSJdJworICBsb29wCisg ICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0ganNv bmIgdG8ganNvbgorZG8gJCQKK2RlY2xhcmUgeCBqc29uOworYmVnaW4KKyAgZm9yZWFjaCB4IGlu IGFycmF5IGpzb25iICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICBy YWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBpdGVyYXRp b24gb3ZlciBjb21wb3NpdGVzCitkbyAkJAorZGVjbGFyZSB4IGludDsgeSBudW1lcmljOyB6IHZh cmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHksIHogaW4gYXJyYXkganNvbmIgJ1t7fSwgeyJ6 IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBs b29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgeCwgeSwgejsKKyAgZW5k IGxvb3A7CitlbmQ7CiskJDsKKworY3JlYXRlIHR5cGUgdDMgYXMgKHggaW50LCB5IG51bWVyaWMs IHogdmFyY2hhcik7CisKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMg aW4gYXJyYXkganNvbmIgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwg IngiOjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAl LCB6OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQK K2RlY2xhcmUgYyB0MzsKK2JlZ2luCisgIGZvcmVhY2ggYy54LCBjLnksIGMueiBpbiBhcnJheSBq c29uYiAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAieCI6MTAsICJ5 IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUsIHo6ICUnLCBj LngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkcm9wIHR5cGUgdDM7CisK Ky0tIHRhcmdldCBjYW4gYmUgYSBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBpbnRbXTsKK2JlZ2lu CisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAnW1sxLDIsM10sWzQsNSw2XV0nCisgIGxvb3AK KyAgICByYWlzZSBub3RpY2UgJyUgJSAlJywgeFsxXSwgeFsyXSwgeFszXTsKKyAgZW5kIGxvb3A7 CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBmb3Jl YWNoIHggaW4gYXJyYXkganNvbmIgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0nCisg IGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29wOwor ZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFj aCB4IGluIGFycmF5IGpzb25iICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhpIl1dJworICBs b29wCisgICAgcmFpc2Ugbm90aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQgbG9vcDsKK2Vu ZDsKKyQkOworCitkbyAkJAorZGVjbGFyZSB4IGludFtdOyB5IHZhcmNoYXI7CitiZWdpbgorICBm b3JlYWNoIHgsIHkgaW4gYXJyYXkganNvbmIgJ1t7IngiOlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4 IjpbNCw1LDZdLCAieSI6IkhpIn1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJSwg eTogJScsIHhbMV0sIHhbMl0sIHhbM10sIHk7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2Ny ZWF0ZSB0eXBlIHQyIGFzICh4IGludFtdLCB5IHZhcmNoYXIpOworCitkbyAkJAorZGVjbGFyZSBj IHQyOworYmVnaW4KKyAgZm9yZWFjaCBjIGluIGFycmF5IGpzb25iICdbeyJ4IjpbMSwyLDNdLCAi eSI6IkhpIn0sIHsieCI6WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5v dGljZSAnJSAlICUsIHk6ICUnLCBjLnhbMV0sIGMueFsyXSwgYy54WzNdLCBjLnk7CisgIGVuZCBs b29wOworZW5kOworJCQ7CisKK2Ryb3AgdHlwZSB0MjsKKworLS0gRVhJVCBhbmQgQ09OVElOVUUg Y2FuIGJlIHRyaWdnZXJlZCBieSBMT09QX1JDX1BST0NFU1NJTkcKK2RvICQkCitkZWNsYXJlIHgg aW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICAnWzEsMiwzLDQsNV0nCisg IGxvb3AKKyAgICBleGl0IHdoZW4geCA9IDM7CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAg ZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBm b3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxLDIsMyw0LDVdJworICBsb29wCisgICAgY29udGlu dWUgd2hlbiB4ICUgMiA9IDA7CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7 CitlbmQ7CiskJDsKKworLS0gVmFyaWFibGUgaW5zdGVhZCBvZiBzdHJpbmcKK0RPICQkCitkZWNs YXJlCisgIHggaW50OworICBhcnIganNvbmI7CitiZWdpbgorICBzZWxlY3QganNvbmJfYWdnKGkp IGludG8gYXJyCisgICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwzKSBnKGkpOworCisgIGZvcmVh Y2ggeCBpbiBhcnJheSBhcnIKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVu ZCBsb29wOworZW5kOworJCQ7Ci0tIAoyLjUzLjAKCg== --000000000000afdab5064d32de36--