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 1wG8PE-005us2-2r for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Apr 2026 04:44:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wG8PD-004KcW-2K for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Apr 2026 04:44:43 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wG8PD-004Kc5-0q for pgsql-hackers@lists.postgresql.org; Fri, 24 Apr 2026 04:44:43 +0000 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wG8PA-00000002lYn-1oos for pgsql-hackers@postgresql.org; Fri, 24 Apr 2026 04:44:43 +0000 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-358ed696623so3398203a91.0 for ; Thu, 23 Apr 2026 21:44:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777005878; cv=none; d=google.com; s=arc-20240605; b=TEJt2lMKD9KaHPdgmKtekMNrzFcrwYWn0StAZmuCXwcg27ECW5VnauUnAlKsqBhzz6 UF5Q/tjHf4Rtw76zGKtFR1+fQmzy8NhjadFvh8NJ+k0WmENsxSXnEoutZf9l17W6ozRS CESf8Z9vjo1Tb4VtbWB3wJXQslHcS/Sg6Gs9bJbPoYtnKlTGdOsRDTTTk5485WkEhRG8 yMt9BhoiJMARz+gHTccrOwaKOkf6rAlaQCmLLe8yWrmZt/6GeiHoqC5ZsVSBW387HDY8 g3PHeh18OMSGUCiGoBXHHRqWZ4KMd1eAPq5jlUkrwTbsBTTRLGQrVEdEZerxOQ6yqP04 3LKw== 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:reply-to:mime-version :dkim-signature; bh=rHh5wTFNZhWrGGyB7981EwMa+tBkm9tyJBTyAzlbNlg=; fh=EAqixcxnAXAi95VbnR6ODuhWkR6WZM4Ue54iqtixdaA=; b=KWdsmaNmPk/UvJaytuVaHPo9HkHauw+YUqE/sELnZXaA2E+vQIYjU0o4JlyYHnN4+7 mkB+4AXHKtaGCm/1MVbHT3CqhWH40Hk3au1L5Tizb1GCLKIcSJcD3o8j8FHglNLwmvDz hFbJMSUeuk4Vhlo0k/flqYzk+9odGhTmHpq7FT6Lje9cicMbdzQsNlCklIvDELdXK3Y3 X1QqX24JGZhu1vviPp0MzlhO3rwloXdRyCLWFx5LSv6BvKRlv7RNqS/aTjhpV5YPXSPv oU5WRqigOlyhSCkiazuAL8EEBlIkZ3m/w+W5HU8tE8i43/6ylTZmaoKg4Y95yX//LyDn onRg==; 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=1777005878; x=1777610678; darn=postgresql.org; h=cc:to:subject:message-id:date:from:reply-to:mime-version:from:to:cc :subject:date:message-id:reply-to; bh=rHh5wTFNZhWrGGyB7981EwMa+tBkm9tyJBTyAzlbNlg=; b=rA4lJ0ldHJWbB0G6JjEHyFLd8Hp8ac2TxmTBVWd/9tkKBx39Gk1+5b77RFhyFTQR2Q e4SgnNQ2YonZYBO2t9TY/1UMQvZsA8wKVVoxyIbTp/uyJPZqjxY6UGIqJ39IBLFsli2S kg7KXLhqwdomHhRqz8j5eHy3/Z6awwKyvygYtimo0PQxUjwBPU1hLMOGRbnARtDBqdJE qrABUCEK9zWuYFsFcROJQnDYH9pkYg7XXxfkeBGI8BbZQqKp3S1LKSzUZYdFjoSPTLaH TO0iTBzGAug3PeYDWErZ4B5u251LQz7PDYO6Qnd1a5AHVgPsfbNJE5cFIhNJh/aMN6jN gznA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777005878; x=1777610678; h=cc:to:subject:message-id:date:from:reply-to:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rHh5wTFNZhWrGGyB7981EwMa+tBkm9tyJBTyAzlbNlg=; b=lkPceQvCVxRPPXC1YQkLAhiyS011rNoTp+pM9bRsBbfnuoHx/1fKLIpNvKsABc9iNd tWPP0HlAapnS5LferxUxzapiemgYPrrk/Can5rBj4qI+9rjzWhEv71VPGEBvnjlRUXMk h6XW66oGeBBodH1bAA/Q6DOLKueqa2xaNjC0bmdRwybfJ1xY8kpKqZv5hrG+yzeNJFWT QmR5gycb2e4Qdmp3lka0MSsi51Tki695U96DJ3NiaxRNiUkcn3fLQuqUzo7/OjjylxT2 UCRRKtS02j9xmC7ThNvoduiPU00t6whgz+2SYml+5m5SsrhOypwV/L+BTsW1JSv/3yqG hUbg== X-Gm-Message-State: AOJu0Yw80pN/G/kxd8HDhWi3O895fYZPvTaDLi4qYo4hSNhWMI7NVyJx C1eUkYvck/ZHVni2/JRjyfWUudCUcZ2PcI9fUQPtWPAeBt+RblnZwzX//vaVkzcTjNNlFHTfptX CRIuE5Dhdscn68evIfQ+EoiRb1doLwsy9inIgG0A= X-Gm-Gg: AeBDies3lTIlTjLQ4d668JFSa+fCgXihdZcTGSKVclHHrGexjQcXP51cfKRIj3c1PQe UbcVU51wc03DzFZy6On/WgNaXVk91sqzZBDpLlDNkYcMC2lAKXmSWZ6+1sEoJbEnE77uQfQGsHL JtHsZIEiibCaBCakvvFHWSvGVoDJ8Cbfvft+MyQUEipjL9rIZ3bKVSHE/WoAaH9hXV5icxcYQKA 2j9Jc8byqjKdBeR9RsaP3IHmMo8EWNjI5MLTuIMmoDVXvJhftdbXiF5KSPtH9K7P3hpF/oCkLEU kkGCXz4B+ZeTWlxtLrVjFJ5apf5r7pBGN/dlGxtfZV3QeW/KRQ== X-Received: by 2002:a17:903:390b:b0:2b7:ab49:3c8c with SMTP id d9443c01a7336-2b7ab493dffmr51627355ad.7.1777005877715; Thu, 23 Apr 2026 21:44:37 -0700 (PDT) MIME-Version: 1.0 Reply-To: assam258@gmail.com From: Henson Choi Date: Fri, 24 Apr 2026 13:44:26 +0900 X-Gm-Features: AQROBzA8p8Rk6vNgc5z1h1tds9ijZobe0e5KgpKOML84J9LaIaBMrUOGphAOiNg Message-ID: Subject: SQL/PGQ: Support multi-pattern path matching in GRAPH_TABLE To: pgsql-hackers , Ashutosh Bapat , Junwang Zhao Cc: Peter Eisentraut , Ajay Pal , Imran Zaheer Content-Type: multipart/mixed; boundary="0000000000001afd9d06502d6c5a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001afd9d06502d6c5a Content-Type: multipart/alternative; boundary="0000000000001afd9d06502d6c58" --0000000000001afd9d06502d6c58 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi hackers, Now that the SQL/PGQ core has been committed, I'd like to propose extending GRAPH_TABLE to accept multiple path patterns in the MATCH clause, i.e. the comma-separated form: SELECT ... FROM GRAPH_TABLE (g MATCH , , ... COLUMNS (...) ); This shape is not supported today =E2=80=94 the parser rejects it with multiple path patterns in one GRAPH_TABLE clause not supported and the rewriter asserts that the path_pattern_list has exactly one entry. Among the features that are not yet covered, I think this one has the highest practical need: many realistic graph queries express joins and star-shaped traversals most naturally as multiple comma-separated patterns, and without it those queries have to be rewritten into more awkward forms. The attached patch lifts the restriction and wires the existing path-rewriting pipeline through the list of path patterns. What the patch does ------------------- Parser side: the error that rejected multi-pattern MATCH is removed, so such queries now reach the rewriter. Rewriter side: each path pattern is processed as its own chain, so adjacency linking never crosses a path boundary. Element variables that share a name across paths are still merged into the same element =E2=80=94 shared variables produce joins, disconnected paths produce cross products. An earlier version flattened all element patterns into a single list, but that treated elements from adjacent paths as adjacent within one path and broke on vertex-vertex boundaries. The per-path approach is the minimal fix; a more principled cross-path join construction is left for this thread to settle. Examples -------- Shared variable (join): MATCH (a IS vl1)-[e1 IS el1]->(b IS vl2), (b)-[e2 IS el2]->(c IS vl3) -- b is shared -> the two patterns are joined on b. Star/hub: MATCH (a IS vl1)-[]->(b IS vl2), (a)-[]->(c IS vl3), (d IS vl2)-[]->(a) -- three patterns meeting at a. Disconnected patterns (cross product): MATCH (a IS vl1), (b IS vl3) Partial connection mixed with a disconnected piece: MATCH (a)-[]->(b), (b)-[]->(c), (d IS vl1) Status ------ I would appreciate feedback along these axes: * standard conformance =E2=80=94 whether the shape and the handling of multi-pattern MATCH are aligned with SQL/PGQ (ISO/IEC 9075-16); * semantics =E2=80=94 whether the behavior on shared variables, disconnected patterns, and their combinations is the right one; * functionality =E2=80=94 coverage gaps, cases the patch does not yet handle, or constructs that should be rejected but currently are not (and vice versa); * robustness =E2=80=94 correctness under edge cases, error handling, and anything that could destabilize the existing GRAPH_TABLE path; * code shape =E2=80=94 whether generate_queries_for_path_pattern() has grown large enough that the per-path body should be factored out into a helper. I kept the function intact in this round, but would gladly split it if reviewers prefer that. Review comments, objections, and alternative approaches are all welcome =E2=80=94 please don't hesitate to push back on anything that looks off. Thanks, Henson Reference to the SQL/PGQ main thread: https://postgr.es/m/CAAAe_zAEEAb=3DpiH4n-mZUhqcL=3DoKbDv4v-_7C_7KyXroem=3DH= Ug@mail.gmail.com --0000000000001afd9d06502d6c58 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

Now that the SQL/PGQ core has been comm= itted, I'd like to propose
extending GRAPH_TABLE to accept multiple = path patterns in the MATCH
clause, i.e. the comma-separated form:
=C2=A0 =C2=A0 SELECT ... FROM GRAPH_TABLE (g
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 MATCH <path_pattern_1>, <path_pattern_2>, ...
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 COLUMNS (...)
=C2=A0 =C2=A0 );

This shape is no= t supported today =E2=80=94 the parser rejects it with

=C2=A0 =C2=A0= multiple path patterns in one GRAPH_TABLE clause not supported

and = the rewriter asserts that the path_pattern_list has exactly one
entry. A= mong the features that are not yet covered, I think this one
has the hig= hest practical need: many realistic graph queries express
joins and star= -shaped traversals most naturally as multiple
comma-separated patterns, = and without it those queries have to be
rewritten into more awkward form= s. The attached patch lifts the
restriction and wires the existing path-= rewriting pipeline through
the list of path patterns.

What the pa= tch does
-------------------

Parser side: the error that rejected= multi-pattern MATCH is
removed, so such queries now reach the rewriter.=

Rewriter side: each path pattern is processed as its own chain,
= so adjacency linking never crosses a path boundary.=C2=A0 Element
variab= les that share a name across paths are still merged into
the same elemen= t =E2=80=94 shared variables produce joins, disconnected
paths produce c= ross products.

An earlier version flattened all element patterns int= o a single
list, but that treated elements from adjacent paths as adjace= nt
within one path and broke on vertex-vertex boundaries.=C2=A0 The
p= er-path approach is the minimal fix; a more principled cross-path
join c= onstruction is left for this thread to settle.

Examples
--------<= br>
Shared variable (join):

=C2=A0 =C2=A0 MATCH (a IS vl1)-[e1 IS= el1]->(b IS vl2),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (b)-[e2 IS el2]= ->(c IS vl3)

=C2=A0 =C2=A0 -- b is shared -> the two patterns = are joined on b.

Star/hub:

=C2=A0 =C2=A0 MATCH (a IS vl1)-[]-= >(b IS vl2),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (a)-[]->(c IS vl3)= ,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (d IS vl2)-[]->(a)

=C2=A0= =C2=A0 -- three patterns meeting at a.

Disconnected patterns (cross= product):

=C2=A0 =C2=A0 MATCH (a IS vl1), (b IS vl3)

Partial= connection mixed with a disconnected piece:

=C2=A0 =C2=A0 MATCH (a)= -[]->(b), (b)-[]->(c), (d IS vl1)

Status
------

I wo= uld appreciate feedback along these axes:

=C2=A0 * standard conforma= nce =E2=80=94 whether the shape and the handling of
=C2=A0 =C2=A0 multi-= pattern MATCH are aligned with SQL/PGQ (ISO/IEC 9075-16);
=C2=A0 * seman= tics =E2=80=94 whether the behavior on shared variables,
=C2=A0 =C2=A0 d= isconnected patterns, and their combinations is the right one;
=C2=A0 * = functionality =E2=80=94 coverage gaps, cases the patch does not yet
=C2= =A0 =C2=A0 handle, or constructs that should be rejected but currently are<= br>=C2=A0 =C2=A0 not (and vice versa);
=C2=A0 * robustness =E2=80=94 cor= rectness under edge cases, error handling, and
=C2=A0 =C2=A0 anything th= at could destabilize the existing GRAPH_TABLE path;
=C2=A0 * code shape = =E2=80=94 whether generate_queries_for_path_pattern() has
=C2=A0 =C2=A0 = grown large enough that the per-path body should be factored
=C2=A0 =C2= =A0 out into a helper.=C2=A0 I kept the function intact in this round,
= =C2=A0 =C2=A0 but would gladly split it if reviewers prefer that.

Re= view comments, objections, and alternative approaches are all
welcome = =E2=80=94 please don't hesitate to push back on anything that looks
= off.

Thanks,
Henson

Reference to the SQL/PGQ main thread:<= br>=C2=A0 https://postgr.es/m/CAAAe_zAEEAb=3D= piH4n-mZUhqcL=3DoKbDv4v-_7C_7KyXroem=3DHUg@mail.gmail.com

<= /div>
--0000000000001afd9d06502d6c58-- --0000000000001afd9d06502d6c5a Content-Type: application/octet-stream; name="v1-0001-Multi-pattern-path-matching.patch" Content-Disposition: attachment; filename="v1-0001-Multi-pattern-path-matching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mocfc2lc0 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZW5zb24gQ2hvaSA8YXNzYW0yNThAZ21haWwuY29tPgpEYXRl OiBTdW4sIDIyIE1hciAyMDI2IDIyOjI0OjAwICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0gU1FM L1BHUTogU3VwcG9ydCBtdWx0aS1wYXR0ZXJuIHBhdGggbWF0Y2hpbmcgaW4KIEdSQVBIX1RBQkxF CgpFeHRlbmQgR1JBUEhfVEFCTEUgdG8gYWNjZXB0IG11bHRpcGxlIGNvbW1hLXNlcGFyYXRlZCBw YXRoIHBhdHRlcm5zIGluCnRoZSBNQVRDSCBjbGF1c2UuICBFbGVtZW50IHBhdHRlcm5zIGFyZSBw cm9jZXNzZWQgcGF0aC1ieS1wYXRoIGZvcgphZGphY2VuY3kgbGlua2luZzsgYWNyb3NzIHBhdGhz LCBlbGVtZW50IHZhcmlhYmxlcyB0aGF0IHNoYXJlIGEgbmFtZQphcmUgbWVyZ2VkIGludG8gdGhl IHNhbWUgcGF0aF9mYWN0b3IsIHNvIHNoYXJlZCB2YXJpYWJsZXMgZm9ybSBqb2luCnBvaW50cyBi ZXR3ZWVuIHBhdGhzIGFuZCB1bnJlbGF0ZWQgcGF0aHMgcHJvZHVjZSBhIGNyb3NzIHByb2R1Y3Qu ICBUaGUKcGFyc2VyLXNpZGUgcmVzdHJpY3Rpb24gaW4gdHJhbnNmb3JtUGF0aFBhdHRlcm5MaXN0 KCkgaXMgbGlmdGVkLgoKLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5j ICAgICB8ICAgOSAtCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVHcmFwaFRhYmxlLmMgICB8 IDI5NSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZ3JhcGhfdGFibGUub3V0IHwgMzI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JhcGhfdGFibGUuc3FsICAgICAgfCAxMTQgKysrKysrKysr Ky0KIDQgZmlsZXMgY2hhbmdlZCwgNTkyIGluc2VydGlvbnMoKyksIDE1NCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2dyYXBodGFibGUuYwppbmRleCAzMGRkY2U1YWE5Zi4uODRj MTNlZThlYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ncmFwaHRhYmxl LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2dyYXBodGFibGUuYwpAQCAtMzMxLDE1 ICszMzEsNiBAQCB0cmFuc2Zvcm1QYXRoUGF0dGVybkxpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpwYXRoX3BhdHRlcm4pCiAJLyogR3JhbW1hciBkb2Vzbid0IGFsbG93IGVtcHR5IHBhdGgg cGF0dGVybiBsaXN0ICovCiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhfcGF0dGVybikgPiAwKTsK IAotCS8qCi0JICogV2UgZG8gbm90IHN1cHBvcnQgbXVsdGlwbGUgcGF0aCBwYXR0ZXJucyBpbiBv bmUgR1JBUEhfVEFCTEUgY2xhdXNlCi0JICogcmlnaHQgbm93LiBCdXQgd2UgbWF5IGRvIHNvIGlu IGZ1dHVyZS4KLQkgKi8KLQlpZiAobGlzdF9sZW5ndGgocGF0aF9wYXR0ZXJuKSAhPSAxKQotCQll cmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKLQkJCQkgZXJybXNnKCJtdWx0aXBsZSBwYXRoIHBhdHRlcm5zIGluIG9uZSBHUkFQSF9UQUJM RSBjbGF1c2Ugbm90IHN1cHBvcnRlZCIpKSk7Ci0KIAkvKgogCSAqIENvbGxlY3QgYWxsIHRoZSB2 YXJpYWJsZXMgaW4gdGhlIHBhdGggcGF0dGVybiBpbnRvIHRoZQogCSAqIEdyYXBoVGFibGVQYXJz ZVN0YXRlIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhbnkgbm9uLWxvY2FsIGVsZW1lbnQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYyBiL3NyYy9iYWNr ZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYwppbmRleCAyYzMxOTlkMzIzMC4uMDk5NTlm MWRkOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUu YworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVHcmFwaFRhYmxlLmMKQEAgLTkxLDcg KzkxLDcgQEAgc3RydWN0IHBhdGhfZWxlbWVudAogCiBzdGF0aWMgTm9kZSAqcmVwbGFjZV9wcm9w ZXJ0eV9yZWZzKE9pZCBwcm9wZ3JhcGhpZCwgTm9kZSAqbm9kZSwgY29uc3QgTGlzdCAqbWFwcGlu Z3MpOwogc3RhdGljIExpc3QgKmJ1aWxkX2VkZ2VfdmVydGV4X2xpbmtfcXVhbHMoSGVhcFR1cGxl IGVkZ2V0dXAsIGludCBlZGdlcnRpLCBpbnQgcmVmcnRpLCBPaWQgcmVmaWQsIEF0dHJOdW1iZXIg Y2F0YWxvZ19rZXlfYXR0bnVtLCBBdHRyTnVtYmVyIGNhdGFsb2dfcmVmX2F0dG51bSwgQXR0ck51 bWJlciBjYXRhbG9nX2Vxb3BfYXR0bnVtKTsKLXN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9xdWVyaWVz X2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxFbnRyeSAqcnRlLCBMaXN0ICplbGVtZW50X3BhdHRl cm5zKTsKK3N0YXRpYyBMaXN0ICpnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFu Z2VUYmxFbnRyeSAqcnRlLCBMaXN0ICpwYXRoX3BhdHRlcm5fbGlzdCk7CiBzdGF0aWMgUXVlcnkg KmdlbmVyYXRlX3F1ZXJ5X2Zvcl9ncmFwaF9wYXRoKFJhbmdlVGJsRW50cnkgKnJ0ZSwgTGlzdCAq cGF0aCk7CiBzdGF0aWMgTm9kZSAqZ2VuZXJhdGVfc2V0b3BfZnJvbV9wYXRocXVlcmllcyhMaXN0 ICpwYXRocXVlcmllcywgTGlzdCAqKnJ0YWJsZSwgTGlzdCAqKnRhcmdldGxpc3QpOwogc3RhdGlj IExpc3QgKmdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybl9yZWN1cnNlKFJhbmdlVGJs RW50cnkgKnJ0ZSwgTGlzdCAqcGF0aHF1ZXJpZXMsIExpc3QgKmN1cl9wYXRoLCBMaXN0ICpwYXRo X3BhdHRlcm5fbGlzdHMsIGludCBlbGVtcG9zKTsKQEAgLTExMCwxNSArMTEwLDEyIEBAIHJld3Jp dGVHcmFwaFRhYmxlKFF1ZXJ5ICpwYXJzZXRyZWUsIGludCBydF9pbmRleCkKIHsKIAlSYW5nZVRi bEVudHJ5ICpydGU7CiAJUXVlcnkJICAgKmdyYXBoX3RhYmxlX3F1ZXJ5OwotCUxpc3QJICAgKnBh dGhfcGF0dGVybjsKIAlMaXN0CSAgICpwYXRocXVlcmllcyA9IE5JTDsKIAogCXJ0ZSA9IHJ0X2Zl dGNoKHJ0X2luZGV4LCBwYXJzZXRyZWUtPnJ0YWJsZSk7CiAKLQlBc3NlcnQobGlzdF9sZW5ndGgo cnRlLT5ncmFwaF9wYXR0ZXJuLT5wYXRoX3BhdHRlcm5fbGlzdCkgPT0gMSk7Ci0KLQlwYXRoX3Bh dHRlcm4gPSBsaW5pdGlhbChydGUtPmdyYXBoX3BhdHRlcm4tPnBhdGhfcGF0dGVybl9saXN0KTsK LQlwYXRocXVlcmllcyA9IGdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybihydGUsIHBh dGhfcGF0dGVybik7CisJcGF0aHF1ZXJpZXMgPSBnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3Bh dHRlcm4ocnRlLAorCQkJCQkJCQkJCQkJCXJ0ZS0+Z3JhcGhfcGF0dGVybi0+cGF0aF9wYXR0ZXJu X2xpc3QpOwogCWdyYXBoX3RhYmxlX3F1ZXJ5ID0gZ2VuZXJhdGVfdW5pb25fZnJvbV9wYXRocXVl cmllcygmcGF0aHF1ZXJpZXMpOwogCiAJQWNxdWlyZVJld3JpdGVMb2NrcyhncmFwaF90YWJsZV9x dWVyeSwgdHJ1ZSwgZmFsc2UpOwpAQCAtMTcxLDE2NyArMTY4LDE4MSBAQCByZXdyaXRlR3JhcGhU YWJsZShRdWVyeSAqcGFyc2V0cmVlLCBpbnQgcnRfaW5kZXgpCiAgKiB0aGUgR1JBUEhfVEFCTEUg Y2xhdXNlIHJlcHJlc2VudGVkIGJ5IGdpdmVuICdydGUnLgogICovCiBzdGF0aWMgTGlzdCAqCi1n ZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxFbnRyeSAqcnRlLCBMaXN0 ICpwYXRoX3BhdHRlcm4pCitnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VU YmxFbnRyeSAqcnRlLCBMaXN0ICpwYXRoX3BhdHRlcm5fbGlzdCkKIHsKIAlMaXN0CSAgICpwYXRo cXVlcmllcyA9IE5JTDsKIAlMaXN0CSAgICpwYXRoX2VsZW1fbGlzdHMgPSBOSUw7CiAJaW50CQkJ ZmFjdG9ycG9zID0gMDsKIAlMaXN0CSAgICpwYXRoX2ZhY3RvcnMgPSBOSUw7Ci0Jc3RydWN0IHBh dGhfZmFjdG9yICpwcmV2X3BmID0gTlVMTDsKIAotCUFzc2VydChsaXN0X2xlbmd0aChwYXRoX3Bh dHRlcm4pID4gMCk7CisJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhfcGF0dGVybl9saXN0KSA+IDAp OwogCiAJLyoKLQkgKiBDcmVhdGUgYSBsaXN0IG9mIHBhdGggZmFjdG9ycyByZXByZXNlbnRpbmcg dGhlIGdpdmVuIHBhdGggcGF0dGVybgorCSAqIENyZWF0ZSBhIGxpc3Qgb2YgcGF0aCBmYWN0b3Jz IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGF0aCBwYXR0ZXJucwogCSAqIGxpbmtpbmcgZWRnZSBw YXRoIGZhY3RvcnMgdG8gdGhlaXIgYWRqYWNlbnQgdmVydGV4IHBhdGggZmFjdG9ycy4KIAkgKgot CSAqIFdoaWxlIGRvaW5nIHRoYXQgbWVyZ2UgZWxlbWVudCBwYXR0ZXJucyB3aXRoIHRoZSBzYW1l IHZhcmlhYmxlIG5hbWUKLQkgKiBpbnRvIGEgc2luZ2xlIHBhdGhfZmFjdG9yLgorCSAqIEVhY2gg cGF0aCBwYXR0ZXJuIChwYXRoIHRlcm0pIGlzIHByb2Nlc3NlZCBpbmRlcGVuZGVudGx5IGZvciBh ZGphY2VuY3kKKwkgKiBsaW5raW5nOyBwcmV2X3BmIGlzIHJlc2V0IGF0IHRoZSBzdGFydCBvZiBl dmVyeSBwYXRoIHNvIHRoYXQgdGhlIGxhc3QKKwkgKiBlbGVtZW50IG9mIG9uZSBwYXRoIGlzIG5v dCB0cmVhdGVkIGFzIGFkamFjZW50IHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisJICogdGhlIG5l eHQgb25lLiAgQWNyb3NzIHBhdGhzLCBlbGVtZW50IHBhdHRlcm5zIHdpdGggdGhlIHNhbWUgdmFy aWFibGUKKwkgKiBuYW1lIGFyZSBzdGlsbCBtZXJnZWQgaW50byBhIHNpbmdsZSBwYXRoX2ZhY3Rv ciwgc28gc2hhcmVkIHZhcmlhYmxlcworCSAqIGFjdCBhcyBqb2luIHBvaW50cyBiZXR3ZWVuIHBh dGhzIGFuZCB1bnJlbGF0ZWQgcGF0aHMgcHJvZHVjZSBhIGNyb3NzCisJICogcHJvZHVjdC4KIAkg Ki8KLQlmb3JlYWNoX25vZGUoR3JhcGhFbGVtZW50UGF0dGVybiwgZ2VwLCBwYXRoX3BhdHRlcm4p CisJZm9yZWFjaF9ub2RlKExpc3QsIHBhdGhfcGF0dGVybiwgcGF0aF9wYXR0ZXJuX2xpc3QpCiAJ ewotCQlzdHJ1Y3QgcGF0aF9mYWN0b3IgKnBmID0gTlVMTDsKLQotCQkvKgotCQkgKiBVbnN1cHBv cnRlZCBjb25kaXRpb25zIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBwYXJzZXIKLQkJ ICogaXRzZWxmLiBXZSBoYXZlIGNvcnJlc3BvbmRpbmcgQXNzZXJ0cyBoZXJlIHRvIGRvY3VtZW50 IHRoZQotCQkgKiBhc3N1bXB0aW9ucyBpbiB0aGlzIGNvZGUuCi0JCSAqLwotCQlBc3NlcnQoZ2Vw LT5raW5kID09IFZFUlRFWF9QQVRURVJOIHx8IElTX0VER0VfUEFUVEVSTihnZXAtPmtpbmQpKTsK LQkJQXNzZXJ0KCFnZXAtPnF1YW50aWZpZXIpOworCQlzdHJ1Y3QgcGF0aF9mYWN0b3IgKnByZXZf cGYgPSBOVUxMOwogCi0JCWZvcmVhY2hfcHRyKHN0cnVjdCBwYXRoX2ZhY3Rvciwgb3RoZXIsIHBh dGhfZmFjdG9ycykKKwkJZm9yZWFjaF9ub2RlKEdyYXBoRWxlbWVudFBhdHRlcm4sIGdlcCwgcGF0 aF9wYXR0ZXJuKQogCQl7Ci0JCQlpZiAoZ2VwLT52YXJpYWJsZSAmJiBvdGhlci0+dmFyaWFibGUg JiYKLQkJCQlzdHJjbXAoZ2VwLT52YXJpYWJsZSwgb3RoZXItPnZhcmlhYmxlKSA9PSAwKQotCQkJ ewotCQkJCWlmIChvdGhlci0+a2luZCAhPSBnZXAtPmtpbmQpCi0JCQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCi0JCQkJCQkJIGVy cm1zZygiZWxlbWVudCBwYXR0ZXJucyB3aXRoIHNhbWUgdmFyaWFibGUgbmFtZSBcIiVzXCIgYnV0 IGRpZmZlcmVudCBlbGVtZW50IHBhdHRlcm4gdHlwZXMiLAotCQkJCQkJCQkJZ2VwLT52YXJpYWJs ZSkpKTsKKwkJCXN0cnVjdCBwYXRoX2ZhY3RvciAqcGYgPSBOVUxMOwogCi0JCQkJLyoKLQkJCQkg KiBJZiBib3RoIHRoZSBlbGVtZW50IHBhdHRlcm5zIGhhdmUgbGFiZWwgZXhwcmVzc2lvbnMsIHRo ZXkKLQkJCQkgKiBuZWVkIHRvIGJlIGNvbmp1bmN0ZWQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQg cmlnaHQgbm93LgotCQkJCSAqCi0JCQkJICogSG93ZXZlciwgYW4gZW1wdHkgbGFiZWwgZXhwcmVz c2lvbiBtZWFucyBhbGwgbGFiZWxzLgotCQkJCSAqIENvbmp1bmN0aW9uIG9mIGFueSBsYWJlbCBl eHByZXNzaW9uIHdpdGggYWxsIGxhYmVscyBpcyB0aGUKLQkJCQkgKiBleHByZXNzaW9uIGl0c2Vs Zi4gSGVuY2UgaWYgb25seSBvbmUgb2YgdGhlIHR3byBlbGVtZW50Ci0JCQkJICogcGF0dGVybnMg aGFzIGEgbGFiZWwgZXhwcmVzc2lvbiB1c2UgdGhhdCBleHByZXNzaW9uLgotCQkJCSAqLwotCQkJ CWlmICghb3RoZXItPmxhYmVsZXhwcikKLQkJCQkJb3RoZXItPmxhYmVsZXhwciA9IGdlcC0+bGFi ZWxleHByOwotCQkJCWVsc2UgaWYgKGdlcC0+bGFiZWxleHByICYmICFlcXVhbChvdGhlci0+bGFi ZWxleHByLCBnZXAtPmxhYmVsZXhwcikpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJCSBlcnJtc2coImVs ZW1lbnQgcGF0dGVybnMgd2l0aCBzYW1lIHZhcmlhYmxlIG5hbWUgXCIlc1wiIGJ1dCBkaWZmZXJl bnQgbGFiZWwgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiLAotCQkJCQkJCQkJZ2VwLT52 YXJpYWJsZSkpKTsKKwkJCS8qCisJCQkgKiBVbnN1cHBvcnRlZCBjb25kaXRpb25zIHNob3VsZCBo YXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBwYXJzZXIKKwkJCSAqIGl0c2VsZi4gV2UgaGF2ZSBjb3Jy ZXNwb25kaW5nIEFzc2VydHMgaGVyZSB0byBkb2N1bWVudCB0aGUKKwkJCSAqIGFzc3VtcHRpb25z IGluIHRoaXMgY29kZS4KKwkJCSAqLworCQkJQXNzZXJ0KGdlcC0+a2luZCA9PSBWRVJURVhfUEFU VEVSTiB8fCBJU19FREdFX1BBVFRFUk4oZ2VwLT5raW5kKSk7CisJCQlBc3NlcnQoIWdlcC0+cXVh bnRpZmllcik7CiAKLQkJCQkvKgotCQkJCSAqIElmIHR3byBlbGVtZW50IHBhdHRlcm5zIGhhdmUg dGhlIHNhbWUgdmFyaWFibGUgbmFtZSwgdGhleQotCQkJCSAqIHJlcHJlc2VudCB0aGUgc2FtZSBz ZXQgb2YgZ3JhcGggZWxlbWVudHMgYW5kIGhlbmNlIGFyZQotCQkJCSAqIGNvbnN0cmFpbmVkIGJ5 IGNvbmRpdGlvbnMgZnJvbSBib3RoIHRoZSBlbGVtZW50IHBhdHRlcm5zLgotCQkJCSAqLwotCQkJ CWlmICghb3RoZXItPndoZXJlQ2xhdXNlKQotCQkJCQlvdGhlci0+d2hlcmVDbGF1c2UgPSBnZXAt PndoZXJlQ2xhdXNlOwotCQkJCWVsc2UgaWYgKGdlcC0+d2hlcmVDbGF1c2UpCi0JCQkJCW90aGVy LT53aGVyZUNsYXVzZSA9IChOb2RlICopIG1ha2VCb29sRXhwcihBTkRfRVhQUiwKLQkJCQkJCQkJ CQkJCQkJCSAgIGxpc3RfbWFrZTIob3RoZXItPndoZXJlQ2xhdXNlLCBnZXAtPndoZXJlQ2xhdXNl KSwKLQkJCQkJCQkJCQkJCQkJCSAgIC0xKTsKLQkJCQlwZiA9IG90aGVyOwotCQkJCWJyZWFrOwot CQkJfQotCQl9CisJCQlmb3JlYWNoX3B0cihzdHJ1Y3QgcGF0aF9mYWN0b3IsIG90aGVyLCBwYXRo X2ZhY3RvcnMpCisJCQl7CisJCQkJaWYgKGdlcC0+dmFyaWFibGUgJiYgb3RoZXItPnZhcmlhYmxl ICYmCisJCQkJCXN0cmNtcChnZXAtPnZhcmlhYmxlLCBvdGhlci0+dmFyaWFibGUpID09IDApCisJ CQkJeworCQkJCQlpZiAob3RoZXItPmtpbmQgIT0gZ2VwLT5raW5kKQorCQkJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJ CQkJCSBlcnJtc2coImVsZW1lbnQgcGF0dGVybnMgd2l0aCBzYW1lIHZhcmlhYmxlIG5hbWUgXCIl c1wiIGJ1dCBkaWZmZXJlbnQgZWxlbWVudCBwYXR0ZXJuIHR5cGVzIiwKKwkJCQkJCQkJCQlnZXAt PnZhcmlhYmxlKSkpOwogCi0JCWlmICghcGYpCi0JCXsKLQkJCXBmID0gcGFsbG9jMF9vYmplY3Qo c3RydWN0IHBhdGhfZmFjdG9yKTsKLQkJCXBmLT5mYWN0b3Jwb3MgPSBmYWN0b3Jwb3MrKzsKLQkJ CXBmLT5raW5kID0gZ2VwLT5raW5kOwotCQkJcGYtPmxhYmVsZXhwciA9IGdlcC0+bGFiZWxleHBy OwotCQkJcGYtPnZhcmlhYmxlID0gZ2VwLT52YXJpYWJsZTsKLQkJCXBmLT53aGVyZUNsYXVzZSA9 IGdlcC0+d2hlcmVDbGF1c2U7Ci0KLQkJCXBhdGhfZmFjdG9ycyA9IGxhcHBlbmQocGF0aF9mYWN0 b3JzLCBwZik7Ci0JCX0KKwkJCQkJLyoKKwkJCQkJICogSWYgYm90aCB0aGUgZWxlbWVudCBwYXR0 ZXJucyBoYXZlIGxhYmVsIGV4cHJlc3Npb25zLAorCQkJCQkgKiB0aGV5IG5lZWQgdG8gYmUgY29u anVuY3RlZCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAorCQkJCQkgKiByaWdodCBub3cuCisJCQkJ CSAqCisJCQkJCSAqIEhvd2V2ZXIsIGFuIGVtcHR5IGxhYmVsIGV4cHJlc3Npb24gbWVhbnMgYWxs IGxhYmVscy4KKwkJCQkJICogQ29uanVuY3Rpb24gb2YgYW55IGxhYmVsIGV4cHJlc3Npb24gd2l0 aCBhbGwgbGFiZWxzIGlzCisJCQkJCSAqIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gSGVuY2UgaWYg b25seSBvbmUgb2YgdGhlIHR3bworCQkJCQkgKiBlbGVtZW50IHBhdHRlcm5zIGhhcyBhIGxhYmVs IGV4cHJlc3Npb24gdXNlIHRoYXQKKwkJCQkJICogZXhwcmVzc2lvbi4KKwkJCQkJICovCisJCQkJ CWlmICghb3RoZXItPmxhYmVsZXhwcikKKwkJCQkJCW90aGVyLT5sYWJlbGV4cHIgPSBnZXAtPmxh YmVsZXhwcjsKKwkJCQkJZWxzZSBpZiAoZ2VwLT5sYWJlbGV4cHIgJiYgIWVxdWFsKG90aGVyLT5s YWJlbGV4cHIsIGdlcC0+bGFiZWxleHByKSkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJIGVycm1z ZygiZWxlbWVudCBwYXR0ZXJucyB3aXRoIHNhbWUgdmFyaWFibGUgbmFtZSBcIiVzXCIgYnV0IGRp ZmZlcmVudCBsYWJlbCBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCIsCisJCQkJCQkJCQkJ Z2VwLT52YXJpYWJsZSkpKTsKIAotCQkvKgotCQkgKiBTZXR1cCBsaW5rcyB0byB0aGUgcHJldmlv dXMgcGF0aCBmYWN0b3IgaW4gdGhlIHBhdGguCi0JCSAqCi0JCSAqIElmIHRoZSBwcmV2aW91cyBw YXRoIGZhY3RvciByZXByZXNlbnRzIGFuIGVkZ2UsIHRoaXMgcGF0aCBmYWN0b3IKLQkJICogcmVw cmVzZW50cyBhbiBhZGphY2VudCB2ZXJ0ZXg7IHRoZSBzb3VyY2UgdmVydGV4IGZvciBhbiBlZGdl Ci0JCSAqIHBvaW50aW5nIGxlZnQgb3IgdGhlIGRlc3RpbmF0aW9uIHZlcnRleCBmb3IgYW4gZWRn ZSBwb2ludGluZyByaWdodC4KLQkJICogSWYgdGhpcyBwYXRoIGZhY3RvciByZXByZXNlbnRzIGFu IGVkZ2UsIHRoZSBwcmV2aW91cyBwYXRoIGZhY3RvcgotCQkgKiByZXByZXNlbnRzIGFuIGFkamFj ZW50IHZlcnRleDsgc291cmNlIHZlcnRleCBmb3IgYW4gZWRnZSBwb2ludGluZwotCQkgKiByaWdo dCBvciB0aGUgZGVzdGluYXRpb24gdmVydGV4IGZvciBhbiBlZGdlIHBvaW50aW5nIGxlZnQuCi0J CSAqCi0JCSAqIEVkZ2UgcG9pbnRpbmcgaW4gYW55IGRpcmVjdGlvbiBpcyB0cmVhdGVkIHNpbWls YXIgdG8gdGhhdCBwb2ludGluZwotCQkgKiBpbiByaWdodCBkaXJlY3Rpb24gaGVyZS4gIFdoZW4g Y29uc3RydWN0aW5nIGEgcXVlcnkgaW4KLQkJICogZ2VuZXJhdGVfcXVlcnlfZm9yX2dyYXBoX3Bh dGgoKSwgd2Ugd2lsbCB0cnkgbGlua3MgaW4gYm90aCB0aGUKLQkJICogZGlyZWN0aW9ucy4KLQkJ ICoKLQkJICogSWYgbXVsdGlwbGUgZWRnZSBwYXR0ZXJucyBzaGFyZSB0aGUgc2FtZSB2YXJpYWJs ZSBuYW1lLCB0aGV5Ci0JCSAqIGNvbnN0cmFpbiB0aGUgYWRqYWNlbnQgdmVydGV4IHBhdHRlcm5z IHNpbmNlIGFuIGVkZ2UgY2FuIGNvbm5lY3QKLQkJICogb25seSBvbmUgcGFpciBvZiB2ZXJ0ZXhl cy4gVGhlc2UgYWRqYWNlbnQgdmVydGV4IHBhdHRlcm5zIG5lZWQgdG8KLQkJICogYmUgbWVyZ2Vk IGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZSBkaWZmZXJlbnQgdmFyaWFibGVzLiBTdWNoIGVsZW1lbnQK LQkJICogcGF0dGVybnMgZm9ybSBhIHdhbGsgb2YgZ3JhcGggd2hlcmUgdmVydGV4IGFuZCBlZGdl cyBhcmUgcmVwZWF0ZWQuCi0JCSAqIEZvciBleGFtcGxlLCBpbiAoYSktW2JdLT4oYyk8LVtiXS0o ZCksIChhKSBhbmQgKGQpIHJlcHJlc2VudCB0aGUKLQkJICogc2FtZSB2ZXJ0ZXggZWxlbWVudC4g VGhpcyBpcyBzbGlnaHRseSBoYXJkZXIgdG8gaW1wbGVtZW50IGFuZAotCQkgKiBwcm9iYWJseSBs ZXNzIHVzZWZ1bC4gSGVuY2Ugbm90IHN1cHBvcnRlZCBmb3Igbm93LgotCQkgKi8KLQkJaWYgKHBy ZXZfcGYpCi0JCXsKLQkJCWlmIChwcmV2X3BmLT5raW5kID09IEVER0VfUEFUVEVSTl9SSUdIVCB8 fCBwcmV2X3BmLT5raW5kID09IEVER0VfUEFUVEVSTl9BTlkpCi0JCQl7Ci0JCQkJQXNzZXJ0KCFJ U19FREdFX1BBVFRFUk4ocGYtPmtpbmQpKTsKLQkJCQlpZiAocHJldl9wZi0+ZGVzdF9wZiAmJiBw cmV2X3BmLT5kZXN0X3BmICE9IHBmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFu IGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3lj bGljIHBhdHRlcm4iKSk7Ci0JCQkJcHJldl9wZi0+ZGVzdF9wZiA9IHBmOwotCQkJfQotCQkJZWxz ZSBpZiAocHJldl9wZi0+a2luZCA9PSBFREdFX1BBVFRFUk5fTEVGVCkKLQkJCXsKLQkJCQlBc3Nl cnQoIUlTX0VER0VfUEFUVEVSTihwZi0+a2luZCkpOwotCQkJCWlmIChwcmV2X3BmLT5zcmNfcGYg JiYgcHJldl9wZi0+c3JjX3BmICE9IHBmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2co ImFuIGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEg Y3ljbGljIHBhdHRlcm4iKSk7Ci0JCQkJcHJldl9wZi0+c3JjX3BmID0gcGY7Ci0JCQl9Ci0JCQll bHNlCi0JCQl7Ci0JCQkJQXNzZXJ0KHByZXZfcGYtPmtpbmQgPT0gVkVSVEVYX1BBVFRFUk4pOwot CQkJCUFzc2VydChJU19FREdFX1BBVFRFUk4ocGYtPmtpbmQpKTsKKwkJCQkJLyoKKwkJCQkJICog SWYgdHdvIGVsZW1lbnQgcGF0dGVybnMgaGF2ZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lLAorCQkJ CQkgKiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBzZXQgb2YgZ3JhcGggZWxlbWVudHMgYW5kIGhl bmNlCisJCQkJCSAqIGFyZSBjb25zdHJhaW5lZCBieSBjb25kaXRpb25zIGZyb20gYm90aCB0aGUg ZWxlbWVudAorCQkJCQkgKiBwYXR0ZXJucy4KKwkJCQkJICovCisJCQkJCWlmICghb3RoZXItPndo ZXJlQ2xhdXNlKQorCQkJCQkJb3RoZXItPndoZXJlQ2xhdXNlID0gZ2VwLT53aGVyZUNsYXVzZTsK KwkJCQkJZWxzZSBpZiAoZ2VwLT53aGVyZUNsYXVzZSkKKwkJCQkJCW90aGVyLT53aGVyZUNsYXVz ZSA9IChOb2RlICopIG1ha2VCb29sRXhwcihBTkRfRVhQUiwKKwkJCQkJCQkJCQkJCQkJCQkgICBs aXN0X21ha2UyKG90aGVyLT53aGVyZUNsYXVzZSwgZ2VwLT53aGVyZUNsYXVzZSksCisJCQkJCQkJ CQkJCQkJCQkJICAgLTEpOworCQkJCQlwZiA9IG90aGVyOworCQkJCQlicmVhazsKKwkJCQl9CiAJ CQl9CiAKLQkJCWlmIChwZi0+a2luZCA9PSBFREdFX1BBVFRFUk5fUklHSFQgfHwgcGYtPmtpbmQg PT0gRURHRV9QQVRURVJOX0FOWSkKLQkJCXsKLQkJCQlBc3NlcnQoIUlTX0VER0VfUEFUVEVSTihw cmV2X3BmLT5raW5kKSk7Ci0JCQkJaWYgKHBmLT5zcmNfcGYgJiYgcGYtPnNyY19wZiAhPSBwcmV2 X3BmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElE X09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFuIGVkZ2UgY2Fubm90IGNvbm5l Y3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBhdHRlcm4iKSk7Ci0J CQkJcGYtPnNyY19wZiA9IHByZXZfcGY7Ci0JCQl9Ci0JCQllbHNlIGlmIChwZi0+a2luZCA9PSBF REdFX1BBVFRFUk5fTEVGVCkKKwkJCWlmICghcGYpCiAJCQl7Ci0JCQkJQXNzZXJ0KCFJU19FREdF X1BBVFRFUk4ocHJldl9wZi0+a2luZCkpOwotCQkJCWlmIChwZi0+ZGVzdF9wZiAmJiBwZi0+ZGVz dF9wZiAhPSBwcmV2X3BmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFuIGVkZ2Ug Y2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBh dHRlcm4iKSk7Ci0JCQkJcGYtPmRlc3RfcGYgPSBwcmV2X3BmOworCQkJCXBmID0gcGFsbG9jMF9v YmplY3Qoc3RydWN0IHBhdGhfZmFjdG9yKTsKKwkJCQlwZi0+ZmFjdG9ycG9zID0gZmFjdG9ycG9z Kys7CisJCQkJcGYtPmtpbmQgPSBnZXAtPmtpbmQ7CisJCQkJcGYtPmxhYmVsZXhwciA9IGdlcC0+ bGFiZWxleHByOworCQkJCXBmLT52YXJpYWJsZSA9IGdlcC0+dmFyaWFibGU7CisJCQkJcGYtPndo ZXJlQ2xhdXNlID0gZ2VwLT53aGVyZUNsYXVzZTsKKworCQkJCXBhdGhfZmFjdG9ycyA9IGxhcHBl bmQocGF0aF9mYWN0b3JzLCBwZik7CiAJCQl9Ci0JCQllbHNlCisKKwkJCS8qCisJCQkgKiBTZXR1 cCBsaW5rcyB0byB0aGUgcHJldmlvdXMgcGF0aCBmYWN0b3IgaW4gdGhlIHBhdGguCisJCQkgKgor CQkJICogSWYgdGhlIHByZXZpb3VzIHBhdGggZmFjdG9yIHJlcHJlc2VudHMgYW4gZWRnZSwgdGhp cyBwYXRoCisJCQkgKiBmYWN0b3IgcmVwcmVzZW50cyBhbiBhZGphY2VudCB2ZXJ0ZXg7IHRoZSBz b3VyY2UgdmVydGV4IGZvciBhbgorCQkJICogZWRnZSBwb2ludGluZyBsZWZ0IG9yIHRoZSBkZXN0 aW5hdGlvbiB2ZXJ0ZXggZm9yIGFuIGVkZ2UKKwkJCSAqIHBvaW50aW5nIHJpZ2h0LiBJZiB0aGlz IHBhdGggZmFjdG9yIHJlcHJlc2VudHMgYW4gZWRnZSwgdGhlCisJCQkgKiBwcmV2aW91cyBwYXRo IGZhY3RvciByZXByZXNlbnRzIGFuIGFkamFjZW50IHZlcnRleDsgc291cmNlCisJCQkgKiB2ZXJ0 ZXggZm9yIGFuIGVkZ2UgcG9pbnRpbmcgcmlnaHQgb3IgdGhlIGRlc3RpbmF0aW9uIHZlcnRleCBm b3IKKwkJCSAqIGFuIGVkZ2UgcG9pbnRpbmcgbGVmdC4KKwkJCSAqCisJCQkgKiBFZGdlIHBvaW50 aW5nIGluIGFueSBkaXJlY3Rpb24gaXMgdHJlYXRlZCBzaW1pbGFyIHRvIHRoYXQKKwkJCSAqIHBv aW50aW5nIGluIHJpZ2h0IGRpcmVjdGlvbiBoZXJlLiAgV2hlbiBjb25zdHJ1Y3RpbmcgYSBxdWVy eSBpbgorCQkJICogZ2VuZXJhdGVfcXVlcnlfZm9yX2dyYXBoX3BhdGgoKSwgd2Ugd2lsbCB0cnkg bGlua3MgaW4gYm90aCB0aGUKKwkJCSAqIGRpcmVjdGlvbnMuCisJCQkgKgorCQkJICogSWYgbXVs dGlwbGUgZWRnZSBwYXR0ZXJucyBzaGFyZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lLCB0aGV5CisJ CQkgKiBjb25zdHJhaW4gdGhlIGFkamFjZW50IHZlcnRleCBwYXR0ZXJucyBzaW5jZSBhbiBlZGdl IGNhbgorCQkJICogY29ubmVjdCBvbmx5IG9uZSBwYWlyIG9mIHZlcnRleGVzLiBUaGVzZSBhZGph Y2VudCB2ZXJ0ZXgKKwkJCSAqIHBhdHRlcm5zIG5lZWQgdG8gYmUgbWVyZ2VkIGV2ZW4gdGhvdWdo IHRoZXkgaGF2ZSBkaWZmZXJlbnQKKwkJCSAqIHZhcmlhYmxlcy4gU3VjaCBlbGVtZW50IHBhdHRl cm5zIGZvcm0gYSB3YWxrIG9mIGdyYXBoIHdoZXJlCisJCQkgKiB2ZXJ0ZXggYW5kIGVkZ2VzIGFy ZSByZXBlYXRlZC4gRm9yIGV4YW1wbGUsIGluCisJCQkgKiAoYSktW2JdLT4oYyk8LVtiXS0oZCks IChhKSBhbmQgKGQpIHJlcHJlc2VudCB0aGUgc2FtZSB2ZXJ0ZXgKKwkJCSAqIGVsZW1lbnQuIFRo aXMgaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIGltcGxlbWVudCBhbmQgcHJvYmFibHkgbGVzcworCQkJ ICogdXNlZnVsLiBIZW5jZSBub3Qgc3VwcG9ydGVkIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChw cmV2X3BmKQogCQkJewotCQkJCUFzc2VydChwZi0+a2luZCA9PSBWRVJURVhfUEFUVEVSTik7Ci0J CQkJQXNzZXJ0KElTX0VER0VfUEFUVEVSTihwcmV2X3BmLT5raW5kKSk7CisJCQkJaWYgKHByZXZf cGYtPmtpbmQgPT0gRURHRV9QQVRURVJOX1JJR0hUIHx8IHByZXZfcGYtPmtpbmQgPT0gRURHRV9Q QVRURVJOX0FOWSkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHBmLT5raW5k KSk7CisJCQkJCWlmIChwcmV2X3BmLT5kZXN0X3BmICYmIHByZXZfcGYtPmRlc3RfcGYgIT0gcGYp CisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9P QkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBjYW5ub3QgY29ubmVj dCBtb3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0dGVybiIpKTsKKwkJ CQkJcHJldl9wZi0+ZGVzdF9wZiA9IHBmOworCQkJCX0KKwkJCQllbHNlIGlmIChwcmV2X3BmLT5r aW5kID09IEVER0VfUEFUVEVSTl9MRUZUKQorCQkJCXsKKwkJCQkJQXNzZXJ0KCFJU19FREdFX1BB VFRFUk4ocGYtPmtpbmQpKTsKKwkJCQkJaWYgKHByZXZfcGYtPnNyY19wZiAmJiBwcmV2X3BmLT5z cmNfcGYgIT0gcGYpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBj YW5ub3QgY29ubmVjdCBtb3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0 dGVybiIpKTsKKwkJCQkJcHJldl9wZi0+c3JjX3BmID0gcGY7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQl7CisJCQkJCUFzc2VydChwcmV2X3BmLT5raW5kID09IFZFUlRFWF9QQVRURVJOKTsKKwkJCQkJ QXNzZXJ0KElTX0VER0VfUEFUVEVSTihwZi0+a2luZCkpOworCQkJCX0KKworCQkJCWlmIChwZi0+ a2luZCA9PSBFREdFX1BBVFRFUk5fUklHSFQgfHwgcGYtPmtpbmQgPT0gRURHRV9QQVRURVJOX0FO WSkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHByZXZfcGYtPmtpbmQpKTsK KwkJCQkJaWYgKHBmLT5zcmNfcGYgJiYgcGYtPnNyY19wZiAhPSBwcmV2X3BmKQorCQkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklO SVRJT04pLAorCQkJCQkJCQllcnJtc2coImFuIGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFu IHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBhdHRlcm4iKSk7CisJCQkJCXBmLT5zcmNf cGYgPSBwcmV2X3BmOworCQkJCX0KKwkJCQllbHNlIGlmIChwZi0+a2luZCA9PSBFREdFX1BBVFRF Uk5fTEVGVCkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHByZXZfcGYtPmtp bmQpKTsKKwkJCQkJaWYgKHBmLT5kZXN0X3BmICYmIHBmLT5kZXN0X3BmICE9IHByZXZfcGYpCisJ CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpF Q1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBjYW5ub3QgY29ubmVjdCBt b3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0dGVybiIpKTsKKwkJCQkJ cGYtPmRlc3RfcGYgPSBwcmV2X3BmOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3Nl cnQocGYtPmtpbmQgPT0gVkVSVEVYX1BBVFRFUk4pOworCQkJCQlBc3NlcnQoSVNfRURHRV9QQVRU RVJOKHByZXZfcGYtPmtpbmQpKTsKKwkJCQl9CiAJCQl9Ci0JCX0KIAotCQlwcmV2X3BmID0gcGY7 CisJCQlwcmV2X3BmID0gcGY7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dyYXBoX3RhYmxlLm91dAppbmRleCBiNTc5ZTNkZjYzNS4uNDNiZjNhNWIxM2IgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CkBAIC05Myw4ICs5Myw2IEBA IFNFTEVDVCBjdXN0b21lcl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJ UyBjdXN0b21lcnMgV0hFUkUgYy5hZGRyCiBFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICJDT0xVTU5TIgogTElORSAxOiAuLi5tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBj dXN0b21lcl9vcmRlcnNdIENPTFVNTlMgKGMuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1TRUxFQ1QgKiBGUk9NIEdSQVBI X1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzKSwgKG8gSVMgb3JkZXJzKSBDT0xV TU5TIChjLm5hbWUgQVMgY3VzdG9tZXJfbmFtZSkpOyAgLS0gZXJyb3IKLUVSUk9SOiAgbXVsdGlw bGUgcGF0aCBwYXR0ZXJucyBpbiBvbmUgR1JBUEhfVEFCTEUgY2xhdXNlIG5vdCBzdXBwb3J0ZWQK IFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCBDT0xVTU5TICgxIEFTIGNv bCkpOyAgLS0gZXJyb3IsIGVtcHR5IG1hdGNoIGNsYXVzZQogRVJST1I6ICBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAiQ09MVU1OUyIKIExJTkUgMTogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAo bXlzaG9wIE1BVENIIENPTFVNTlMgKDEgQVMgY29sKSk7CkBAIC0xMDIyLDQgKzEwMjAsMzMwIEBA IFNFTEVDVCBzbmFtZSwgZG5hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihk ZXN0KSBXSEVSRSBzcmMudnByb3AxID4KIEVSUk9SOiAgc3VicXVlcmllcyB3aXRoaW4gR1JBUEhf VEFCTEUgcmVmZXJlbmNlIGFyZSBub3Qgc3VwcG9ydGVkCiBTRUxFQ1Qgc25hbWUsIGRuYW1lIEZS T00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMpLT4oZGVzdCkgV0hFUkUgb3V0X2RlZ3JlZShz cmMudm5hbWUpID4gKFNFTEVDVCBtYXgob3V0X2RlZ3JlZShubmFtZSkpIEZST00gR1JBUEhfVEFC TEUgKGcxIE1BVENIIChub2RlKSBDT0xVTU5TIChub2RlLnZuYW1lIEFTIG5uYW1lKSkpIENPTFVN TlMoc3JjLnZuYW1lIEFTIHNuYW1lLCBkZXN0LnZuYW1lIEFTIGRuYW1lKSk7CiBFUlJPUjogIHN1 YnF1ZXJpZXMgd2l0aGluIEdSQVBIX1RBQkxFIHJlZmVyZW5jZSBhcmUgbm90IHN1cHBvcnRlZAor LS0gTXVsdGktcGF0dGVybiBwYXRoIHRlc3RzIChjb21tYS1zZXBhcmF0ZWQgcGF0aCBwYXR0ZXJu cyBpbiBNQVRDSCkKKy0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogY3Jvc3MgcHJvZHVjdCBvZiBj dXN0b21lcnMgYW5kIG9yZGVycworLS0gKDMgY3VzdG9tZXJzIHggMyBvcmRlcnMgPSA5IHJvd3Ms IHByb2plY3RpbmcgYy5uYW1lIG9ubHkpCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNo b3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzKSwgKG8gSVMgb3JkZXJzKSBDT0xVTU5TIChjLm5hbWUg QVMgY3VzdG9tZXJfbmFtZSkpOworIGN1c3RvbWVyX25hbWUgCistLS0tLS0tLS0tLS0tLS0KKyBj dXN0b21lcjEKKyBjdXN0b21lcjIKKyBjdXN0b21lcjMKKyBjdXN0b21lcjEKKyBjdXN0b21lcjIK KyBjdXN0b21lcjMKKyBjdXN0b21lcjEKKyBjdXN0b21lcjIKKyBjdXN0b21lcjMKKyg5IHJvd3Mp CisKKy0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogb25lIHNpZGUgeWllbGRzIG5vIG1hdGNoIC0+ IGVtcHR5IHJlc3VsdAorU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wCisgICAgTUFU Q0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdOT05FWElTVEVOVCcpLCAobyBJ UyBvcmRlcnMpCisgICAgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsKKyBjdXN0 b21lcl9uYW1lIAorLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBCYXNpYyBtdWx0aS1w YXR0ZXJuOiAoYSktPihiKSwgKGIpLT4oYykgd2hlcmUgYiBpcyBzaGFyZWQKK1NFTEVDVCBhX25h bWUsIGJfbmFtZSwgY19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMg dmwxKS1bZTEgSVMgZWwxXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiktW2UyIElTIGVsMl0t PihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBi X25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBCWSBhX25hbWUsIGJfbmFtZSwgY19u YW1lOworIGFfbmFtZSB8IGJfbmFtZSB8IGNfbmFtZSAKKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0t LS0tCisgdjExICAgIHwgdjIyICAgIHwgdjMyCisoMSByb3cpCisKKy0tIE11bHRpLXBhdHRlcm4g d2l0aCBzYW1lIHN0YXJ0IHZlcnRleCByZWFjaGluZyBkaWZmZXJlbnQgZGVzdGluYXRpb25zCitT RUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1B VENIIChhIElTIHZsMSktW10tPihiIElTIHZsMiksCisgICAgICAgICAgKGEpLVtdLT4oYyBJUyB2 bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLCBj LnZuYW1lIEFTIGNfbmFtZSkKKykgT1JERVIgQlkgYV9uYW1lLCBiX25hbWUsIGNfbmFtZTsKKyBh X25hbWUgfCBiX25hbWUgfCBjX25hbWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYx MSAgICB8IHYyMiAgICB8IHYyMgorIHYxMSAgICB8IHYyMiAgICB8IHYzMQorIHYxMSAgICB8IHYy MiAgICB8IHYzMworIHYxMiAgICB8IHYyMSAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICB8IHYy MworKDUgcm93cykKKworLS0gTXVsdGktcGF0dGVybiB3aXRoIHRocmVlIHBhdHRlcm5zIHNoYXJp bmcgb25lIHZhcmlhYmxlCitTRUxFQ1QgYV9uYW1lLCBiMl9uYW1lLCBiM19uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIyIElTIHZsMiksCisgICAg ICAgICAgKGEpLVtdLT4oYjMgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1l LCBiMi52bmFtZSBBUyBiMl9uYW1lLCBiMy52bmFtZSBBUyBiM19uYW1lKQorKSBPUkRFUiBCWSBh X25hbWUsIGIyX25hbWUsIGIzX25hbWU7CisgYV9uYW1lIHwgYjJfbmFtZSB8IGIzX25hbWUgCist LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tCisgdjExICAgIHwgdjIyICAgICB8IHYyMgorIHYx MSAgICB8IHYyMiAgICAgfCB2MzEKKyB2MTEgICAgfCB2MjIgICAgIHwgdjMzCisgdjEyICAgIHwg djIxICAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICAgfCB2MjMKKyg1IHJvd3MpCisKKy0tIFNh bWUgdmFyaWFibGUgd2l0aCBzYW1lIGxhYmVsIChzaG91bGQgd29yaykKK1NFTEVDVCBhX25hbWUs IGJfbmFtZSwgY19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiBJUyB2bDIpLVtdLT4oYyBJUyB2bDMpCisg ICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLCBjLnZuYW1l IEFTIGNfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMzsKKyBhX25hbWUgfCBiX25hbWUgfCBjX25h bWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYxMSAgICB8IHYyMiAgICB8IHYzMgor KDEgcm93KQorCistLSBTYW1lIHZhcmlhYmxlIHdpdGggZGlmZmVyZW50IGxhYmVscyAoY29uZmxp Y3QgLSB3aGF0IGhhcHBlbnM/KQorU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUgRlJPTSBH UkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4oYiBJUyB2bDIpLAorICAg ICAgICAgIChiIElTIHZsMyktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFT IGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBC WSAxLCAyLCAzOworRVJST1I6ICBlbGVtZW50IHBhdHRlcm5zIHdpdGggc2FtZSB2YXJpYWJsZSBu YW1lICJiIiBidXQgZGlmZmVyZW50IGxhYmVsIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVk CistLSBTYW1lIHZhcmlhYmxlIHdpdGggbGFiZWwgT1IgZXhwcmVzc2lvbiAoYiBJUyB2bDJ8dmwz KQorU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAg ICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4oYiBJUyB2bDJ8dmwzKSwKKyAgICAgICAgICAoYiktW10t PihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBi X25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworIGFfbmFtZSB8 IGJfbmFtZSB8IGNfbmFtZSAKKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgdjExICAgIHwg djIyICAgIHwgdjMyCisgdjExICAgIHwgdjMzICAgIHwgdjMzCisgdjExICAgIHwgdjMzICAgIHwg djMzCisoMyByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnMgKG5vIHNoYXJlZCB2YXJp YWJsZXMpIC0gc2hvdWxkIHByb2R1Y2UgY3Jvc3MgcHJvZHVjdAorLS0gKGEpLT4oYikgYW5kIChj KS0+KGQpIGFyZSBpbmRlcGVuZGVudCwgcmVzdWx0IGlzIENhcnRlc2lhbiBwcm9kdWN0CistLSB2 bDEtPnZsMiBoYXMgMyBwYXRocywgdmwxLT52bDMgaGFzIDMgcGF0aHMsIHNvIGNyb3NzIHByb2R1 Y3QgPSAzIHggMyA9IDkgcm93cworU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUsIGRfbmFt ZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10tPihiIElTIHZs MiksCisgICAgICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENPTFVNTlMgKGEu dm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1l IEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEsIDIsIDMsIDQ7Cisg YV9uYW1lIHwgYl9uYW1lIHwgY19uYW1lIHwgZF9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0KKyB2MTEgICAgfCB2MjIgICAgfCB2MTEgICAgfCB2MjIKKyB2MTEgICAg fCB2MjIgICAgfCB2MTEgICAgfCB2MzEKKyB2MTEgICAgfCB2MjIgICAgfCB2MTEgICAgfCB2MzMK KyB2MTEgICAgfCB2MjIgICAgfCB2MTIgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIgICAgfCB2MTMg ICAgfCB2MjMKKyB2MTIgICAgfCB2MjEgICAgfCB2MTEgICAgfCB2MjIKKyB2MTIgICAgfCB2MjEg ICAgfCB2MTEgICAgfCB2MzEKKyB2MTIgICAgfCB2MjEgICAgfCB2MTEgICAgfCB2MzMKKyB2MTIg ICAgfCB2MjEgICAgfCB2MTIgICAgfCB2MjEKKyB2MTIgICAgfCB2MjEgICAgfCB2MTMgICAgfCB2 MjMKKyB2MTMgICAgfCB2MjMgICAgfCB2MTEgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMgICAgfCB2 MTEgICAgfCB2MzEKKyB2MTMgICAgfCB2MjMgICAgfCB2MTEgICAgfCB2MzMKKyB2MTMgICAgfCB2 MjMgICAgfCB2MTIgICAgfCB2MjEKKyB2MTMgICAgfCB2MjMgICAgfCB2MTMgICAgfCB2MjMKKygx NSByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnM6IEVYUExBSU4gc2hvdWxkIHNob3cg Y3Jvc3Mgam9pbiAoTmVzdGVkIExvb3Agd2l0aG91dCBqb2luIGNvbmRpdGlvbikKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUsIGRfbmFtZSBGUk9NIEdS QVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10tPihiIElTIHZsMiksCisgICAg ICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMg YV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1lIEFTIGNfbmFt ZSwgZC52bmFtZSBBUyBkX25hbWUpCispOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBNZXJnZSBKb2luCisgICAg ICAgICBNZXJnZSBDb25kOiAodjEuaWQgPSBlMV8yLmlkXzEpCisgICAgICAgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHYxX3BrZXkgb24gdjEK KyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKChlMV8yXzEuaWRf Ml8xID0gdjJfMS5pZDEpIEFORCAoZTFfMl8xLmlkXzJfMiA9IHYyXzEuaWQyKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogZTFfMl8xLmlkXzJfMSwgZTFfMl8xLmlkXzJfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUx XzIgZTFfMl8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHYyXzEuaWQxLCB2 Ml8xLmlkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHYyIHYyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHYxX3BrZXkgb24gdjEgdjFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gZTFfMl8xLmlkXzEpCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6IGUxXzIuaWRfMQorICAgICAgICAgICAgICAgLT4gIE1lcmdl IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICgoZTFfMi5pZF8yXzEgPSB2 Mi5pZDEpIEFORCAoZTFfMi5pZF8yXzIgPSB2Mi5pZDIpKQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlMV8yLmlkXzJf MSwgZTFfMi5pZF8yXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBlMV8yCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IHYyLmlkMSwgdjIuaWQyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdjIKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2gg Q29uZDogKGUxXzMuaWRfMyA9IHYzLmlkKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAoZTFfMy5pZF8xID0gdjFfMy5pZCkKKyAgICAgICAgICAgICAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUx XzMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVyZ2UgQ29uZDogKChlMV8yXzIuaWRfMl8xID0gdjJfMi5pZDEpIEFORCAoZTFfMl8yLmlk XzJfMiA9IHYyXzIuaWQyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogZTFfMl8yLmlkXzJfMSwgZTFfMl8yLmlkXzJfMgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUxXzIgZTFfMl8yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHYyXzIuaWQxLCB2 Ml8yLmlkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHYyIHYyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHYxX3BrZXkgb24gdjEgdjFfMgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZTFfMl8yLmlkXzEpCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHYxIHYxXzMKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdjMKKyg0OSByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnM6IHNpbmdsZSB2ZXJ0 ZXggcGF0dGVybnMgKG5vIGVkZ2VzKQorLS0gdmwxIGhhcyAzIHJvd3MgKHYxKSwgdmwzIGhhcyA2 IHJvd3MgKHYyK3YzKSwgY3Jvc3MgcHJvZHVjdCA9IDE4IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJf bmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSksIChiIElTIHZs MykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUpCisp IE9SREVSIEJZIDEsIDI7CisgYV9uYW1lIHwgYl9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0KKyB2 MTEgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIKKyB2MTEgICAgfCB2MjMKKyB2MTEgICAgfCB2MzEK KyB2MTEgICAgfCB2MzIKKyB2MTEgICAgfCB2MzMKKyB2MTIgICAgfCB2MjEKKyB2MTIgICAgfCB2 MjIKKyB2MTIgICAgfCB2MjMKKyB2MTIgICAgfCB2MzEKKyB2MTIgICAgfCB2MzIKKyB2MTIgICAg fCB2MzMKKyB2MTMgICAgfCB2MjEKKyB2MTMgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMKKyB2MTMg ICAgfCB2MzEKKyB2MTMgICAgfCB2MzIKKyB2MTMgICAgfCB2MzMKKygxOCByb3dzKQorCistLSBE aXNjb25uZWN0ZWQgcGF0dGVybnM6IHRocmVlIGluZGVwZW5kZW50IHBhdHRlcm5zICgzLXdheSBj cm9zcyBwcm9kdWN0KQorLS0gdmwxIGhhcyAzIHJvd3MsIHZsMiBoYXMgMyByb3dzLCB2bDMgaGFz IDYgcm93cyA9IDU0IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSwgY19uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKSwgKGIgSVMgdmwyKSwgKGMgSVMgdmwz KQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwgYy52 bmFtZSBBUyBjX25hbWUpCispIE9SREVSIEJZIDEsIDIsIDM7CisgYV9uYW1lIHwgYl9uYW1lIHwg Y19uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyB2MTEgICAgfCB2MjEgICAgfCB2 MjEKKyB2MTEgICAgfCB2MjEgICAgfCB2MjIKKyB2MTEgICAgfCB2MjEgICAgfCB2MjMKKyB2MTEg ICAgfCB2MjEgICAgfCB2MzEKKyB2MTEgICAgfCB2MjEgICAgfCB2MzIKKyB2MTEgICAgfCB2MjEg ICAgfCB2MzMKKyB2MTEgICAgfCB2MjIgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIgICAgfCB2MjIK KyB2MTEgICAgfCB2MjIgICAgfCB2MjMKKyB2MTEgICAgfCB2MjIgICAgfCB2MzEKKyB2MTEgICAg fCB2MjIgICAgfCB2MzIKKyB2MTEgICAgfCB2MjIgICAgfCB2MzMKKyB2MTEgICAgfCB2MjMgICAg fCB2MjEKKyB2MTEgICAgfCB2MjMgICAgfCB2MjIKKyB2MTEgICAgfCB2MjMgICAgfCB2MjMKKyB2 MTEgICAgfCB2MjMgICAgfCB2MzEKKyB2MTEgICAgfCB2MjMgICAgfCB2MzIKKyB2MTEgICAgfCB2 MjMgICAgfCB2MzMKKyB2MTIgICAgfCB2MjEgICAgfCB2MjEKKyB2MTIgICAgfCB2MjEgICAgfCB2 MjIKKyB2MTIgICAgfCB2MjEgICAgfCB2MjMKKyB2MTIgICAgfCB2MjEgICAgfCB2MzEKKyB2MTIg ICAgfCB2MjEgICAgfCB2MzIKKyB2MTIgICAgfCB2MjEgICAgfCB2MzMKKyB2MTIgICAgfCB2MjIg ICAgfCB2MjEKKyB2MTIgICAgfCB2MjIgICAgfCB2MjIKKyB2MTIgICAgfCB2MjIgICAgfCB2MjMK KyB2MTIgICAgfCB2MjIgICAgfCB2MzEKKyB2MTIgICAgfCB2MjIgICAgfCB2MzIKKyB2MTIgICAg fCB2MjIgICAgfCB2MzMKKyB2MTIgICAgfCB2MjMgICAgfCB2MjEKKyB2MTIgICAgfCB2MjMgICAg fCB2MjIKKyB2MTIgICAgfCB2MjMgICAgfCB2MjMKKyB2MTIgICAgfCB2MjMgICAgfCB2MzEKKyB2 MTIgICAgfCB2MjMgICAgfCB2MzIKKyB2MTIgICAgfCB2MjMgICAgfCB2MzMKKyB2MTMgICAgfCB2 MjEgICAgfCB2MjEKKyB2MTMgICAgfCB2MjEgICAgfCB2MjIKKyB2MTMgICAgfCB2MjEgICAgfCB2 MjMKKyB2MTMgICAgfCB2MjEgICAgfCB2MzEKKyB2MTMgICAgfCB2MjEgICAgfCB2MzIKKyB2MTMg ICAgfCB2MjEgICAgfCB2MzMKKyB2MTMgICAgfCB2MjIgICAgfCB2MjEKKyB2MTMgICAgfCB2MjIg ICAgfCB2MjIKKyB2MTMgICAgfCB2MjIgICAgfCB2MjMKKyB2MTMgICAgfCB2MjIgICAgfCB2MzEK KyB2MTMgICAgfCB2MjIgICAgfCB2MzIKKyB2MTMgICAgfCB2MjIgICAgfCB2MzMKKyB2MTMgICAg fCB2MjMgICAgfCB2MjEKKyB2MTMgICAgfCB2MjMgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMgICAg fCB2MjMKKyB2MTMgICAgfCB2MjMgICAgfCB2MzEKKyB2MTMgICAgfCB2MjMgICAgfCB2MzIKKyB2 MTMgICAgfCB2MjMgICAgfCB2MzMKKyg1NCByb3dzKQorCistLSBNaXhlZDogcGFydGlhbGx5IGNv bm5lY3RlZCArIGRpc2Nvbm5lY3RlZCBwYXR0ZXJucworLS0gKGEpLT4oYiksIChiKS0+KGMpIGFy ZSBjb25uZWN0ZWQgdmlhICdiJywgYnV0IChkKSBpcyBkaXNjb25uZWN0ZWQKKy0tIHZsMS0+dmwy LT52bDMgY2hhaW4gKyBpbmRlcGVuZGVudCB2bDEgdmVydGV4CitTRUxFQ1QgYV9uYW1lLCBiX25h bWUsIGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMg dmwxKS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiktW10tPihjIElTIHZsMyksCisgICAg ICAgICAgKGQgSVMgdmwxKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1l IEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBk X25hbWUpCispIE9SREVSIEJZIDEsIDIsIDMsIDQ7CisgYV9uYW1lIHwgYl9uYW1lIHwgY19uYW1l IHwgZF9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyB2MTEgICAg fCB2MjIgICAgfCB2MzIgICAgfCB2MTEKKyB2MTEgICAgfCB2MjIgICAgfCB2MzIgICAgfCB2MTIK KyB2MTEgICAgfCB2MjIgICAgfCB2MzIgICAgfCB2MTMKKygzIHJvd3MpCisKKy0tIERpc2Nvbm5l Y3RlZCBwYXR0ZXJuczogdmVyaWZ5IHJvdyBjb3VudCB3aXRoIGRpZmZlcmVudCBzaXplcworLS0g VXNpbmcgV0hFUkUgdG8gZmlsdGVyIG9uZSBzaWRlOiAoYSBJUyB2bDEgV0hFUkUgdnByb3AxID0g MTApIGhhcyAxIHJvdworLS0gQ3Jvc3Mgd2l0aCAoYiBJUyB2bDMpIHdoaWNoIGhhcyA2IHJvd3Mg PSA2IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAg IE1BVENIIChhIElTIHZsMSBXSEVSRSBhLnZwcm9wMSA9IDEwKSwgKGIgSVMgdmwzKQorICAgIENP TFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSkKKykgT1JERVIgQlkg MSwgMjsKKyBhX25hbWUgfCBiX25hbWUgCistLS0tLS0tLSstLS0tLS0tLQorIHYxMSAgICB8IHYy MQorIHYxMSAgICB8IHYyMgorIHYxMSAgICB8IHYyMworIHYxMSAgICB8IHYzMQorIHYxMSAgICB8 IHYzMgorIHYxMSAgICB8IHYzMworKDYgcm93cykKKworLS0gU3RhciBwYXR0ZXJuOiB0aHJlZSBw YXR0ZXJucyB3aXRoIHNoYXJlZCBodWIgJ2EnIChBLT5CLCBBLT5DLCBELT5BKQorLS0gQWxsIGpv aW5lZCB2aWEgJ2EnLCBOT1QgYSBjcm9zcyBwcm9kdWN0CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUs IGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMyksCisgICAgICAg ICAgKGQgSVMgdmwyKS1bXS0+KGEpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1lLCBkLnZuYW1l IEFTIGRfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMywgNDsKKyBhX25hbWUgfCBiX25hbWUgfCBj X25hbWUgfCBkX25hbWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYx MiAgICB8IHYyMSAgICB8IHYyMSAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICB8IHYyMyAgICB8 IHYyMworKDIgcm93cykKKwogLS0gbGVhdmUgdGhlIG9iamVjdHMgYmVoaW5kIGZvciBwZ191cGdy YWRlL3BnX2R1bXAgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBo X3RhYmxlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBoX3RhYmxlLnNxbAppbmRleCA0 ZmY5ODgxNzQyMC4uMDA4YTE4YjIxOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2dyYXBoX3RhYmxlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5z cWwKQEAgLTg5LDcgKzg5LDYgQEAgU0VMRUNUIGN1c3RvbWVyX25hbWUgRlJPTSBHUkFQSF9UQUJM RSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyBXSEVSRSBjLmFkZHIKIFNFTEVDVCBjdXN0 b21lcl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMg V0hFUkUgYy5hZGRyZXNzID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVyc10tPihvIElTIG9yZGVy cykgQ09MVU1OUyAoYy5uYW1leCBBUyBjdXN0b21lcl9uYW1lKSk7ICAtLSBlcnJvcgogU0VMRUNU IGN1c3RvbWVyX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3Rv bWVyc3xlbXBsb3llZXMgV0hFUkUgYy5hZGRyZXNzID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVy c10tPihvIElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0t IGVycm9yCiBTRUxFQ1QgY3VzdG9tZXJfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFU Q0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBjdXN0b21lcl9v cmRlcnNdIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21lcl9uYW1lKSk7ICAtLSBlcnJvcgotU0VM RUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyksIChv IElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0tIGVycm9y CiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggQ09MVU1OUyAoMSBBUyBj b2wpKTsgIC0tIGVycm9yLCBlbXB0eSBtYXRjaCBjbGF1c2UKIFNFTEVDVCBjdXN0b21lcl9uYW1l IEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMpLT57MSwyfShv IElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0tIGVycm9y CiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKChjIElTIGN1c3RvbWVy cyktPihvIElTIG9yZGVycykpIENPTFVNTlMgKGMubmFtZSkpOwpAQCAtNTgyLDQgKzU4MSwxMTcg QEAgU0VMRUNUICogRlJPTSBjdXN0b21lcnMgY28gV0hFUkUgY28uY3VzdG9tZXJfaWQgPSAoU0VM RUNUIGN1c3RvbWVyX2lkIEZST00gR1JBUEgKIFNFTEVDVCBzbmFtZSwgZG5hbWUgRlJPTSBHUkFQ SF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihkZXN0KSBXSEVSRSBzcmMudnByb3AxID4gKFNFTEVD VCBtYXgodjEudnByb3AxKSBGUk9NIHYxKSBDT0xVTU5TKHNyYy52bmFtZSBBUyBzbmFtZSwgZGVz dC52bmFtZSBBUyBkbmFtZSkpOwogU0VMRUNUIHNuYW1lLCBkbmFtZSBGUk9NIEdSQVBIX1RBQkxF IChnMSBNQVRDSCAoc3JjKS0+KGRlc3QpIFdIRVJFIG91dF9kZWdyZWUoc3JjLnZuYW1lKSA+IChT RUxFQ1QgbWF4KG91dF9kZWdyZWUobm5hbWUpKSBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAo bm9kZSkgQ09MVU1OUyAobm9kZS52bmFtZSBBUyBubmFtZSkpKSBDT0xVTU5TKHNyYy52bmFtZSBB UyBzbmFtZSwgZGVzdC52bmFtZSBBUyBkbmFtZSkpOwogCistLSBNdWx0aS1wYXR0ZXJuIHBhdGgg dGVzdHMgKGNvbW1hLXNlcGFyYXRlZCBwYXRoIHBhdHRlcm5zIGluIE1BVENIKQorLS0gZGlzY29u bmVjdGVkIHBhdHRlcm5zOiBjcm9zcyBwcm9kdWN0IG9mIGN1c3RvbWVycyBhbmQgb3JkZXJzCist LSAoMyBjdXN0b21lcnMgeCAzIG9yZGVycyA9IDkgcm93cywgcHJvamVjdGluZyBjLm5hbWUgb25s eSkKK1NFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21l cnMpLCAobyBJUyBvcmRlcnMpIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21lcl9uYW1lKSk7CisK Ky0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogb25lIHNpZGUgeWllbGRzIG5vIG1hdGNoIC0+IGVt cHR5IHJlc3VsdAorU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wCisgICAgTUFUQ0gg KGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdOT05FWElTVEVOVCcpLCAobyBJUyBv cmRlcnMpCisgICAgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsKKworLS0gQmFz aWMgbXVsdGktcGF0dGVybjogKGEpLT4oYiksIChiKS0+KGMpIHdoZXJlIGIgaXMgc2hhcmVkCitT RUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1B VENIIChhIElTIHZsMSktW2UxIElTIGVsMV0tPihiIElTIHZsMiksCisgICAgICAgICAgKGIpLVtl MiBJUyBlbDJdLT4oYyBJUyB2bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLCBjLnZuYW1lIEFTIGNfbmFtZSkKKykgT1JERVIgQlkgYV9uYW1lLCBi X25hbWUsIGNfbmFtZTsKKworLS0gTXVsdGktcGF0dGVybiB3aXRoIHNhbWUgc3RhcnQgdmVydGV4 IHJlYWNoaW5nIGRpZmZlcmVudCBkZXN0aW5hdGlvbnMKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSwg Y19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIg SVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZu YW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBP UkRFUiBCWSBhX25hbWUsIGJfbmFtZSwgY19uYW1lOworCistLSBNdWx0aS1wYXR0ZXJuIHdpdGgg dGhyZWUgcGF0dGVybnMgc2hhcmluZyBvbmUgdmFyaWFibGUKK1NFTEVDVCBhX25hbWUsIGIyX25h bWUsIGIzX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtd LT4oYjIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihiMyBJUyB2bDMpCisgICAgQ09MVU1O UyAoYS52bmFtZSBBUyBhX25hbWUsIGIyLnZuYW1lIEFTIGIyX25hbWUsIGIzLnZuYW1lIEFTIGIz X25hbWUpCispIE9SREVSIEJZIGFfbmFtZSwgYjJfbmFtZSwgYjNfbmFtZTsKKworLS0gU2FtZSB2 YXJpYWJsZSB3aXRoIHNhbWUgbGFiZWwgKHNob3VsZCB3b3JrKQorU0VMRUNUIGFfbmFtZSwgYl9u YW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtd LT4oYiBJUyB2bDIpLAorICAgICAgICAgIChiIElTIHZsMiktW10tPihjIElTIHZsMykKKyAgICBD T0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMg Y19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBTYW1lIHZhcmlhYmxlIHdpdGggZGlm ZmVyZW50IGxhYmVscyAoY29uZmxpY3QgLSB3aGF0IGhhcHBlbnM/KQorU0VMRUNUIGFfbmFtZSwg Yl9uYW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEp LVtdLT4oYiBJUyB2bDIpLAorICAgICAgICAgIChiIElTIHZsMyktW10tPihjIElTIHZsMykKKyAg ICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUg QVMgY19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBTYW1lIHZhcmlhYmxlIHdpdGgg bGFiZWwgT1IgZXhwcmVzc2lvbiAoYiBJUyB2bDJ8dmwzKQorU0VMRUNUIGFfbmFtZSwgYl9uYW1l LCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4o YiBJUyB2bDJ8dmwzKSwKKyAgICAgICAgICAoYiktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5T IChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1l KQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnMgKG5vIHNo YXJlZCB2YXJpYWJsZXMpIC0gc2hvdWxkIHByb2R1Y2UgY3Jvc3MgcHJvZHVjdAorLS0gKGEpLT4o YikgYW5kIChjKS0+KGQpIGFyZSBpbmRlcGVuZGVudCwgcmVzdWx0IGlzIENhcnRlc2lhbiBwcm9k dWN0CistLSB2bDEtPnZsMiBoYXMgMyBwYXRocywgdmwxLT52bDMgaGFzIDMgcGF0aHMsIHNvIGNy b3NzIHByb2R1Y3QgPSAzIHggMyA9IDkgcm93cworU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25h bWUsIGRfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10t PihiIElTIHZsMiksCisgICAgICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENP TFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAg ICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEsIDIs IDMsIDQ7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogRVhQTEFJTiBzaG91bGQgc2hvdyBj cm9zcyBqb2luIChOZXN0ZWQgTG9vcCB3aXRob3V0IGpvaW4gY29uZGl0aW9uKQorRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSwgZF9uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIgSVMgdmwyKSwKKyAgICAg ICAgICAoYyBJUyB2bDEpLVtdLT4oZCBJUyB2bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBh X25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1l LCBkLnZuYW1lIEFTIGRfbmFtZSkKKyk7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogc2lu Z2xlIHZlcnRleCBwYXR0ZXJucyAobm8gZWRnZXMpCistLSB2bDEgaGFzIDMgcm93cyAodjEpLCB2 bDMgaGFzIDYgcm93cyAodjIrdjMpLCBjcm9zcyBwcm9kdWN0ID0gMTggcm93cworU0VMRUNUIGFf bmFtZSwgYl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKSwg KGIgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJf bmFtZSkKKykgT1JERVIgQlkgMSwgMjsKKworLS0gRGlzY29ubmVjdGVkIHBhdHRlcm5zOiB0aHJl ZSBpbmRlcGVuZGVudCBwYXR0ZXJucyAoMy13YXkgY3Jvc3MgcHJvZHVjdCkKKy0tIHZsMSBoYXMg MyByb3dzLCB2bDIgaGFzIDMgcm93cywgdmwzIGhhcyA2IHJvd3MgPSA1NCByb3dzCitTRUxFQ1Qg YV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChh IElTIHZsMSksIChiIElTIHZsMiksIChjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFT IGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBC WSAxLCAyLCAzOworCistLSBNaXhlZDogcGFydGlhbGx5IGNvbm5lY3RlZCArIGRpc2Nvbm5lY3Rl ZCBwYXR0ZXJucworLS0gKGEpLT4oYiksIChiKS0+KGMpIGFyZSBjb25uZWN0ZWQgdmlhICdiJywg YnV0IChkKSBpcyBkaXNjb25uZWN0ZWQKKy0tIHZsMS0+dmwyLT52bDMgY2hhaW4gKyBpbmRlcGVu ZGVudCB2bDEgdmVydGV4CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSwgZF9uYW1lIEZS T00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIgSVMgdmwyKSwK KyAgICAgICAgICAoYiktW10tPihjIElTIHZsMyksCisgICAgICAgICAgKGQgSVMgdmwxKQorICAg IENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAg ICAgICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEs IDIsIDMsIDQ7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogdmVyaWZ5IHJvdyBjb3VudCB3 aXRoIGRpZmZlcmVudCBzaXplcworLS0gVXNpbmcgV0hFUkUgdG8gZmlsdGVyIG9uZSBzaWRlOiAo YSBJUyB2bDEgV0hFUkUgdnByb3AxID0gMTApIGhhcyAxIHJvdworLS0gQ3Jvc3Mgd2l0aCAoYiBJ UyB2bDMpIHdoaWNoIGhhcyA2IHJvd3MgPSA2IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSBG Uk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSBXSEVSRSBhLnZwcm9wMSA9 IDEwKSwgKGIgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1l IEFTIGJfbmFtZSkKKykgT1JERVIgQlkgMSwgMjsKKworLS0gU3RhciBwYXR0ZXJuOiB0aHJlZSBw YXR0ZXJucyB3aXRoIHNoYXJlZCBodWIgJ2EnIChBLT5CLCBBLT5DLCBELT5BKQorLS0gQWxsIGpv aW5lZCB2aWEgJ2EnLCBOT1QgYSBjcm9zcyBwcm9kdWN0CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUs IGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMyksCisgICAgICAg ICAgKGQgSVMgdmwyKS1bXS0+KGEpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1lLCBkLnZuYW1l IEFTIGRfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMywgNDsKKwogLS0gbGVhdmUgdGhlIG9iamVj dHMgYmVoaW5kIGZvciBwZ191cGdyYWRlL3BnX2R1bXAgdGVzdHMK --0000000000001afd9d06502d6c5a Content-Type: application/octet-stream; name="v1-0001-Multi-pattern-path-matching.patch" Content-Disposition: attachment; filename="v1-0001-Multi-pattern-path-matching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mocfekup1 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZW5zb24gQ2hvaSA8YXNzYW0yNThAZ21haWwuY29tPgpEYXRl OiBTdW4sIDIyIE1hciAyMDI2IDIyOjI0OjAwICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0gU1FM L1BHUTogU3VwcG9ydCBtdWx0aS1wYXR0ZXJuIHBhdGggbWF0Y2hpbmcgaW4KIEdSQVBIX1RBQkxF CgpFeHRlbmQgR1JBUEhfVEFCTEUgdG8gYWNjZXB0IG11bHRpcGxlIGNvbW1hLXNlcGFyYXRlZCBw YXRoIHBhdHRlcm5zIGluCnRoZSBNQVRDSCBjbGF1c2UuICBFbGVtZW50IHBhdHRlcm5zIGFyZSBw cm9jZXNzZWQgcGF0aC1ieS1wYXRoIGZvcgphZGphY2VuY3kgbGlua2luZzsgYWNyb3NzIHBhdGhz LCBlbGVtZW50IHZhcmlhYmxlcyB0aGF0IHNoYXJlIGEgbmFtZQphcmUgbWVyZ2VkIGludG8gdGhl IHNhbWUgcGF0aF9mYWN0b3IsIHNvIHNoYXJlZCB2YXJpYWJsZXMgZm9ybSBqb2luCnBvaW50cyBi ZXR3ZWVuIHBhdGhzIGFuZCB1bnJlbGF0ZWQgcGF0aHMgcHJvZHVjZSBhIGNyb3NzIHByb2R1Y3Qu ICBUaGUKcGFyc2VyLXNpZGUgcmVzdHJpY3Rpb24gaW4gdHJhbnNmb3JtUGF0aFBhdHRlcm5MaXN0 KCkgaXMgbGlmdGVkLgoKLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5j ICAgICB8ICAgOSAtCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVHcmFwaFRhYmxlLmMgICB8 IDI5NSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZ3JhcGhfdGFibGUub3V0IHwgMzI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JhcGhfdGFibGUuc3FsICAgICAgfCAxMTQgKysrKysrKysr Ky0KIDQgZmlsZXMgY2hhbmdlZCwgNTkyIGluc2VydGlvbnMoKyksIDE1NCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZ3JhcGh0YWJsZS5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2dyYXBodGFibGUuYwppbmRleCAzMGRkY2U1YWE5Zi4uODRj MTNlZThlYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ncmFwaHRhYmxl LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2dyYXBodGFibGUuYwpAQCAtMzMxLDE1 ICszMzEsNiBAQCB0cmFuc2Zvcm1QYXRoUGF0dGVybkxpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpwYXRoX3BhdHRlcm4pCiAJLyogR3JhbW1hciBkb2Vzbid0IGFsbG93IGVtcHR5IHBhdGgg cGF0dGVybiBsaXN0ICovCiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhfcGF0dGVybikgPiAwKTsK IAotCS8qCi0JICogV2UgZG8gbm90IHN1cHBvcnQgbXVsdGlwbGUgcGF0aCBwYXR0ZXJucyBpbiBv bmUgR1JBUEhfVEFCTEUgY2xhdXNlCi0JICogcmlnaHQgbm93LiBCdXQgd2UgbWF5IGRvIHNvIGlu IGZ1dHVyZS4KLQkgKi8KLQlpZiAobGlzdF9sZW5ndGgocGF0aF9wYXR0ZXJuKSAhPSAxKQotCQll cmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKLQkJCQkgZXJybXNnKCJtdWx0aXBsZSBwYXRoIHBhdHRlcm5zIGluIG9uZSBHUkFQSF9UQUJM RSBjbGF1c2Ugbm90IHN1cHBvcnRlZCIpKSk7Ci0KIAkvKgogCSAqIENvbGxlY3QgYWxsIHRoZSB2 YXJpYWJsZXMgaW4gdGhlIHBhdGggcGF0dGVybiBpbnRvIHRoZQogCSAqIEdyYXBoVGFibGVQYXJz ZVN0YXRlIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhbnkgbm9uLWxvY2FsIGVsZW1lbnQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYyBiL3NyYy9iYWNr ZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYwppbmRleCAyYzMxOTlkMzIzMC4uMDk5NTlm MWRkOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUu YworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVHcmFwaFRhYmxlLmMKQEAgLTkxLDcg KzkxLDcgQEAgc3RydWN0IHBhdGhfZWxlbWVudAogCiBzdGF0aWMgTm9kZSAqcmVwbGFjZV9wcm9w ZXJ0eV9yZWZzKE9pZCBwcm9wZ3JhcGhpZCwgTm9kZSAqbm9kZSwgY29uc3QgTGlzdCAqbWFwcGlu Z3MpOwogc3RhdGljIExpc3QgKmJ1aWxkX2VkZ2VfdmVydGV4X2xpbmtfcXVhbHMoSGVhcFR1cGxl IGVkZ2V0dXAsIGludCBlZGdlcnRpLCBpbnQgcmVmcnRpLCBPaWQgcmVmaWQsIEF0dHJOdW1iZXIg Y2F0YWxvZ19rZXlfYXR0bnVtLCBBdHRyTnVtYmVyIGNhdGFsb2dfcmVmX2F0dG51bSwgQXR0ck51 bWJlciBjYXRhbG9nX2Vxb3BfYXR0bnVtKTsKLXN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9xdWVyaWVz X2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxFbnRyeSAqcnRlLCBMaXN0ICplbGVtZW50X3BhdHRl cm5zKTsKK3N0YXRpYyBMaXN0ICpnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFu Z2VUYmxFbnRyeSAqcnRlLCBMaXN0ICpwYXRoX3BhdHRlcm5fbGlzdCk7CiBzdGF0aWMgUXVlcnkg KmdlbmVyYXRlX3F1ZXJ5X2Zvcl9ncmFwaF9wYXRoKFJhbmdlVGJsRW50cnkgKnJ0ZSwgTGlzdCAq cGF0aCk7CiBzdGF0aWMgTm9kZSAqZ2VuZXJhdGVfc2V0b3BfZnJvbV9wYXRocXVlcmllcyhMaXN0 ICpwYXRocXVlcmllcywgTGlzdCAqKnJ0YWJsZSwgTGlzdCAqKnRhcmdldGxpc3QpOwogc3RhdGlj IExpc3QgKmdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybl9yZWN1cnNlKFJhbmdlVGJs RW50cnkgKnJ0ZSwgTGlzdCAqcGF0aHF1ZXJpZXMsIExpc3QgKmN1cl9wYXRoLCBMaXN0ICpwYXRo X3BhdHRlcm5fbGlzdHMsIGludCBlbGVtcG9zKTsKQEAgLTExMCwxNSArMTEwLDEyIEBAIHJld3Jp dGVHcmFwaFRhYmxlKFF1ZXJ5ICpwYXJzZXRyZWUsIGludCBydF9pbmRleCkKIHsKIAlSYW5nZVRi bEVudHJ5ICpydGU7CiAJUXVlcnkJICAgKmdyYXBoX3RhYmxlX3F1ZXJ5OwotCUxpc3QJICAgKnBh dGhfcGF0dGVybjsKIAlMaXN0CSAgICpwYXRocXVlcmllcyA9IE5JTDsKIAogCXJ0ZSA9IHJ0X2Zl dGNoKHJ0X2luZGV4LCBwYXJzZXRyZWUtPnJ0YWJsZSk7CiAKLQlBc3NlcnQobGlzdF9sZW5ndGgo cnRlLT5ncmFwaF9wYXR0ZXJuLT5wYXRoX3BhdHRlcm5fbGlzdCkgPT0gMSk7Ci0KLQlwYXRoX3Bh dHRlcm4gPSBsaW5pdGlhbChydGUtPmdyYXBoX3BhdHRlcm4tPnBhdGhfcGF0dGVybl9saXN0KTsK LQlwYXRocXVlcmllcyA9IGdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybihydGUsIHBh dGhfcGF0dGVybik7CisJcGF0aHF1ZXJpZXMgPSBnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3Bh dHRlcm4ocnRlLAorCQkJCQkJCQkJCQkJCXJ0ZS0+Z3JhcGhfcGF0dGVybi0+cGF0aF9wYXR0ZXJu X2xpc3QpOwogCWdyYXBoX3RhYmxlX3F1ZXJ5ID0gZ2VuZXJhdGVfdW5pb25fZnJvbV9wYXRocXVl cmllcygmcGF0aHF1ZXJpZXMpOwogCiAJQWNxdWlyZVJld3JpdGVMb2NrcyhncmFwaF90YWJsZV9x dWVyeSwgdHJ1ZSwgZmFsc2UpOwpAQCAtMTcxLDE2NyArMTY4LDE4MSBAQCByZXdyaXRlR3JhcGhU YWJsZShRdWVyeSAqcGFyc2V0cmVlLCBpbnQgcnRfaW5kZXgpCiAgKiB0aGUgR1JBUEhfVEFCTEUg Y2xhdXNlIHJlcHJlc2VudGVkIGJ5IGdpdmVuICdydGUnLgogICovCiBzdGF0aWMgTGlzdCAqCi1n ZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VUYmxFbnRyeSAqcnRlLCBMaXN0 ICpwYXRoX3BhdHRlcm4pCitnZW5lcmF0ZV9xdWVyaWVzX2Zvcl9wYXRoX3BhdHRlcm4oUmFuZ2VU YmxFbnRyeSAqcnRlLCBMaXN0ICpwYXRoX3BhdHRlcm5fbGlzdCkKIHsKIAlMaXN0CSAgICpwYXRo cXVlcmllcyA9IE5JTDsKIAlMaXN0CSAgICpwYXRoX2VsZW1fbGlzdHMgPSBOSUw7CiAJaW50CQkJ ZmFjdG9ycG9zID0gMDsKIAlMaXN0CSAgICpwYXRoX2ZhY3RvcnMgPSBOSUw7Ci0Jc3RydWN0IHBh dGhfZmFjdG9yICpwcmV2X3BmID0gTlVMTDsKIAotCUFzc2VydChsaXN0X2xlbmd0aChwYXRoX3Bh dHRlcm4pID4gMCk7CisJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhfcGF0dGVybl9saXN0KSA+IDAp OwogCiAJLyoKLQkgKiBDcmVhdGUgYSBsaXN0IG9mIHBhdGggZmFjdG9ycyByZXByZXNlbnRpbmcg dGhlIGdpdmVuIHBhdGggcGF0dGVybgorCSAqIENyZWF0ZSBhIGxpc3Qgb2YgcGF0aCBmYWN0b3Jz IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGF0aCBwYXR0ZXJucwogCSAqIGxpbmtpbmcgZWRnZSBw YXRoIGZhY3RvcnMgdG8gdGhlaXIgYWRqYWNlbnQgdmVydGV4IHBhdGggZmFjdG9ycy4KIAkgKgot CSAqIFdoaWxlIGRvaW5nIHRoYXQgbWVyZ2UgZWxlbWVudCBwYXR0ZXJucyB3aXRoIHRoZSBzYW1l IHZhcmlhYmxlIG5hbWUKLQkgKiBpbnRvIGEgc2luZ2xlIHBhdGhfZmFjdG9yLgorCSAqIEVhY2gg cGF0aCBwYXR0ZXJuIChwYXRoIHRlcm0pIGlzIHByb2Nlc3NlZCBpbmRlcGVuZGVudGx5IGZvciBh ZGphY2VuY3kKKwkgKiBsaW5raW5nOyBwcmV2X3BmIGlzIHJlc2V0IGF0IHRoZSBzdGFydCBvZiBl dmVyeSBwYXRoIHNvIHRoYXQgdGhlIGxhc3QKKwkgKiBlbGVtZW50IG9mIG9uZSBwYXRoIGlzIG5v dCB0cmVhdGVkIGFzIGFkamFjZW50IHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisJICogdGhlIG5l eHQgb25lLiAgQWNyb3NzIHBhdGhzLCBlbGVtZW50IHBhdHRlcm5zIHdpdGggdGhlIHNhbWUgdmFy aWFibGUKKwkgKiBuYW1lIGFyZSBzdGlsbCBtZXJnZWQgaW50byBhIHNpbmdsZSBwYXRoX2ZhY3Rv ciwgc28gc2hhcmVkIHZhcmlhYmxlcworCSAqIGFjdCBhcyBqb2luIHBvaW50cyBiZXR3ZWVuIHBh dGhzIGFuZCB1bnJlbGF0ZWQgcGF0aHMgcHJvZHVjZSBhIGNyb3NzCisJICogcHJvZHVjdC4KIAkg Ki8KLQlmb3JlYWNoX25vZGUoR3JhcGhFbGVtZW50UGF0dGVybiwgZ2VwLCBwYXRoX3BhdHRlcm4p CisJZm9yZWFjaF9ub2RlKExpc3QsIHBhdGhfcGF0dGVybiwgcGF0aF9wYXR0ZXJuX2xpc3QpCiAJ ewotCQlzdHJ1Y3QgcGF0aF9mYWN0b3IgKnBmID0gTlVMTDsKLQotCQkvKgotCQkgKiBVbnN1cHBv cnRlZCBjb25kaXRpb25zIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBwYXJzZXIKLQkJ ICogaXRzZWxmLiBXZSBoYXZlIGNvcnJlc3BvbmRpbmcgQXNzZXJ0cyBoZXJlIHRvIGRvY3VtZW50 IHRoZQotCQkgKiBhc3N1bXB0aW9ucyBpbiB0aGlzIGNvZGUuCi0JCSAqLwotCQlBc3NlcnQoZ2Vw LT5raW5kID09IFZFUlRFWF9QQVRURVJOIHx8IElTX0VER0VfUEFUVEVSTihnZXAtPmtpbmQpKTsK LQkJQXNzZXJ0KCFnZXAtPnF1YW50aWZpZXIpOworCQlzdHJ1Y3QgcGF0aF9mYWN0b3IgKnByZXZf cGYgPSBOVUxMOwogCi0JCWZvcmVhY2hfcHRyKHN0cnVjdCBwYXRoX2ZhY3Rvciwgb3RoZXIsIHBh dGhfZmFjdG9ycykKKwkJZm9yZWFjaF9ub2RlKEdyYXBoRWxlbWVudFBhdHRlcm4sIGdlcCwgcGF0 aF9wYXR0ZXJuKQogCQl7Ci0JCQlpZiAoZ2VwLT52YXJpYWJsZSAmJiBvdGhlci0+dmFyaWFibGUg JiYKLQkJCQlzdHJjbXAoZ2VwLT52YXJpYWJsZSwgb3RoZXItPnZhcmlhYmxlKSA9PSAwKQotCQkJ ewotCQkJCWlmIChvdGhlci0+a2luZCAhPSBnZXAtPmtpbmQpCi0JCQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCi0JCQkJCQkJIGVy cm1zZygiZWxlbWVudCBwYXR0ZXJucyB3aXRoIHNhbWUgdmFyaWFibGUgbmFtZSBcIiVzXCIgYnV0 IGRpZmZlcmVudCBlbGVtZW50IHBhdHRlcm4gdHlwZXMiLAotCQkJCQkJCQkJZ2VwLT52YXJpYWJs ZSkpKTsKKwkJCXN0cnVjdCBwYXRoX2ZhY3RvciAqcGYgPSBOVUxMOwogCi0JCQkJLyoKLQkJCQkg KiBJZiBib3RoIHRoZSBlbGVtZW50IHBhdHRlcm5zIGhhdmUgbGFiZWwgZXhwcmVzc2lvbnMsIHRo ZXkKLQkJCQkgKiBuZWVkIHRvIGJlIGNvbmp1bmN0ZWQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQg cmlnaHQgbm93LgotCQkJCSAqCi0JCQkJICogSG93ZXZlciwgYW4gZW1wdHkgbGFiZWwgZXhwcmVz c2lvbiBtZWFucyBhbGwgbGFiZWxzLgotCQkJCSAqIENvbmp1bmN0aW9uIG9mIGFueSBsYWJlbCBl eHByZXNzaW9uIHdpdGggYWxsIGxhYmVscyBpcyB0aGUKLQkJCQkgKiBleHByZXNzaW9uIGl0c2Vs Zi4gSGVuY2UgaWYgb25seSBvbmUgb2YgdGhlIHR3byBlbGVtZW50Ci0JCQkJICogcGF0dGVybnMg aGFzIGEgbGFiZWwgZXhwcmVzc2lvbiB1c2UgdGhhdCBleHByZXNzaW9uLgotCQkJCSAqLwotCQkJ CWlmICghb3RoZXItPmxhYmVsZXhwcikKLQkJCQkJb3RoZXItPmxhYmVsZXhwciA9IGdlcC0+bGFi ZWxleHByOwotCQkJCWVsc2UgaWYgKGdlcC0+bGFiZWxleHByICYmICFlcXVhbChvdGhlci0+bGFi ZWxleHByLCBnZXAtPmxhYmVsZXhwcikpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJCSBlcnJtc2coImVs ZW1lbnQgcGF0dGVybnMgd2l0aCBzYW1lIHZhcmlhYmxlIG5hbWUgXCIlc1wiIGJ1dCBkaWZmZXJl bnQgbGFiZWwgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiLAotCQkJCQkJCQkJZ2VwLT52 YXJpYWJsZSkpKTsKKwkJCS8qCisJCQkgKiBVbnN1cHBvcnRlZCBjb25kaXRpb25zIHNob3VsZCBo YXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBwYXJzZXIKKwkJCSAqIGl0c2VsZi4gV2UgaGF2ZSBjb3Jy ZXNwb25kaW5nIEFzc2VydHMgaGVyZSB0byBkb2N1bWVudCB0aGUKKwkJCSAqIGFzc3VtcHRpb25z IGluIHRoaXMgY29kZS4KKwkJCSAqLworCQkJQXNzZXJ0KGdlcC0+a2luZCA9PSBWRVJURVhfUEFU VEVSTiB8fCBJU19FREdFX1BBVFRFUk4oZ2VwLT5raW5kKSk7CisJCQlBc3NlcnQoIWdlcC0+cXVh bnRpZmllcik7CiAKLQkJCQkvKgotCQkJCSAqIElmIHR3byBlbGVtZW50IHBhdHRlcm5zIGhhdmUg dGhlIHNhbWUgdmFyaWFibGUgbmFtZSwgdGhleQotCQkJCSAqIHJlcHJlc2VudCB0aGUgc2FtZSBz ZXQgb2YgZ3JhcGggZWxlbWVudHMgYW5kIGhlbmNlIGFyZQotCQkJCSAqIGNvbnN0cmFpbmVkIGJ5 IGNvbmRpdGlvbnMgZnJvbSBib3RoIHRoZSBlbGVtZW50IHBhdHRlcm5zLgotCQkJCSAqLwotCQkJ CWlmICghb3RoZXItPndoZXJlQ2xhdXNlKQotCQkJCQlvdGhlci0+d2hlcmVDbGF1c2UgPSBnZXAt PndoZXJlQ2xhdXNlOwotCQkJCWVsc2UgaWYgKGdlcC0+d2hlcmVDbGF1c2UpCi0JCQkJCW90aGVy LT53aGVyZUNsYXVzZSA9IChOb2RlICopIG1ha2VCb29sRXhwcihBTkRfRVhQUiwKLQkJCQkJCQkJ CQkJCQkJCSAgIGxpc3RfbWFrZTIob3RoZXItPndoZXJlQ2xhdXNlLCBnZXAtPndoZXJlQ2xhdXNl KSwKLQkJCQkJCQkJCQkJCQkJCSAgIC0xKTsKLQkJCQlwZiA9IG90aGVyOwotCQkJCWJyZWFrOwot CQkJfQotCQl9CisJCQlmb3JlYWNoX3B0cihzdHJ1Y3QgcGF0aF9mYWN0b3IsIG90aGVyLCBwYXRo X2ZhY3RvcnMpCisJCQl7CisJCQkJaWYgKGdlcC0+dmFyaWFibGUgJiYgb3RoZXItPnZhcmlhYmxl ICYmCisJCQkJCXN0cmNtcChnZXAtPnZhcmlhYmxlLCBvdGhlci0+dmFyaWFibGUpID09IDApCisJ CQkJeworCQkJCQlpZiAob3RoZXItPmtpbmQgIT0gZ2VwLT5raW5kKQorCQkJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJ CQkJCSBlcnJtc2coImVsZW1lbnQgcGF0dGVybnMgd2l0aCBzYW1lIHZhcmlhYmxlIG5hbWUgXCIl c1wiIGJ1dCBkaWZmZXJlbnQgZWxlbWVudCBwYXR0ZXJuIHR5cGVzIiwKKwkJCQkJCQkJCQlnZXAt PnZhcmlhYmxlKSkpOwogCi0JCWlmICghcGYpCi0JCXsKLQkJCXBmID0gcGFsbG9jMF9vYmplY3Qo c3RydWN0IHBhdGhfZmFjdG9yKTsKLQkJCXBmLT5mYWN0b3Jwb3MgPSBmYWN0b3Jwb3MrKzsKLQkJ CXBmLT5raW5kID0gZ2VwLT5raW5kOwotCQkJcGYtPmxhYmVsZXhwciA9IGdlcC0+bGFiZWxleHBy OwotCQkJcGYtPnZhcmlhYmxlID0gZ2VwLT52YXJpYWJsZTsKLQkJCXBmLT53aGVyZUNsYXVzZSA9 IGdlcC0+d2hlcmVDbGF1c2U7Ci0KLQkJCXBhdGhfZmFjdG9ycyA9IGxhcHBlbmQocGF0aF9mYWN0 b3JzLCBwZik7Ci0JCX0KKwkJCQkJLyoKKwkJCQkJICogSWYgYm90aCB0aGUgZWxlbWVudCBwYXR0 ZXJucyBoYXZlIGxhYmVsIGV4cHJlc3Npb25zLAorCQkJCQkgKiB0aGV5IG5lZWQgdG8gYmUgY29u anVuY3RlZCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAorCQkJCQkgKiByaWdodCBub3cuCisJCQkJ CSAqCisJCQkJCSAqIEhvd2V2ZXIsIGFuIGVtcHR5IGxhYmVsIGV4cHJlc3Npb24gbWVhbnMgYWxs IGxhYmVscy4KKwkJCQkJICogQ29uanVuY3Rpb24gb2YgYW55IGxhYmVsIGV4cHJlc3Npb24gd2l0 aCBhbGwgbGFiZWxzIGlzCisJCQkJCSAqIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gSGVuY2UgaWYg b25seSBvbmUgb2YgdGhlIHR3bworCQkJCQkgKiBlbGVtZW50IHBhdHRlcm5zIGhhcyBhIGxhYmVs IGV4cHJlc3Npb24gdXNlIHRoYXQKKwkJCQkJICogZXhwcmVzc2lvbi4KKwkJCQkJICovCisJCQkJ CWlmICghb3RoZXItPmxhYmVsZXhwcikKKwkJCQkJCW90aGVyLT5sYWJlbGV4cHIgPSBnZXAtPmxh YmVsZXhwcjsKKwkJCQkJZWxzZSBpZiAoZ2VwLT5sYWJlbGV4cHIgJiYgIWVxdWFsKG90aGVyLT5s YWJlbGV4cHIsIGdlcC0+bGFiZWxleHByKSkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJIGVycm1z ZygiZWxlbWVudCBwYXR0ZXJucyB3aXRoIHNhbWUgdmFyaWFibGUgbmFtZSBcIiVzXCIgYnV0IGRp ZmZlcmVudCBsYWJlbCBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCIsCisJCQkJCQkJCQkJ Z2VwLT52YXJpYWJsZSkpKTsKIAotCQkvKgotCQkgKiBTZXR1cCBsaW5rcyB0byB0aGUgcHJldmlv dXMgcGF0aCBmYWN0b3IgaW4gdGhlIHBhdGguCi0JCSAqCi0JCSAqIElmIHRoZSBwcmV2aW91cyBw YXRoIGZhY3RvciByZXByZXNlbnRzIGFuIGVkZ2UsIHRoaXMgcGF0aCBmYWN0b3IKLQkJICogcmVw cmVzZW50cyBhbiBhZGphY2VudCB2ZXJ0ZXg7IHRoZSBzb3VyY2UgdmVydGV4IGZvciBhbiBlZGdl Ci0JCSAqIHBvaW50aW5nIGxlZnQgb3IgdGhlIGRlc3RpbmF0aW9uIHZlcnRleCBmb3IgYW4gZWRn ZSBwb2ludGluZyByaWdodC4KLQkJICogSWYgdGhpcyBwYXRoIGZhY3RvciByZXByZXNlbnRzIGFu IGVkZ2UsIHRoZSBwcmV2aW91cyBwYXRoIGZhY3RvcgotCQkgKiByZXByZXNlbnRzIGFuIGFkamFj ZW50IHZlcnRleDsgc291cmNlIHZlcnRleCBmb3IgYW4gZWRnZSBwb2ludGluZwotCQkgKiByaWdo dCBvciB0aGUgZGVzdGluYXRpb24gdmVydGV4IGZvciBhbiBlZGdlIHBvaW50aW5nIGxlZnQuCi0J CSAqCi0JCSAqIEVkZ2UgcG9pbnRpbmcgaW4gYW55IGRpcmVjdGlvbiBpcyB0cmVhdGVkIHNpbWls YXIgdG8gdGhhdCBwb2ludGluZwotCQkgKiBpbiByaWdodCBkaXJlY3Rpb24gaGVyZS4gIFdoZW4g Y29uc3RydWN0aW5nIGEgcXVlcnkgaW4KLQkJICogZ2VuZXJhdGVfcXVlcnlfZm9yX2dyYXBoX3Bh dGgoKSwgd2Ugd2lsbCB0cnkgbGlua3MgaW4gYm90aCB0aGUKLQkJICogZGlyZWN0aW9ucy4KLQkJ ICoKLQkJICogSWYgbXVsdGlwbGUgZWRnZSBwYXR0ZXJucyBzaGFyZSB0aGUgc2FtZSB2YXJpYWJs ZSBuYW1lLCB0aGV5Ci0JCSAqIGNvbnN0cmFpbiB0aGUgYWRqYWNlbnQgdmVydGV4IHBhdHRlcm5z IHNpbmNlIGFuIGVkZ2UgY2FuIGNvbm5lY3QKLQkJICogb25seSBvbmUgcGFpciBvZiB2ZXJ0ZXhl cy4gVGhlc2UgYWRqYWNlbnQgdmVydGV4IHBhdHRlcm5zIG5lZWQgdG8KLQkJICogYmUgbWVyZ2Vk IGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZSBkaWZmZXJlbnQgdmFyaWFibGVzLiBTdWNoIGVsZW1lbnQK LQkJICogcGF0dGVybnMgZm9ybSBhIHdhbGsgb2YgZ3JhcGggd2hlcmUgdmVydGV4IGFuZCBlZGdl cyBhcmUgcmVwZWF0ZWQuCi0JCSAqIEZvciBleGFtcGxlLCBpbiAoYSktW2JdLT4oYyk8LVtiXS0o ZCksIChhKSBhbmQgKGQpIHJlcHJlc2VudCB0aGUKLQkJICogc2FtZSB2ZXJ0ZXggZWxlbWVudC4g VGhpcyBpcyBzbGlnaHRseSBoYXJkZXIgdG8gaW1wbGVtZW50IGFuZAotCQkgKiBwcm9iYWJseSBs ZXNzIHVzZWZ1bC4gSGVuY2Ugbm90IHN1cHBvcnRlZCBmb3Igbm93LgotCQkgKi8KLQkJaWYgKHBy ZXZfcGYpCi0JCXsKLQkJCWlmIChwcmV2X3BmLT5raW5kID09IEVER0VfUEFUVEVSTl9SSUdIVCB8 fCBwcmV2X3BmLT5raW5kID09IEVER0VfUEFUVEVSTl9BTlkpCi0JCQl7Ci0JCQkJQXNzZXJ0KCFJ U19FREdFX1BBVFRFUk4ocGYtPmtpbmQpKTsKLQkJCQlpZiAocHJldl9wZi0+ZGVzdF9wZiAmJiBw cmV2X3BmLT5kZXN0X3BmICE9IHBmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFu IGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3lj bGljIHBhdHRlcm4iKSk7Ci0JCQkJcHJldl9wZi0+ZGVzdF9wZiA9IHBmOwotCQkJfQotCQkJZWxz ZSBpZiAocHJldl9wZi0+a2luZCA9PSBFREdFX1BBVFRFUk5fTEVGVCkKLQkJCXsKLQkJCQlBc3Nl cnQoIUlTX0VER0VfUEFUVEVSTihwZi0+a2luZCkpOwotCQkJCWlmIChwcmV2X3BmLT5zcmNfcGYg JiYgcHJldl9wZi0+c3JjX3BmICE9IHBmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2co ImFuIGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEg Y3ljbGljIHBhdHRlcm4iKSk7Ci0JCQkJcHJldl9wZi0+c3JjX3BmID0gcGY7Ci0JCQl9Ci0JCQll bHNlCi0JCQl7Ci0JCQkJQXNzZXJ0KHByZXZfcGYtPmtpbmQgPT0gVkVSVEVYX1BBVFRFUk4pOwot CQkJCUFzc2VydChJU19FREdFX1BBVFRFUk4ocGYtPmtpbmQpKTsKKwkJCQkJLyoKKwkJCQkJICog SWYgdHdvIGVsZW1lbnQgcGF0dGVybnMgaGF2ZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lLAorCQkJ CQkgKiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBzZXQgb2YgZ3JhcGggZWxlbWVudHMgYW5kIGhl bmNlCisJCQkJCSAqIGFyZSBjb25zdHJhaW5lZCBieSBjb25kaXRpb25zIGZyb20gYm90aCB0aGUg ZWxlbWVudAorCQkJCQkgKiBwYXR0ZXJucy4KKwkJCQkJICovCisJCQkJCWlmICghb3RoZXItPndo ZXJlQ2xhdXNlKQorCQkJCQkJb3RoZXItPndoZXJlQ2xhdXNlID0gZ2VwLT53aGVyZUNsYXVzZTsK KwkJCQkJZWxzZSBpZiAoZ2VwLT53aGVyZUNsYXVzZSkKKwkJCQkJCW90aGVyLT53aGVyZUNsYXVz ZSA9IChOb2RlICopIG1ha2VCb29sRXhwcihBTkRfRVhQUiwKKwkJCQkJCQkJCQkJCQkJCQkgICBs aXN0X21ha2UyKG90aGVyLT53aGVyZUNsYXVzZSwgZ2VwLT53aGVyZUNsYXVzZSksCisJCQkJCQkJ CQkJCQkJCQkJICAgLTEpOworCQkJCQlwZiA9IG90aGVyOworCQkJCQlicmVhazsKKwkJCQl9CiAJ CQl9CiAKLQkJCWlmIChwZi0+a2luZCA9PSBFREdFX1BBVFRFUk5fUklHSFQgfHwgcGYtPmtpbmQg PT0gRURHRV9QQVRURVJOX0FOWSkKLQkJCXsKLQkJCQlBc3NlcnQoIUlTX0VER0VfUEFUVEVSTihw cmV2X3BmLT5raW5kKSk7Ci0JCQkJaWYgKHBmLT5zcmNfcGYgJiYgcGYtPnNyY19wZiAhPSBwcmV2 X3BmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElE X09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFuIGVkZ2UgY2Fubm90IGNvbm5l Y3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBhdHRlcm4iKSk7Ci0J CQkJcGYtPnNyY19wZiA9IHByZXZfcGY7Ci0JCQl9Ci0JCQllbHNlIGlmIChwZi0+a2luZCA9PSBF REdFX1BBVFRFUk5fTEVGVCkKKwkJCWlmICghcGYpCiAJCQl7Ci0JCQkJQXNzZXJ0KCFJU19FREdF X1BBVFRFUk4ocHJldl9wZi0+a2luZCkpOwotCQkJCWlmIChwZi0+ZGVzdF9wZiAmJiBwZi0+ZGVz dF9wZiAhPSBwcmV2X3BmKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkJCQllcnJtc2coImFuIGVkZ2Ug Y2Fubm90IGNvbm5lY3QgbW9yZSB0aGFuIHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBh dHRlcm4iKSk7Ci0JCQkJcGYtPmRlc3RfcGYgPSBwcmV2X3BmOworCQkJCXBmID0gcGFsbG9jMF9v YmplY3Qoc3RydWN0IHBhdGhfZmFjdG9yKTsKKwkJCQlwZi0+ZmFjdG9ycG9zID0gZmFjdG9ycG9z Kys7CisJCQkJcGYtPmtpbmQgPSBnZXAtPmtpbmQ7CisJCQkJcGYtPmxhYmVsZXhwciA9IGdlcC0+ bGFiZWxleHByOworCQkJCXBmLT52YXJpYWJsZSA9IGdlcC0+dmFyaWFibGU7CisJCQkJcGYtPndo ZXJlQ2xhdXNlID0gZ2VwLT53aGVyZUNsYXVzZTsKKworCQkJCXBhdGhfZmFjdG9ycyA9IGxhcHBl bmQocGF0aF9mYWN0b3JzLCBwZik7CiAJCQl9Ci0JCQllbHNlCisKKwkJCS8qCisJCQkgKiBTZXR1 cCBsaW5rcyB0byB0aGUgcHJldmlvdXMgcGF0aCBmYWN0b3IgaW4gdGhlIHBhdGguCisJCQkgKgor CQkJICogSWYgdGhlIHByZXZpb3VzIHBhdGggZmFjdG9yIHJlcHJlc2VudHMgYW4gZWRnZSwgdGhp cyBwYXRoCisJCQkgKiBmYWN0b3IgcmVwcmVzZW50cyBhbiBhZGphY2VudCB2ZXJ0ZXg7IHRoZSBz b3VyY2UgdmVydGV4IGZvciBhbgorCQkJICogZWRnZSBwb2ludGluZyBsZWZ0IG9yIHRoZSBkZXN0 aW5hdGlvbiB2ZXJ0ZXggZm9yIGFuIGVkZ2UKKwkJCSAqIHBvaW50aW5nIHJpZ2h0LiBJZiB0aGlz IHBhdGggZmFjdG9yIHJlcHJlc2VudHMgYW4gZWRnZSwgdGhlCisJCQkgKiBwcmV2aW91cyBwYXRo IGZhY3RvciByZXByZXNlbnRzIGFuIGFkamFjZW50IHZlcnRleDsgc291cmNlCisJCQkgKiB2ZXJ0 ZXggZm9yIGFuIGVkZ2UgcG9pbnRpbmcgcmlnaHQgb3IgdGhlIGRlc3RpbmF0aW9uIHZlcnRleCBm b3IKKwkJCSAqIGFuIGVkZ2UgcG9pbnRpbmcgbGVmdC4KKwkJCSAqCisJCQkgKiBFZGdlIHBvaW50 aW5nIGluIGFueSBkaXJlY3Rpb24gaXMgdHJlYXRlZCBzaW1pbGFyIHRvIHRoYXQKKwkJCSAqIHBv aW50aW5nIGluIHJpZ2h0IGRpcmVjdGlvbiBoZXJlLiAgV2hlbiBjb25zdHJ1Y3RpbmcgYSBxdWVy eSBpbgorCQkJICogZ2VuZXJhdGVfcXVlcnlfZm9yX2dyYXBoX3BhdGgoKSwgd2Ugd2lsbCB0cnkg bGlua3MgaW4gYm90aCB0aGUKKwkJCSAqIGRpcmVjdGlvbnMuCisJCQkgKgorCQkJICogSWYgbXVs dGlwbGUgZWRnZSBwYXR0ZXJucyBzaGFyZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lLCB0aGV5CisJ CQkgKiBjb25zdHJhaW4gdGhlIGFkamFjZW50IHZlcnRleCBwYXR0ZXJucyBzaW5jZSBhbiBlZGdl IGNhbgorCQkJICogY29ubmVjdCBvbmx5IG9uZSBwYWlyIG9mIHZlcnRleGVzLiBUaGVzZSBhZGph Y2VudCB2ZXJ0ZXgKKwkJCSAqIHBhdHRlcm5zIG5lZWQgdG8gYmUgbWVyZ2VkIGV2ZW4gdGhvdWdo IHRoZXkgaGF2ZSBkaWZmZXJlbnQKKwkJCSAqIHZhcmlhYmxlcy4gU3VjaCBlbGVtZW50IHBhdHRl cm5zIGZvcm0gYSB3YWxrIG9mIGdyYXBoIHdoZXJlCisJCQkgKiB2ZXJ0ZXggYW5kIGVkZ2VzIGFy ZSByZXBlYXRlZC4gRm9yIGV4YW1wbGUsIGluCisJCQkgKiAoYSktW2JdLT4oYyk8LVtiXS0oZCks IChhKSBhbmQgKGQpIHJlcHJlc2VudCB0aGUgc2FtZSB2ZXJ0ZXgKKwkJCSAqIGVsZW1lbnQuIFRo aXMgaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIGltcGxlbWVudCBhbmQgcHJvYmFibHkgbGVzcworCQkJ ICogdXNlZnVsLiBIZW5jZSBub3Qgc3VwcG9ydGVkIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChw cmV2X3BmKQogCQkJewotCQkJCUFzc2VydChwZi0+a2luZCA9PSBWRVJURVhfUEFUVEVSTik7Ci0J CQkJQXNzZXJ0KElTX0VER0VfUEFUVEVSTihwcmV2X3BmLT5raW5kKSk7CisJCQkJaWYgKHByZXZf cGYtPmtpbmQgPT0gRURHRV9QQVRURVJOX1JJR0hUIHx8IHByZXZfcGYtPmtpbmQgPT0gRURHRV9Q QVRURVJOX0FOWSkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHBmLT5raW5k KSk7CisJCQkJCWlmIChwcmV2X3BmLT5kZXN0X3BmICYmIHByZXZfcGYtPmRlc3RfcGYgIT0gcGYp CisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9P QkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBjYW5ub3QgY29ubmVj dCBtb3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0dGVybiIpKTsKKwkJ CQkJcHJldl9wZi0+ZGVzdF9wZiA9IHBmOworCQkJCX0KKwkJCQllbHNlIGlmIChwcmV2X3BmLT5r aW5kID09IEVER0VfUEFUVEVSTl9MRUZUKQorCQkJCXsKKwkJCQkJQXNzZXJ0KCFJU19FREdFX1BB VFRFUk4ocGYtPmtpbmQpKTsKKwkJCQkJaWYgKHByZXZfcGYtPnNyY19wZiAmJiBwcmV2X3BmLT5z cmNfcGYgIT0gcGYpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBj YW5ub3QgY29ubmVjdCBtb3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0 dGVybiIpKTsKKwkJCQkJcHJldl9wZi0+c3JjX3BmID0gcGY7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQl7CisJCQkJCUFzc2VydChwcmV2X3BmLT5raW5kID09IFZFUlRFWF9QQVRURVJOKTsKKwkJCQkJ QXNzZXJ0KElTX0VER0VfUEFUVEVSTihwZi0+a2luZCkpOworCQkJCX0KKworCQkJCWlmIChwZi0+ a2luZCA9PSBFREdFX1BBVFRFUk5fUklHSFQgfHwgcGYtPmtpbmQgPT0gRURHRV9QQVRURVJOX0FO WSkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHByZXZfcGYtPmtpbmQpKTsK KwkJCQkJaWYgKHBmLT5zcmNfcGYgJiYgcGYtPnNyY19wZiAhPSBwcmV2X3BmKQorCQkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklO SVRJT04pLAorCQkJCQkJCQllcnJtc2coImFuIGVkZ2UgY2Fubm90IGNvbm5lY3QgbW9yZSB0aGFu IHR3byB2ZXJ0ZXhlcyBldmVuIGluIGEgY3ljbGljIHBhdHRlcm4iKSk7CisJCQkJCXBmLT5zcmNf cGYgPSBwcmV2X3BmOworCQkJCX0KKwkJCQllbHNlIGlmIChwZi0+a2luZCA9PSBFREdFX1BBVFRF Uk5fTEVGVCkKKwkJCQl7CisJCQkJCUFzc2VydCghSVNfRURHRV9QQVRURVJOKHByZXZfcGYtPmtp bmQpKTsKKwkJCQkJaWYgKHBmLT5kZXN0X3BmICYmIHBmLT5kZXN0X3BmICE9IHByZXZfcGYpCisJ CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpF Q1RfREVGSU5JVElPTiksCisJCQkJCQkJCWVycm1zZygiYW4gZWRnZSBjYW5ub3QgY29ubmVjdCBt b3JlIHRoYW4gdHdvIHZlcnRleGVzIGV2ZW4gaW4gYSBjeWNsaWMgcGF0dGVybiIpKTsKKwkJCQkJ cGYtPmRlc3RfcGYgPSBwcmV2X3BmOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3Nl cnQocGYtPmtpbmQgPT0gVkVSVEVYX1BBVFRFUk4pOworCQkJCQlBc3NlcnQoSVNfRURHRV9QQVRU RVJOKHByZXZfcGYtPmtpbmQpKTsKKwkJCQl9CiAJCQl9Ci0JCX0KIAotCQlwcmV2X3BmID0gcGY7 CisJCQlwcmV2X3BmID0gcGY7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dyYXBoX3RhYmxlLm91dAppbmRleCBiNTc5ZTNkZjYzNS4uNDNiZjNhNWIxM2IgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0CkBAIC05Myw4ICs5Myw2IEBA IFNFTEVDVCBjdXN0b21lcl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJ UyBjdXN0b21lcnMgV0hFUkUgYy5hZGRyCiBFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICJDT0xVTU5TIgogTElORSAxOiAuLi5tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBj dXN0b21lcl9vcmRlcnNdIENPTFVNTlMgKGMuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1TRUxFQ1QgKiBGUk9NIEdSQVBI X1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzKSwgKG8gSVMgb3JkZXJzKSBDT0xV TU5TIChjLm5hbWUgQVMgY3VzdG9tZXJfbmFtZSkpOyAgLS0gZXJyb3IKLUVSUk9SOiAgbXVsdGlw bGUgcGF0aCBwYXR0ZXJucyBpbiBvbmUgR1JBUEhfVEFCTEUgY2xhdXNlIG5vdCBzdXBwb3J0ZWQK IFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCBDT0xVTU5TICgxIEFTIGNv bCkpOyAgLS0gZXJyb3IsIGVtcHR5IG1hdGNoIGNsYXVzZQogRVJST1I6ICBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAiQ09MVU1OUyIKIExJTkUgMTogU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAo bXlzaG9wIE1BVENIIENPTFVNTlMgKDEgQVMgY29sKSk7CkBAIC0xMDIyLDQgKzEwMjAsMzMwIEBA IFNFTEVDVCBzbmFtZSwgZG5hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihk ZXN0KSBXSEVSRSBzcmMudnByb3AxID4KIEVSUk9SOiAgc3VicXVlcmllcyB3aXRoaW4gR1JBUEhf VEFCTEUgcmVmZXJlbmNlIGFyZSBub3Qgc3VwcG9ydGVkCiBTRUxFQ1Qgc25hbWUsIGRuYW1lIEZS T00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMpLT4oZGVzdCkgV0hFUkUgb3V0X2RlZ3JlZShz cmMudm5hbWUpID4gKFNFTEVDVCBtYXgob3V0X2RlZ3JlZShubmFtZSkpIEZST00gR1JBUEhfVEFC TEUgKGcxIE1BVENIIChub2RlKSBDT0xVTU5TIChub2RlLnZuYW1lIEFTIG5uYW1lKSkpIENPTFVN TlMoc3JjLnZuYW1lIEFTIHNuYW1lLCBkZXN0LnZuYW1lIEFTIGRuYW1lKSk7CiBFUlJPUjogIHN1 YnF1ZXJpZXMgd2l0aGluIEdSQVBIX1RBQkxFIHJlZmVyZW5jZSBhcmUgbm90IHN1cHBvcnRlZAor LS0gTXVsdGktcGF0dGVybiBwYXRoIHRlc3RzIChjb21tYS1zZXBhcmF0ZWQgcGF0aCBwYXR0ZXJu cyBpbiBNQVRDSCkKKy0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogY3Jvc3MgcHJvZHVjdCBvZiBj dXN0b21lcnMgYW5kIG9yZGVycworLS0gKDMgY3VzdG9tZXJzIHggMyBvcmRlcnMgPSA5IHJvd3Ms IHByb2plY3RpbmcgYy5uYW1lIG9ubHkpCitTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNo b3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzKSwgKG8gSVMgb3JkZXJzKSBDT0xVTU5TIChjLm5hbWUg QVMgY3VzdG9tZXJfbmFtZSkpOworIGN1c3RvbWVyX25hbWUgCistLS0tLS0tLS0tLS0tLS0KKyBj dXN0b21lcjEKKyBjdXN0b21lcjIKKyBjdXN0b21lcjMKKyBjdXN0b21lcjEKKyBjdXN0b21lcjIK KyBjdXN0b21lcjMKKyBjdXN0b21lcjEKKyBjdXN0b21lcjIKKyBjdXN0b21lcjMKKyg5IHJvd3Mp CisKKy0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogb25lIHNpZGUgeWllbGRzIG5vIG1hdGNoIC0+ IGVtcHR5IHJlc3VsdAorU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wCisgICAgTUFU Q0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdOT05FWElTVEVOVCcpLCAobyBJ UyBvcmRlcnMpCisgICAgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsKKyBjdXN0 b21lcl9uYW1lIAorLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBCYXNpYyBtdWx0aS1w YXR0ZXJuOiAoYSktPihiKSwgKGIpLT4oYykgd2hlcmUgYiBpcyBzaGFyZWQKK1NFTEVDVCBhX25h bWUsIGJfbmFtZSwgY19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMg dmwxKS1bZTEgSVMgZWwxXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiktW2UyIElTIGVsMl0t PihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBi X25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBCWSBhX25hbWUsIGJfbmFtZSwgY19u YW1lOworIGFfbmFtZSB8IGJfbmFtZSB8IGNfbmFtZSAKKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0t LS0tCisgdjExICAgIHwgdjIyICAgIHwgdjMyCisoMSByb3cpCisKKy0tIE11bHRpLXBhdHRlcm4g d2l0aCBzYW1lIHN0YXJ0IHZlcnRleCByZWFjaGluZyBkaWZmZXJlbnQgZGVzdGluYXRpb25zCitT RUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1B VENIIChhIElTIHZsMSktW10tPihiIElTIHZsMiksCisgICAgICAgICAgKGEpLVtdLT4oYyBJUyB2 bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLCBj LnZuYW1lIEFTIGNfbmFtZSkKKykgT1JERVIgQlkgYV9uYW1lLCBiX25hbWUsIGNfbmFtZTsKKyBh X25hbWUgfCBiX25hbWUgfCBjX25hbWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYx MSAgICB8IHYyMiAgICB8IHYyMgorIHYxMSAgICB8IHYyMiAgICB8IHYzMQorIHYxMSAgICB8IHYy MiAgICB8IHYzMworIHYxMiAgICB8IHYyMSAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICB8IHYy MworKDUgcm93cykKKworLS0gTXVsdGktcGF0dGVybiB3aXRoIHRocmVlIHBhdHRlcm5zIHNoYXJp bmcgb25lIHZhcmlhYmxlCitTRUxFQ1QgYV9uYW1lLCBiMl9uYW1lLCBiM19uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIyIElTIHZsMiksCisgICAg ICAgICAgKGEpLVtdLT4oYjMgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1l LCBiMi52bmFtZSBBUyBiMl9uYW1lLCBiMy52bmFtZSBBUyBiM19uYW1lKQorKSBPUkRFUiBCWSBh X25hbWUsIGIyX25hbWUsIGIzX25hbWU7CisgYV9uYW1lIHwgYjJfbmFtZSB8IGIzX25hbWUgCist LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tCisgdjExICAgIHwgdjIyICAgICB8IHYyMgorIHYx MSAgICB8IHYyMiAgICAgfCB2MzEKKyB2MTEgICAgfCB2MjIgICAgIHwgdjMzCisgdjEyICAgIHwg djIxICAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICAgfCB2MjMKKyg1IHJvd3MpCisKKy0tIFNh bWUgdmFyaWFibGUgd2l0aCBzYW1lIGxhYmVsIChzaG91bGQgd29yaykKK1NFTEVDVCBhX25hbWUs IGJfbmFtZSwgY19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiBJUyB2bDIpLVtdLT4oYyBJUyB2bDMpCisg ICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLCBjLnZuYW1l IEFTIGNfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMzsKKyBhX25hbWUgfCBiX25hbWUgfCBjX25h bWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYxMSAgICB8IHYyMiAgICB8IHYzMgor KDEgcm93KQorCistLSBTYW1lIHZhcmlhYmxlIHdpdGggZGlmZmVyZW50IGxhYmVscyAoY29uZmxp Y3QgLSB3aGF0IGhhcHBlbnM/KQorU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUgRlJPTSBH UkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4oYiBJUyB2bDIpLAorICAg ICAgICAgIChiIElTIHZsMyktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFT IGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBC WSAxLCAyLCAzOworRVJST1I6ICBlbGVtZW50IHBhdHRlcm5zIHdpdGggc2FtZSB2YXJpYWJsZSBu YW1lICJiIiBidXQgZGlmZmVyZW50IGxhYmVsIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVk CistLSBTYW1lIHZhcmlhYmxlIHdpdGggbGFiZWwgT1IgZXhwcmVzc2lvbiAoYiBJUyB2bDJ8dmwz KQorU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAg ICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4oYiBJUyB2bDJ8dmwzKSwKKyAgICAgICAgICAoYiktW10t PihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBi X25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworIGFfbmFtZSB8 IGJfbmFtZSB8IGNfbmFtZSAKKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgdjExICAgIHwg djIyICAgIHwgdjMyCisgdjExICAgIHwgdjMzICAgIHwgdjMzCisgdjExICAgIHwgdjMzICAgIHwg djMzCisoMyByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnMgKG5vIHNoYXJlZCB2YXJp YWJsZXMpIC0gc2hvdWxkIHByb2R1Y2UgY3Jvc3MgcHJvZHVjdAorLS0gKGEpLT4oYikgYW5kIChj KS0+KGQpIGFyZSBpbmRlcGVuZGVudCwgcmVzdWx0IGlzIENhcnRlc2lhbiBwcm9kdWN0CistLSB2 bDEtPnZsMiBoYXMgMyBwYXRocywgdmwxLT52bDMgaGFzIDMgcGF0aHMsIHNvIGNyb3NzIHByb2R1 Y3QgPSAzIHggMyA9IDkgcm93cworU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUsIGRfbmFt ZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10tPihiIElTIHZs MiksCisgICAgICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENPTFVNTlMgKGEu dm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1l IEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEsIDIsIDMsIDQ7Cisg YV9uYW1lIHwgYl9uYW1lIHwgY19uYW1lIHwgZF9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0KKyB2MTEgICAgfCB2MjIgICAgfCB2MTEgICAgfCB2MjIKKyB2MTEgICAg fCB2MjIgICAgfCB2MTEgICAgfCB2MzEKKyB2MTEgICAgfCB2MjIgICAgfCB2MTEgICAgfCB2MzMK KyB2MTEgICAgfCB2MjIgICAgfCB2MTIgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIgICAgfCB2MTMg ICAgfCB2MjMKKyB2MTIgICAgfCB2MjEgICAgfCB2MTEgICAgfCB2MjIKKyB2MTIgICAgfCB2MjEg ICAgfCB2MTEgICAgfCB2MzEKKyB2MTIgICAgfCB2MjEgICAgfCB2MTEgICAgfCB2MzMKKyB2MTIg ICAgfCB2MjEgICAgfCB2MTIgICAgfCB2MjEKKyB2MTIgICAgfCB2MjEgICAgfCB2MTMgICAgfCB2 MjMKKyB2MTMgICAgfCB2MjMgICAgfCB2MTEgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMgICAgfCB2 MTEgICAgfCB2MzEKKyB2MTMgICAgfCB2MjMgICAgfCB2MTEgICAgfCB2MzMKKyB2MTMgICAgfCB2 MjMgICAgfCB2MTIgICAgfCB2MjEKKyB2MTMgICAgfCB2MjMgICAgfCB2MTMgICAgfCB2MjMKKygx NSByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnM6IEVYUExBSU4gc2hvdWxkIHNob3cg Y3Jvc3Mgam9pbiAoTmVzdGVkIExvb3Agd2l0aG91dCBqb2luIGNvbmRpdGlvbikKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25hbWUsIGRfbmFtZSBGUk9NIEdS QVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10tPihiIElTIHZsMiksCisgICAg ICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMg YV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1lIEFTIGNfbmFt ZSwgZC52bmFtZSBBUyBkX25hbWUpCispOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBNZXJnZSBKb2luCisgICAg ICAgICBNZXJnZSBDb25kOiAodjEuaWQgPSBlMV8yLmlkXzEpCisgICAgICAgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHYxX3BrZXkgb24gdjEK KyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKChlMV8yXzEuaWRf Ml8xID0gdjJfMS5pZDEpIEFORCAoZTFfMl8xLmlkXzJfMiA9IHYyXzEuaWQyKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogZTFfMl8xLmlkXzJfMSwgZTFfMl8xLmlkXzJfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUx XzIgZTFfMl8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHYyXzEuaWQxLCB2 Ml8xLmlkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHYyIHYyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHYxX3BrZXkgb24gdjEgdjFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gZTFfMl8xLmlkXzEpCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6IGUxXzIuaWRfMQorICAgICAgICAgICAgICAgLT4gIE1lcmdl IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICgoZTFfMi5pZF8yXzEgPSB2 Mi5pZDEpIEFORCAoZTFfMi5pZF8yXzIgPSB2Mi5pZDIpKQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlMV8yLmlkXzJf MSwgZTFfMi5pZF8yXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBlMV8yCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IHYyLmlkMSwgdjIuaWQyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdjIKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2gg Q29uZDogKGUxXzMuaWRfMyA9IHYzLmlkKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAoZTFfMy5pZF8xID0gdjFfMy5pZCkKKyAgICAgICAgICAgICAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUx XzMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVyZ2UgQ29uZDogKChlMV8yXzIuaWRfMl8xID0gdjJfMi5pZDEpIEFORCAoZTFfMl8yLmlk XzJfMiA9IHYyXzIuaWQyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogZTFfMl8yLmlkXzJfMSwgZTFfMl8yLmlkXzJfMgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGUxXzIgZTFfMl8yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHYyXzIuaWQxLCB2 Ml8yLmlkMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHYyIHYyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHYxX3BrZXkgb24gdjEgdjFfMgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZTFfMl8yLmlkXzEpCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHYxIHYxXzMKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdjMKKyg0OSByb3dzKQorCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnM6IHNpbmdsZSB2ZXJ0 ZXggcGF0dGVybnMgKG5vIGVkZ2VzKQorLS0gdmwxIGhhcyAzIHJvd3MgKHYxKSwgdmwzIGhhcyA2 IHJvd3MgKHYyK3YzKSwgY3Jvc3MgcHJvZHVjdCA9IDE4IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJf bmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSksIChiIElTIHZs MykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUpCisp IE9SREVSIEJZIDEsIDI7CisgYV9uYW1lIHwgYl9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0KKyB2 MTEgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIKKyB2MTEgICAgfCB2MjMKKyB2MTEgICAgfCB2MzEK KyB2MTEgICAgfCB2MzIKKyB2MTEgICAgfCB2MzMKKyB2MTIgICAgfCB2MjEKKyB2MTIgICAgfCB2 MjIKKyB2MTIgICAgfCB2MjMKKyB2MTIgICAgfCB2MzEKKyB2MTIgICAgfCB2MzIKKyB2MTIgICAg fCB2MzMKKyB2MTMgICAgfCB2MjEKKyB2MTMgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMKKyB2MTMg ICAgfCB2MzEKKyB2MTMgICAgfCB2MzIKKyB2MTMgICAgfCB2MzMKKygxOCByb3dzKQorCistLSBE aXNjb25uZWN0ZWQgcGF0dGVybnM6IHRocmVlIGluZGVwZW5kZW50IHBhdHRlcm5zICgzLXdheSBj cm9zcyBwcm9kdWN0KQorLS0gdmwxIGhhcyAzIHJvd3MsIHZsMiBoYXMgMyByb3dzLCB2bDMgaGFz IDYgcm93cyA9IDU0IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSwgY19uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKSwgKGIgSVMgdmwyKSwgKGMgSVMgdmwz KQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwgYy52 bmFtZSBBUyBjX25hbWUpCispIE9SREVSIEJZIDEsIDIsIDM7CisgYV9uYW1lIHwgYl9uYW1lIHwg Y19uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyB2MTEgICAgfCB2MjEgICAgfCB2 MjEKKyB2MTEgICAgfCB2MjEgICAgfCB2MjIKKyB2MTEgICAgfCB2MjEgICAgfCB2MjMKKyB2MTEg ICAgfCB2MjEgICAgfCB2MzEKKyB2MTEgICAgfCB2MjEgICAgfCB2MzIKKyB2MTEgICAgfCB2MjEg ICAgfCB2MzMKKyB2MTEgICAgfCB2MjIgICAgfCB2MjEKKyB2MTEgICAgfCB2MjIgICAgfCB2MjIK KyB2MTEgICAgfCB2MjIgICAgfCB2MjMKKyB2MTEgICAgfCB2MjIgICAgfCB2MzEKKyB2MTEgICAg fCB2MjIgICAgfCB2MzIKKyB2MTEgICAgfCB2MjIgICAgfCB2MzMKKyB2MTEgICAgfCB2MjMgICAg fCB2MjEKKyB2MTEgICAgfCB2MjMgICAgfCB2MjIKKyB2MTEgICAgfCB2MjMgICAgfCB2MjMKKyB2 MTEgICAgfCB2MjMgICAgfCB2MzEKKyB2MTEgICAgfCB2MjMgICAgfCB2MzIKKyB2MTEgICAgfCB2 MjMgICAgfCB2MzMKKyB2MTIgICAgfCB2MjEgICAgfCB2MjEKKyB2MTIgICAgfCB2MjEgICAgfCB2 MjIKKyB2MTIgICAgfCB2MjEgICAgfCB2MjMKKyB2MTIgICAgfCB2MjEgICAgfCB2MzEKKyB2MTIg ICAgfCB2MjEgICAgfCB2MzIKKyB2MTIgICAgfCB2MjEgICAgfCB2MzMKKyB2MTIgICAgfCB2MjIg ICAgfCB2MjEKKyB2MTIgICAgfCB2MjIgICAgfCB2MjIKKyB2MTIgICAgfCB2MjIgICAgfCB2MjMK KyB2MTIgICAgfCB2MjIgICAgfCB2MzEKKyB2MTIgICAgfCB2MjIgICAgfCB2MzIKKyB2MTIgICAg fCB2MjIgICAgfCB2MzMKKyB2MTIgICAgfCB2MjMgICAgfCB2MjEKKyB2MTIgICAgfCB2MjMgICAg fCB2MjIKKyB2MTIgICAgfCB2MjMgICAgfCB2MjMKKyB2MTIgICAgfCB2MjMgICAgfCB2MzEKKyB2 MTIgICAgfCB2MjMgICAgfCB2MzIKKyB2MTIgICAgfCB2MjMgICAgfCB2MzMKKyB2MTMgICAgfCB2 MjEgICAgfCB2MjEKKyB2MTMgICAgfCB2MjEgICAgfCB2MjIKKyB2MTMgICAgfCB2MjEgICAgfCB2 MjMKKyB2MTMgICAgfCB2MjEgICAgfCB2MzEKKyB2MTMgICAgfCB2MjEgICAgfCB2MzIKKyB2MTMg ICAgfCB2MjEgICAgfCB2MzMKKyB2MTMgICAgfCB2MjIgICAgfCB2MjEKKyB2MTMgICAgfCB2MjIg ICAgfCB2MjIKKyB2MTMgICAgfCB2MjIgICAgfCB2MjMKKyB2MTMgICAgfCB2MjIgICAgfCB2MzEK KyB2MTMgICAgfCB2MjIgICAgfCB2MzIKKyB2MTMgICAgfCB2MjIgICAgfCB2MzMKKyB2MTMgICAg fCB2MjMgICAgfCB2MjEKKyB2MTMgICAgfCB2MjMgICAgfCB2MjIKKyB2MTMgICAgfCB2MjMgICAg fCB2MjMKKyB2MTMgICAgfCB2MjMgICAgfCB2MzEKKyB2MTMgICAgfCB2MjMgICAgfCB2MzIKKyB2 MTMgICAgfCB2MjMgICAgfCB2MzMKKyg1NCByb3dzKQorCistLSBNaXhlZDogcGFydGlhbGx5IGNv bm5lY3RlZCArIGRpc2Nvbm5lY3RlZCBwYXR0ZXJucworLS0gKGEpLT4oYiksIChiKS0+KGMpIGFy ZSBjb25uZWN0ZWQgdmlhICdiJywgYnV0IChkKSBpcyBkaXNjb25uZWN0ZWQKKy0tIHZsMS0+dmwy LT52bDMgY2hhaW4gKyBpbmRlcGVuZGVudCB2bDEgdmVydGV4CitTRUxFQ1QgYV9uYW1lLCBiX25h bWUsIGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMg dmwxKS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYiktW10tPihjIElTIHZsMyksCisgICAg ICAgICAgKGQgSVMgdmwxKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1l IEFTIGJfbmFtZSwKKyAgICAgICAgICAgICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBk X25hbWUpCispIE9SREVSIEJZIDEsIDIsIDMsIDQ7CisgYV9uYW1lIHwgYl9uYW1lIHwgY19uYW1l IHwgZF9uYW1lIAorLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyB2MTEgICAg fCB2MjIgICAgfCB2MzIgICAgfCB2MTEKKyB2MTEgICAgfCB2MjIgICAgfCB2MzIgICAgfCB2MTIK KyB2MTEgICAgfCB2MjIgICAgfCB2MzIgICAgfCB2MTMKKygzIHJvd3MpCisKKy0tIERpc2Nvbm5l Y3RlZCBwYXR0ZXJuczogdmVyaWZ5IHJvdyBjb3VudCB3aXRoIGRpZmZlcmVudCBzaXplcworLS0g VXNpbmcgV0hFUkUgdG8gZmlsdGVyIG9uZSBzaWRlOiAoYSBJUyB2bDEgV0hFUkUgdnByb3AxID0g MTApIGhhcyAxIHJvdworLS0gQ3Jvc3Mgd2l0aCAoYiBJUyB2bDMpIHdoaWNoIGhhcyA2IHJvd3Mg PSA2IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAg IE1BVENIIChhIElTIHZsMSBXSEVSRSBhLnZwcm9wMSA9IDEwKSwgKGIgSVMgdmwzKQorICAgIENP TFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSkKKykgT1JERVIgQlkg MSwgMjsKKyBhX25hbWUgfCBiX25hbWUgCistLS0tLS0tLSstLS0tLS0tLQorIHYxMSAgICB8IHYy MQorIHYxMSAgICB8IHYyMgorIHYxMSAgICB8IHYyMworIHYxMSAgICB8IHYzMQorIHYxMSAgICB8 IHYzMgorIHYxMSAgICB8IHYzMworKDYgcm93cykKKworLS0gU3RhciBwYXR0ZXJuOiB0aHJlZSBw YXR0ZXJucyB3aXRoIHNoYXJlZCBodWIgJ2EnIChBLT5CLCBBLT5DLCBELT5BKQorLS0gQWxsIGpv aW5lZCB2aWEgJ2EnLCBOT1QgYSBjcm9zcyBwcm9kdWN0CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUs IGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMyksCisgICAgICAg ICAgKGQgSVMgdmwyKS1bXS0+KGEpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1lLCBkLnZuYW1l IEFTIGRfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMywgNDsKKyBhX25hbWUgfCBiX25hbWUgfCBj X25hbWUgfCBkX25hbWUgCistLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIHYx MiAgICB8IHYyMSAgICB8IHYyMSAgICB8IHYyMQorIHYxMyAgICB8IHYyMyAgICB8IHYyMyAgICB8 IHYyMworKDIgcm93cykKKwogLS0gbGVhdmUgdGhlIG9iamVjdHMgYmVoaW5kIGZvciBwZ191cGdy YWRlL3BnX2R1bXAgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBo X3RhYmxlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBoX3RhYmxlLnNxbAppbmRleCA0 ZmY5ODgxNzQyMC4uMDA4YTE4YjIxOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2dyYXBoX3RhYmxlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5z cWwKQEAgLTg5LDcgKzg5LDYgQEAgU0VMRUNUIGN1c3RvbWVyX25hbWUgRlJPTSBHUkFQSF9UQUJM RSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyBXSEVSRSBjLmFkZHIKIFNFTEVDVCBjdXN0 b21lcl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMg V0hFUkUgYy5hZGRyZXNzID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVyc10tPihvIElTIG9yZGVy cykgQ09MVU1OUyAoYy5uYW1leCBBUyBjdXN0b21lcl9uYW1lKSk7ICAtLSBlcnJvcgogU0VMRUNU IGN1c3RvbWVyX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3Rv bWVyc3xlbXBsb3llZXMgV0hFUkUgYy5hZGRyZXNzID0gJ1VTJyktW0lTIGN1c3RvbWVyX29yZGVy c10tPihvIElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0t IGVycm9yCiBTRUxFQ1QgY3VzdG9tZXJfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFU Q0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycpLVtJUyBjdXN0b21lcl9v cmRlcnNdIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21lcl9uYW1lKSk7ICAtLSBlcnJvcgotU0VM RUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyksIChv IElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0tIGVycm9y CiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggQ09MVU1OUyAoMSBBUyBj b2wpKTsgIC0tIGVycm9yLCBlbXB0eSBtYXRjaCBjbGF1c2UKIFNFTEVDVCBjdXN0b21lcl9uYW1l IEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMpLT57MSwyfShv IElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsgIC0tIGVycm9y CiBTRUxFQ1QgKiBGUk9NIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKChjIElTIGN1c3RvbWVy cyktPihvIElTIG9yZGVycykpIENPTFVNTlMgKGMubmFtZSkpOwpAQCAtNTgyLDQgKzU4MSwxMTcg QEAgU0VMRUNUICogRlJPTSBjdXN0b21lcnMgY28gV0hFUkUgY28uY3VzdG9tZXJfaWQgPSAoU0VM RUNUIGN1c3RvbWVyX2lkIEZST00gR1JBUEgKIFNFTEVDVCBzbmFtZSwgZG5hbWUgRlJPTSBHUkFQ SF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihkZXN0KSBXSEVSRSBzcmMudnByb3AxID4gKFNFTEVD VCBtYXgodjEudnByb3AxKSBGUk9NIHYxKSBDT0xVTU5TKHNyYy52bmFtZSBBUyBzbmFtZSwgZGVz dC52bmFtZSBBUyBkbmFtZSkpOwogU0VMRUNUIHNuYW1lLCBkbmFtZSBGUk9NIEdSQVBIX1RBQkxF IChnMSBNQVRDSCAoc3JjKS0+KGRlc3QpIFdIRVJFIG91dF9kZWdyZWUoc3JjLnZuYW1lKSA+IChT RUxFQ1QgbWF4KG91dF9kZWdyZWUobm5hbWUpKSBGUk9NIEdSQVBIX1RBQkxFIChnMSBNQVRDSCAo bm9kZSkgQ09MVU1OUyAobm9kZS52bmFtZSBBUyBubmFtZSkpKSBDT0xVTU5TKHNyYy52bmFtZSBB UyBzbmFtZSwgZGVzdC52bmFtZSBBUyBkbmFtZSkpOwogCistLSBNdWx0aS1wYXR0ZXJuIHBhdGgg dGVzdHMgKGNvbW1hLXNlcGFyYXRlZCBwYXRoIHBhdHRlcm5zIGluIE1BVENIKQorLS0gZGlzY29u bmVjdGVkIHBhdHRlcm5zOiBjcm9zcyBwcm9kdWN0IG9mIGN1c3RvbWVycyBhbmQgb3JkZXJzCist LSAoMyBjdXN0b21lcnMgeCAzIG9yZGVycyA9IDkgcm93cywgcHJvamVjdGluZyBjLm5hbWUgb25s eSkKK1NFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21l cnMpLCAobyBJUyBvcmRlcnMpIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21lcl9uYW1lKSk7CisK Ky0tIGRpc2Nvbm5lY3RlZCBwYXR0ZXJuczogb25lIHNpZGUgeWllbGRzIG5vIG1hdGNoIC0+IGVt cHR5IHJlc3VsdAorU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wCisgICAgTUFUQ0gg KGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdOT05FWElTVEVOVCcpLCAobyBJUyBv cmRlcnMpCisgICAgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUpKTsKKworLS0gQmFz aWMgbXVsdGktcGF0dGVybjogKGEpLT4oYiksIChiKS0+KGMpIHdoZXJlIGIgaXMgc2hhcmVkCitT RUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1B VENIIChhIElTIHZsMSktW2UxIElTIGVsMV0tPihiIElTIHZsMiksCisgICAgICAgICAgKGIpLVtl MiBJUyBlbDJdLT4oYyBJUyB2bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLCBjLnZuYW1lIEFTIGNfbmFtZSkKKykgT1JERVIgQlkgYV9uYW1lLCBi X25hbWUsIGNfbmFtZTsKKworLS0gTXVsdGktcGF0dGVybiB3aXRoIHNhbWUgc3RhcnQgdmVydGV4 IHJlYWNoaW5nIGRpZmZlcmVudCBkZXN0aW5hdGlvbnMKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSwg Y19uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIg SVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZu YW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBP UkRFUiBCWSBhX25hbWUsIGJfbmFtZSwgY19uYW1lOworCistLSBNdWx0aS1wYXR0ZXJuIHdpdGgg dGhyZWUgcGF0dGVybnMgc2hhcmluZyBvbmUgdmFyaWFibGUKK1NFTEVDVCBhX25hbWUsIGIyX25h bWUsIGIzX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtd LT4oYjIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihiMyBJUyB2bDMpCisgICAgQ09MVU1O UyAoYS52bmFtZSBBUyBhX25hbWUsIGIyLnZuYW1lIEFTIGIyX25hbWUsIGIzLnZuYW1lIEFTIGIz X25hbWUpCispIE9SREVSIEJZIGFfbmFtZSwgYjJfbmFtZSwgYjNfbmFtZTsKKworLS0gU2FtZSB2 YXJpYWJsZSB3aXRoIHNhbWUgbGFiZWwgKHNob3VsZCB3b3JrKQorU0VMRUNUIGFfbmFtZSwgYl9u YW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtd LT4oYiBJUyB2bDIpLAorICAgICAgICAgIChiIElTIHZsMiktW10tPihjIElTIHZsMykKKyAgICBD T0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMg Y19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBTYW1lIHZhcmlhYmxlIHdpdGggZGlm ZmVyZW50IGxhYmVscyAoY29uZmxpY3QgLSB3aGF0IGhhcHBlbnM/KQorU0VMRUNUIGFfbmFtZSwg Yl9uYW1lLCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEp LVtdLT4oYiBJUyB2bDIpLAorICAgICAgICAgIChiIElTIHZsMyktW10tPihjIElTIHZsMykKKyAg ICBDT0xVTU5TIChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUg QVMgY19uYW1lKQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBTYW1lIHZhcmlhYmxlIHdpdGgg bGFiZWwgT1IgZXhwcmVzc2lvbiAoYiBJUyB2bDJ8dmwzKQorU0VMRUNUIGFfbmFtZSwgYl9uYW1l LCBjX25hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEKKyAgICBNQVRDSCAoYSBJUyB2bDEpLVtdLT4o YiBJUyB2bDJ8dmwzKSwKKyAgICAgICAgICAoYiktW10tPihjIElTIHZsMykKKyAgICBDT0xVTU5T IChhLnZuYW1lIEFTIGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1l KQorKSBPUkRFUiBCWSAxLCAyLCAzOworCistLSBEaXNjb25uZWN0ZWQgcGF0dGVybnMgKG5vIHNo YXJlZCB2YXJpYWJsZXMpIC0gc2hvdWxkIHByb2R1Y2UgY3Jvc3MgcHJvZHVjdAorLS0gKGEpLT4o YikgYW5kIChjKS0+KGQpIGFyZSBpbmRlcGVuZGVudCwgcmVzdWx0IGlzIENhcnRlc2lhbiBwcm9k dWN0CistLSB2bDEtPnZsMiBoYXMgMyBwYXRocywgdmwxLT52bDMgaGFzIDMgcGF0aHMsIHNvIGNy b3NzIHByb2R1Y3QgPSAzIHggMyA9IDkgcm93cworU0VMRUNUIGFfbmFtZSwgYl9uYW1lLCBjX25h bWUsIGRfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSktW10t PihiIElTIHZsMiksCisgICAgICAgICAgKGMgSVMgdmwxKS1bXS0+KGQgSVMgdmwzKQorICAgIENP TFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAgICAg ICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEsIDIs IDMsIDQ7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogRVhQTEFJTiBzaG91bGQgc2hvdyBj cm9zcyBqb2luIChOZXN0ZWQgTG9vcCB3aXRob3V0IGpvaW4gY29uZGl0aW9uKQorRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSwgZF9uYW1lIEZST00gR1JB UEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIgSVMgdmwyKSwKKyAgICAg ICAgICAoYyBJUyB2bDEpLVtdLT4oZCBJUyB2bDMpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBh X25hbWUsIGIudm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1l LCBkLnZuYW1lIEFTIGRfbmFtZSkKKyk7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogc2lu Z2xlIHZlcnRleCBwYXR0ZXJucyAobm8gZWRnZXMpCistLSB2bDEgaGFzIDMgcm93cyAodjEpLCB2 bDMgaGFzIDYgcm93cyAodjIrdjMpLCBjcm9zcyBwcm9kdWN0ID0gMTggcm93cworU0VMRUNUIGFf bmFtZSwgYl9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKSwg KGIgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJf bmFtZSkKKykgT1JERVIgQlkgMSwgMjsKKworLS0gRGlzY29ubmVjdGVkIHBhdHRlcm5zOiB0aHJl ZSBpbmRlcGVuZGVudCBwYXR0ZXJucyAoMy13YXkgY3Jvc3MgcHJvZHVjdCkKKy0tIHZsMSBoYXMg MyByb3dzLCB2bDIgaGFzIDMgcm93cywgdmwzIGhhcyA2IHJvd3MgPSA1NCByb3dzCitTRUxFQ1Qg YV9uYW1lLCBiX25hbWUsIGNfbmFtZSBGUk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChh IElTIHZsMSksIChiIElTIHZsMiksIChjIElTIHZsMykKKyAgICBDT0xVTU5TIChhLnZuYW1lIEFT IGFfbmFtZSwgYi52bmFtZSBBUyBiX25hbWUsIGMudm5hbWUgQVMgY19uYW1lKQorKSBPUkRFUiBC WSAxLCAyLCAzOworCistLSBNaXhlZDogcGFydGlhbGx5IGNvbm5lY3RlZCArIGRpc2Nvbm5lY3Rl ZCBwYXR0ZXJucworLS0gKGEpLT4oYiksIChiKS0+KGMpIGFyZSBjb25uZWN0ZWQgdmlhICdiJywg YnV0IChkKSBpcyBkaXNjb25uZWN0ZWQKKy0tIHZsMS0+dmwyLT52bDMgY2hhaW4gKyBpbmRlcGVu ZGVudCB2bDEgdmVydGV4CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUsIGNfbmFtZSwgZF9uYW1lIEZS T00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwxKS1bXS0+KGIgSVMgdmwyKSwK KyAgICAgICAgICAoYiktW10tPihjIElTIHZsMyksCisgICAgICAgICAgKGQgSVMgdmwxKQorICAg IENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1lIEFTIGJfbmFtZSwKKyAgICAgICAg ICAgICBjLnZuYW1lIEFTIGNfbmFtZSwgZC52bmFtZSBBUyBkX25hbWUpCispIE9SREVSIEJZIDEs IDIsIDMsIDQ7CisKKy0tIERpc2Nvbm5lY3RlZCBwYXR0ZXJuczogdmVyaWZ5IHJvdyBjb3VudCB3 aXRoIGRpZmZlcmVudCBzaXplcworLS0gVXNpbmcgV0hFUkUgdG8gZmlsdGVyIG9uZSBzaWRlOiAo YSBJUyB2bDEgV0hFUkUgdnByb3AxID0gMTApIGhhcyAxIHJvdworLS0gQ3Jvc3Mgd2l0aCAoYiBJ UyB2bDMpIHdoaWNoIGhhcyA2IHJvd3MgPSA2IHJvd3MKK1NFTEVDVCBhX25hbWUsIGJfbmFtZSBG Uk9NIEdSQVBIX1RBQkxFIChnMQorICAgIE1BVENIIChhIElTIHZsMSBXSEVSRSBhLnZwcm9wMSA9 IDEwKSwgKGIgSVMgdmwzKQorICAgIENPTFVNTlMgKGEudm5hbWUgQVMgYV9uYW1lLCBiLnZuYW1l IEFTIGJfbmFtZSkKKykgT1JERVIgQlkgMSwgMjsKKworLS0gU3RhciBwYXR0ZXJuOiB0aHJlZSBw YXR0ZXJucyB3aXRoIHNoYXJlZCBodWIgJ2EnIChBLT5CLCBBLT5DLCBELT5BKQorLS0gQWxsIGpv aW5lZCB2aWEgJ2EnLCBOT1QgYSBjcm9zcyBwcm9kdWN0CitTRUxFQ1QgYV9uYW1lLCBiX25hbWUs IGNfbmFtZSwgZF9uYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxCisgICAgTUFUQ0ggKGEgSVMgdmwx KS1bXS0+KGIgSVMgdmwyKSwKKyAgICAgICAgICAoYSktW10tPihjIElTIHZsMyksCisgICAgICAg ICAgKGQgSVMgdmwyKS1bXS0+KGEpCisgICAgQ09MVU1OUyAoYS52bmFtZSBBUyBhX25hbWUsIGIu dm5hbWUgQVMgYl9uYW1lLAorICAgICAgICAgICAgIGMudm5hbWUgQVMgY19uYW1lLCBkLnZuYW1l IEFTIGRfbmFtZSkKKykgT1JERVIgQlkgMSwgMiwgMywgNDsKKwogLS0gbGVhdmUgdGhlIG9iamVj dHMgYmVoaW5kIGZvciBwZ191cGdyYWRlL3BnX2R1bXAgdGVzdHMK --0000000000001afd9d06502d6c5a--