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 1wbk0t-002o41-0z for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 19:08:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbk0s-007it6-0R for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 19:08:54 +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 1wbk0r-007isx-15 for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 19:08:53 +0000 Received: from mail-dl1-x122f.google.com ([2607:f8b0:4864:20::122f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbk0l-00000001d9O-24SS for pgsql-hackers@postgresql.org; Mon, 22 Jun 2026 19:08:52 +0000 Received: by mail-dl1-x122f.google.com with SMTP id a92af1059eb24-13981833e13so5237472c88.1 for ; Mon, 22 Jun 2026 12:08:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782155326; cv=none; d=google.com; s=arc-20240605; b=hEKmXZHGPIOPkGvgxPmprJDL2jL0ia0e6/6Y4g2x4k/uFUfudjDxKmH0Sqj6ey7EWJ wI9mvOwFBj6MR4V4/SJtlYeiXuLVXD3w37zlBFuizGrD/uZcNjeoC0o8AZLHxdshiMtR luK4L+EmaxeOccjDX7PN7gdWclsUfKOAPFulqo0KIwN46Nwk/4qspktp41uSzGfLMl6l pFv/Cr97xMUxzpgVQx5TMn1leU3jbO5l6vpD8C1Y0PNQgcs7Be/paK/WTye/0zVvPMl1 pjT0MZMCv94MKan4a4+QYUOusw/dTRnZbsp8GmnNoopCGi6M6npUwugfsVYLOumzz6C6 Qs4Q== 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=WRZJ5dpfl1BrTAAOFyPqnxvOqUnnxZvyt7tEkv2t3QU=; fh=/5m958nHZunF0mts/O6P3uO6VtKUdRvzubJhBZmZsog=; b=K+ZFlBXIO9Rii6Ed+viCqGjyjEYmRj+qBonIEeYVODOFVUXj8qtqa6ykPcD8WAyp/7 9WwK95IbIJn4rEWLyGHhjTd0Hz3eP62cD9L11x8yEAKWALWm0xuiLH9oCTEYbxZiBmBi wW2rufirY7qq1qFSNIgLeVl9bE3XONzmAdN89ZUgm0noAgKdB4xUrPVhTvj5EAtHDOo1 Eea9Hbf9ldvuHUQqBvR3nz6dzCVFTRLUWtt95tZlZxkCy9p/iXHCcWzhqQQ73H2YdW1o d8n1TPHZ2WiYVnrvwBFnh/nptSQjPzVBr3wBbycMI93jIzZJ/oZryYs6vuevruGZUXIo ozlw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782155326; x=1782760126; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WRZJ5dpfl1BrTAAOFyPqnxvOqUnnxZvyt7tEkv2t3QU=; b=Fds33V44hXavyInusQPAHB//v8Mo03FSZkEPtDgMrxpPg+7RMAzRaugEHbnzUNG6mc iBW0zN82nBmYokVTce1ozLAB3a5McXF+0uYSi49QF1aax6p/Lhs15YDi0fl4N5Ss0VlL 8imGkneqKe2XLsTjRQLcVGpqQ93uesWKXM/m4dYjlXHkK33yVlWsc7c3MiVZzAUuWXTo QJdiLR4bCKIq295JeLaezLcr9b23/vCIKGXRzos2puzlxkFVc72U3o6ACBym/wZzj1CS jYIvTzGeJp5oo8P2Vd01YoptU/aeA7rq80ex4SB7p8H4Rp8pNFIfv8zwJOk4HDp4937b EURg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782155326; x=1782760126; 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=WRZJ5dpfl1BrTAAOFyPqnxvOqUnnxZvyt7tEkv2t3QU=; b=Ix7NTjKq3/VrrlzwmWlXblSgUvUnZWwr8Sjpmtf6xBN/MRXKSkIy+ly94LqbCHb7lF oKL47B4S4M3X5RtWsPbAaSGE2vakTzyN+AxB1+8efyXsULYIpGBFPyXJ+Nm7wCIu2ciZ JDJyFoSK+Ws07ivcWImfd5JvLuCHwbuLQ1e5UxC2neaVQNki9CazTX2KlwET5+0XDMTs vuEHloRCocbbrUI/qa1OtkrVjATMUSLMzUd6ZHfx0JaziMB23TNH6iGhdfKpa2WIJ9tl ds/kGHwtE+EqhiOR8p4RV7txXZu7jwuMXFK3/LgieKtRBJRuyRREmr9mKpe1oxmHDbst bcTg== X-Forwarded-Encrypted: i=1; AFNElJ/VPa832csZyNjvhCKOzH4MM86cG2YdCLrE0GsrZ3cFBdS3IknVfo3ZOmwN5fX8c3wIz/AGQ4tj57hy85jf@postgresql.org X-Gm-Message-State: AOJu0Ywk9sGGtfghxIqScCUQ1Ehj4FZpjw5VMkVc5dnZqFqE9zgLx9YS oxkvC8lTsjzqFCAo6fW6TFke8TyWxnKgSTqJg3oeT1Cuykf3meBIIouC9U8e2LAMUr5/VlGh9pW W97vltkhAs/aQ0LLNaEoxgfRPmwoLkPM= X-Gm-Gg: AfdE7cnZxScugrH2nep6XLUkls0cAzcbxp9H1r2eiaCz/6uQpgY4+ncSqeuPffAOEaR pKh6P/snGmj3+vhwo8oZp2AaOiofYYk+8K3YKDTQL35uoDD+CyL0oi/E1azKw7uU3WxCNfatqnA bfsdMNvH7fdRdj23/RSN1OHO+ostQZ4Zt/eZ4adX3mzwGg0lwgOHLD2R3VTSf5bHH5FUmlKyNTW JcDIuIKq1T8aFltHSgryKK4DsL1lzjWSCd+47S6EK0xgVqoWcVMr1E1IwFj0qsTeNkUgJr3pk2P yEscGuqlej8HAZPmQN3d7DuJyr+F/Tji7BO+JuHgFC1I9H6BT1HcYo4pSVBNaID1NuTsTAjO7Tu X3z6xHSR/RE57CA== X-Received: by 2002:a05:7022:102:b0:137:eac4:82ae with SMTP id a92af1059eb24-139a503dbc7mr9335473c88.37.1782155325625; Mon, 22 Jun 2026 12:08:45 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Corey Huinker Date: Mon, 22 Jun 2026 15:08:33 -0400 X-Gm-Features: AVVi8CdjCBrDrsA7H9PvCPKRop41ZfMsDKImrZ6ZKZaucd2j8I-ZWZWTrd-SLkU Message-ID: Subject: Re: use of SPI by postgresImportForeignStatistics To: Robert Haas Cc: Etsuro Fujita , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="0000000000001ef28c0654dc5fc5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001ef28c0654dc5fc5 Content-Type: multipart/alternative; boundary="0000000000001ef28b0654dc5fc3" --0000000000001ef28b0654dc5fc3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 20, 2026 at 12:11=E2=80=AFAM Corey Huinker wrote: > On Fri, Jun 19, 2026 at 9:45=E2=80=AFAM Robert Haas wrote: > >> On Thu, Jun 18, 2026 at 5:23=E2=80=AFPM Corey Huinker >> wrote: >> > To be clear, this solves the SPI problem, but questions about the >> design of attribute_statistics_update() and relation_statistics_update() >> remain, but those concerns are now isolated within their respective file= s >> attribute_stats.c and relation_stats.c. The inefficiencies therein aren'= t >> really in a critical path, so if we wanted to leave them be until v20 th= ey >> could, but if time allows I'd at least like try unwinding some of that. = But >> first, let's get SPI out of postgres_fdw.c. >> >> I think that's the right order of priority, but I don't think that >> having import_attribute_statistics construct an fcinfo is great. >> > > Me either, I'm looking at "phase 2" already where > relation/attribute_statistics_update becomes a conventional function, and > pg_clear_attribute_stats and pg_restore_attribute_stats (and their relsta= ts > equivalents) marshal their parameters to call that instead. > > >> Ideally, attribute_statistics_update would call >> import_attribute_statistics rather than the other way around. >> > > I think we're mostly on the same page. If we require the caller to > understand the stats data structures to a greater level of detail, and > require it to do the transformations to the proper input types > (BlockNumbers, floats, float arrays, cstrings for anyarray, etc), then th= e > import_attribute_statistics functon and the new attribute_statistics_upda= te > would be one-in-the-same. The v1 patch leaned heavily (perhaps too far) > towards letting the caller pass along string values fetched via > PQgetvalue() from a pg_stats without modification. > An update on my progress on Phase 2: I was able to convert relation_statistics_update() with relatively little fuss, but ran into trouble in doing so for attribute_statistics_update(). Initially the plan was to have a data structure RelationStatsData/AttributeStatsData which contained a series of boolean has_FOO flags alongside FOO of the actual stat type (int32, float, float[], or cstring for anyarray value) and have the respective functions convert their parameters to this common structure before calling the common function. The first bit of dissonance comes from the SQL-level functions having schemaname+relname parameters, and the reloid is resolved via RangeVarGetRelidExtended() which has a callback to check for correct permissions and setting the proper lock level. However, the C-caller would either have the reloid already, or an already open Relation, but no assurance that the caller has the correct permissions for that table or the correct lock level on the table. So either we make an equivalent to RangeVarGetRelidExtended() that takes an oid, or the C-caller has to derive a RangeVar, call the existing RangeVarGetRelidExtended() function, and verify the result reloid against the supplied parameter. I went with deriving the RangeVar and putting an Assert on the before/after reloids, but perhaps the smarter play is to make a function that checks for ShareUpdateExclusiveLock on the Relation, and then does the equivalent of RangeVarCallbackForStats(). A smaller bit of dissonance was with RecoveryInProgress(), which if I recall we're checking before RangeVarGetRelidExtended() to avoid trying to take a lock that will fail. That check might not be meaningful if the C call takes a relation, thus ensuring that some level of locking worked, thus we aren't in recovery. Next is the existing validation functions stats_check_required_arg(), stats_check_arg_array(), and stats_check_arg_pairs() all work on values indexed by the positional functioncallinfo and the corresponding relstatsinfo/attstatsinfo structure, and this makes a lot of type checking and value checking compact and uniform. If we want to keep this sort of uniformity, the resulting StatsData structure will end up looking a lot like the FunctionCallInfo that we already had. Next is the fact that the end-destination for every value passed in is a Datum for a pg_statistic heaptuple. Most Datum values are checked only for their null-ness and if they're the correct type, so the value itself is usually just passed directly from fcinfo into the heap tuple values[] array. The float[] values are checked for number of elements and whether any elements are NULL, but that is done via array functions that take a Datum input. Only in a few cases do we actually look at the actual internal value of the Datum (reltuples, attname, attnum, the anyarrays), so there's little to gain there. There's some additional hassle in the fact that pg_restore_attribute_stats() can take an attnum parameter OR an attname parameter, but not both. I was able to resolve that in a semi-elegant fashion, but the other issues have convinced me that we're probably better off continuing to use the FunctionCallInfo version of attribute_stats_update(), though perhaps with a different name, allowing us to use that name for the new API call instead of import_attribute_statistics(). One thing we *do* need to change from my v1 patch is moving the recovery check and the RangeVar check out of relation_statistics_update() and attribute_statsistics_update(), and having the respective callers do those checks themselves first, passing in the now-authoritative reloid from stats_acquire_relation_lock(). To that end, here's a new and rebased patch set: 0001 - exactly the same as before 0002 - exactly the same as before 0003 - New stat_utils.c function stats_acquire_relation_lock() which covers the RangeVar and Recovery checks common to all the functions that modify relation or attribute stats. 0004 - Add a small regression test to relation stats 0005 - Use stats_acquire_relation_lock() in relstats functions, and rename the publicly-facing relstats C function. 0006 - Rename the publicly-facing attstats functions. 0007 - Use stats_acquire_relation_lock() in attstats functions. --0000000000001ef28b0654dc5fc3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 20, 2026 at 12:11=E2=80=AFAM Corey Huin= ker <corey.= huinker@gmail.com> wrote:
On Fri, Jun 19, 2026 at 9:45=E2=80=AFAM Robert Haas= <robertmhaas= @gmail.com> wrote:
On Thu, Jun 18, 2026 at 5:23=E2=80=AFPM Corey Huinker <corey.huinker@gmail.= com> wrote:
> To be clear, this solves the SPI problem, but questions about the desi= gn of attribute_statistics_update() and relation_statistics_update() remain= , but those concerns are now isolated within their respective files attribu= te_stats.c and relation_stats.c. The inefficiencies therein aren't real= ly in a critical path, so if we wanted to leave them be until v20 they coul= d, but if time allows I'd at least like try unwinding some of that. But= first, let's get SPI out of postgres_fdw.c.

I think that's the right order of priority, but I don't think that<= br> having import_attribute_statistics construct an fcinfo is great.

Me either, I'm looking at "phase 2"= already where relation/attribute_statistics_update becomes a conventional = function, and pg_clear_attribute_stats and pg_restore_attribute_stats (and = their relstats equivalents) marshal their parameters to call that instead.<= /div>
=C2=A0
Ideally, attribute_statistics_update would call
import_attribute_statistics rather than the other way around.

I think we're mostly on the same page. If we req= uire the caller to understand the stats data structures to a greater level = of detail, and require it to do the transformations to the proper input typ= es (BlockNumbers, floats, float arrays, cstrings for anyarray, etc), then t= he import_attribute_statistics functon and the new attribute_statistics_upd= ate would be one-in-the-same. The v1 patch leaned heavily (perhaps too far)= towards letting the caller pass along string values fetched via PQgetvalue() from a pg_stats without = modification.

An update o= n my progress on Phase 2:

I was able to convert re= lation_statistics_update() with relatively little fuss, but ran into troubl= e in doing so for attribute_statistics_update().

I= nitially the plan was to have a data structure RelationStatsData/AttributeS= tatsData which contained a series of boolean has_FOO flags alongside FOO of= the actual stat type (int32, float, float[], or cstring for anyarray value= ) and have the respective functions convert their parameters to this common= structure before calling the common function.

The= first bit of dissonance comes from the SQL-level functions having schemana= me+relname parameters, and the reloid is resolved via RangeVarGetRelidExten= ded() which has a callback to check for correct permissions and setting the= proper lock level. However, the C-caller would either have the reloid alre= ady, or an already open Relation, but no assurance that the caller has the = correct permissions for that table or the correct lock level on the table. = So either we make an equivalent to RangeVarGetRelidExtended() that takes an= oid, or the C-caller has to derive a RangeVar, call the existing RangeVarG= etRelidExtended() function, and verify the result reloid against the suppli= ed parameter. I went with deriving the RangeVar and putting an Assert on th= e before/after reloids, but perhaps the smarter play is to make a function = that checks for ShareUpdateExclusiveLock on the Relation, and then does the= equivalent of RangeVarCallbackForStats().

A smaller bit = of dissonance was=C2=A0with RecoveryInProgress(), which if I recall we'= re checking before=C2=A0RangeVarGetRelidExtended() to avoid trying to take = a lock that will fail. That check might not be meaningful if the C call tak= es a relation, thus ensuring that some level of locking worked, thus we are= n't in recovery.

Next is=C2=A0the existing val= idation functions stats_check_required_arg(),=20 stats_check_arg_array(), and stats_check_arg_pairs() all work on values=20 indexed by the positional functioncallinfo and the corresponding relstatsin= fo/attstatsinfo structure, and this makes a lot of type checking and value checking compact and uniform.=C2=A0 If we want to keep = this sort of uniformity, the resulting StatsData structure will end up look= ing a lot like the FunctionCallInfo that we already had.

Next is the fact that the end-destination for every value passed in = is a Datum for a=20 pg_statistic heaptuple. Most Datum values are checked only for their null-n= ess and if they're the correct type, so the value itself is usually just= =20 passed directly from fcinfo into the heap tuple values[] array. The float[]= values are checked for number of elements and whether any elements are NUL= L, but that is done via array functions that take a Datum input. Only in a = few cases do we actually look at the actual internal value of the Datum (re= ltuples, attname, attnum, the anyarrays), so there's little to gain the= re.

There's some additional hassle in the fact= that pg_restore_attribute_stats() can take an attnum parameter OR an attna= me parameter, but not both. I was able to resolve that in a semi-elegant fa= shion, but the other issues have convinced me that we're probably bette= r off continuing to use the FunctionCallInfo version of attribute_stats_upd= ate(), though perhaps with a different name, allowing us to use that name f= or the new API call instead of import_attribute_statistics().

=
One thing we *do* need to change from my v1 patch is moving the recove= ry check and the RangeVar check out of relation_statistics_update() and att= ribute_statsistics_update(), and having the respective callers do those che= cks themselves first, passing in the now-authoritative reloid from stats_ac= quire_relation_lock().

To that end, here's a new and = rebased patch set:

0001 - exactly the same as before
<= /div>
0002 - exactly the same as before
0003 - New stat_u= tils.c function stats_acquire_relation_lock() which covers the RangeVar and= Recovery checks common to all the functions that modify relation or attrib= ute stats.
0004 - Add a small regression test to relation sta= ts=C2=A0
0005 - Use=C2=A0stats_acquire_relation_lock() in relstat= s functions, and rename the publicly-facing relstats C function.
= 0006 - Rename the publicly-facing attstats functions.
0007 - = Use stats_acquire_relation_lock() in attstats functions.

--0000000000001ef28b0654dc5fc3-- --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Remove-SPI-in-favor-of-import_relation_statistics.patch" Content-Disposition: attachment; filename="v2-0001-Remove-SPI-in-favor-of-import_relation_statistics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg3l0 RnJvbSBlZmFlNTQ5NzMxYzk1YzM2YzFiMTFkMDY2OGVmMzM5Nzg1NDQzOWE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxNyBKdW4gMjAyNiAxNjowNDo1NSAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMS83XSBSZW1vdmUgU1BJIGluIGZhdm9yIG9mIGltcG9ydF9yZWxhdGlvbl9zdGF0aXN0aWNz LgoKVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBTUEkgY2FsbHMgaW4gcG9zdGdyZXNfZmR3LmMgdGhh dCB3ZXJlIHJlbGF0ZWQgdG8KcmVsYXRpb24gc3RhdGlzdGljcy4gSW5zdGVhZCwgdGhlIGZ1bmN0 aW9uIGltcG9ydF9yZWxhdGlvbl9zdGF0aXRpY3NzKCkKaGFzIGJlZW4gY3JlYXRlZCBzcGVjaWZp Y2FsbHkgZm9yIHRoaXMgcHVycG9zZS4KClRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaCBp cyB0byBtYWtlIGEgc2ltcGxlIEFQSSB0aGF0IGlzIHVzYWJsZSBieQphbnkgZm9yZWlnbiBkYXRh IHdyYXBwZXIsIGJ1dCBpcyBub3QgbGltaXRlZCB0byB1c2FnZSBieSBmb3JlaWduIGRhdGEKd3Jh cHBlcnMuCgpQcmVzZW50bHkgdGhlIGZ1bmN0aW9uIG1hcnNoYWxscyB0aGUgcGFyYXRtZXRlcnMg dG8gbWFrZSBhIGNhbGwgdG8KcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoKS4gVGhpcyBpcyBu b3QgYW4gaWRlYWwgZW5kLXN0YXRlLCBhcyB0aGlzCmNyZWF0ZXMgdW4tbmVjZXNzYXJ5IHZhbHVl IHRyYW5zbGF0aW9ucy4gVGhlIHNvbHV0aW9uIGlzIHJlZmFjdG9yCnJlbGF0aW9uX3N0YXRpc3Rp Y3NfdXBkYXRlKCkgdG8gYmUgYSBtb3JlIGNvbnZlbnRpb25hbCwgbm9uLWZjaW5mby1zdHlsZQpm dW5jdGlvbiwgYW5kIHJlZmFjdG9yIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoKSBhbmQKcGdf Y2xlYXJfcmVsYXRpb25fc3RhdHMoKSB0byBhY2NvbW1vZGF0ZSB0aGF0LiBUaGlzIHBhdGNoIHJl bW92ZXMgdGhlCmRpZmZpY3VsdGllcyB0aGF0IFNQSSBwcmVzZW50cyBmcm9tIHBvc3RncmVzX2Zk dy5jIGFuZCBsb2NhbGl6ZXMgdGhlCmNvZGUgcmVkdW5kYW5jeSB0byByZWxhdGlvbl9zdGF0cy5j LgotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaCB8IDIyICsrKysr Kwogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIHwgOTYgKysrKysrKysr KysrKysrKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAg IHwgNjIgKysrKy0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygr KSwgNDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvc3RhdGlz dGljcy9yZWxhdGlvbl9zdGF0cy5oCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9yZWxhdGlvbl9zdGF0cy5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0 cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjhhMWE3NTVhMQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMu aApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiByZWxhdGlvbl9z dGF0cy5oCisgKiAgICBGdW5jdGlvbnMgZm9yIHRoZSBpbnRlcm5hbCBtYW5pcHVsYXRpb24gb2Yg cmVsYXRpb24gc3RhdGlzdGljcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUkVMQVRJT05fU1RBVFNfSAorCisjaW5jbHVk ZSAiYWNjZXNzL2dlbmFtLmgiCisKK2Jvb2wgaW1wb3J0X3JlbGF0aW9uX3N0YXRpc3RpY3MoUmVs YXRpb24gcmVsLCBjb25zdCBjaGFyICpyZWxwYWdlcywKKwkJCQkJCQkJY29uc3QgY2hhciAqcmVs dHVwbGVzLCBjb25zdCBjaGFyICpyZWxhbGx2aXNpYmxlLAorCQkJCQkJCQljb25zdCBjaGFyICpy ZWxhbGxmcm96ZW4pOworCisjZGVmaW5lIFJFTEFUSU9OX1NUQVRTX0gKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIGIvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCmluZGV4IGQ2NjMxZTlhOWE0Li45YzMwOGVl NTBlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwpAQCAtMjIsNyAr MjIsOSBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxzLmgiCisjaW5jbHVk ZSAic3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5o IgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKQEAgLTI0MSwzICsyNDMsOTcgQEAgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyhQR19G VU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KKworLyoKKyAqIENv bnZlbmllbmNlIHJvdXRpbmUgdG8gcGFyc2UgQmxvY2tOdW1iZXIgdmFsdWVzLCBhbmQgZW1pdCBh IHdhcm5pbmcKKyAqIG9uIHBhcnNlIGVycm9ycy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHZh bHVlIGlzIE5VTEwgb3IgaW52YWxpZC4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitzdHJfdG9f YmxvY2tudW1iZXIoY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBCbG9ja051bWJlciBkZWZhdWx0 X3ZhbHVlID0gMDsKKworCUJsb2NrTnVtYmVyIHJlc3VsdDsKKwlFcnJvclNhdmVDb250ZXh0IGVz Y29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJaWYgKCFzKQorCQlyZXR1cm4gZGVm YXVsdF92YWx1ZTsKKworCXJlc3VsdCA9IHVpbnQzMmluX3N1YnIocywgTlVMTCwgIkJsb2NrTnVt YmVyIiwgKE5vZGUgKikgJmVzY29udGV4dCk7CisKKwlpZiAoZXNjb250ZXh0LmVycm9yX29jY3Vy cmVkKQorCXsKKwkJZXNjb250ZXh0LmVycm9yX2RhdGEtPmVsZXZlbCA9IFdBUk5JTkc7CisJCVRo cm93RXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJRnJlZUVycm9yRGF0YShlc2Nv bnRleHQuZXJyb3JfZGF0YSk7CisKKwkJcmV0dXJuIGRlZmF1bHRfdmFsdWU7CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgdG8gcGFyc2UgZmxv YXQgdmFsdWVzLCBhbmQgZW1pdCBhIHdhcm5pbmcgb24gcGFyc2UKKyAqIGVycm9ycy4KKyAqCisg KiBSZXR1cm5zIC0xLjAgaWYgdGhlIHZhbHVlIGlzIE5VTEwgb3IgaW52YWxpZC4KKyAqLworc3Rh dGljIGZsb2F0CitzdHJfdG9fZmxvYXQoY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBmbG9hdCBk ZWZhdWx0X3ZhbHVlID0gLTEuMDsKKworCWZsb2F0CQlyZXN1bHQ7CisKKwlFcnJvclNhdmVDb250 ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJaWYgKCFzKQorCQlyZXR1 cm4gZGVmYXVsdF92YWx1ZTsKKworCXJlc3VsdCA9IGZsb2F0NGluX2ludGVybmFsKChjaGFyICop IHMsIE5VTEwsICJmbG9hdCIsIHMsIChOb2RlICopICZlc2NvbnRleHQpOworCisJaWYgKGVzY29u dGV4dC5lcnJvcl9vY2N1cnJlZCkKKwl7CisJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwg PSBXQVJOSU5HOworCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCUZy ZWVFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQlyZXR1cm4gZGVmYXVsdF92YWx1 ZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSW1wb3J0IHJlbGF0aW9uIHN0 YXRpc3RpY3MgZnJvbSByZWd1bGFyIHN0cmluZyBpbnB1dHMuCisgKi8KK2Jvb2wKK2ltcG9ydF9y ZWxhdGlvbl9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqcmVscGFnZXMsCisJ CQkJCQkgICBjb25zdCBjaGFyICpyZWx0dXBsZXMsIGNvbnN0IGNoYXIgKnJlbGFsbHZpc2libGUs CisJCQkJCQkgICBjb25zdCBjaGFyICpyZWxhbGxmcm96ZW4pCit7CisJTE9DQUxfRkNJTkZPKG5l d2ZjaW5mbywgTlVNX1JFTEFUSU9OX1NUQVRTX0FSR1MpOworCisJSW5pdEZ1bmN0aW9uQ2FsbElu Zm9EYXRhKCpuZXdmY2luZm8sIE5VTEwsIE5VTV9SRUxBVElPTl9TVEFUU19BUkdTLCBJbnZhbGlk T2lkLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogQ29udmVydCBhbGwgc3RyaW5nIGlucHV0cyB0 byB0aGVpciByZXF1aXJlZCBkYXRhdHlwZXMuIE5VTEwgdmFsdWVzIGFyZQorCSAqIGxlZnQgYXMg dGhlIGRlZmF1bHQuCisJICovCisJbmV3ZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLnZhbHVl ID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1l c3BhY2UocmVsKSkpOworCW5ld2ZjaW5mby0+YXJnc1tSRUxTQ0hFTUFfQVJHXS5pc251bGwgPSBm YWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMTkFNRV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRl eHREYXR1bShSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwluZXdmY2luZm8tPmFyZ3Nb UkVMTkFNRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCW5ld2ZjaW5mby0+YXJnc1tSRUxQQUdFU19B UkddLnZhbHVlID0gVUludDMyR2V0RGF0dW0oc3RyX3RvX2Jsb2NrbnVtYmVyKHJlbHBhZ2VzKSk7 CisJbmV3ZmNpbmZvLT5hcmdzW1JFTFBBR0VTX0FSR10uaXNudWxsID0gZmFsc2U7CisJbmV3ZmNp bmZvLT5hcmdzW1JFTFRVUExFU19BUkddLnZhbHVlID0gRmxvYXQ0R2V0RGF0dW0oc3RyX3RvX2Zs b2F0KHJlbHR1cGxlcykpOworCW5ld2ZjaW5mby0+YXJnc1tSRUxUVVBMRVNfQVJHXS5pc251bGwg PSBmYWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLnZhbHVlID0gVUlu dDMyR2V0RGF0dW0oc3RyX3RvX2Jsb2NrbnVtYmVyKHJlbGFsbHZpc2libGUpKTsKKwluZXdmY2lu Zm8tPmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCW5ld2ZjaW5mby0+ YXJnc1tSRUxBTExGUk9aRU5fQVJHXS52YWx1ZSA9IFVJbnQzMkdldERhdHVtKHN0cl90b19ibG9j a251bWJlcihyZWxhbGxmcm96ZW4pKTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMQUxMRlJPWkVOX0FS R10uaXNudWxsID0gZmFsc2U7CisKKwlyZXR1cm4gcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUo bmV3ZmNpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggNmRiYWU1 ODNlY2MuLjY3M2Q1NjExN2I4IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAt NDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJw b3N0Z3Jlc19mZHcuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKKyNpbmNs dWRlICJzdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZmxvYXQu aCIKQEAgLTM2NywzMyArMzY4LDYgQEAgZW51bSBBdHRTdGF0c0NvbHVtbnMKIAlBVFRTVEFUU19O VU1fRklFTERTLAogfTsKIAotLyogUmVsYXRpb24gc3RhdHMgaW1wb3J0IHF1ZXJ5ICovCi1zdGF0 aWMgY29uc3QgY2hhciAqcmVsaW1wb3J0X3NxbCA9Ci0iU0VMRUNUIHBnX2NhdGFsb2cucGdfcmVz dG9yZV9yZWxhdGlvbl9zdGF0cyhcbiIKLSJcdCd2ZXJzaW9uJywgJDEsXG4iCi0iXHQnc2NoZW1h bmFtZScsICQyLFxuIgotIlx0J3JlbG5hbWUnLCAkMyxcbiIKLSJcdCdyZWxwYWdlcycsICQ0Ojpp bnRlZ2VyLFxuIgotIlx0J3JlbHR1cGxlcycsICQ1OjpyZWFsKSI7Ci0KLS8qIEFyZ3VtZW50IG9y ZGVyIGluIHJlbGF0aW9uIHN0YXRzIGltcG9ydCBxdWVyeSAqLwotZW51bSBSZWxJbXBvcnRTcWxB cmdzCi17Ci0JUkVMSU1QT1JUX1NRTF9WRVJTSU9OID0gMCwKLQlSRUxJTVBPUlRfU1FMX1NDSEVN QU5BTUUsCi0JUkVMSU1QT1JUX1NRTF9SRUxOQU1FLAotCVJFTElNUE9SVF9TUUxfUkVMUEFHRVMs Ci0JUkVMSU1QT1JUX1NRTF9SRUxUVVBMRVMsCi0JUkVMSU1QT1JUX1NRTF9OVU1fRklFTERTCi19 OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiByZWxhdGlvbiBzdGF0cyBpbXBvcnQgcXVlcnkgKi8K LXN0YXRpYyBjb25zdCBPaWQgcmVsaW1wb3J0X2FyZ3R5cGVzW1JFTElNUE9SVF9TUUxfTlVNX0ZJ RUxEU10gPQotewotCUlOVDRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsCi0JVEVYVE9J RCwKLX07Ci0KIC8qIEF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KIHN0YXRpYyBjb25z dCBjaGFyICphdHRpbXBvcnRfc3FsID0KICJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2F0 dHJpYnV0ZV9zdGF0cyhcbiIKQEAgLTcxNCw3ICs2ODgsOCBAQCBzdGF0aWMgYm9vbCBtYXRjaF9h dHRybWFwKFBHcmVzdWx0ICpyZXMsCiAJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZV9yZWxuYW1l LAogCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCSAgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAq cmVtYXR0cm1hcCk7Ci1zdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0 IGNoYXIgKnNjaGVtYW5hbWUsCitzdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNz KFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcmVsbmFtZSwKIAkJCQkJCQkJCSAgaW50IGF0dHJjbnQsCiAJCQkJ CQkJCQkgIGNvbnN0IFJlbW90ZUF0dHJpYnV0ZU1hcHBpbmcgKnJlbWF0dHJtYXAsCkBAIC01NjYx LDcgKzU2MzYsNyBAQCBwb3N0Z3Jlc0ltcG9ydEZvcmVpZ25TdGF0aXN0aWNzKFJlbGF0aW9uIHJl bGF0aW9uLCBMaXN0ICp2YV9jb2xzLCBpbnQgZWxldmVsKQogCQkJCQkJCQkgJmF0dHJjbnQsICZy ZW1hdHRybWFwLCAmcmVtc3RhdHMpOwogCiAJaWYgKG9rKQotCQlvayA9IGltcG9ydF9mZXRjaGVk X3N0YXRpc3RpY3Moc2NoZW1hbmFtZSwgcmVsbmFtZSwKKwkJb2sgPSBpbXBvcnRfZmV0Y2hlZF9z dGF0aXN0aWNzKHJlbGF0aW9uLCBzY2hlbWFuYW1lLCByZWxuYW1lLAogCQkJCQkJCQkJICAgYXR0 cmNudCwgcmVtYXR0cm1hcCwgJnJlbXN0YXRzKTsKIAogCWlmIChvaykKQEAgLTYxMjgsNyArNjEw Myw4IEBAIG1hdGNoX2F0dHJtYXAoUEdyZXN1bHQgKnJlcywKICAqIEltcG9ydCBmZXRjaGVkIHN0 YXRpc3RpY3MgaW50byB0aGUgbG9jYWwgc3RhdGlzdGljcyB0YWJsZXMuCiAgKi8KIHN0YXRpYyBi b29sCi1pbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCitp bXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJICBjb25z dCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJICBjb25zdCBjaGFyICpyZWxuYW1lLAogCQkJCQkJ ICBpbnQgYXR0cmNudCwKIAkJCQkJCSAgY29uc3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVt YXR0cm1hcCwKQEAgLTYxNDEsNiArNjExNyw5IEBAIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Mo Y29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAlpbnQJCQlzcGlyYzsKIAlib29sCQlvayA9IGZhbHNl OwogCisJY2hhcgkgICAqcmVscGFnZXMgPSBOVUxMOworCWNoYXIJICAgKnJlbHR1cGxlcyA9IE5V TEw7CisKIAkvKiBBc3NpZ24gYWxsIHRoZSBpbnZhcmlhbnQgcGFyYW1ldGVycyBjb21tb24gdG8g cmVsYXRpb24vYXR0cmlidXRlIHN0YXRzICovCiAJdmFsdWVzW0FUVElNUE9SVF9TUUxfVkVSU0lP Tl0gPSBJbnQzMkdldERhdHVtKHJlbXN0YXRzLT5zZXJ2ZXJfdmVyc2lvbl9udW0pOwogCW51bGxz W0FUVElNUE9SVF9TUUxfVkVSU0lPTl0gPSAnICc7CkBAIC02MjMzLDI3ICs2MjEyLDE2IEBAIGlt cG9ydF9mZXRjaGVkX3N0YXRpc3RpY3MoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkvKgogCSAq IEltcG9ydCByZWxhdGlvbiBzdGF0cy4gIFdlIG9ubHkgcGVyZm9ybSB0aGlzIG9uY2UsIHNvIHRo ZXJlIGlzIG5vIHBvaW50CiAJICogaW4gcHJlcGFyaW5nIHRoZSBzdGF0ZW1lbnQuCi0JICoKLQkg KiBXZSBjYW4gcmUtdXNlIHRoZSB2YWx1ZXMvbnVsbHMgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHBh cmFtZXRlcnMgaXMgbGVzcwotCSAqIGFuZCB0aGUgZmlyc3QgdGhyZWUgcGFyYW1zIGFyZSB0aGUg c2FtZSBhcyBhdHRpbXBvcnRfc3FsLgogCSAqLwogCUFzc2VydChyZW1zdGF0cy0+cmVsICE9IE5V TEwpOwotCUFzc2VydChQUW5maWVsZHMocmVtc3RhdHMtPnJlbCkgPT0gUkVMU1RBVFNfTlVNX0ZJ RUxEUyk7Ci0JQXNzZXJ0KFBRbnR1cGxlcyhyZW1zdGF0cy0+cmVsKSA9PSAxKTsKLQltYXBfZmll bGRfdG9fYXJnKHJlbXN0YXRzLT5yZWwsIDAsIFJFTFNUQVRTX1JFTFBBR0VTLAotCQkJCQkgUkVM SU1QT1JUX1NRTF9SRUxQQUdFUywgdmFsdWVzLCBudWxscyk7Ci0JbWFwX2ZpZWxkX3RvX2FyZyhy ZW1zdGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxUVVBMRVMsCi0JCQkJCSBSRUxJTVBPUlRfU1FM X1JFTFRVUExFUywgdmFsdWVzLCBudWxscyk7CisJaWYgKCFQUWdldGlzbnVsbChyZW1zdGF0cy0+ cmVsLCAwLCBSRUxTVEFUU19SRUxQQUdFUykpCisJCXJlbHBhZ2VzID0gUFFnZXR2YWx1ZShyZW1z dGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxQQUdFUyk7CiAKLQlzcGlyYyA9IFNQSV9leGVjdXRl X3dpdGhfYXJncyhyZWxpbXBvcnRfc3FsLAotCQkJCQkJCQkgIFJFTElNUE9SVF9TUUxfTlVNX0ZJ RUxEUywKLQkJCQkJCQkJICAoT2lkICopIHJlbGltcG9ydF9hcmd0eXBlcywKLQkJCQkJCQkJICB2 YWx1ZXMsIG51bGxzLCBmYWxzZSwgMSk7Ci0JaWYgKHNwaXJjICE9IFNQSV9PS19TRUxFQ1QpCi0J CWVsb2coRVJST1IsICJmYWlsZWQgdG8gZXhlY3V0ZSByZWxpbXBvcnRfc3FsIHF1ZXJ5IGZvciBm b3JlaWduIHRhYmxlIFwiJXMuJXNcIiIsCi0JCQkgc2NoZW1hbmFtZSwgcmVsbmFtZSk7CisJaWYg KCFQUWdldGlzbnVsbChyZW1zdGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxUVVBMRVMpKQorCQly ZWx0dXBsZXMgPSBQUWdldHZhbHVlKHJlbXN0YXRzLT5yZWwsIDAsIFJFTFNUQVRTX1JFTFRVUExF Uyk7CiAKLQlpZiAoIWltcG9ydF9zcGlfcXVlcnlfb2soKSkKKwlpZiAoIWltcG9ydF9yZWxhdGlv bl9zdGF0aXN0aWNzKHJlbGF0aW9uLCByZWxwYWdlcywgcmVsdHVwbGVzLAorCQkJCQkJCQkJTlVM TCwgTlVMTCkpCiAJewogCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJZXJybXNnKCJjb3VsZCBub3Qg aW1wb3J0IHN0YXRpc3RpY3MgZm9yIGZvcmVpZ24gdGFibGUgXCIlcy4lc1wiIC0tLSByZWxhdGlv biBzdGF0aXN0aWNzIGltcG9ydCBmYWlsZWQgZm9yIHRoaXMgZm9yZWlnbiB0YWJsZSIsCgpiYXNl LWNvbW1pdDogODBiYjBlYmNjMTFmYjljYjU5MDRkNDkwNjQwNDA4YjNkNzAwM2ExNwotLSAKMi41 NC4wCgo= --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0002-Remove-SPI-in-favor-of-import_attribute_statistic.patch" Content-Disposition: attachment; filename="v2-0002-Remove-SPI-in-favor-of-import_attribute_statistic.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg3v1 RnJvbSBjMGJlMzkwNWUyMmVhZmNmYTA5ZWQxZjk2NDQwMDg4OTdiMjEwNDE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAxOCBKdW4gMjAyNiAxNjoyODoxMCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi83XSBSZW1vdmUgU1BJIGluIGZhdm9yIG9mIGltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGlj cy4KClRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgU1BJIGNhbGxzIGluIHBvc3RncmVzX2Zkdy5jIHRo YXQgd2VyZSByZWxhdGVkIHRvCmF0dHJpYnV0ZSBzdGF0aXN0aWNzLiBJbnN0ZWFkLCB0aGUgZnVu Y3Rpb25zIGltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcygpCmFuZCBjbGVhcl9hdHRyaWJ1dGVf c3RhdGlzdGljcygpIGhhdmUgYmVlbiBjcmVhdGVkIGZvciB0aGlzIHB1cnBvc2UuCgpMaWtlIHRo ZSBwcmVjZWRpbmcgcGF0Y2gsIHRoZSBnb2FsIGlzIHRvIHJlbW92ZSBTUEkgZnJvbSB0aGUgd29y a2Zsb3cKYW5kIGlzb2xhdGUgYWxsIGNvZGUgcmVkdW5kYW5jeSBpbiBhdHRyaWJ1dGVfc3RhdHMu Yywgd2hlcmUgaXQgY2FuIGJlCmhhbmRsZWQgYXQgYSBsYXRlciB0aW1lLgoKU29tZSBhZGRpdGlv bmFsIGNoZWNrcyB3ZXJlIGFkZGVkIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZSB0 aGF0CnZhbHVlcyBhcmUgcHJvcGVybHkgY29udmV5ZWQgZnJvbSBhIGxvb3BiYWNrLWZvcmVpZ24g dGFibGUgdG8gdGhlIGxvY2FsCnRhYmxlLgotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0 cmlidXRlX3N0YXRzLmggICAgICB8ICAzNiArKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0 cmlidXRlX3N0YXRzLmMgICAgICB8IDE5MiArKysrKysrKysrKysrCiAuLi4vcG9zdGdyZXNfZmR3 L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAgNDEgKysrCiBjb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAyNTggKysrLS0tLS0tLS0tLS0tLS0tCiBj b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgMzIgKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNlcnRpb25zKCspLCAyMjAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaAoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmggYi9z cmMvaW5jbHVkZS9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZWJkZTBjN2MzYgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgKQEAgLTAsMCArMSwzNiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYXR0cmlidXRlX3N0YXRzLmgKKyAqICAgIEZ1bmN0 aW9ucyBmb3IgdGhlIGludGVybmFsIG1hbmlwdWxhdGlvbiBvZiBhdHRyaWJ1dGUgc3RhdGlzdGlj cy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1 ZGUvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIEFUVFJJQlVURV9TVEFUU19ICisKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0u aCIKKworCitib29sIGRlbGV0ZV9hdHRyaWJ1dGVfc3RhdGlzdGljcyhSZWxhdGlvbiByZWwsIEF0 dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCk7CisKK2Jvb2wgaW1wb3J0X2F0dHJpYnV0 ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKKwkJCQkJCQkJ IEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKKwkJCQkJCQkJIGNvbnN0IGNoYXIg Km51bGxfZnJhYywgY29uc3QgY2hhciAqYXZnX3dpZHRoLAorCQkJCQkJCQkgY29uc3QgY2hhciAq bl9kaXN0aW5jdCwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX3ZhbHMsCisJCQkJ CQkJCSBjb25zdCBjaGFyICptb3N0X2NvbW1vbl9mcmVxcywKKwkJCQkJCQkJIGNvbnN0IGNoYXIg Kmhpc3RvZ3JhbV9ib3VuZHMsCisJCQkJCQkJCSBjb25zdCBjaGFyICpjb3JyZWxhdGlvbiwKKwkJ CQkJCQkJIGNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX2VsZW1zLAorCQkJCQkJCQkgY29uc3QgY2hh ciAqbW9zdF9jb21tb25fZWxlbV9mcmVxcywKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKmVsZW1fY291 bnRfaGlzdG9ncmFtLAorCQkJCQkJCQkgY29uc3QgY2hhciAqcmFuZ2VfbGVuZ3RoX2hpc3RvZ3Jh bSwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKnJhbmdlX2VtcHR5X2ZyYWMsCisJCQkJCQkJCSBjb25z dCBjaGFyICpyYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKworI2RlZmluZSBBVFRSSUJVVEVfU1RB VFNfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0 ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRl eCAxY2M0ZDY1NzIzMS4uZjY3ZDYyYzAxMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRp c3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRy aWJ1dGVfc3RhdHMuYwpAQCAtMjIsMTAgKzIyLDEyIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1l c3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAic3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaCIK ICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNz L3N0YXRfdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9m bWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCkBAIC02ODgsMyArNjkwLDE5MyBAQCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9z dGF0cyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KKwor LyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgdGV4dCBhcmd1 bWVudHMKKyAqLworc3RhdGljIHZvaWQKK3NldF90ZXh0X2FyZyhOdWxsYWJsZURhdHVtICphcmcs IGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHMpCisJeworCQlhcmctPnZhbHVlID0gQ1N0cmluZ0dl dFRleHREYXR1bShzKTsKKwkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJ YXJnLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJYXJnLT5pc251bGwgPSB0cnVlOworCX0KK30KKwor LyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgZmxvYXQgYXJn dW1lbnRzCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfZmxvYXRfYXJnKE51bGxhYmxlRGF0dW0gKmFy ZywgY29uc3QgY2hhciAqcykKK3sKKwlhcmctPnZhbHVlID0gKERhdHVtKSAwOworCWFyZy0+aXNu dWxsID0gdHJ1ZTsKKworCWlmIChzKQorCXsKKwkJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQg PSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCQlmbG9hdDQJCXZhbDsKKworCQl2YWwgPSBmbG9h dDRpbl9pbnRlcm5hbCgoY2hhciAqKSBzLCBOVUxMLCAiZmxvYXQiLCBzLCAoTm9kZSAqKSAmZXNj b250ZXh0KTsKKworCQlpZiAoZXNjb250ZXh0LmVycm9yX29jY3VycmVkKQorCQl7CisJCQllc2Nv bnRleHQuZXJyb3JfZGF0YS0+ZWxldmVsID0gV0FSTklORzsKKwkJCVRocm93RXJyb3JEYXRhKGVz Y29udGV4dC5lcnJvcl9kYXRhKTsKKwkJCUZyZWVFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2Rh dGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXJnLT52YWx1ZSA9IEZsb2F0NEdldERhdHVtKHZh bCk7CisJCQlhcmctPmlzbnVsbCA9IGZhbHNlOworCQl9CisJfQorfQorCisvKgorICogQ29udmVu aWVuY2Ugcm91dGluZSBmb3Igc2V0dGluZyBvcHRpb25hbCBpbnQzMiBhcmd1bWVudHMKKyAqLwor c3RhdGljIHZvaWQKK3NldF9pbnQzMl9hcmcoTnVsbGFibGVEYXR1bSAqYXJnLCBjb25zdCBjaGFy ICpzKQoreworCWFyZy0+dmFsdWUgPSAoRGF0dW0pIDA7CisJYXJnLT5pc251bGwgPSB0cnVlOwor CisJaWYgKHMpCisJeworCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2 ZUNvbnRleHR9OworCisJCWludDMyCQl2YWw7CisKKwkJdmFsID0gcGdfc3RydG9pbnQzMl9zYWZl KHMsIChOb2RlICopICZlc2NvbnRleHQpOworCisJCWlmIChlc2NvbnRleHQuZXJyb3Jfb2NjdXJy ZWQpCisJCXsKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJ VGhyb3dFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShl c2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlhcmctPnZhbHVlID0g SW50MzJHZXREYXR1bSh2YWwpOworCQkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwkJfQorCX0KK30K KworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgZmxvYXRb XSBhcmd1bWVudHMKKyAqLworc3RhdGljIHZvaWQKK3NldF9mbG9hdGFycl9hcmcoTnVsbGFibGVE YXR1bSAqYXJnLCBjb25zdCBjaGFyICpzKQoreworCWFyZy0+dmFsdWUgPSAoRGF0dW0pIDA7CisJ YXJnLT5pc251bGwgPSB0cnVlOworCisJaWYgKHMpCisJeworCQlFcnJvclNhdmVDb250ZXh0IGVz Y29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJCUZtZ3JJbmZvCWZsaW5mbzsKKwkJ RGF0dW0JCXZhbDsKKworCQlmbWdyX2luZm8oRl9BUlJBWV9JTiwgJmZsaW5mbyk7CisKKwkJaWYg KCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZsaW5mbywgKGNoYXIgKikgcywgRkxPQVQ0T0lELCAt MSwKKwkJCQkJCQkJICAgKE5vZGUgKikgJmVzY29udGV4dCwgJnZhbCkpCisJCXsKKwkJCWVzY29u dGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJVGhyb3dFcnJvckRhdGEoZXNj b250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0 YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlhcmctPnZhbHVlID0gdmFsOworCQkJYXJnLT5pc251 bGwgPSBmYWxzZTsKKwkJfQorCX0KK30KKworLyoKKyAqIERlbGV0ZSBhdHRyaWJ1dGUgc3RhdGlz dGljcy4KKyAqLworYm9vbAorZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJl bCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkKQoreworCXJldHVybiBkZWxldGVf cGdfc3RhdGlzdGljKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCBpbmhlcml0ZWQpOwor fQorCisvKgorICogSW1wb3J0IGF0dHJpYnV0ZSBzdGF0aXN0aWNzIGZyb20gcmVndWxhciBzdHJp bmcgaW5wdXRzIGZvciBhbGwgc3RhdGl0aWNhbAorICogdmFsdWVzLgorICoKKyAqIFRvIGNvbnZl eSBhICJudWxsIi9ub3Qtc2V0IHZhbHVlIGZvciBhdHRudW0sIHVzZSBJbnZhbGlkQXR0ck51bWJl ci4KKyAqLworYm9vbAoraW1wb3J0X2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwg Y29uc3QgY2hhciAqYXR0bmFtZSwKKwkJCQkJCQlBdHRyTnVtYmVyIGF0dG51bSwgYm9vbCBpbmhl cml0ZWQsCisJCQkJCQkJY29uc3QgY2hhciAqbnVsbF9mcmFjLCBjb25zdCBjaGFyICphdmdfd2lk dGgsCisJCQkJCQkJY29uc3QgY2hhciAqbl9kaXN0aW5jdCwKKwkJCQkJCQljb25zdCBjaGFyICpt b3N0X2NvbW1vbl92YWxzLAorCQkJCQkJCWNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX2ZyZXFzLAor CQkJCQkJCWNvbnN0IGNoYXIgKmhpc3RvZ3JhbV9ib3VuZHMsCisJCQkJCQkJY29uc3QgY2hhciAq Y29ycmVsYXRpb24sCisJCQkJCQkJY29uc3QgY2hhciAqbW9zdF9jb21tb25fZWxlbXMsCisJCQkJ CQkJY29uc3QgY2hhciAqbW9zdF9jb21tb25fZWxlbV9mcmVxcywKKwkJCQkJCQljb25zdCBjaGFy ICplbGVtX2NvdW50X2hpc3RvZ3JhbSwKKwkJCQkJCQljb25zdCBjaGFyICpyYW5nZV9sZW5ndGhf aGlzdG9ncmFtLAorCQkJCQkJCWNvbnN0IGNoYXIgKnJhbmdlX2VtcHR5X2ZyYWMsCisJCQkJCQkJ Y29uc3QgY2hhciAqcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSkKK3sKKwlMT0NBTF9GQ0lORk8obmV3 ZmNpbmZvLCBOVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MpOworCisJSW5pdEZ1bmN0aW9uQ2FsbElu Zm9EYXRhKCpuZXdmY2luZm8sIE5VTEwsIE5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUywgSW52YWxp ZE9pZCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIENvbnZlcnQgYWxsIHN0cmluZyBpbnB1dHMg dG8gdGhlaXIgcmVxdWlyZWQgZGF0YXR5cGVzLiBOVUxMIHZhbHVlcyBhcmUKKwkgKiBsZWZ0IGFz IHRoZSBkZWZhdWx0LgorCSAqLworCW5ld2ZjaW5mby0+YXJnc1tBVFRSRUxTQ0hFTUFfQVJHXS52 YWx1ZSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCkpKTsKKwluZXdmY2luZm8tPmFyZ3NbQVRUUkVMU0NIRU1BX0FSR10uaXNu dWxsID0gZmFsc2U7CisJbmV3ZmNpbmZvLT5hcmdzW0FUVFJFTE5BTUVfQVJHXS52YWx1ZSA9IENT dHJpbmdHZXRUZXh0RGF0dW0oUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJbmV3ZmNp bmZvLT5hcmdzW0FUVFJFTE5BTUVfQVJHXS5pc251bGwgPSBmYWxzZTsKKworCXNldF90ZXh0X2Fy ZygmbmV3ZmNpbmZvLT5hcmdzW0FUVE5BTUVfQVJHXSwgYXR0bmFtZSk7CisKKwlpZiAoYXR0bnVt ICE9IEludmFsaWRBdHRyTnVtYmVyKQorCXsKKwkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9BUkdd LnZhbHVlID0gSW50MTZHZXREYXR1bShhdHRudW0pOworCQluZXdmY2luZm8tPmFyZ3NbQVRUTlVN X0FSR10uaXNudWxsID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCW5ld2ZjaW5mby0+YXJnc1tB VFROVU1fQVJHXS52YWx1ZSA9IChEYXR1bSkgMDsKKwkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9B UkddLmlzbnVsbCA9IHRydWU7CisJfQorCisJbmV3ZmNpbmZvLT5hcmdzW0lOSEVSSVRFRF9BUkdd LnZhbHVlID0gQm9vbEdldERhdHVtKGluaGVyaXRlZCk7CisJbmV3ZmNpbmZvLT5hcmdzW0lOSEVS SVRFRF9BUkddLmlzbnVsbCA9IGZhbHNlOworCisJc2V0X2Zsb2F0X2FyZygmbmV3ZmNpbmZvLT5h cmdzW05VTExfRlJBQ19BUkddLCBudWxsX2ZyYWMpOworCXNldF9pbnQzMl9hcmcoJm5ld2ZjaW5m by0+YXJnc1tBVkdfV0lEVEhfQVJHXSwgYXZnX3dpZHRoKTsKKwlzZXRfZmxvYXRfYXJnKCZuZXdm Y2luZm8tPmFyZ3NbTl9ESVNUSU5DVF9BUkddLCBuX2Rpc3RpbmN0KTsKKwlzZXRfdGV4dF9hcmco Jm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9WQUxTX0FSR10sIG1vc3RfY29tbW9uX3ZhbHMp OworCXNldF9mbG9hdGFycl9hcmcoJm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9GUkVRU19B UkddLCBtb3N0X2NvbW1vbl9mcmVxcyk7CisJc2V0X3RleHRfYXJnKCZuZXdmY2luZm8tPmFyZ3Nb SElTVE9HUkFNX0JPVU5EU19BUkddLCBoaXN0b2dyYW1fYm91bmRzKTsKKwlzZXRfZmxvYXRfYXJn KCZuZXdmY2luZm8tPmFyZ3NbQ09SUkVMQVRJT05fQVJHXSwgY29ycmVsYXRpb24pOworCXNldF90 ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW01PU1RfQ09NTU9OX0VMRU1TX0FSR10sIG1vc3RfY29t bW9uX2VsZW1zKTsKKwlzZXRfZmxvYXRhcnJfYXJnKCZuZXdmY2luZm8tPmFyZ3NbTU9TVF9DT01N T05fRUxFTV9GUkVRU19BUkddLCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzKTsKKwlzZXRfZmxvYXRh cnJfYXJnKCZuZXdmY2luZm8tPmFyZ3NbRUxFTV9DT1VOVF9ISVNUT0dSQU1fQVJHXSwgZWxlbV9j b3VudF9oaXN0b2dyYW0pOworCXNldF90ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0xF TkdUSF9ISVNUT0dSQU1fQVJHXSwgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSk7CisJc2V0X2Zsb2F0 X2FyZygmbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0VNUFRZX0ZSQUNfQVJHXSwgcmFuZ2VfZW1wdHlf ZnJhYyk7CisJc2V0X3RleHRfYXJnKCZuZXdmY2luZm8tPmFyZ3NbUkFOR0VfQk9VTkRTX0hJU1RP R1JBTV9BUkddLCByYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKworCXJldHVybiBhdHRyaWJ1dGVf c3RhdGlzdGljc191cGRhdGUobmV3ZmNpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGU5MDI4OWU0YWIxLi5lOTMxZmE2NGUw ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 CkBAIC0xMjkyNyw2ICsxMjkyNyw0NyBAQCBBTkFMWVpFIGR0ZXN0X3RhYmxlOwogQU5BTFlaRSBW RVJCT1NFIGR0ZXN0X2Z0YWJsZTsgICAgICAgICAgICAgLS0gc2hvdWxkIHdvcmsKIElORk86ICBp bXBvcnRpbmcgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJsZSAicHVibGljLmR0ZXN0X2Z0YWJs ZSIKIElORk86ICBmaW5pc2hlZCBpbXBvcnRpbmcgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJs ZSAicHVibGljLmR0ZXN0X2Z0YWJsZSIKKy0tIGR0ZXN0X2Z0YWJsZXMgc3RhdHMgc2hvdWxkIG5v dyBleGFjdGx5IG1hdGNoIGR0ZXN0X3RhYmxlCistLSBjb21wYXJlIHRoZSByb3djb3VudHMsIHNo b3VsZCBnZXQgMCByb3dzIGJhY2sKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzCitXSEVS RSBzY2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF90YWJsZScKK0VY Q0VQVAorU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAn cHVibGljJyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisgY291bnQgCistLS0tLS0t CisoMCByb3dzKQorCistLSBjb21wYXJlIHZhbHVlcywgc2hvdWxkIG1hdGNoCitTRUxFQ1QgcmVs cGFnZXMsIHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1YmxpYy5kdGVz dF90YWJsZSc6OnJlZ2NsYXNzCitFWENFUFQKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzCitG Uk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X2Z0YWJsZSc6OnJlZ2NsYXNz OworIHJlbHBhZ2VzIHwgcmVsdHVwbGVzIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLQorKDAgcm93 cykKKworLS0gdGVzdCBvbmx5IGEgZmV3IHN0YXRzIGNvbHVtbnMgY29tbW9uIHRvIGludGVnZXIg dHlwZXMKK1NFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51bGxfZnJhYywgYXZnX3dpZHRoLCBu X2Rpc3RpbmN0LAorICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1jdiwgbW9zdF9jb21tb25f ZnJlcXMsCisgIGhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgYXMgaGIsIGNvcnJlbGF0aW9uCitGUk9N IHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1YmxpYycKK0FORCB0YWJsZW5hbWUgPSAn ZHRlc3RfdGFibGUnCitFWENFUFQKK1NFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51bGxfZnJh YywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAorICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1j diwgbW9zdF9jb21tb25fZnJlcXMsCisgIGhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgYXMgaGIsIGNv cnJlbGF0aW9uCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1YmxpYycKK0FO RCB0YWJsZW5hbWUgPSAnZHRlc3RfZnRhYmxlJzsKKyBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVs bF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9kaXN0aW5jdCB8IG1jdiB8IG1vc3RfY29tbW9uX2ZyZXFz IHwgaGIgfCBjb3JyZWxhdGlvbiAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0t LS0tLS0tLS0tLS0KKygwIHJvd3MpCisKIC0tIGNsZWFudXAKIERST1AgRk9SRUlHTiBUQUJMRSBz aW1wb3J0X2Z0YWJsZTsKIERST1AgRk9SRUlHTiBUQUJMRSBzaW1wb3J0X2Z2aWV3OwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCA2NzNkNTYxMTdiOC4uOGFhNTg5ZDVhNTYgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgotI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5o IgogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtNDMsNiArNDIsNyBAQAogI2luY2x1ZGUgInBhcnNlci9w YXJzZXRyZWUuaCIKICNpbmNsdWRlICJwb3N0Z3Jlc19mZHcuaCIKICNpbmNsdWRlICJzdGF0aXN0 aWNzL3N0YXRpc3RpY3MuaCIKKyNpbmNsdWRlICJzdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5o IgogI2luY2x1ZGUgInN0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaCIKICNpbmNsdWRlICJzdG9y YWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKQEAgLTM2OCwxMDkgKzM2 OCw2IEBAIGVudW0gQXR0U3RhdHNDb2x1bW5zCiAJQVRUU1RBVFNfTlVNX0ZJRUxEUywKIH07CiAK LS8qIEF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBjaGFyICph dHRpbXBvcnRfc3FsID0KLSJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2F0dHJpYnV0ZV9z dGF0cyhcbiIKLSJcdCd2ZXJzaW9uJywgJDEsXG4iCi0iXHQnc2NoZW1hbmFtZScsICQyLFxuIgot Ilx0J3JlbG5hbWUnLCAkMyxcbiIKLSJcdCdhdHRudW0nLCAkNCxcbiIKLSJcdCdpbmhlcml0ZWQn LCBmYWxzZTo6Ym9vbGVhbixcbiIKLSJcdCdudWxsX2ZyYWMnLCAkNTo6cmVhbCxcbiIKLSJcdCdh dmdfd2lkdGgnLCAkNjo6aW50ZWdlcixcbiIKLSJcdCduX2Rpc3RpbmN0JywgJDc6OnJlYWwsXG4i Ci0iXHQnbW9zdF9jb21tb25fdmFscycsICQ4LFxuIgotIlx0J21vc3RfY29tbW9uX2ZyZXFzJywg JDk6OnJlYWxbXSxcbiIKLSJcdCdoaXN0b2dyYW1fYm91bmRzJywgJDEwLFxuIgotIlx0J2NvcnJl bGF0aW9uJywgJDExOjpyZWFsLFxuIgotIlx0J21vc3RfY29tbW9uX2VsZW1zJywgJDEyLFxuIgot Ilx0J21vc3RfY29tbW9uX2VsZW1fZnJlcXMnLCAkMTM6OnJlYWxbXSxcbiIKLSJcdCdlbGVtX2Nv dW50X2hpc3RvZ3JhbScsICQxNDo6cmVhbFtdLFxuIgotIlx0J3JhbmdlX2xlbmd0aF9oaXN0b2dy YW0nLCAkMTUsXG4iCi0iXHQncmFuZ2VfZW1wdHlfZnJhYycsICQxNjo6cmVhbCxcbiIKLSJcdCdy YW5nZV9ib3VuZHNfaGlzdG9ncmFtJywgJDE3KSI7Ci0KLS8qIEFyZ3VtZW50IG9yZGVyIGluIGF0 dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLWVudW0gQXR0SW1wb3J0U3FsQXJncwotewot CUFUVElNUE9SVF9TUUxfVkVSU0lPTiA9IDAsCi0JQVRUSU1QT1JUX1NRTF9TQ0hFTUFOQU1FLAot CUFUVElNUE9SVF9TUUxfUkVMTkFNRSwKLQlBVFRJTVBPUlRfU1FMX0FUVE5VTSwKLQlBVFRJTVBP UlRfU1FMX05VTExfRlJBQywKLQlBVFRJTVBPUlRfU1FMX0FWR19XSURUSCwKLQlBVFRJTVBPUlRf U1FMX05fRElTVElOQ1QsCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9WQUxTLAotCUFUVElN UE9SVF9TUUxfTU9TVF9DT01NT05fRlJFUVMsCi0JQVRUSU1QT1JUX1NRTF9ISVNUT0dSQU1fQk9V TkRTLAotCUFUVElNUE9SVF9TUUxfQ09SUkVMQVRJT04sCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NP TU1PTl9FTEVNUywKLQlBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMsCi0JQVRU SU1QT1JUX1NRTF9FTEVNX0NPVU5UX0hJU1RPR1JBTSwKLQlBVFRJTVBPUlRfU1FMX1JBTkdFX0xF TkdUSF9ISVNUT0dSQU0sCi0JQVRUSU1QT1JUX1NRTF9SQU5HRV9FTVBUWV9GUkFDLAotCUFUVElN UE9SVF9TUUxfUkFOR0VfQk9VTkRTX0hJU1RPR1JBTSwKLQlBVFRJTVBPUlRfU1FMX05VTV9GSUVM RFMKLX07Ci0KLS8qIEFyZ3VtZW50IHR5cGVzIGluIGF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVl cnkgKi8KLXN0YXRpYyBjb25zdCBPaWQgYXR0aW1wb3J0X2FyZ3R5cGVzW0FUVElNUE9SVF9TUUxf TlVNX0ZJRUxEU10gPQotewotCUlOVDRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIElOVDJPSUQsCi0J VEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwKLQlURVhUT0lELCBURVhUT0lELCBU RVhUT0lELCBURVhUT0lELAotCVRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsCi0J VEVYVE9JRCwKLX07Ci0KLS8qCi0gKiBUaGUgbWFwcGluZyBvZiBhdHRyaWJ1dGUgc3RhdHMgcXVl cnkgY29sdW1ucyB0byB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4KLSAqIHRoZSBwcmVwYXJl ZCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cygpIHN0YXRlbWVudC4KLSAqLwotdHlwZWRlZiBz dHJ1Y3QKLXsKLQllbnVtIEF0dFN0YXRzQ29sdW1ucyByZXNfZmllbGQ7Ci0JZW51bSBBdHRJbXBv cnRTcWxBcmdzIGFyZ19udW07Ci19IEF0dHJSZXN1bHRBcmdNYXA7Ci0KLSNkZWZpbmUgTlVNX01B UFBFRF9BVFRJTVBPUlRfQVJHUyAxMwotCi1zdGF0aWMgY29uc3QgQXR0clJlc3VsdEFyZ01hcCBh dHRyX3Jlc3VsdF9hcmdfbWFwW05VTV9NQVBQRURfQVRUSU1QT1JUX0FSR1NdID0KLXsKLQl7QVRU U1RBVFNfTlVMTF9GUkFDLCBBVFRJTVBPUlRfU1FMX05VTExfRlJBQ30sCi0Je0FUVFNUQVRTX0FW R19XSURUSCwgQVRUSU1QT1JUX1NRTF9BVkdfV0lEVEh9LAotCXtBVFRTVEFUU19OX0RJU1RJTkNU LCBBVFRJTVBPUlRfU1FMX05fRElTVElOQ1R9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9WQUxT LCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX1ZBTFN9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1P Tl9GUkVRUywgQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9GUkVRU30sCi0Je0FUVFNUQVRTX0hJ U1RPR1JBTV9CT1VORFMsIEFUVElNUE9SVF9TUUxfSElTVE9HUkFNX0JPVU5EU30sCi0Je0FUVFNU QVRTX0NPUlJFTEFUSU9OLCBBVFRJTVBPUlRfU1FMX0NPUlJFTEFUSU9OfSwKLQl7QVRUU1RBVFNf TU9TVF9DT01NT05fRUxFTVMsIEFUVElNUE9SVF9TUUxfTU9TVF9DT01NT05fRUxFTVN9LAotCXtB VFRTVEFUU19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTLCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9O X0VMRU1fRlJFUVN9LAotCXtBVFRTVEFUU19FTEVNX0NPVU5UX0hJU1RPR1JBTSwgQVRUSU1QT1JU X1NRTF9FTEVNX0NPVU5UX0hJU1RPR1JBTX0sCi0Je0FUVFNUQVRTX1JBTkdFX0xFTkdUSF9ISVNU T0dSQU0sIEFUVElNUE9SVF9TUUxfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTX0sCi0Je0FUVFNUQVRT X1JBTkdFX0VNUFRZX0ZSQUMsIEFUVElNUE9SVF9TUUxfUkFOR0VfRU1QVFlfRlJBQ30sCi0Je0FU VFNUQVRTX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0sIEFUVElNUE9SVF9TUUxfUkFOR0VfQk9VTkRT X0hJU1RPR1JBTX0sCi19OwotCi0vKiBBdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLXN0 YXRpYyBjb25zdCBjaGFyICphdHRjbGVhcl9zcWwgPQotIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2Ns ZWFyX2F0dHJpYnV0ZV9zdGF0cygkMSwgJDIsICQzLCBmYWxzZSkiOwotCi0vKiBBcmd1bWVudCBv cmRlciBpbiBhdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLWVudW0gQXR0Q2xlYXJTcWxB cmdzCi17Ci0JQVRUQ0xFQVJfU1FMX1NDSEVNQU5BTUUgPSAwLAotCUFUVENMRUFSX1NRTF9SRUxO QU1FLAotCUFUVENMRUFSX1NRTF9BVFROQU1FLAotCUFUVENMRUFSX1NRTF9OVU1fRklFTERTCi19 OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiBhdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8K LXN0YXRpYyBjb25zdCBPaWQgYXR0Y2xlYXJfYXJndHlwZXNbQVRUQ0xFQVJfU1FMX05VTV9GSUVM RFNdID0KLXsKLQlURVhUT0lELCBURVhUT0lELCBURVhUT0lELAotfTsKLQogLyoKICAqIFNRTCBm dW5jdGlvbnMKICAqLwpAQCAtNjg4LDE1ICs1ODUsMTIgQEAgc3RhdGljIGJvb2wgbWF0Y2hfYXR0 cm1hcChQR3Jlc3VsdCAqcmVzLAogCQkJCQkJICBjb25zdCBjaGFyICpyZW1vdGVfcmVsbmFtZSwK IAkJCQkJCSAgaW50IGF0dHJjbnQsCiAJCQkJCQkgIFJlbW90ZUF0dHJpYnV0ZU1hcHBpbmcgKnJl bWF0dHJtYXApOwotc3RhdGljIGJvb2wgaW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlv biByZWwsCitzdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJl bGF0aW9uLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkJICBj b25zdCBjaGFyICpyZWxuYW1lLAogCQkJCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCQkJCSAg Y29uc3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCQkJCSAgUmVt b3RlU3RhdHNSZXN1bHRzICpyZW1zdGF0cyk7Ci1zdGF0aWMgdm9pZCBtYXBfZmllbGRfdG9fYXJn KFBHcmVzdWx0ICpyZXMsIGludCByb3csIGludCBmaWVsZCwKLQkJCQkJCQkgaW50IGFyZywgRGF0 dW0gKnZhbHVlcywgY2hhciAqbnVsbHMpOwotc3RhdGljIGJvb2wgaW1wb3J0X3NwaV9xdWVyeV9v ayh2b2lkKTsKIHN0YXRpYyB2b2lkIHByb2R1Y2VfdHVwbGVfYXN5bmNocm9ub3VzbHkoQXN5bmNS ZXF1ZXN0ICphcmVxLCBib29sIGZldGNoKTsKIHN0YXRpYyB2b2lkIGZldGNoX21vcmVfZGF0YV9i ZWdpbihBc3luY1JlcXVlc3QgKmFyZXEpOwogc3RhdGljIHZvaWQgY29tcGxldGVfcGVuZGluZ19y ZXF1ZXN0KEFzeW5jUmVxdWVzdCAqYXJlcSk7CkBAIC02MDk5LDYgKzU5OTMsMTkgQEAgbWF0Y2hf YXR0cm1hcChQR3Jlc3VsdCAqcmVzLAogCXJldHVybiB0cnVlOwogfQogCisKKy8qCisgKiBDb25l bmllbmNlIHJvdXRpbmUgdG8gZmV0Y2gKKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X29wdF92YWx1 ZShQR3Jlc3VsdCAqcmVzLCBpbnQgcm93LCBpbnQgY29sKQoreworCWlmIChQUWdldGlzbnVsbChy ZXMsIHJvdywgY29sKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gUFFnZXR2YWx1ZShyZXMs IHJvdywgY29sKTsKK30KKwogLyoKICAqIEltcG9ydCBmZXRjaGVkIHN0YXRpc3RpY3MgaW50byB0 aGUgbG9jYWwgc3RhdGlzdGljcyB0YWJsZXMuCiAgKi8KQEAgLTYxMTAsMjggKzYwMTcsMTEgQEAg aW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCSAgY29u c3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCSAgUmVtb3RlU3Rh dHNSZXN1bHRzICpyZW1zdGF0cykKIHsKLQlTUElQbGFuUHRyCWF0dGltcG9ydF9wbGFuID0gTlVM TDsKLQlTUElQbGFuUHRyCWF0dGNsZWFyX3BsYW4gPSBOVUxMOwotCURhdHVtCQl2YWx1ZXNbQVRU SU1QT1JUX1NRTF9OVU1fRklFTERTXTsKLQljaGFyCQludWxsc1tBVFRJTVBPUlRfU1FMX05VTV9G SUVMRFNdOwotCWludAkJCXNwaXJjOwogCWJvb2wJCW9rID0gZmFsc2U7CiAKIAljaGFyCSAgICpy ZWxwYWdlcyA9IE5VTEw7CiAJY2hhcgkgICAqcmVsdHVwbGVzID0gTlVMTDsKIAotCS8qIEFzc2ln biBhbGwgdGhlIGludmFyaWFudCBwYXJhbWV0ZXJzIGNvbW1vbiB0byByZWxhdGlvbi9hdHRyaWJ1 dGUgc3RhdHMgKi8KLQl2YWx1ZXNbQVRUSU1QT1JUX1NRTF9WRVJTSU9OXSA9IEludDMyR2V0RGF0 dW0ocmVtc3RhdHMtPnNlcnZlcl92ZXJzaW9uX251bSk7Ci0JbnVsbHNbQVRUSU1QT1JUX1NRTF9W RVJTSU9OXSA9ICcgJzsKLQotCXZhbHVlc1tBVFRJTVBPUlRfU1FMX1NDSEVNQU5BTUVdID0gQ1N0 cmluZ0dldFRleHREYXR1bShzY2hlbWFuYW1lKTsKLQludWxsc1tBVFRJTVBPUlRfU1FMX1NDSEVN QU5BTUVdID0gJyAnOwotCi0JdmFsdWVzW0FUVElNUE9SVF9TUUxfUkVMTkFNRV0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKHJlbG5hbWUpOwotCW51bGxzW0FUVElNUE9SVF9TUUxfUkVMTkFNRV0gPSAn ICc7Ci0KLQlTUElfY29ubmVjdCgpOwotCiAJLyoKIAkgKiBXZSBpbXBvcnQgYXR0cmlidXRlIHN0 YXRpc3RpY3MgZmlyc3QsIGlmIGFueSwgYmVjYXVzZSB0aG9zZSBhcmUgbW9yZQogCSAqIHByb25l IHRvIGVycm9ycy4gIFRoaXMgYXZvaWRzIG1ha2luZyBhIG1vZGlmaWNhdGlvbiBvZiBwZ19jbGFz cyB0aGF0CkBAIC02MTM5LDI2ICs2MDI5LDE2IEBAIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Mo UmVsYXRpb24gcmVsYXRpb24sCiAJICovCiAJaWYgKHJlbXN0YXRzLT5hdHQgIT0gTlVMTCkKIAl7 Ci0JCUFzc2VydChQUW5maWVsZHMocmVtc3RhdHMtPmF0dCkgPT0gQVRUU1RBVFNfTlVNX0ZJRUxE Uyk7Ci0JCUFzc2VydChQUW50dXBsZXMocmVtc3RhdHMtPmF0dCkgPj0gMSk7CisJCVBHcmVzdWx0 ICAgKnJlcyA9IHJlbXN0YXRzLT5hdHQ7CiAKLQkJYXR0aW1wb3J0X3BsYW4gPSBTUElfcHJlcGFy ZShhdHRpbXBvcnRfc3FsLCBBVFRJTVBPUlRfU1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkgKE9p ZCAqKSBhdHRpbXBvcnRfYXJndHlwZXMpOwotCQlpZiAoYXR0aW1wb3J0X3BsYW4gPT0gTlVMTCkK LQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcHJlcGFyZSBhdHRpbXBvcnRfc3FsIHF1ZXJ5Iik7 Ci0KLQkJYXR0Y2xlYXJfcGxhbiA9IFNQSV9wcmVwYXJlKGF0dGNsZWFyX3NxbCwgQVRUQ0xFQVJf U1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkoT2lkICopIGF0dGNsZWFyX2FyZ3R5cGVzKTsKLQkJ aWYgKGF0dGNsZWFyX3BsYW4gPT0gTlVMTCkKLQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcHJl cGFyZSBhdHRjbGVhcl9zcWwgcXVlcnkiKTsKLQotCQludWxsc1tBVFRJTVBPUlRfU1FMX0FUVE5V TV0gPSAnICc7CisJCUFzc2VydChQUW5maWVsZHMocmVzKSA9PSBBVFRTVEFUU19OVU1fRklFTERT KTsKKwkJQXNzZXJ0KFBRbnR1cGxlcyhyZXMpID49IDEpOwogCiAJCWZvciAoaW50IG1hcGlkeCA9 IDA7IG1hcGlkeCA8IGF0dHJjbnQ7IG1hcGlkeCsrKQogCQl7CiAJCQlpbnQJCQlyb3cgPSByZW1h dHRybWFwW21hcGlkeF0ucmVzX2luZGV4OwotCQkJRGF0dW0JICAgKnZhbHVlczIgPSB2YWx1ZXMg KyAxOwotCQkJY2hhcgkgICAqbnVsbHMyID0gbnVsbHMgKyAxOworCQkJQXR0ck51bWJlcglhdHRu dW0gPSByZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bnVtOworCQkJY29uc3QgY2hhciAqYXR0 bmFtZSA9IHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRuYW1lOwogCiAJCQkvKiBBbGwgbWFw cGluZ3Mgc2hvdWxkIGhhdmUgYmVlbiBhc3NpZ25lZCBhIHJlc3VsdCBzZXQgcm93LiAqLwogCQkJ QXNzZXJ0KHJvdyA+PSAwKTsKQEAgLTYxNjgsNDIgKzYwNDgsMjggQEAgaW1wb3J0X2ZldGNoZWRf c3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCSAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIAotCQkJLyoKLQkJCSAqIEZpcnN0LCBjbGVhciBleGlzdGluZyBhdHRyaWJ1dGUg c3RhdHMuCi0JCQkgKgotCQkJICogV2UgY2FuIHJlLXVzZSB0aGUgdmFsdWVzL251bGxzIGJlY2F1 c2UgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzCi0JCQkgKiBpcyBsZXNzIGFuZCB0aGUgZmlyc3Qg dHdvIHBhcmFtcyBhcmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCBhbmQKLQkJCSAqIHRoaXJkIG9u ZXMgaW4gYXR0aW1wb3J0X3NxbC4KLQkJCSAqLwotCQkJdmFsdWVzMltBVFRDTEVBUl9TUUxfQVRU TkFNRV0gPQotCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0ocmVtYXR0cm1hcFttYXBpZHhdLmxvY2Fs X2F0dG5hbWUpOworCQkJZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKHJlbGF0aW9uLCBhdHRu dW0sIGZhbHNlKTsKIAotCQkJc3BpcmMgPSBTUElfZXhlY3V0ZV9wbGFuKGF0dGNsZWFyX3BsYW4s IHZhbHVlczIsIG51bGxzMiwgZmFsc2UsIDEpOwotCQkJaWYgKHNwaXJjICE9IFNQSV9PS19TRUxF Q1QpCi0JCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBleGVjdXRlIGF0dGNsZWFyX3NxbCBxdWVy eSBmb3IgY29sdW1uIFwiJXNcIiBvZiBmb3JlaWduIHRhYmxlIFwiJXMuJXNcIiIsCi0JCQkJCSBy ZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bmFtZSwgc2NoZW1hbmFtZSwgcmVsbmFtZSk7Ci0K LQkJCXZhbHVlc1tBVFRJTVBPUlRfU1FMX0FUVE5VTV0gPQotCQkJCUludDE2R2V0RGF0dW0ocmVt YXR0cm1hcFttYXBpZHhdLmxvY2FsX2F0dG51bSk7Ci0KLQkJCS8qIExvb3AgdGhyb3VnaCBhbGwg bWFwcGFibGUgY29sdW1ucyB0byBzZXQgcmVtYWluaW5nIGFyZ3VtZW50cyAqLwotCQkJZm9yIChp bnQgaSA9IDA7IGkgPCBOVU1fTUFQUEVEX0FUVElNUE9SVF9BUkdTOyBpKyspCi0JCQkJbWFwX2Zp ZWxkX3RvX2FyZyhyZW1zdGF0cy0+YXR0LCByb3csCi0JCQkJCQkJCSBhdHRyX3Jlc3VsdF9hcmdf bWFwW2ldLnJlc19maWVsZCwKLQkJCQkJCQkJIGF0dHJfcmVzdWx0X2FyZ19tYXBbaV0uYXJnX251 bSwKLQkJCQkJCQkJIHZhbHVlcywgbnVsbHMpOwotCi0JCQlzcGlyYyA9IFNQSV9leGVjdXRlX3Bs YW4oYXR0aW1wb3J0X3BsYW4sIHZhbHVlcywgbnVsbHMsIGZhbHNlLCAxKTsKLQkJCWlmIChzcGly YyAhPSBTUElfT0tfU0VMRUNUKQotCQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gZXhlY3V0ZSBh dHRpbXBvcnRfc3FsIHF1ZXJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIGZvcmVpZ24gdGFibGUgXCIl cy4lc1wiIiwKLQkJCQkJIHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRuYW1lLCBzY2hlbWFu YW1lLCByZWxuYW1lKTsKLQotCQkJaWYgKCFpbXBvcnRfc3BpX3F1ZXJ5X29rKCkpCisJCQlpZiAo IWltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcyhyZWxhdGlvbiwgYXR0bmFtZSwKKwkJCQkJCQkJ CQkJIEludmFsaWRBdHRyTnVtYmVyLAorCQkJCQkJCQkJCQkgZmFsc2UsCisJCQkJCQkJCQkJCSBn ZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19OVUxMX0ZSQUMpLAorCQkJCQkJCQkJCQkg Z2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfQVZHX1dJRFRIKSwKKwkJCQkJCQkJCQkJ IGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFUVFNUQVRTX05fRElTVElOQ1QpLAorCQkJCQkJCQkJ CQkgZ2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfTU9TVF9DT01NT05fVkFMUyksCisJ CQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19NT1NUX0NPTU1PTl9G UkVRUyksCisJCQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19ISVNU T0dSQU1fQk9VTkRTKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFUVFNU QVRTX0NPUlJFTEFUSU9OKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFU VFNUQVRTX01PU1RfQ09NTU9OX0VMRU1TKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVz LCByb3csIEFUVFNUQVRTX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpLAorCQkJCQkJCQkJCQkgZ2V0 X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfRUxFTV9DT1VOVF9ISVNUT0dSQU0pLAorCQkJ CQkJCQkJCQkgZ2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfUkFOR0VfTEVOR1RIX0hJ U1RPR1JBTSksCisJCQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19S QU5HRV9FTVBUWV9GUkFDKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFU VFNUQVRTX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0pKSkKIAkJCXsKIAkJCQllcmVwb3J0KFdBUk5J TkcsCiAJCQkJCQllcnJtc2coImNvdWxkIG5vdCBpbXBvcnQgc3RhdGlzdGljcyBmb3IgZm9yZWln biB0YWJsZSBcIiVzLiVzXCIgLS0tIGF0dHJpYnV0ZSBzdGF0aXN0aWNzIGltcG9ydCBmYWlsZWQg Zm9yIGNvbHVtbiBcIiVzXCIgb2YgdGhpcyBmb3JlaWduIHRhYmxlIiwKLQkJCQkJCQkgICBzY2hl bWFuYW1lLCByZWxuYW1lLAotCQkJCQkJCSAgIHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRu YW1lKSk7CisJCQkJCQkJICAgc2NoZW1hbmFtZSwgcmVsbmFtZSwgYXR0bmFtZSkpOwogCQkJCWdv dG8gaW1wb3J0X2NsZWFudXA7CiAJCQl9CiAJCX0KQEAgLTYyMzIsNTcgKzYwOTgsOSBAQCBpbXBv cnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLAogCW9rID0gdHJ1ZTsKIAog aW1wb3J0X2NsZWFudXA6Ci0JaWYgKGF0dGltcG9ydF9wbGFuKQotCQlTUElfZnJlZXBsYW4oYXR0 aW1wb3J0X3BsYW4pOwotCWlmIChhdHRjbGVhcl9wbGFuKQotCQlTUElfZnJlZXBsYW4oYXR0Y2xl YXJfcGxhbik7Ci0JU1BJX2ZpbmlzaCgpOwogCXJldHVybiBvazsKIH0KIAotLyoKLSAqIE1vdmUg YSBzdHJpbmcgdmFsdWUgZnJvbSBhIHJlc3VsdCBzZXQgdG8gYSBUZXh0IHZhbHVlIG9mIGEgRGF0 dW0gYXJyYXkuCi0gKi8KLXN0YXRpYyB2b2lkCi1tYXBfZmllbGRfdG9fYXJnKFBHcmVzdWx0ICpy ZXMsIGludCByb3csIGludCBmaWVsZCwKLQkJCQkgaW50IGFyZywgRGF0dW0gKnZhbHVlcywgY2hh ciAqbnVsbHMpCi17Ci0JaWYgKFBRZ2V0aXNudWxsKHJlcywgcm93LCBmaWVsZCkpCi0JewotCQl2 YWx1ZXNbYXJnXSA9IChEYXR1bSkgMDsKLQkJbnVsbHNbYXJnXSA9ICduJzsKLQl9Ci0JZWxzZQot CXsKLQkJY29uc3QgY2hhciAqcyA9IFBRZ2V0dmFsdWUocmVzLCByb3csIGZpZWxkKTsKLQotCQl2 YWx1ZXNbYXJnXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocyk7Ci0JCW51bGxzW2FyZ10gPSAnICc7 Ci0JfQotfQotCi0vKgotICogQ2hlY2sgdGhlIDF4MSByZXN1bHQgc2V0IG9mIGEgcGdfcmVzdG9y ZV8qX3N0YXRzKCkgY29tbWFuZCBmb3Igc3VjY2Vzcy4KLSAqLwotc3RhdGljIGJvb2wKLWltcG9y dF9zcGlfcXVlcnlfb2sodm9pZCkKLXsKLQlUdXBsZURlc2MJdHVwZGVzYzsKLQlEYXR1bQkJZGF0 OwotCWJvb2wJCWlzbnVsbDsKLQotCUFzc2VydChTUElfdHVwdGFibGUgIT0gTlVMTCk7Ci0JQXNz ZXJ0KFNQSV9wcm9jZXNzZWQgPT0gMSk7Ci0KLQl0dXBkZXNjID0gU1BJX3R1cHRhYmxlLT50dXBk ZXNjOwotCUFzc2VydCh0dXBkZXNjLT5uYXR0cyA9PSAxKTsKLQlBc3NlcnQoVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCAwKS0+YXR0dHlwaWQgPT0gQk9PTE9JRCk7Ci0JZGF0ID0gU1BJX2dldGJpbnZh bChTUElfdHVwdGFibGUtPnZhbHNbMF0sIHR1cGRlc2MsIDEsICZpc251bGwpOwotCUFzc2VydCgh aXNudWxsKTsKLQotCXJldHVybiBEYXR1bUdldEJvb2woZGF0KTsKLX0KLQogLyoKICAqIEltcG9y dCBhIGZvcmVpZ24gc2NoZW1hCiAgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwKaW5kZXggZGZjNThiZWIwZDIuLjYyNzE3NzEyM2IzIDEwMDY0NAotLS0gYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtNDU4NCw2ICs0NTg0LDM4IEBAIEFOQUxZ WkUgZHRlc3RfdGFibGU7CiAKIEFOQUxZWkUgVkVSQk9TRSBkdGVzdF9mdGFibGU7ICAgICAgICAg ICAgIC0tIHNob3VsZCB3b3JrCiAKKy0tIGR0ZXN0X2Z0YWJsZXMgc3RhdHMgc2hvdWxkIG5vdyBl eGFjdGx5IG1hdGNoIGR0ZXN0X3RhYmxlCistLSBjb21wYXJlIHRoZSByb3djb3VudHMsIHNob3Vs ZCBnZXQgMCByb3dzIGJhY2sKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzCitXSEVSRSBz Y2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF90YWJsZScKK0VYQ0VQ VAorU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAncHVi bGljJyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisKKy0tIGNvbXBhcmUgdmFsdWVz LCBzaG91bGQgbWF0Y2gKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzCitGUk9NIHBnX2NsYXNz CitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X3RhYmxlJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VM RUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdwdWJs aWMuZHRlc3RfZnRhYmxlJzo6cmVnY2xhc3M7CisKKy0tIHRlc3Qgb25seSBhIGZldyBzdGF0cyBj b2x1bW5zIGNvbW1vbiB0byBpbnRlZ2VyIHR5cGVzCitTRUxFQ1QgYXR0bmFtZSwgaW5oZXJpdGVk LCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5jdCwKKyAgbW9zdF9jb21tb25fdmFsczo6 dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFzLAorICBoaXN0b2dyYW1fYm91bmRzOjp0ZXh0 IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdw dWJsaWMnCitBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X3RhYmxlJworRVhDRVBUCitTRUxFQ1QgYXR0 bmFtZSwgaW5oZXJpdGVkLCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5jdCwKKyAgbW9z dF9jb21tb25fdmFsczo6dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFzLAorICBoaXN0b2dy YW1fYm91bmRzOjp0ZXh0IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19zdGF0cworV0hFUkUg c2NoZW1hbmFtZSA9ICdwdWJsaWMnCitBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisK IC0tIGNsZWFudXAKIERST1AgRk9SRUlHTiBUQUJMRSBzaW1wb3J0X2Z0YWJsZTsKIERST1AgRk9S RUlHTiBUQUJMRSBzaW1wb3J0X2Z2aWV3OwotLSAKMi41NC4wCgo= --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0003-New-function-stats_acquire_relation_lock.patch" Content-Disposition: attachment; filename="v2-0003-New-function-stats_acquire_relation_lock.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg422 RnJvbSAzZjg1NzYxMWI2OWM5NWYzMjVhYmE1ZWQ4MDQ5ZTM3NjMyNmRiOGZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMiBKdW4gMjAyNiAxMzo0MzozNyAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgMy83XSBOZXcgZnVuY3Rpb246IHN0YXRzX2FjcXVpcmVfcmVsYXRpb25fbG9jaygpLgoKSW50 cm9kdWNlIGEgbmV3IGZ1bmNpdG9uLCBzdGF0c19hY3F1aXJlX3JlbGF0aW9uX2xvY2soKSB3aGlj aCB3aWxsCnBlcmZvcm0gdGhlIFJhbmdlVmFyR2V0UmVsaWRFeHRlbmRlZCgpIGNhbGwgdXNlZCB0 byB2ZXJpZnkgdGhlIGNvcnJlY3QKcmVsb2lkIG9mIHRoZSByZWxhdGlvbiwgdmVyaWZ5IHRoYXQg dGhlIGNhbGxlciBoYXMgdGhlIGNvcnJlY3QKcGVybWlzc2lvbnMgZm9yIHRoZSBvcGVyYXRpb24s IGFuZCBhY3F1aXJpbmcgdGhlIGxvY2suCgpBZGRpdGlvbmFsbHksIGl0IHdpbGwgY2hlY2sgUmVj b3ZlcnlJblByb2dyZXNzKCkgYmVmb3JlIGFjcXVpcmluZyBhIGxvY2sKYmVjYXVzZSB3ZSBjYW4n dCBhY3F1aXJlIGxvY2tzIGR1cmluZyByZWNvdmVyeSwgbGV0IGFsb25lIHNldApzdGF0aXN0aWNz LgoKVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgYnkgYWxsIG9mIHRoZSBjYWxsZXJzIG9mCnJl bGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKCkgYW5kIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0 ZSgpLgotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5oIHwgIDIgKysKIHNy Yy9iYWNrZW5kL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5jIHwgMjYgKysrKysrKysrKysrKysrKysr KysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdF91dGlscy5oIGIvc3JjL2luY2x1ZGUvc3RhdGlz dGljcy9zdGF0X3V0aWxzLmgKaW5kZXggNzRkYTc3OTA1NzkuLmJjZGZhNjE2Y2U2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuaAorKysgYi9zcmMvaW5jbHVk ZS9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuaApAQCAtMzcsNiArMzcsOCBAQCBleHRlcm4gYm9vbCBz dGF0c19jaGVja19hcmdfcGFpcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIGV4dGVybiB2b2lk IFJhbmdlVmFyQ2FsbGJhY2tGb3JTdGF0cyhjb25zdCBSYW5nZVZhciAqcmVsYXRpb24sCiAJCQkJ CQkJCQkgT2lkIHJlbElkLCBPaWQgb2xkUmVsSWQsIHZvaWQgKmFyZyk7CiAKK2V4dGVybiBPaWQg c3RhdHNfYWNxdWlyZV9yZWxhdGlvbl9sb2NrKGNvbnN0IGNoYXIgKm5zcG5hbWUsIGNvbnN0IGNo YXIgKnJlbG5hbWUpOworCiBleHRlcm4gYm9vbCBzdGF0c19maWxsX2ZjaW5mb19mcm9tX2FyZ19w YWlycyhGdW5jdGlvbkNhbGxJbmZvIHBhaXJzX2ZjaW5mbywKIAkJCQkJCQkJCQkJIEZ1bmN0aW9u Q2FsbEluZm8gcG9zaXRpb25hbF9mY2luZm8sCiAJCQkJCQkJCQkJCSBzdHJ1Y3QgU3RhdHNBcmdJ bmZvICphcmdpbmZvKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mvc3RhdF91 dGlscy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9zdGF0X3V0aWxzLmMKaW5kZXggYTY3M2Uz YzcwNGIuLjc1NzkyZmY5NjZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0 YXRfdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3N0YXRfdXRpbHMuYwpAQCAt MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCiAjaW5jbHVk ZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInN0YXRp c3RpY3Mvc3RhdF91dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgpAQCAtNzUzLDMg Kzc1NCwyOCBAQCBzdGF0YXR0X2luaXRfZW1wdHlfdHVwbGUoT2lkIHJlbG9pZCwgaW50MTYgYXR0 bnVtLCBib29sIGluaGVyaXRlZCwKIAkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhY29sbDEg KyBzbG90bnVtIC0gMV0gPSBmYWxzZTsKIAl9CiB9CisKKy8qCisgKiBDb252ZW5pZW5jZSByb3V0 aW5lIHRvIGVuY2Fwc3VsYXRlIHRoZSBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQoKQorICogdGhh dCBhbGwgZXh0ZXJuYWwgY2FsbGVycyBtdXN0IG1ha2UgYmVmb3JlIGNhbGxpbmcKKyAqIHJlbGF0 aW9uX3N0YXRpc3RpY3NfdXBkYXRlKCkgb3IgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKCku CisgKgorICogQ2hlY2sgZm9yIHJlY292ZXJ5IGluIHByb2dyZXNzIGJlZm9yZSBhY3F1aXJpbmcg YW55IGxvY2tzLgorICovCitPaWQKK3N0YXRzX2FjcXVpcmVfcmVsYXRpb25fbG9jayhjb25zdCBj aGFyICpuc3BuYW1lLCBjb25zdCBjaGFyICpyZWxuYW1lKQoreworCU9pZAkJcmVsb2lkOworCU9p ZAkJbG9ja2VkX3RhYmxlID0gSW52YWxpZE9pZDsKKworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3Mo KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJyZWNvdmVyeSBpcyBpbiBwcm9ncmVz cyIpLAorCQkJCSBlcnJoaW50KCJTdGF0aXN0aWNzIGNhbm5vdCBiZSBtb2RpZmllZCBkdXJpbmcg cmVjb3ZlcnkuIikpKTsKKworCXJlbG9pZCA9IFJhbmdlVmFyR2V0UmVsaWRFeHRlbmRlZChtYWtl UmFuZ2VWYXIoKGNoYXIgKikgbnNwbmFtZSwgKGNoYXIgKikgcmVsbmFtZSwgLTEpLAorCQkJCQkJ CQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIDAsCisJCQkJCQkJCQkgIFJhbmdlVmFyQ2Fs bGJhY2tGb3JTdGF0cywgJmxvY2tlZF90YWJsZSk7CisJcmV0dXJuIHJlbG9pZDsKK30KLS0gCjIu NTQuMAoK --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0005-Rename-import_relation_statistics-to-relation_sta.patch" Content-Disposition: attachment; filename="v2-0005-Rename-import_relation_statistics-to-relation_sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg4g4 RnJvbSA2Y2RhMjhhMDYzYmRiODU0ZmJmYjQyZGNkY2UyNjUwNzMwYmRlZWEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMiBKdW4gMjAyNiAxNDowNTozMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgNS83XSBSZW5hbWUgaW1wb3J0X3JlbGF0aW9uX3N0YXRpc3RpY3MoKSB0bwogcmVsYXRpb25f c3RhdGlzdGljc191cGRhdGUoKS4KClJlbmFtZSBleGlzdGluZyByZWxhdGlvbl9zdGF0aXN0aWNz X3VwZGF0ZSgpIHRvIHVwZGF0ZV9yZWxzdGF0cygpIGFuZApjaGFuZ2UgdGhlIGNhbGwgc2lnbmF0 dXJlIHRvIGhhdmUgdGhlIHJlbGF0aW9uIG9pZC4gQWxsIGNhbGxlcnMgbm93CmluZGVwZW5kZW50 bHkgcmVzb3ZsZSB0aGUgcmVsb2lkIHZpYSBzdGF0c19hY3F1aXJlX3JlbGF0aW9uX2xvY2soKS4K LS0tCiBzcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmggfCAgIDIgKy0KIHNy Yy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYyB8IDE5NCArKysrKysrKysrKysr LS0tLS0tLS0tLS0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgICB8ICAg MiArLQogMyBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oIGIv c3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oCmluZGV4IGY2OGExYTc1NWEx Li40MjNmZjg5NjFmMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlv bl9zdGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaApA QCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAKLWJvb2wgaW1w b3J0X3JlbGF0aW9uX3N0YXRpc3RpY3MoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpyZWxwYWdl cywKK2Jvb2wgcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoUmVsYXRpb24gcmVsLCBjb25zdCBj aGFyICpyZWxwYWdlcywKIAkJCQkJCQkJY29uc3QgY2hhciAqcmVsdHVwbGVzLCBjb25zdCBjaGFy ICpyZWxhbGx2aXNpYmxlLAogCQkJCQkJCQljb25zdCBjaGFyICpyZWxhbGxmcm96ZW4pOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMgYi9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmMKaW5kZXggOWMzMDhlZTUwZTUuLjJl MDdkZjc4ZDhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL3JlbGF0aW9uX3N0 YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCkBAIC0z Miw4ICszMiw4IEBACiAKIAogLyoKLSAqIFBvc2l0aW9uYWwgYXJndW1lbnQgbnVtYmVycywgbmFt ZXMsIGFuZCB0eXBlcyBmb3IKLSAqIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKCkuCisgKiBQ b3NpdGlvbmFsIGFyZ3VtZW50IG51bWJlcnMsIG5hbWVzLCBhbmQgdHlwZXMgZm9yIHBvc2l0aW9u YWxfZmNpbmZvCisgKiB1c2VkIGJ5IHVwZGF0ZV9yZWxzdGF0cygpLgogICovCiAKIGVudW0gcmVs YXRpb25fc3RhdHNfYXJnbnVtCkBAIC01OCwxOCArNTgsMTUgQEAgc3RhdGljIHN0cnVjdCBTdGF0 c0FyZ0luZm8gcmVsYXJnaW5mb1tdID0KIAlbTlVNX1JFTEFUSU9OX1NUQVRTX0FSR1NdID0gezB9 CiB9OwogCi1zdGF0aWMgYm9vbCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbyk7CitzdGF0aWMgYm9vbCB1cGRhdGVfcmVsc3RhdHMoT2lkIHJlbG9pZCwg RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOwogCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gZm9y IG1vZGlmeWluZyBzdGF0aXN0aWNzIGZvciBhIHJlbGF0aW9uLgogICovCiBzdGF0aWMgYm9vbAot cmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCit1cGRh dGVfcmVsc3RhdHMoT2lkIHJlbG9pZCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiB7CiAJYm9v bAkJcmVzdWx0ID0gdHJ1ZTsKLQljaGFyCSAgICpuc3BuYW1lOwotCWNoYXIJICAgKnJlbG5hbWU7 Ci0JT2lkCQkJcmVsb2lkOwogCVJlbGF0aW9uCWNyZWw7CiAJQmxvY2tOdW1iZXIgcmVscGFnZXMg PSAwOwogCWJvb2wJCXVwZGF0ZV9yZWxwYWdlcyA9IGZhbHNlOwpAQCAtODUsMjMgKzgyLDYgQEAg cmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJRGF0 dW0JCXZhbHVlc1s0XSA9IHswfTsKIAlib29sCQludWxsc1s0XSA9IHswfTsKIAlpbnQJCQlucmVw bGFjZXMgPSAwOwotCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7Ci0KLQlzdGF0c19j aGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCByZWxhcmdpbmZvLCBSRUxTQ0hFTUFfQVJHKTsKLQlz dGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCByZWxhcmdpbmZvLCBSRUxOQU1FX0FSRyk7 Ci0KLQluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oUkVMU0NI RU1BX0FSRykpOwotCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRV TShSRUxOQU1FX0FSRykpOwotCi0JaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQotCQllcmVwb3J0 KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAotCQkJCSBlcnJtc2coInJlY292ZXJ5IGlzIGluIHByb2dyZXNzIiksCi0JCQkJIGVy cmhpbnQoIlN0YXRpc3RpY3MgY2Fubm90IGJlIG1vZGlmaWVkIGR1cmluZyByZWNvdmVyeS4iKSkp OwotCi0JcmVsb2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVkKG1ha2VSYW5nZVZhcihuc3Bu YW1lLCByZWxuYW1lLCAtMSksCi0JCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywg MCwKLQkJCQkJCQkJCSAgUmFuZ2VWYXJDYWxsYmFja0ZvclN0YXRzLCAmbG9ja2VkX3RhYmxlKTsK IAogCWlmICghUEdfQVJHSVNOVUxMKFJFTFBBR0VTX0FSRykpCiAJewpAQCAtMjAzLDI0ICsxODMs MzUgQEAgcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p CiBEYXR1bQogcGdfY2xlYXJfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlM T0NBTF9GQ0lORk8obmV3ZmNpbmZvLCA2KTsKKwlMT0NBTF9GQ0lORk8ocG9zaXRpb25hbF9mY2lu Zm8sIE5VTV9SRUxBVElPTl9TVEFUU19BUkdTKTsKKwlPaWQJCQlyZWxvaWQ7CisJY2hhcgkgICAq bnNwbmFtZTsKKwljaGFyCSAgICpyZWxuYW1lOwogCi0JSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRh KCpuZXdmY2luZm8sIE5VTEwsIDYsIEludmFsaWRPaWQsIE5VTEwsIE5VTEwpOworCUluaXRGdW5j dGlvbkNhbGxJbmZvRGF0YSgqcG9zaXRpb25hbF9mY2luZm8sIE5VTEwsIDYsIEludmFsaWRPaWQs IE5VTEwsIE5VTEwpOwogCi0JbmV3ZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gUEdfR0VUQVJHX0RB VFVNKDApOwotCW5ld2ZjaW5mby0+YXJnc1swXS5pc251bGwgPSBQR19BUkdJU05VTEwoMCk7Ci0J bmV3ZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0gUEdfR0VUQVJHX0RBVFVNKDEpOwotCW5ld2ZjaW5m by0+YXJnc1sxXS5pc251bGwgPSBQR19BUkdJU05VTEwoMSk7Ci0JbmV3ZmNpbmZvLT5hcmdzWzJd LnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7Ci0JbmV3ZmNpbmZvLT5hcmdzWzJdLmlzbnVsbCA9 IGZhbHNlOwotCW5ld2ZjaW5mby0+YXJnc1szXS52YWx1ZSA9IEZsb2F0NEdldERhdHVtKC0xLjAp OwotCW5ld2ZjaW5mby0+YXJnc1szXS5pc251bGwgPSBmYWxzZTsKLQluZXdmY2luZm8tPmFyZ3Nb NF0udmFsdWUgPSBVSW50MzJHZXREYXR1bSgwKTsKLQluZXdmY2luZm8tPmFyZ3NbNF0uaXNudWxs ID0gZmFsc2U7Ci0JbmV3ZmNpbmZvLT5hcmdzWzVdLnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7 Ci0JbmV3ZmNpbmZvLT5hcmdzWzVdLmlzbnVsbCA9IGZhbHNlOworCXBvc2l0aW9uYWxfZmNpbmZv LT5hcmdzW1JFTFNDSEVNQV9BUkddLnZhbHVlID0gUEdfR0VUQVJHX0RBVFVNKDApOworCXBvc2l0 aW9uYWxfZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLmlzbnVsbCA9IFBHX0FSR0lTTlVMTCgw KTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxOQU1FX0FSR10udmFsdWUgPSBQR19HRVRB UkdfREFUVU0oMSk7CisJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3NbUkVMTkFNRV9BUkddLmlzbnVs bCA9IFBHX0FSR0lTTlVMTCgxKTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxQQUdFU19B UkddLnZhbHVlID0gVUludDMyR2V0RGF0dW0oMCk7CisJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3Nb UkVMUEFHRVNfQVJHXS5pc251bGwgPSBmYWxzZTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tS RUxUVVBMRVNfQVJHXS52YWx1ZSA9IEZsb2F0NEdldERhdHVtKC0xLjApOworCXBvc2l0aW9uYWxf ZmNpbmZvLT5hcmdzW1JFTFRVUExFU19BUkddLmlzbnVsbCA9IGZhbHNlOworCXBvc2l0aW9uYWxf ZmNpbmZvLT5hcmdzW1JFTEFMTFZJU0lCTEVfQVJHXS52YWx1ZSA9IFVJbnQzMkdldERhdHVtKDAp OworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTEFMTFZJU0lCTEVfQVJHXS5pc251bGwgPSBm YWxzZTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxBTExGUk9aRU5fQVJHXS52YWx1ZSA9 IFVJbnQzMkdldERhdHVtKDApOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTEFMTEZST1pF Tl9BUkddLmlzbnVsbCA9IGZhbHNlOwogCi0JcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUobmV3 ZmNpbmZvKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcocG9zaXRpb25hbF9mY2luZm8sIHJl bGFyZ2luZm8sIFJFTFNDSEVNQV9BUkcpOworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhwb3Np dGlvbmFsX2ZjaW5mbywgcmVsYXJnaW5mbywgUkVMTkFNRV9BUkcpOworCisJbnNwbmFtZSA9IFRl eHREYXR1bUdldENTdHJpbmcocG9zaXRpb25hbF9mY2luZm8tPmFyZ3NbUkVMU0NIRU1BX0FSR10u dmFsdWUpOworCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBvc2l0aW9uYWxfZmNpbmZv LT5hcmdzW1JFTE5BTUVfQVJHXS52YWx1ZSk7CisKKwlyZWxvaWQgPSBzdGF0c19hY3F1aXJlX3Jl bGF0aW9uX2xvY2sobnNwbmFtZSwgcmVsbmFtZSk7CisKKwl1cGRhdGVfcmVsc3RhdHMocmVsb2lk LCBwb3NpdGlvbmFsX2ZjaW5mbyk7CiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIApAQCAtMjI5LDYg KzIyMCw5IEBAIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIHsK IAlMT0NBTF9GQ0lORk8ocG9zaXRpb25hbF9mY2luZm8sIE5VTV9SRUxBVElPTl9TVEFUU19BUkdT KTsKIAlib29sCQlyZXN1bHQgPSB0cnVlOworCU9pZAkJCXJlbG9pZDsKKwljaGFyCSAgICpuc3Bu YW1lOworCWNoYXIJICAgKnJlbG5hbWU7CiAKIAlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnBv c2l0aW9uYWxfZmNpbmZvLCBOVUxMLAogCQkJCQkJCSBOVU1fUkVMQVRJT05fU1RBVFNfQVJHUywK QEAgLTIzOCw3ICsyMzIsMTUgQEAgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElP Tl9BUkdTKQogCQkJCQkJCQkJCSAgcmVsYXJnaW5mbykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCi0J aWYgKCFyZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mbykpCisJc3Rh dHNfY2hlY2tfcmVxdWlyZWRfYXJnKHBvc2l0aW9uYWxfZmNpbmZvLCByZWxhcmdpbmZvLCBSRUxT Q0hFTUFfQVJHKTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcocG9zaXRpb25hbF9mY2luZm8s IHJlbGFyZ2luZm8sIFJFTE5BTUVfQVJHKTsKKworCW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKHBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLnZhbHVlKTsKKwlyZWxu YW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxOQU1F X0FSR10udmFsdWUpOworCisJcmVsb2lkID0gc3RhdHNfYWNxdWlyZV9yZWxhdGlvbl9sb2NrKG5z cG5hbWUsIHJlbG5hbWUpOworCisJaWYgKCF1cGRhdGVfcmVsc3RhdHMocmVsb2lkLCBwb3NpdGlv bmFsX2ZjaW5mbykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0 KTsKQEAgLTI0OCw5MiArMjUwLDEwMiBAQCBwZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKFBHX0ZV TkNUSU9OX0FSR1MpCiAgKiBDb252ZW5pZW5jZSByb3V0aW5lIHRvIHBhcnNlIEJsb2NrTnVtYmVy IHZhbHVlcywgYW5kIGVtaXQgYSB3YXJuaW5nCiAgKiBvbiBwYXJzZSBlcnJvcnMuCiAgKgotICog UmV0dXJucyAwIGlmIHRoZSB2YWx1ZSBpcyBOVUxMIG9yIGludmFsaWQuCisgKiBSZXR1cm5zIERh dHVtIG9mIDAgaWYgdGhlIHZhbHVlIGlzIE5VTEwgb3IgaW52YWxpZC4KICAqLwotc3RhdGljIEJs b2NrTnVtYmVyCitzdGF0aWMgRGF0dW0KIHN0cl90b19ibG9ja251bWJlcihjb25zdCBjaGFyICpz KQogewotCWNvbnN0IEJsb2NrTnVtYmVyIGRlZmF1bHRfdmFsdWUgPSAwOworCUJsb2NrTnVtYmVy IHJlc3VsdCA9IDA7CiAKLQlCbG9ja051bWJlciByZXN1bHQ7Ci0JRXJyb3JTYXZlQ29udGV4dCBl c2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsKLQotCWlmICghcykKLQkJcmV0dXJuIGRl ZmF1bHRfdmFsdWU7Ci0KLQlyZXN1bHQgPSB1aW50MzJpbl9zdWJyKHMsIE5VTEwsICJCbG9ja051 bWJlciIsIChOb2RlICopICZlc2NvbnRleHQpOwotCi0JaWYgKGVzY29udGV4dC5lcnJvcl9vY2N1 cnJlZCkKKwlpZiAocykKIAl7Ci0JCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJO SU5HOwotCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7Ci0JCUZyZWVFcnJv ckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQlCbG9ja051bWJlciBzY3JhdGNoX3Jlc3Vs dDsKKwkJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsK IAotCQlyZXR1cm4gZGVmYXVsdF92YWx1ZTsKKwkJc2NyYXRjaF9yZXN1bHQgPSB1aW50MzJpbl9z dWJyKHMsIE5VTEwsICJCbG9ja051bWJlciIsIChOb2RlICopICZlc2NvbnRleHQpOworCisJCWlm IChlc2NvbnRleHQuZXJyb3Jfb2NjdXJyZWQpCisJCXsKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRh LT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJVGhyb3dFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2Rh dGEpOworCQkJRnJlZUVycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCX0KKwkJZWxz ZQorCQkJcmVzdWx0ID0gc2NyYXRjaF9yZXN1bHQ7CiAJfQogCi0JcmV0dXJuIHJlc3VsdDsKKwly ZXR1cm4gVUludDMyR2V0RGF0dW0ocmVzdWx0KTsKIH0KIAogLyoKICAqIENvbnZlbmllbmNlIHJv dXRpbmUgdG8gcGFyc2UgZmxvYXQgdmFsdWVzLCBhbmQgZW1pdCBhIHdhcm5pbmcgb24gcGFyc2UK ICAqIGVycm9ycy4KICAqCi0gKiBSZXR1cm5zIC0xLjAgaWYgdGhlIHZhbHVlIGlzIE5VTEwgb3Ig aW52YWxpZC4KKyAqIFJldHVybnMgRGF0dW0gb2YgLTEuMCBpZiB0aGUgdmFsdWUgaXMgTlVMTCBv ciBpbnZhbGlkLgogICovCi1zdGF0aWMgZmxvYXQKK3N0YXRpYyBEYXR1bQogc3RyX3RvX2Zsb2F0 KGNvbnN0IGNoYXIgKnMpCiB7Ci0JY29uc3QgZmxvYXQgZGVmYXVsdF92YWx1ZSA9IC0xLjA7CisJ ZmxvYXQgcmVzdWx0ID0gLTEuMDsKIAotCWZsb2F0CQlyZXN1bHQ7Ci0KLQlFcnJvclNhdmVDb250 ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OwotCi0JaWYgKCFzKQotCQlyZXR1 cm4gZGVmYXVsdF92YWx1ZTsKLQotCXJlc3VsdCA9IGZsb2F0NGluX2ludGVybmFsKChjaGFyICop IHMsIE5VTEwsICJmbG9hdCIsIHMsIChOb2RlICopICZlc2NvbnRleHQpOwotCi0JaWYgKGVzY29u dGV4dC5lcnJvcl9vY2N1cnJlZCkKKwlpZiAocykKIAl7Ci0JCWVzY29udGV4dC5lcnJvcl9kYXRh LT5lbGV2ZWwgPSBXQVJOSU5HOwotCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0 YSk7Ci0JCUZyZWVFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOwotCQlyZXR1cm4gZGVm YXVsdF92YWx1ZTsKKwkJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVD b250ZXh0fTsKKworCQlmbG9hdAlzY3JhdGNoX3Jlc3VsdDsKKworCQlzY3JhdGNoX3Jlc3VsdCA9 IGZsb2F0NGluX2ludGVybmFsKChjaGFyICopIHMsIE5VTEwsICJmbG9hdCIsIHMsIChOb2RlICop ICZlc2NvbnRleHQpOworCisJCWlmIChlc2NvbnRleHQuZXJyb3Jfb2NjdXJyZWQpCisJCXsKKwkJ CWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJVGhyb3dFcnJvckRh dGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShlc2NvbnRleHQuZXJy b3JfZGF0YSk7CisJCX0KKwkJZWxzZQorCQkJcmVzdWx0ID0gc2NyYXRjaF9yZXN1bHQ7CiAJfQog Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gRmxvYXQ0R2V0RGF0dW0ocmVzdWx0KTsKIH0KIAog LyoKICAqIEltcG9ydCByZWxhdGlvbiBzdGF0aXN0aWNzIGZyb20gcmVndWxhciBzdHJpbmcgaW5w dXRzLgogICovCiBib29sCi1pbXBvcnRfcmVsYXRpb25fc3RhdGlzdGljcyhSZWxhdGlvbiByZWws IGNvbnN0IGNoYXIgKnJlbHBhZ2VzLAorcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoUmVsYXRp b24gcmVsLCBjb25zdCBjaGFyICpyZWxwYWdlcywKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnJlbHR1 cGxlcywgY29uc3QgY2hhciAqcmVsYWxsdmlzaWJsZSwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnJl bGFsbGZyb3plbikKIHsKLQlMT0NBTF9GQ0lORk8obmV3ZmNpbmZvLCBOVU1fUkVMQVRJT05fU1RB VFNfQVJHUyk7CisJTE9DQUxfRkNJTkZPKHBvc2l0aW9uYWxfZmNpbmZvLCBOVU1fUkVMQVRJT05f U1RBVFNfQVJHUyk7CisJT2lkCQkJcmVsb2lkOworCWNoYXIJICAgKm5zcG5hbWU7CisJY2hhcgkg ICAqcmVsbmFtZTsKIAotCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgqbmV3ZmNpbmZvLCBOVUxM LCBOVU1fUkVMQVRJT05fU1RBVFNfQVJHUywgSW52YWxpZE9pZCwgTlVMTCwgTlVMTCk7CisJSW5p dEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpwb3NpdGlvbmFsX2ZjaW5mbywgTlVMTCwgTlVNX1JFTEFU SU9OX1NUQVRTX0FSR1MsCisJCQkJCQkJIEludmFsaWRPaWQsIE5VTEwsIE5VTEwpOworCisJbnNw bmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKTsKKwly ZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsKKworCXJlbG9pZCA9IHN0YXRz X2FjcXVpcmVfcmVsYXRpb25fbG9jayhuc3BuYW1lLCByZWxuYW1lKTsKIAogCS8qCiAJICogQ29u dmVydCBhbGwgc3RyaW5nIGlucHV0cyB0byB0aGVpciByZXF1aXJlZCBkYXRhdHlwZXMuIE5VTEwg dmFsdWVzIGFyZQogCSAqIGxlZnQgYXMgdGhlIGRlZmF1bHQuCiAJICovCi0JbmV3ZmNpbmZvLT5h cmdzW1JFTFNDSEVNQV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfbmFtZXNw YWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSkpOwotCW5ld2ZjaW5mby0+YXJnc1tS RUxTQ0hFTUFfQVJHXS5pc251bGwgPSBmYWxzZTsKLQluZXdmY2luZm8tPmFyZ3NbUkVMTkFNRV9B UkddLnZhbHVlID0gQ1N0cmluZ0dldFRleHREYXR1bShSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKTsKLQluZXdmY2luZm8tPmFyZ3NbUkVMTkFNRV9BUkddLmlzbnVsbCA9IGZhbHNlOwotCW5l d2ZjaW5mby0+YXJnc1tSRUxQQUdFU19BUkddLnZhbHVlID0gVUludDMyR2V0RGF0dW0oc3RyX3Rv X2Jsb2NrbnVtYmVyKHJlbHBhZ2VzKSk7Ci0JbmV3ZmNpbmZvLT5hcmdzW1JFTFBBR0VTX0FSR10u aXNudWxsID0gZmFsc2U7Ci0JbmV3ZmNpbmZvLT5hcmdzW1JFTFRVUExFU19BUkddLnZhbHVlID0g RmxvYXQ0R2V0RGF0dW0oc3RyX3RvX2Zsb2F0KHJlbHR1cGxlcykpOwotCW5ld2ZjaW5mby0+YXJn c1tSRUxUVVBMRVNfQVJHXS5pc251bGwgPSBmYWxzZTsKLQluZXdmY2luZm8tPmFyZ3NbUkVMQUxM VklTSUJMRV9BUkddLnZhbHVlID0gVUludDMyR2V0RGF0dW0oc3RyX3RvX2Jsb2NrbnVtYmVyKHJl bGFsbHZpc2libGUpKTsKLQluZXdmY2luZm8tPmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLmlzbnVs bCA9IGZhbHNlOwotCW5ld2ZjaW5mby0+YXJnc1tSRUxBTExGUk9aRU5fQVJHXS52YWx1ZSA9IFVJ bnQzMkdldERhdHVtKHN0cl90b19ibG9ja251bWJlcihyZWxhbGxmcm96ZW4pKTsKLQluZXdmY2lu Zm8tPmFyZ3NbUkVMQUxMRlJPWkVOX0FSR10uaXNudWxsID0gZmFsc2U7CisJcG9zaXRpb25hbF9m Y2luZm8tPmFyZ3NbUkVMU0NIRU1BX0FSR10udmFsdWUgPSBDU3RyaW5nR2V0VGV4dERhdHVtKG5z cG5hbWUpOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLmlzbnVsbCA9 IGZhbHNlOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTE5BTUVfQVJHXS52YWx1ZSA9IENT dHJpbmdHZXRUZXh0RGF0dW0ocmVsbmFtZSk7CisJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3NbUkVM TkFNRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JFTFBB R0VTX0FSR10udmFsdWUgPSBzdHJfdG9fYmxvY2tudW1iZXIocmVscGFnZXMpOworCXBvc2l0aW9u YWxfZmNpbmZvLT5hcmdzW1JFTFBBR0VTX0FSR10uaXNudWxsID0gZmFsc2U7CisJcG9zaXRpb25h bF9mY2luZm8tPmFyZ3NbUkVMVFVQTEVTX0FSR10udmFsdWUgPSBzdHJfdG9fZmxvYXQocmVsdHVw bGVzKTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxUVVBMRVNfQVJHXS5pc251bGwgPSBm YWxzZTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tSRUxBTExWSVNJQkxFX0FSR10udmFsdWUg PSBzdHJfdG9fYmxvY2tudW1iZXIocmVsYWxsdmlzaWJsZSk7CisJcG9zaXRpb25hbF9mY2luZm8t PmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCXBvc2l0aW9uYWxfZmNp bmZvLT5hcmdzW1JFTEFMTEZST1pFTl9BUkddLnZhbHVlID0gc3RyX3RvX2Jsb2NrbnVtYmVyKHJl bGFsbGZyb3plbik7CisJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3NbUkVMQUxMRlJPWkVOX0FSR10u aXNudWxsID0gZmFsc2U7CiAKLQlyZXR1cm4gcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUobmV3 ZmNpbmZvKTsKKwlyZXR1cm4gdXBkYXRlX3JlbHN0YXRzKHJlbG9pZCwgcG9zaXRpb25hbF9mY2lu Zm8pOwogfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMg Yi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCA4YWE1ODlkNWE1Ni4u MWQyMDNmNWZjZjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC02MDg2LDcg KzYwODYsNyBAQCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLAog CWlmICghUFFnZXRpc251bGwocmVtc3RhdHMtPnJlbCwgMCwgUkVMU1RBVFNfUkVMVFVQTEVTKSkK IAkJcmVsdHVwbGVzID0gUFFnZXR2YWx1ZShyZW1zdGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxU VVBMRVMpOwogCi0JaWYgKCFpbXBvcnRfcmVsYXRpb25fc3RhdGlzdGljcyhyZWxhdGlvbiwgcmVs cGFnZXMsIHJlbHR1cGxlcywKKwlpZiAoIXJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKHJlbGF0 aW9uLCByZWxwYWdlcywgcmVsdHVwbGVzLAogCQkJCQkJCQkJTlVMTCwgTlVMTCkpCiAJewogCQll cmVwb3J0KFdBUk5JTkcsCi0tIAoyLjU0LjAKCg== --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0004-postgres_fdw-additional-regression-reverse-set-di.patch" Content-Disposition: attachment; filename="v2-0004-postgres_fdw-additional-regression-reverse-set-di.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg493 RnJvbSAzZWVjMDg5ZjM2MWQ0MmIyNGM4ZTljMmMzYmZjOTJmOTAwNmI4ZTE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMiBKdW4gMjAyNiAxMzo0ODo0NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgNC83XSBwb3N0Z3Jlc19mZHc6IGFkZGl0aW9uYWwgcmVncmVzc2lvbiByZXZlcnNlCiBzZXQt ZGlmZmVyZW5jZSB0ZXN0CgpBZGQgYW4gYWRkdGlvbmFsIHRlc3QgdG8gcG9zdGdyZXNfZmR3LnNx bCB3aGljaCBzZWxlY3RzIHRoZSByZXZlcnNlCnNldC1kaWZmZXJlbmNlIG9wZXJhdGlvbiwgYWxs b3dpbmcgdXMgdG8gc2VlIHRoZSB2YWx1ZXMgaW4gdGhlIHJvdyB0aGF0CnNob3VsZCBoYXZlIGJl ZW4gc2V0IHRvIGNlcnRhaW4gdmFsdWVzIGJ1dCBzb21laG93IHdhc24ndC4gVGhlIGN1cnJlbnQK dGVzdCB3b3VsZCBvbmx5IHNob3cgdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIHRhYmxlIGJ1dCBu b3QgdGhlIHZhbHVlCmZvdW5kIGluIHRoZSBkZXN0aW5hdGlvbiB0YWJsZS4KLS0tCiBjb250cmli L3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IHwgMTEgKysrKysrKysrKysK IGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICAgfCAgOCArKysr KysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggZTkzMWZhNjRlMGQuLmI0 NmYzOGEwNGZlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVz X2Zkdy5vdXQKQEAgLTEyOTUwLDYgKzEyOTUwLDE3IEBAIFdIRVJFIG9pZCA9ICdwdWJsaWMuZHRl c3RfZnRhYmxlJzo6cmVnY2xhc3M7CiAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAoMCByb3dzKQog CitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0g J3B1YmxpYy5kdGVzdF9mdGFibGUnOjpyZWdjbGFzcworRVhDRVBUCitTRUxFQ1QgcmVscGFnZXMs IHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1YmxpYy5kdGVzdF90YWJs ZSc6OnJlZ2NsYXNzOworIHJlbHBhZ2VzIHwgcmVsdHVwbGVzIAorLS0tLS0tLS0tLSstLS0tLS0t LS0tLQorKDAgcm93cykKKwogLS0gdGVzdCBvbmx5IGEgZmV3IHN0YXRzIGNvbHVtbnMgY29tbW9u IHRvIGludGVnZXIgdHlwZXMKIFNFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51bGxfZnJhYywg YXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAogICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1jdiwg bW9zdF9jb21tb25fZnJlcXMsCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwv cG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsCmluZGV4IDYyNzE3NzEyM2IzLi41YTRmMDVjODllNSAxMDA2NDQKLS0tIGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTQ2MDEsNiArNDYwMSwxNCBAQCBTRUxFQ1QgcmVs cGFnZXMsIHJlbHR1cGxlcwogRlJPTSBwZ19jbGFzcwogV0hFUkUgb2lkID0gJ3B1YmxpYy5kdGVz dF9mdGFibGUnOjpyZWdjbGFzczsKIAorU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00g cGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdwdWJsaWMuZHRlc3RfZnRhYmxlJzo6cmVnY2xhc3MKK0VY Q0VQVAorU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9p ZCA9ICdwdWJsaWMuZHRlc3RfdGFibGUnOjpyZWdjbGFzczsKKwogLS0gdGVzdCBvbmx5IGEgZmV3 IHN0YXRzIGNvbHVtbnMgY29tbW9uIHRvIGludGVnZXIgdHlwZXMKIFNFTEVDVCBhdHRuYW1lLCBp bmhlcml0ZWQsIG51bGxfZnJhYywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAogICBtb3N0X2NvbW1v bl92YWxzOjp0ZXh0IGFzIG1jdiwgbW9zdF9jb21tb25fZnJlcXMsCi0tIAoyLjU0LjAKCg== --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0006-Rename-attribute_statistics-functions.patch" Content-Disposition: attachment; filename="v2-0006-Rename-attribute_statistics-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg4m5 RnJvbSBjOTVjYzJkNDRlOTg4NDc2OTVhYmE5NGVhMDRhNDQ5MDZlYmY1ZDUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMiBKdW4gMjAyNiAxNDoxNjozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgNi83XSBSZW5hbWUgYXR0cmlidXRlX3N0YXRpc3RpY3MgZnVuY3Rpb25zLgoKVGhlIHN0YXRp YyBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoKSBpcyBub3cgdXBkYXRlX2F0dHN0YXRzKCku IFRoZQpmdW5jdGlvbiBpbXBvcnRfYXR0cmlidXRlX3N0YXRzKCkgaXMgbm93IGF0dHJpYnV0ZV9z dGF0aXN0aWNzc191cGRhdGUoKQphbmQgZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKCkgaXMg bm93IGF0dHJpYnV0ZV9zdGF0aXN0aWNzX2RlbGV0ZSgpLgoKQ2hhbmdlcyB0byBmdW5jdGlvbiBz aWduYXR1cmVzIHdpbGwgaGFwcGVuIGluIGEgbGF0ZXIgcGF0Y2guCi0tLQogc3JjL2luY2x1ZGUv c3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaCB8ICA0ICsrLS0KIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvYXR0cmlidXRlX3N0YXRzLmMgfCAxNCArKysrKysrLS0tLS0tLQogY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICB8ICA0ICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwg MTEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaCBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mv YXR0cmlidXRlX3N0YXRzLmgKaW5kZXggNGViZGUwYzdjM2IuLjhhNGVlNTExMmU0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5oCisrKyBiL3NyYy9p bmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgKQEAgLTE1LDkgKzE1LDkgQEAKICNp bmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKIAogCi1ib29sIGRlbGV0ZV9hdHRyaWJ1dGVfc3RhdGlz dGljcyhSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCk7Citi b29sIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX2RlbGV0ZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIg YXR0bnVtLCBib29sIGluaGVyaXRlZCk7CiAKLWJvb2wgaW1wb3J0X2F0dHJpYnV0ZV9zdGF0aXN0 aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKK2Jvb2wgYXR0cmlidXRlX3N0 YXRpc3RpY3NfdXBkYXRlKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKIAkJCQkJ CQkJIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKIAkJCQkJCQkJIGNvbnN0IGNo YXIgKm51bGxfZnJhYywgY29uc3QgY2hhciAqYXZnX3dpZHRoLAogCQkJCQkJCQkgY29uc3QgY2hh ciAqbl9kaXN0aW5jdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmli dXRlX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jCmlu ZGV4IGY2N2Q2MmMwMTA0Li43ZGNjY2U4M2M2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0 dHJpYnV0ZV9zdGF0cy5jCkBAIC0zNCw3ICszNCw3IEBACiAKIC8qCiAgKiBQb3NpdGlvbmFsIGFy Z3VtZW50IG51bWJlcnMsIG5hbWVzLCBhbmQgdHlwZXMgZm9yCi0gKiBhdHRyaWJ1dGVfc3RhdGlz dGljc191cGRhdGUoKSBhbmQgcGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMoKS4KKyAqIHVwZGF0 ZV9hdHRzdGF0cygpIGFuZCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cygpLgogICovCiAKIGVu dW0gYXR0cmlidXRlX3N0YXRzX2FyZ251bQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBzdHJ1 Y3QgU3RhdHNBcmdJbmZvIGNsZWFyYXJnaW5mb1tdID0KIAlbQ19OVU1fQVRUUklCVVRFX1NUQVRT X0FSR1NdID0gezB9CiB9OwogCi1zdGF0aWMgYm9vbCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRh dGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOworc3RhdGljIGJvb2wgdXBkYXRlX2F0dHN0YXRz KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKIHN0YXRpYyB2b2lkIHVwc2VydF9wZ19zdGF0aXN0 aWMoUmVsYXRpb24gc3RhcmVsLCBIZWFwVHVwbGUgb2xkdHVwLAogCQkJCQkJCQljb25zdCBEYXR1 bSAqdmFsdWVzLCBjb25zdCBib29sICpudWxscywgY29uc3QgYm9vbCAqcmVwbGFjZXMpOwogc3Rh dGljIGJvb2wgZGVsZXRlX3BnX3N0YXRpc3RpYyhPaWQgcmVsb2lkLCBBdHRyTnVtYmVyIGF0dG51 bSwgYm9vbCBzdGFpbmhlcml0KTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgYm9vbCBkZWxl dGVfcGdfc3RhdGlzdGljKE9pZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWlu aGVyaXQpOwogICogYW5kIG90aGVyIHN0YXRpc3RpYyBraW5kcyBtYXkgc3RpbGwgYmUgdXBkYXRl ZC4KICAqLwogc3RhdGljIGJvb2wKLWF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbykKK3VwZGF0ZV9hdHRzdGF0cyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bykKIHsKIAljaGFyCSAgICpuc3BuYW1lOwogCWNoYXIJICAgKnJlbG5hbWU7CkBAIC02ODUsNyAr Njg1LDcgQEAgcGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CQkJCQkJCQkgIGF0dGFyZ2luZm8pKQogCQlyZXN1bHQgPSBmYWxzZTsKIAotCWlmICghYXR0cmli dXRlX3N0YXRpc3RpY3NfdXBkYXRlKHBvc2l0aW9uYWxfZmNpbmZvKSkKKwlpZiAoIXVwZGF0ZV9h dHRzdGF0cyhwb3NpdGlvbmFsX2ZjaW5mbykpCiAJCXJlc3VsdCA9IGZhbHNlOwogCiAJUEdfUkVU VVJOX0JPT0wocmVzdWx0KTsKQEAgLTgwOCw3ICs4MDgsNyBAQCBzZXRfZmxvYXRhcnJfYXJnKE51 bGxhYmxlRGF0dW0gKmFyZywgY29uc3QgY2hhciAqcykKICAqIERlbGV0ZSBhdHRyaWJ1dGUgc3Rh dGlzdGljcy4KICAqLwogYm9vbAotZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9u IHJlbCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkKQorYXR0cmlidXRlX3N0YXRp c3RpY3NfZGVsZXRlKFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJp dGVkKQogewogCXJldHVybiBkZWxldGVfcGdfc3RhdGlzdGljKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgYXR0bnVtLCBpbmhlcml0ZWQpOwogfQpAQCAtODIwLDcgKzgyMCw3IEBAIGRlbGV0ZV9hdHRy aWJ1dGVfc3RhdGlzdGljcyhSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGlu aGVyaXRlZCkKICAqIFRvIGNvbnZleSBhICJudWxsIi9ub3Qtc2V0IHZhbHVlIGZvciBhdHRudW0s IHVzZSBJbnZhbGlkQXR0ck51bWJlci4KICAqLwogYm9vbAotaW1wb3J0X2F0dHJpYnV0ZV9zdGF0 aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKK2F0dHJpYnV0ZV9zdGF0 aXN0aWNzX3VwZGF0ZShSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmF0dG5hbWUsCiAJCQkJCQkJ QXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkLAogCQkJCQkJCWNvbnN0IGNoYXIgKm51 bGxfZnJhYywgY29uc3QgY2hhciAqYXZnX3dpZHRoLAogCQkJCQkJCWNvbnN0IGNoYXIgKm5fZGlz dGluY3QsCkBAIC04NzgsNSArODc4LDUgQEAgaW1wb3J0X2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJl bGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKIAlzZXRfZmxvYXRfYXJnKCZuZXdmY2lu Zm8tPmFyZ3NbUkFOR0VfRU1QVFlfRlJBQ19BUkddLCByYW5nZV9lbXB0eV9mcmFjKTsKIAlzZXRf dGV4dF9hcmcoJm5ld2ZjaW5mby0+YXJnc1tSQU5HRV9CT1VORFNfSElTVE9HUkFNX0FSR10sIHJh bmdlX2JvdW5kc19oaXN0b2dyYW0pOwogCi0JcmV0dXJuIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3Vw ZGF0ZShuZXdmY2luZm8pOworCXJldHVybiB1cGRhdGVfYXR0c3RhdHMobmV3ZmNpbmZvKTsKIH0K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMWQyMDNmNWZjZjUuLjk2ODBhZjkw MmNhIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysg Yi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjA0OCw5ICs2MDQ4LDkg QEAgaW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCSAqLwog CQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkJZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0 aWNzKHJlbGF0aW9uLCBhdHRudW0sIGZhbHNlKTsKKwkJCWF0dHJpYnV0ZV9zdGF0aXN0aWNzX2Rl bGV0ZShyZWxhdGlvbiwgYXR0bnVtLCBmYWxzZSk7CiAKLQkJCWlmICghaW1wb3J0X2F0dHJpYnV0 ZV9zdGF0aXN0aWNzKHJlbGF0aW9uLCBhdHRuYW1lLAorCQkJaWYgKCFhdHRyaWJ1dGVfc3RhdGlz dGljc191cGRhdGUocmVsYXRpb24sIGF0dG5hbWUsCiAJCQkJCQkJCQkJCSBJbnZhbGlkQXR0ck51 bWJlciwKIAkJCQkJCQkJCQkJIGZhbHNlLAogCQkJCQkJCQkJCQkgZ2V0X29wdF92YWx1ZShyZXMs IHJvdywgQVRUU1RBVFNfTlVMTF9GUkFDKSwKLS0gCjIuNTQuMAoK --0000000000001ef28c0654dc5fc5 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0007-Make-callers-of-update_attstats-use-stats_acquire.patch" Content-Disposition: attachment; filename="v2-0007-Make-callers-of-update_attstats-use-stats_acquire.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqpkrg4r6 RnJvbSA3OTU2NGM2MjExZDdkZDhmODAwNjJkOWFjYmNlYTIwOTY5Njk4ODAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMiBKdW4gMjAyNiAxNDo0ODoxMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIgNy83XSBNYWtlIGNhbGxlcnMgb2YgdXBkYXRlX2F0dHN0YXRzKCkgdXNlCiBzdGF0c19hY3F1 aXJlX3JlbGF0aW9uX2xvY2soKS4KClRoaXMgaXMgdGhlIHNhbWUgY2hhbmdlIHRoYXQgd2FzIG1h ZGUgaW4gcmVsYXRpb25fc3RhdHMuYywgYnV0IHdpdGggdGhlCmZ1bmN0aW9uIHJlbmFtaW5nIGFs cmVhZHkgZG9uZSBiZWZvcmVoYW5kLgotLS0KIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmli dXRlX3N0YXRzLmMgfCAxMDkgKysrKysrKysrKystLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCA1MSBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRleCA3ZGNjY2U4M2M2NS4uZjkwM2QyYzAwMDMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwpAQCAtMzMsOCArMzMsNyBAQAog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKIC8qCi0gKiBQb3NpdGlvbmFsIGFyZ3VtZW50 IG51bWJlcnMsIG5hbWVzLCBhbmQgdHlwZXMgZm9yCi0gKiB1cGRhdGVfYXR0c3RhdHMoKSBhbmQg cGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMoKS4KKyAqIFBvc2l0aW9uYWwgYXJndW1lbnQgbnVt YmVycywgbmFtZXMsIGFuZCB0eXBlcyBmb3IgdXBkYXRlX2F0dHN0YXRzKCkKICAqLwogCiBlbnVt IGF0dHJpYnV0ZV9zdGF0c19hcmdudW0KQEAgLTEwNiw3ICsxMDUsNyBAQCBzdGF0aWMgc3RydWN0 IFN0YXRzQXJnSW5mbyBjbGVhcmFyZ2luZm9bXSA9CiAJW0NfTlVNX0FUVFJJQlVURV9TVEFUU19B UkdTXSA9IHswfQogfTsKIAotc3RhdGljIGJvb2wgdXBkYXRlX2F0dHN0YXRzKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvKTsKK3N0YXRpYyBib29sIHVwZGF0ZV9hdHRzdGF0cyhPaWQgcmVsb2lkLCBG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CiBzdGF0aWMgdm9pZCB1cHNlcnRfcGdfc3RhdGlzdGlj KFJlbGF0aW9uIHN0YXJlbCwgSGVhcFR1cGxlIG9sZHR1cCwKIAkJCQkJCQkJY29uc3QgRGF0dW0g KnZhbHVlcywgY29uc3QgYm9vbCAqbnVsbHMsIGNvbnN0IGJvb2wgKnJlcGxhY2VzKTsKIHN0YXRp YyBib29sIGRlbGV0ZV9wZ19zdGF0aXN0aWMoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0s IGJvb2wgc3RhaW5oZXJpdCk7CkBAIC0xMjgsMTUgKzEyNywxMiBAQCBzdGF0aWMgYm9vbCBkZWxl dGVfcGdfc3RhdGlzdGljKE9pZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWlu aGVyaXQpOwogICogYW5kIG90aGVyIHN0YXRpc3RpYyBraW5kcyBtYXkgc3RpbGwgYmUgdXBkYXRl ZC4KICAqLwogc3RhdGljIGJvb2wKLXVwZGF0ZV9hdHRzdGF0cyhGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbykKK3VwZGF0ZV9hdHRzdGF0cyhPaWQgcmVsb2lkLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bykKIHsKLQljaGFyCSAgICpuc3BuYW1lOwogCWNoYXIJICAgKnJlbG5hbWU7Ci0JT2lkCQkJcmVs b2lkOwogCWNoYXIJICAgKmF0dG5hbWU7CiAJQXR0ck51bWJlcglhdHRudW07CiAJYm9vbAkJaW5o ZXJpdGVkOwotCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CiAKIAlSZWxhdGlvbglz dGFyZWw7CiAJSGVhcFR1cGxlCXN0YXR1cDsKQEAgLTE3MywyMCArMTY5LDggQEAgdXBkYXRlX2F0 dHN0YXRzKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2Fy ZyhmY2luZm8sIGF0dGFyZ2luZm8sIEFUVFJFTFNDSEVNQV9BUkcpOwogCXN0YXRzX2NoZWNrX3Jl cXVpcmVkX2FyZyhmY2luZm8sIGF0dGFyZ2luZm8sIEFUVFJFTE5BTUVfQVJHKTsKIAotCW5zcG5h bWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShBVFRSRUxTQ0hFTUFfQVJH KSk7CiAJcmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKEFUVFJF TE5BTUVfQVJHKSk7CiAKLQlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkpCi0JCWVyZXBvcnQoRVJS T1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCi0JCQkJIGVycm1zZygicmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MiKSwKLQkJCQkgZXJyaGlu dCgiU3RhdGlzdGljcyBjYW5ub3QgYmUgbW9kaWZpZWQgZHVyaW5nIHJlY292ZXJ5LiIpKSk7Ci0K LQkvKiBsb2NrIGJlZm9yZSBsb29raW5nIHVwIGF0dHJpYnV0ZSAqLwotCXJlbG9pZCA9IFJhbmdl VmFyR2V0UmVsaWRFeHRlbmRlZChtYWtlUmFuZ2VWYXIobnNwbmFtZSwgcmVsbmFtZSwgLTEpLAot CQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIDAsCi0JCQkJCQkJCQkgIFJhbmdl VmFyQ2FsbGJhY2tGb3JTdGF0cywgJmxvY2tlZF90YWJsZSk7Ci0KIAkvKiB1c2VyIGNhbiBzcGVj aWZ5IGVpdGhlciBhdHRuYW1lIG9yIGF0dG51bSwgYnV0IG5vdCBib3RoICovCiAJaWYgKCFQR19B UkdJU05VTEwoQVRUTkFNRV9BUkcpKQogCXsKQEAgLTYwNSw3ICs1ODksNiBAQCBwZ19jbGVhcl9h dHRyaWJ1dGVfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICphdHRuYW1lOwogCUF0 dHJOdW1iZXIJYXR0bnVtOwogCWJvb2wJCWluaGVyaXRlZDsKLQlPaWQJCQlsb2NrZWRfdGFibGUg PSBJbnZhbGlkT2lkOwogCiAJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgY2xlYXJh cmdpbmZvLCBDX0FUVFJFTFNDSEVNQV9BUkcpOwogCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhm Y2luZm8sIGNsZWFyYXJnaW5mbywgQ19BVFRSRUxOQU1FX0FSRyk7CkBAIC02MTQsMTYgKzU5Nyw3 IEBAIHBnX2NsZWFyX2F0dHJpYnV0ZV9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCiAJbnNwbmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoUEdfR0VUQVJHX0RBVFVNKENfQVRUUkVMU0NIRU1BX0FS RykpOwogCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShDX0FU VFJFTE5BTUVfQVJHKSk7Ci0KLQlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkpCi0JCWVyZXBvcnQo RVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCi0JCQkJIGVycm1zZygicmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MiKSwKLQkJCQkgZXJy aGludCgiU3RhdGlzdGljcyBjYW5ub3QgYmUgbW9kaWZpZWQgZHVyaW5nIHJlY292ZXJ5LiIpKSk7 Ci0KLQlyZWxvaWQgPSBSYW5nZVZhckdldFJlbGlkRXh0ZW5kZWQobWFrZVJhbmdlVmFyKG5zcG5h bWUsIHJlbG5hbWUsIC0xKSwKLQkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLCAw LAotCQkJCQkJCQkJICBSYW5nZVZhckNhbGxiYWNrRm9yU3RhdHMsICZsb2NrZWRfdGFibGUpOwor CXJlbG9pZCA9IHN0YXRzX2FjcXVpcmVfcmVsYXRpb25fbG9jayhuc3BuYW1lLCByZWxuYW1lKTsK IAogCWF0dG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShDX0FUVE5B TUVfQVJHKSk7CiAJYXR0bnVtID0gZ2V0X2F0dG51bShyZWxvaWQsIGF0dG5hbWUpOwpAQCAtNjc3 LDYgKzY1MSw5IEBAIHBnX3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1Mp CiB7CiAJTE9DQUxfRkNJTkZPKHBvc2l0aW9uYWxfZmNpbmZvLCBOVU1fQVRUUklCVVRFX1NUQVRT X0FSR1MpOwogCWJvb2wJCXJlc3VsdCA9IHRydWU7CisJT2lkCQkJcmVsb2lkOworCWNoYXIJICAg Km5zcG5hbWU7CisJY2hhcgkgICAqcmVsbmFtZTsKIAogCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0 YSgqcG9zaXRpb25hbF9mY2luZm8sIE5VTEwsIE5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUywKIAkJ CQkJCQkgSW52YWxpZE9pZCwgTlVMTCwgTlVMTCk7CkBAIC02ODUsNyArNjYyLDE1IEBAIHBnX3Jl c3RvcmVfYXR0cmlidXRlX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkJCQkJICBhdHRh cmdpbmZvKSkKIAkJcmVzdWx0ID0gZmFsc2U7CiAKLQlpZiAoIXVwZGF0ZV9hdHRzdGF0cyhwb3Np dGlvbmFsX2ZjaW5mbykpCisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKHBvc2l0aW9uYWxfZmNp bmZvLCBhdHRhcmdpbmZvLCBBVFRSRUxTQ0hFTUFfQVJHKTsKKwlzdGF0c19jaGVja19yZXF1aXJl ZF9hcmcocG9zaXRpb25hbF9mY2luZm8sIGF0dGFyZ2luZm8sIEFUVFJFTE5BTUVfQVJHKTsKKwor CW5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW0FU VFJFTFNDSEVNQV9BUkddLnZhbHVlKTsKKwlyZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhw b3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tBVFRSRUxOQU1FX0FSR10udmFsdWUpOworCisJcmVsb2lk ID0gc3RhdHNfYWNxdWlyZV9yZWxhdGlvbl9sb2NrKG5zcG5hbWUsIHJlbG5hbWUpOworCisJaWYg KCF1cGRhdGVfYXR0c3RhdHMocmVsb2lkLCBwb3NpdGlvbmFsX2ZjaW5mbykpCiAJCXJlc3VsdCA9 IGZhbHNlOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKQEAgLTgzNSw0OCArODIwLDU2IEBA IGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZShSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmF0 dG5hbWUsCiAJCQkJCQkJY29uc3QgY2hhciAqcmFuZ2VfZW1wdHlfZnJhYywKIAkJCQkJCQljb25z dCBjaGFyICpyYW5nZV9ib3VuZHNfaGlzdG9ncmFtKQogewotCUxPQ0FMX0ZDSU5GTyhuZXdmY2lu Zm8sIE5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUyk7CisJTE9DQUxfRkNJTkZPKHBvc2l0aW9uYWxf ZmNpbmZvLCBOVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MpOworCU9pZAkJCXJlbG9pZDsKKwljaGFy CSAgICpuc3BuYW1lOworCWNoYXIJICAgKnJlbG5hbWU7CiAKLQlJbml0RnVuY3Rpb25DYWxsSW5m b0RhdGEoKm5ld2ZjaW5mbywgTlVMTCwgTlVNX0FUVFJJQlVURV9TVEFUU19BUkdTLCBJbnZhbGlk T2lkLCBOVUxMLCBOVUxMKTsKKwlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnBvc2l0aW9uYWxf ZmNpbmZvLCBOVUxMLCBOVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MsIEludmFsaWRPaWQsIE5VTEws IE5VTEwpOworCisJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVz cGFjZShyZWwpKTsKKwlyZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsKKwor CXJlbG9pZCA9IHN0YXRzX2FjcXVpcmVfcmVsYXRpb25fbG9jayhuc3BuYW1lLCByZWxuYW1lKTsK IAogCS8qCiAJICogQ29udmVydCBhbGwgc3RyaW5nIGlucHV0cyB0byB0aGVpciByZXF1aXJlZCBk YXRhdHlwZXMuIE5VTEwgdmFsdWVzIGFyZQogCSAqIGxlZnQgYXMgdGhlIGRlZmF1bHQuCiAJICov Ci0JbmV3ZmNpbmZvLT5hcmdzW0FUVFJFTFNDSEVNQV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRl eHREYXR1bShnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSkpOwot CW5ld2ZjaW5mby0+YXJnc1tBVFRSRUxTQ0hFTUFfQVJHXS5pc251bGwgPSBmYWxzZTsKLQluZXdm Y2luZm8tPmFyZ3NbQVRUUkVMTkFNRV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRleHREYXR1bShS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKLQluZXdmY2luZm8tPmFyZ3NbQVRUUkVMTkFN RV9BUkddLmlzbnVsbCA9IGZhbHNlOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW0FUVFJFTFND SEVNQV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRleHREYXR1bShuc3BuYW1lKTsKKwlwb3NpdGlv bmFsX2ZjaW5mby0+YXJnc1tBVFRSRUxTQ0hFTUFfQVJHXS5pc251bGwgPSBmYWxzZTsKKwlwb3Np dGlvbmFsX2ZjaW5mby0+YXJnc1tBVFRSRUxOQU1FX0FSR10udmFsdWUgPSBDU3RyaW5nR2V0VGV4 dERhdHVtKHJlbG5hbWUpOworCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW0FUVFJFTE5BTUVfQVJH XS5pc251bGwgPSBmYWxzZTsKIAotCXNldF90ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW0FUVE5B TUVfQVJHXSwgYXR0bmFtZSk7CisJc2V0X3RleHRfYXJnKCZwb3NpdGlvbmFsX2ZjaW5mby0+YXJn c1tBVFROQU1FX0FSR10sIGF0dG5hbWUpOwogCiAJaWYgKGF0dG51bSAhPSBJbnZhbGlkQXR0ck51 bWJlcikKIAl7Ci0JCW5ld2ZjaW5mby0+YXJnc1tBVFROVU1fQVJHXS52YWx1ZSA9IEludDE2R2V0 RGF0dW0oYXR0bnVtKTsKLQkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9BUkddLmlzbnVsbCA9IGZh bHNlOworCQlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tBVFROVU1fQVJHXS52YWx1ZSA9IEludDE2 R2V0RGF0dW0oYXR0bnVtKTsKKwkJcG9zaXRpb25hbF9mY2luZm8tPmFyZ3NbQVRUTlVNX0FSR10u aXNudWxsID0gZmFsc2U7CiAJfQogCWVsc2UKIAl7Ci0JCW5ld2ZjaW5mby0+YXJnc1tBVFROVU1f QVJHXS52YWx1ZSA9IChEYXR1bSkgMDsKLQkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9BUkddLmlz bnVsbCA9IHRydWU7CisJCXBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW0FUVE5VTV9BUkddLnZhbHVl ID0gKERhdHVtKSAwOworCQlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tBVFROVU1fQVJHXS5pc251 bGwgPSB0cnVlOwogCX0KIAotCW5ld2ZjaW5mby0+YXJnc1tJTkhFUklURURfQVJHXS52YWx1ZSA9 IEJvb2xHZXREYXR1bShpbmhlcml0ZWQpOwotCW5ld2ZjaW5mby0+YXJnc1tJTkhFUklURURfQVJH XS5pc251bGwgPSBmYWxzZTsKKwlwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tJTkhFUklURURfQVJH XS52YWx1ZSA9IEJvb2xHZXREYXR1bShpbmhlcml0ZWQpOworCXBvc2l0aW9uYWxfZmNpbmZvLT5h cmdzW0lOSEVSSVRFRF9BUkddLmlzbnVsbCA9IGZhbHNlOwogCi0Jc2V0X2Zsb2F0X2FyZygmbmV3 ZmNpbmZvLT5hcmdzW05VTExfRlJBQ19BUkddLCBudWxsX2ZyYWMpOwotCXNldF9pbnQzMl9hcmco Jm5ld2ZjaW5mby0+YXJnc1tBVkdfV0lEVEhfQVJHXSwgYXZnX3dpZHRoKTsKLQlzZXRfZmxvYXRf YXJnKCZuZXdmY2luZm8tPmFyZ3NbTl9ESVNUSU5DVF9BUkddLCBuX2Rpc3RpbmN0KTsKLQlzZXRf dGV4dF9hcmcoJm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9WQUxTX0FSR10sIG1vc3RfY29t bW9uX3ZhbHMpOwotCXNldF9mbG9hdGFycl9hcmcoJm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1P Tl9GUkVRU19BUkddLCBtb3N0X2NvbW1vbl9mcmVxcyk7Ci0Jc2V0X3RleHRfYXJnKCZuZXdmY2lu Zm8tPmFyZ3NbSElTVE9HUkFNX0JPVU5EU19BUkddLCBoaXN0b2dyYW1fYm91bmRzKTsKLQlzZXRf ZmxvYXRfYXJnKCZuZXdmY2luZm8tPmFyZ3NbQ09SUkVMQVRJT05fQVJHXSwgY29ycmVsYXRpb24p OwotCXNldF90ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW01PU1RfQ09NTU9OX0VMRU1TX0FSR10s IG1vc3RfY29tbW9uX2VsZW1zKTsKLQlzZXRfZmxvYXRhcnJfYXJnKCZuZXdmY2luZm8tPmFyZ3Nb TU9TVF9DT01NT05fRUxFTV9GUkVRU19BUkddLCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzKTsKLQlz ZXRfZmxvYXRhcnJfYXJnKCZuZXdmY2luZm8tPmFyZ3NbRUxFTV9DT1VOVF9ISVNUT0dSQU1fQVJH XSwgZWxlbV9jb3VudF9oaXN0b2dyYW0pOwotCXNldF90ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdz W1JBTkdFX0xFTkdUSF9ISVNUT0dSQU1fQVJHXSwgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSk7Ci0J c2V0X2Zsb2F0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0VNUFRZX0ZSQUNfQVJHXSwgcmFu Z2VfZW1wdHlfZnJhYyk7Ci0Jc2V0X3RleHRfYXJnKCZuZXdmY2luZm8tPmFyZ3NbUkFOR0VfQk9V TkRTX0hJU1RPR1JBTV9BUkddLCByYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKwlzZXRfZmxvYXRf YXJnKCZwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tOVUxMX0ZSQUNfQVJHXSwgbnVsbF9mcmFjKTsK KwlzZXRfaW50MzJfYXJnKCZwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tBVkdfV0lEVEhfQVJHXSwg YXZnX3dpZHRoKTsKKwlzZXRfZmxvYXRfYXJnKCZwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tOX0RJ U1RJTkNUX0FSR10sIG5fZGlzdGluY3QpOworCXNldF90ZXh0X2FyZygmcG9zaXRpb25hbF9mY2lu Zm8tPmFyZ3NbTU9TVF9DT01NT05fVkFMU19BUkddLCBtb3N0X2NvbW1vbl92YWxzKTsKKwlzZXRf ZmxvYXRhcnJfYXJnKCZwb3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9GUkVRU19B UkddLCBtb3N0X2NvbW1vbl9mcmVxcyk7CisJc2V0X3RleHRfYXJnKCZwb3NpdGlvbmFsX2ZjaW5m by0+YXJnc1tISVNUT0dSQU1fQk9VTkRTX0FSR10sIGhpc3RvZ3JhbV9ib3VuZHMpOworCXNldF9m bG9hdF9hcmcoJnBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW0NPUlJFTEFUSU9OX0FSR10sIGNvcnJl bGF0aW9uKTsKKwlzZXRfdGV4dF9hcmcoJnBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW01PU1RfQ09N TU9OX0VMRU1TX0FSR10sIG1vc3RfY29tbW9uX2VsZW1zKTsKKwlzZXRfZmxvYXRhcnJfYXJnKCZw b3NpdGlvbmFsX2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0FSR10sIG1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMpOworCXNldF9mbG9hdGFycl9hcmcoJnBvc2l0aW9uYWxfZmNpbmZv LT5hcmdzW0VMRU1fQ09VTlRfSElTVE9HUkFNX0FSR10sIGVsZW1fY291bnRfaGlzdG9ncmFtKTsK KwlzZXRfdGV4dF9hcmcoJnBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JBTkdFX0xFTkdUSF9ISVNU T0dSQU1fQVJHXSwgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSk7CisJc2V0X2Zsb2F0X2FyZygmcG9z aXRpb25hbF9mY2luZm8tPmFyZ3NbUkFOR0VfRU1QVFlfRlJBQ19BUkddLCByYW5nZV9lbXB0eV9m cmFjKTsKKwlzZXRfdGV4dF9hcmcoJnBvc2l0aW9uYWxfZmNpbmZvLT5hcmdzW1JBTkdFX0JPVU5E U19ISVNUT0dSQU1fQVJHXSwgcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSk7CiAKLQlyZXR1cm4gdXBk YXRlX2F0dHN0YXRzKG5ld2ZjaW5mbyk7CisJcmV0dXJuIHVwZGF0ZV9hdHRzdGF0cyhyZWxvaWQs IHBvc2l0aW9uYWxfZmNpbmZvKTsKIH0KLS0gCjIuNTQuMAoK --0000000000001ef28c0654dc5fc5--