From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 2BeSKF0Te1/VDwAA0tVLHw (envelope-from ) for ; Mon, 05 Oct 2020 12:36:45 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id UDhOJF0Te190VAAAbx9fmQ (envelope-from ) for ; Mon, 05 Oct 2020 12:36:45 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id EE0FC940215 for ; Mon, 5 Oct 2020 12:36:43 +0000 (UTC) Received: from localhost ([::1]:49814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kPPjO-0001B9-Sy for larch@yhetil.org; Mon, 05 Oct 2020 08:36:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35224) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kPPiJ-00019z-9c for emacs-orgmode@gnu.org; Mon, 05 Oct 2020 08:35:35 -0400 Received: from mail-ej1-f44.google.com ([209.85.218.44]:47026) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kPPiD-0006q7-4m for emacs-orgmode@gnu.org; Mon, 05 Oct 2020 08:35:35 -0400 Received: by mail-ej1-f44.google.com with SMTP id cb21so4937865ejb.13 for ; Mon, 05 Oct 2020 05:35:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=43UP0avwyKKT5JzbWD0YiDDjAyCQ7q8CnqK1AAI2Q9Q=; b=c9AqjZgXtC8UcH8gkGxLWu8WLNpvqePiMesEhGtYvIRUGtDJhXNsrYtTTo2ySESq2Q 7XqjWJCx+R9RpzYFHyeXr1LSXHQyO471Dt6gIYU9fOna10KXKpgmovkfStJglHYcr7W2 aN37TyAEr15NySB8qRpATZTGshzd2X4MCOTyI3TmrWnCnGMul0uzq86wYFVFp9LvVU/K O/X1Ng5NU9bioiECOXeF5fjTyApQD8ovWNMQaE0JSRJ1NrdiGE3DOHFC917iq/ZwZ/7j WurpJRXo8othTy1hNUxMQxVjNP/c6RAT79m9b7DTg3tE1PkDJJ+FzxWeQwvNP6O7XKsA 3e/w== X-Gm-Message-State: AOAM530p9GpjNq/kEvyQ1yNpCDjCb3V/oyzPc1hCFbjAEhM1C2K8djYg rJ4J8ycg9PRw9OcWNIOitT9t01JitescwByrmDDlgw3d4MXI1A== X-Google-Smtp-Source: ABdhPJy5IoUYL5kf7zrCcn6rOFDIcNVuEpixhtljFDSw46cL3u7Ps/t82l7o3hvm4NopQnmD5hZtcCZU6NXut0uM9HY= X-Received: by 2002:a17:906:660f:: with SMTP id b15mr15943785ejp.333.1601901326027; Mon, 05 Oct 2020 05:35:26 -0700 (PDT) MIME-Version: 1.0 From: ian martins Date: Mon, 5 Oct 2020 08:35:13 -0400 Message-ID: Subject: [PATCH] ob-java To: Org-Mode mailing list Content-Type: multipart/mixed; boundary="00000000000080f57805b0ebb726" Received-SPF: pass client-ip=209.85.218.44; envelope-from=ianxm1@gmail.com; helo=mail-ej1-f44.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/05 08:35:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FORGED_FROMDOMAIN=0.248, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=jhu.edu (policy=none); spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: 0.19 X-TUID: MvuZEmEhGKh9 --00000000000080f57805b0ebb726 Content-Type: multipart/alternative; boundary="00000000000080f57505b0ebb724" --00000000000080f57505b0ebb724 Content-Type: text/plain; charset="UTF-8" 1 Changes ========= - support for functional mode (`:results value') - accept variables - don't require package, class, and main definitions - write source and result tempfiles to `org-babel-temporary-directory', but respects the `:dir' header - work with tramp 2 Examples ========== Some examples follow. See the tests for more examples. I'll write proper docs after review. 2.1 Example 1 ~~~~~~~~~~~~~ This outputs "hello." If class and main definitions aren't given the code block will be wrapped in generic ones. ,---- | System.out.print("hello"); `---- This is exactly equivalent: ,---- | public class Main { | public static void main(String[] args) { | System.out.print("hello"); | } | } `---- 2.2 Example 2 ~~~~~~~~~~~~~ This also outputs "hello." ,---- | return "hello"; `---- 2.3 Example 3 ~~~~~~~~~~~~~ This generates the class "Example" in the package "org.orgmode" in the current directory. ,---- | System.out.print("hello, org-mode"); `---- 2.4 Example 4 ~~~~~~~~~~~~~ The "Hey" class defines a static method but no main. C-c C-c on the "Hey" source block will write "./org/orgmode/Hey.java" and compile it. The "Main" class calls the "Hey" class. C-c C-c on the "Main" source block will write "./org/orgmode/Main.java" and compile and run it. ,---- | package org.orgmode; | | public class Hey { | public static String say() { | return "hey"; | } | } `---- ,---- | package org.orgmode; | | public class Main { | public static void main(String[] args) { | System.out.print(Hey.say()); | } | } `---- Instead of C-c C-c, we could have added tangle headers and written the source files out by tangling. 2.5 Example 5 ~~~~~~~~~~~~~ This prints the variable from the header ,---- | System.out.print(msg); `---- 2.6 Example 6 ~~~~~~~~~~~~~ This prints "hello, org-mode." The table is provided to the method as a list of lists. message hello, org-mode ,---- | System.out.print(tbl.get(0).get(1)); `---- 2.7 Example 7 ~~~~~~~~~~~~~ This example returns a list. Note that you're allowed to specify imports without defining the class or main methods. ,---- | import java.util.Arrays; | | return Arrays.asList("message", "hello, org-mode"); `---- message hello, org-mode --00000000000080f57505b0ebb724 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
1 Changes
=3D=3D=3D=3D=3D=3D=3D=3D=3D

=C2=A0 - s= upport for functional mode (`:results value')
=C2=A0 - accept variab= les
=C2=A0 - don't require package, class, and main definitions
= =C2=A0 - write source and result tempfiles to
=C2=A0 =C2=A0 `org-babel-t= emporary-directory', but respects the `:dir' header
=C2=A0 - wor= k with tramp


2 Examples
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Some examples follow.=C2=A0 See the tests for more examples.=C2=A0 I'= ll write proper docs after review.

2.1 Example 1~~~~~~~~~~~~~

=C2=A0 This outputs "hello." =C2=A0If class= and main definitions aren't given the
=C2=A0 code block will be wra= pped in generic ones.

=C2=A0 ,----
=C2=A0 | System.out.print(&quo= t;hello");
=C2=A0 `----

=C2=A0 This is exactly equivalent:
=C2=A0 ,----
=C2=A0 | public class Main {
=C2=A0 | =C2=A0 =C2= =A0 public static void main(String[] args) {
=C2=A0 | =C2=A0 =C2=A0 =C2= =A0 =C2=A0 System.out.print("hello");
=C2=A0 | =C2=A0 =C2=A0 }=
=C2=A0 | }
=C2=A0 `----


2.2 Example 2
~~~~~~~~~~~~~
=C2=A0 This also outputs "hello."

=C2=A0 ,----
=C2= =A0 | return "hello";
=C2=A0 `----


2.3 Example 3~~~~~~~~~~~~~

=C2=A0 This generates the class "Example" i= n the package "org.orgmode" in the
=C2=A0 current directory.
=C2=A0 ,----
=C2=A0 | System.out.print("hello, org-mode"= );
=C2=A0 `----


2.4 Example 4
~~~~~~~~~~~~~

=C2=A0 = The "Hey" class defines a static method but no main. C-c C-c on t= he
=C2=A0 "Hey" source block will write "./org/orgmode/He= y.java" and compile it.

=C2=A0 The "Main" class calls= the "Hey" class. C-c C-c on the "Main" source
=C2= =A0 block will write "./org/orgmode/Main.java" and compile and ru= n it.

=C2=A0 ,----
=C2=A0 | package org.orgmode;
=C2=A0 |
= =C2=A0 | public class Hey {
=C2=A0 | =C2=A0 =C2=A0 public static String = say() {
=C2=A0 | =C2=A0 =C2=A0 =C2=A0 =C2=A0 return "hey";
= =C2=A0 | =C2=A0 =C2=A0 }
=C2=A0 | }
=C2=A0 `----

=C2=A0 ,----<= br>=C2=A0 | package org.orgmode;
=C2=A0 |
=C2=A0 | public class Main= {
=C2=A0 | =C2=A0 =C2=A0 public static void main(String[] args) {
= =C2=A0 | =C2=A0 =C2=A0 =C2=A0 =C2=A0 System.out.print(Hey.say());
=C2=A0= | =C2=A0 =C2=A0 }
=C2=A0 | }
=C2=A0 `----

=C2=A0 Instead of C= -c C-c, we could have added tangle headers and written the
=C2=A0 source= files out by tangling.


2.5 Example 5
~~~~~~~~~~~~~

= =C2=A0 This prints the variable from the header

=C2=A0 ,----
=C2= =A0 | System.out.print(msg);
=C2=A0 `----


2.6 Example 6
~~= ~~~~~~~~~~~

=C2=A0 This prints "hello, org-mode." The tabl= e is provided to the method as
=C2=A0 a list of lists.

=C2=A0 =C2= =A0message =C2=A0hello, org-mode

=C2=A0 ,----
=C2=A0 | System.ou= t.print(tbl.get(0).get(1));
=C2=A0 `----


2.7 Example 7
~~~= ~~~~~~~~~~

=C2=A0 This example returns a list.

=C2=A0 Note th= at you're allowed to specify imports without defining the class
=C2= =A0 or main methods.

=C2=A0 ,----
=C2=A0 | import java.util.Array= s;
=C2=A0 |
=C2=A0 | return Arrays.asList("message", "= ;hello, org-mode");
=C2=A0 `----

=C2=A0 =C2=A0message =C2=A0= hello, org-mode
--00000000000080f57505b0ebb724-- --00000000000080f57805b0ebb726 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-ob-java.el-Add-support-for-variables-return-values-t.patch" Content-Disposition: attachment; filename="0001-ob-java.el-Add-support-for-variables-return-values-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfwi9rz80 RnJvbSBlNTI1YTEzMjhmZWU2Zjc2NGM0MGEyMTU4Mzc2ZDc4ZTQwNjM5MWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gTWFydGlucyA8aWFueG1Aamh1LmVkdT4KRGF0ZTogTW9u LCA1IE9jdCAyMDIwIDA4OjA3OjI1IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gb2ItamF2YS5lbDog QWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxlcywgcmV0dXJuIHZhbHVlcywgdHJhbXAKCiogbGlzcC9v Yi1qYXZhLmVsOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGVzIGFuZCByZXR1cm4gdmFsdWVzLiAg V3JpdGUKdGVtcGZpbGVzIHRvIHRoZSBvcmctYmFiZWwtdGVtcG9yYXJ5LWRpcmVjdG9yeS4gIE1h a2UgcGFja2FnZSwgY2xhc3MsCmFuZCBtYWluIG1ldGhvZCBkZWZpbml0aW9ucyBvcHRpb25hbC4K CiogdGVzdGluZy9saXNwL3Rlc3Qtb2ItamF2YS5lbDogQWRkIHRlc3RzLgotLS0KIGxpc3Avb2It amF2YS5lbCAgICAgICAgICAgICAgfCA0MjUgKysrKysrKysrKysrKysrKysrKysrKystLS0KIHRl c3RpbmcvbGlzcC90ZXN0LW9iLWphdmEuZWwgfCA1NzQgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgOTU4IGluc2VydGlvbnMoKyksIDQxIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RpbmcvbGlzcC90ZXN0LW9iLWphdmEuZWwK CmRpZmYgLS1naXQgYS9saXNwL29iLWphdmEuZWwgYi9saXNwL29iLWphdmEuZWwKaW5kZXggZmVl Njk1YmI5Li45NGMzZjY5Y2YgMTAwNjQ0Ci0tLSBhL2xpc3Avb2ItamF2YS5lbAorKysgYi9saXNw L29iLWphdmEuZWwKQEAgLTEsOSArMSw4IEBACi07Ozsgb2ItamF2YS5lbCAtLS0gQmFiZWwgRnVu Y3Rpb25zIGZvciBKYXZhICAgICAgICAgIC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQorOzs7 IG9iLWphdmEuZWwgLS0tIG9yZy1iYWJlbCBmdW5jdGlvbnMgZm9yIGphdmEgZXZhbHVhdGlvbiAt Ki0gbGV4aWNhbC1iaW5kaW5nOiB0IC0qLQogCiA7OyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotOzsgQXV0aG9yOiBFcmljIFNjaHVsdGUK LTs7IE1haW50YWluZXI6IElhbiBNYXJ0aW5zIDxpYW54bUBqaHUuZWR1PgorOzsgQXV0aG9yOiBJ YW4gTWFydGlucyA8aWFueG1Aamh1LmVkdT4KIDs7IEtleXdvcmRzOiBsaXRlcmF0ZSBwcm9ncmFt bWluZywgcmVwcm9kdWNpYmxlIHJlc2VhcmNoCiA7OyBIb21lcGFnZTogaHR0cHM6Ly9vcmdtb2Rl Lm9yZwogCkBAIC0yNCw2MSArMjMsNDA1IEBACiAKIDs7OyBDb21tZW50YXJ5OgogCi07OyBDdXJy ZW50bHkgdGhpcyBvbmx5IHN1cHBvcnRzIHRoZSBleHRlcm5hbCBjb21waWxhdGlvbiBhbmQgZXhl Y3V0aW9uCi07OyBvZiBqYXZhIGNvZGUgYmxvY2tzIChpLmUuLCBubyBzZXNzaW9uIHN1cHBvcnQp LgorOzsgT3JnLUJhYmVsIHN1cHBvcnQgZm9yIGV2YWx1YXRpbmcgamF2YSBzb3VyY2UgY29kZS4K IAogOzs7IENvZGU6CiAocmVxdWlyZSAnb2IpCiAKKyhkZWZ2YXIgb3JnLWJhYmVsLXRlbXBvcmFy eS1kaXJlY3RvcnkpIDsgZnJvbSBvYi1jb3JlCisKIChkZWZ2YXIgb3JnLWJhYmVsLXRhbmdsZS1s YW5nLWV4dHMpCiAoYWRkLXRvLWxpc3QgJ29yZy1iYWJlbC10YW5nbGUtbGFuZy1leHRzICcoImph dmEiIC4gImphdmEiKSkKIAotKGRlZmN1c3RvbSBvcmctYmFiZWwtamF2YS1jb21tYW5kICJqYXZh IgotICAiTmFtZSBvZiB0aGUgamF2YSBjb21tYW5kLgotTWF5IGJlIGVpdGhlciBhIGNvbW1hbmQg aW4gdGhlIHBhdGgsIGxpa2UgamF2YQotb3IgYW4gYWJzb2x1dGUgcGF0aCBuYW1lLCBsaWtlIC91 c3IvbG9jYWwvYmluL2phdmEKLXBhcmFtZXRlcnMgbWF5IGJlIHVzZWQsIGxpa2UgamF2YSAtdmVy Ym9zZSIKKyhkZWZ2YXIgb3JnLWJhYmVsLWRlZmF1bHQtaGVhZGVyLWFyZ3M6amF2YSAnKCkKKyAg IkRlZmF1bHQgaGVhZGVyIGFyZ3MgZm9yIGphdmEgc291cmNlIGJsb2Nrcy4iKQorCisoZGVmY29u c3Qgb3JnLWJhYmVsLWhlYWRlci1hcmdzOmphdmEgJygoaW1wb3J0cyAuIDphbnkpKQorICAiSmF2 YS1zcGVjaWZpYyBoZWFkZXIgYXJndW1lbnRzLiIpCisKKyhkZWZ2YXIgb3JnLWJhYmVsLWphdmEt Y29tcGlsZXItY29tbWFuZCAiamF2YWMiCisgICJOYW1lIG9mIHRoZSBjb21tYW5kIHRvIGV4ZWN1 dGUgdGhlIGphdmEgY29tcGlsZXIuIikKKworKGRlZnZhciBvcmctYmFiZWwtamF2YS1ydW50aW1l LWNvbW1hbmQgImphdmEiCisgICJOYW1lIG9mIHRoZSBjb21tYW5kIHRvIHJ1biB0aGUgamF2YSBy dW50aW1lLiIpCisKKyhkZWZjdXN0b20gb3JnLWJhYmVsLWphdmEtaGxpbmUtdG8gIm51bGwiCisg ICJSZXBsYWNlIGhsaW5lcyBpbiBpbmNvbWluZyB0YWJsZXMgd2l0aCB0aGlzIHdoZW4gdHJhbnNs YXRpbmcgdG8gamF2YS4iCiAgIDpncm91cCAnb3JnLWJhYmVsCi0gIDp2ZXJzaW9uICIyNC4zIgor ICA6dmVyc2lvbiAiMjUuMiIKKyAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI5LjMiKQogICA6 dHlwZSAnc3RyaW5nKQogCi0oZGVmY3VzdG9tIG9yZy1iYWJlbC1qYXZhLWNvbXBpbGVyICJqYXZh YyIKLSAgIk5hbWUgb2YgdGhlIGphdmEgY29tcGlsZXIuCi1NYXkgYmUgZWl0aGVyIGEgY29tbWFu ZCBpbiB0aGUgcGF0aCwgbGlrZSBqYXZhYwotb3IgYW4gYWJzb2x1dGUgcGF0aCBuYW1lLCBsaWtl IC91c3IvbG9jYWwvYmluL2phdmFjCi1wYXJhbWV0ZXJzIG1heSBiZSB1c2VkLCBsaWtlIGphdmFj IC12ZXJib3NlIgorKGRlZmN1c3RvbSBvcmctYmFiZWwtamF2YS1udWxsLXRvICdobGluZQorICAi UmVwbGFjZSBgbnVsbCcgaW4gamF2YSB0YWJsZXMgd2l0aCB0aGlzIGJlZm9yZSByZXR1cm5pbmcu IgogICA6Z3JvdXAgJ29yZy1iYWJlbAotICA6dmVyc2lvbiAiMjQuMyIKLSAgOnR5cGUgJ3N0cmlu ZykKKyAgOnZlcnNpb24gIjI1LjIiCisgIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOS4zIikK KyAgOnR5cGUgJ3N5bWJvbCkKIAogKGRlZnVuIG9yZy1iYWJlbC1leGVjdXRlOmphdmEgKGJvZHkg cGFyYW1zKQotICAobGV0KiAoKGNsYXNzbmFtZSAob3IgKGNkciAoYXNzcSA6Y2xhc3NuYW1lIHBh cmFtcykpCi0JCQkoZXJyb3IKLQkJCSAiQ2FuJ3QgY29tcGlsZSBhIGphdmEgYmxvY2sgd2l0aG91 dCBhIGNsYXNzbmFtZSIpKSkKLQkgKHBhY2thZ2VuYW1lIChmaWxlLW5hbWUtZGlyZWN0b3J5IGNs YXNzbmFtZSkpCi0JIChzcmMtZmlsZSAoY29uY2F0IGNsYXNzbmFtZSAiLmphdmEiKSkKKyAgIkV4 ZWN1dGUgYSBqYXZhIHNvdXJjZSBibG9jayB3aXRoIEJPRFkgY29kZSBhbmQgUEFSQU1TIHBhcmFt cy4iCisgIChsZXQqICg7OyBpZiB0cnVlLCBydW4gZnJvbSBiYWJlbCB0ZW1wIGRpcmVjdG9yeQor ICAgICAgICAgKHJ1bi1mcm9tLXRlbXAgKG5vdCAoYXNzcSA6ZGlyIHBhcmFtcykpKQorICAgICAg ICAgOzsgY2xhc3MgYW5kIHBhY2thZ2UKKyAgICAgICAgIChmdWxsY2xhc3NuYW1lIChvciAoY2Ry IChhc3NxIDpjbGFzc25hbWUgcGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo b3JnLWJhYmVsLWphdmEtZmluZC1jbGFzc25hbWUgYm9keSkpKQorICAgICAgICAgOzsganVzdCB0 aGUgY2xhc3MgbmFtZQorICAgICAgICAgKGNsYXNzbmFtZSAoY2FyIChsYXN0IChzcGxpdC1zdHJp bmcgZnVsbGNsYXNzbmFtZSAiXFwuIikpKSkKKyAgICAgICAgIDs7IGp1c3QgdGhlIHBhY2thZ2Ug bmFtZQorICAgICAgICAgKHBhY2thZ2VuYW1lIChpZiAoc2VxLWNvbnRhaW5zIGZ1bGxjbGFzc25h bWUgPy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtYmFzZSBmdWxsY2xh c3NuYW1lKSkpCisgICAgICAgICA7OyB0aGUgYmFzZSBkaXIgdGhhdCBjb250YWlucyB0aGUgdG9w IGxldmVsIHBhY2thZ2UgZGlyCisgICAgICAgICAoYmFzZWRpciAoZmlsZS1uYW1lLWFzLWRpcmVj dG9yeSAoaWYgcnVuLWZyb20tdGVtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9yZy1iYWJlbC10ZW1wb3JhcnktZGlyZWN0b3J5CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIikpKQorICAgICAgICAgOzsgdGhlIGRp ciB0byB3cml0ZSB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgIChwYWNrYWdlZGlyIChpZiAoYW5k IChub3QgcnVuLWZyb20tdGVtcCkgcGFja2FnZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAg ICAgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bmNhdCBiYXNlZGlyIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIlxcXC4iICIvIiBwYWNrYWdl bmFtZSkpKQorICAgICAgICAgICAgICAgICAgICAgICBiYXNlZGlyKSkKKyAgICAgICAgIDs7IHRo ZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgIChzcmMtZmlsZSAoY29uY2F0 IHBhY2thZ2VkaXIgY2xhc3NuYW1lICIuamF2YSIpKQorCSA7OyBjb21waWxlciBmbGFncwogCSAo Y21wZmxhZyAob3IgKGNkciAoYXNzcSA6Y21wZmxhZyBwYXJhbXMpKSAiIikpCi0JIChjbWRsaW5l IChvciAoY2RyIChhc3NxIDpjbWRsaW5lIHBhcmFtcykpICIiKSkKKwkgOzsgcnVudGltZSBmbGFn cworICAgICAgICAgKGNtZGxpbmUgKG9yIChjZHIgKGFzc3EgOmNtZGxpbmUgcGFyYW1zKSkgIiIp KQorICAgICAgICAgOzsgY29tbWFuZCBsaW5lIGFyZ3MKIAkgKGNtZGFyZ3MgKG9yIChjZHIgKGFz c3EgOmNtZGFyZ3MgcGFyYW1zKSkgIiIpKQotCSAoZnVsbC1ib2R5IChvcmctYmFiZWwtZXhwYW5k LWJvZHk6Z2VuZXJpYyBib2R5IHBhcmFtcykpKQorICAgICAgICAgOzsgdGhlIGNvbW1hbmQgdG8g Y29tcGlsZSBhbmQgcnVuCisgICAgICAgICAoY21kIChjb25jYXQgb3JnLWJhYmVsLWphdmEtY29t cGlsZXItY29tbWFuZCAiICIgY21wZmxhZyAiICIKKyAgICAgICAgICAgICAgICAgICAgICAob3Jn LWJhYmVsLXByb2Nlc3MtZmlsZS1uYW1lIHNyYy1maWxlICdub3F1b3RlKQorICAgICAgICAgICAg ICAgICAgICAgICIgJiYgIiBvcmctYmFiZWwtamF2YS1ydW50aW1lLWNvbW1hbmQKKyAgICAgICAg ICAgICAgICAgICAgICAiIC1jcCAiIChvcmctYmFiZWwtcHJvY2Vzcy1maWxlLW5hbWUgYmFzZWRp ciAnbm9xdW90ZSkKKwkJICAgICAgIiAiIGNtZGxpbmUgIiAiIChpZiBydW4tZnJvbS10ZW1wIGNs YXNzbmFtZSBmdWxsY2xhc3NuYW1lKQorCQkgICAgICAiICIgY21kYXJncykpCisgICAgICAgICA7 OyBoZWFkZXIgYXJncyBmb3IgcmVzdWx0IHByb2Nlc3NpbmcKKyAgICAgICAgIChyZXN1bHQtdHlw ZSAoY2RyIChhc3NxIDpyZXN1bHQtdHlwZSBwYXJhbXMpKSkKKyAgICAgICAgIChyZXN1bHQtcGFy YW1zIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpCisgICAgICAgICAocmVzdWx0 LWZpbGUgKGFuZCAoZXEgcmVzdWx0LXR5cGUgJ3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG9yZy1iYWJlbC10ZW1wLWZpbGUgImphdmEtIikpKQorICAgICAgICAgOzsgdGhlIGV4 cGFuZGVkIGJvZHkgb2YgdGhlIHNvdXJjZSBibG9jaworICAgICAgICAgKGZ1bGwtYm9keSAob3Jn LWJhYmVsLWV4cGFuZC1ib2R5OmphdmEgYm9keSBwYXJhbXMpKSkKKwogICAgIDs7IGNyZWF0ZWQg cGFja2FnZS1uYW1lIGRpcmVjdG9yaWVzIGlmIG1pc3NpbmcKLSAgICAodW5sZXNzIChvciAobm90 IHBhY2thZ2VuYW1lKSAoZmlsZS1leGlzdHMtcCBwYWNrYWdlbmFtZSkpCi0gICAgICAobWFrZS1k aXJlY3RvcnkgcGFja2FnZW5hbWUgJ3BhcmVudHMpKQorICAgICh1bmxlc3MgKG9yIChub3QgcGFj a2FnZWRpcikgKGZpbGUtZXhpc3RzLXAgcGFja2FnZWRpcikpCisgICAgICAobWFrZS1kaXJlY3Rv cnkgcGFja2FnZWRpciAncGFyZW50cykpCisKKyAgICA7OyB3cml0ZSB0aGUgc291cmNlIGZpbGUK KyAgICAoc2V0cSBmdWxsLWJvZHkgKG9yZy1iYWJlbC1qYXZhLS1leHBhbmQtZm9yLWV2YWx1YXRp b24KKwkJICAgICBmdWxsLWJvZHkgcnVuLWZyb20tdGVtcCByZXN1bHQtdHlwZSByZXN1bHQtZmls ZSkpCiAgICAgKHdpdGgtdGVtcC1maWxlIHNyYy1maWxlIChpbnNlcnQgZnVsbC1ib2R5KSkKLSAg ICAob3JnLWJhYmVsLWV2YWwKLSAgICAgKGNvbmNhdCBvcmctYmFiZWwtamF2YS1jb21waWxlciAi ICIgY21wZmxhZyAiICIgc3JjLWZpbGUpICIiKQotICAgIChsZXQgKChyZXN1bHRzIChvcmctYmFi ZWwtZXZhbCAoY29uY2F0IG9yZy1iYWJlbC1qYXZhLWNvbW1hbmQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgY21kbGluZSAiICIgY2xhc3NuYW1lICIgIiBj bWRhcmdzKSAiIikpKQotICAgICAgKG9yZy1iYWJlbC1yZWFzc2VtYmxlLXRhYmxlCi0gICAgICAg KG9yZy1iYWJlbC1yZXN1bHQtY29uZCAoY2RyIChhc3NxIDpyZXN1bHQtcGFyYW1zIHBhcmFtcykp Ci0JIChvcmctYmFiZWwtcmVhZCByZXN1bHRzIHQpCi0gICAgICAgICAobGV0ICgodG1wLWZpbGUg KG9yZy1iYWJlbC10ZW1wLWZpbGUgImMtIikpKQotICAgICAgICAgICAod2l0aC10ZW1wLWZpbGUg dG1wLWZpbGUgKGluc2VydCByZXN1bHRzKSkKLSAgICAgICAgICAgKG9yZy1iYWJlbC1pbXBvcnQt ZWxpc3AtZnJvbS1maWxlIHRtcC1maWxlKSkpCi0gICAgICAgKG9yZy1iYWJlbC1waWNrLW5hbWUK LSAgICAgICAgKGNkciAoYXNzcSA6Y29sbmFtZS1uYW1lcyBwYXJhbXMpKSAoY2RyIChhc3NxIDpj b2xuYW1lcyBwYXJhbXMpKSkKLSAgICAgICAob3JnLWJhYmVsLXBpY2stbmFtZQotICAgICAgICAo Y2RyIChhc3NxIDpyb3duYW1lLW5hbWVzIHBhcmFtcykpIChjZHIgKGFzc3EgOnJvd25hbWVzIHBh cmFtcykpKSkpKSkKKworICAgIDs7IGNvbXBpbGUsIHJ1biwgcHJvY2VzcyByZXN1bHQKKyAgICAo b3JnLWJhYmVsLXJlYXNzZW1ibGUtdGFibGUKKyAgICAgKG9yZy1iYWJlbC1qYXZhLWV2YWx1YXRl IGNtZCByZXN1bHQtdHlwZSByZXN1bHQtcGFyYW1zIHJlc3VsdC1maWxlKQorICAgICAob3JnLWJh YmVsLXBpY2stbmFtZQorICAgICAgKGNkciAoYXNzb2MgOmNvbG5hbWUtbmFtZXMgcGFyYW1zKSkg KGNkciAoYXNzb2MgOmNvbG5hbWVzIHBhcmFtcykpKQorICAgICAob3JnLWJhYmVsLXBpY2stbmFt ZQorICAgICAgKGNkciAoYXNzb2MgOnJvd25hbWUtbmFtZXMgcGFyYW1zKSkgKGNkciAoYXNzb2Mg OnJvd25hbWVzIHBhcmFtcykpKSkpKQorCis7OyBoZWxwZXIgZnVuY3Rpb25zCisKKyhkZWZ1biBv cmctYmFiZWwtamF2YS1maW5kLWNsYXNzbmFtZSAoYm9keSkKKyAgIlRyeSB0byBmaW5kIGZ1bGx5 IHF1YWxpZmllZCBjbGFzcyBuYW1lIGluIEJPRFkuCitMb29rIHRocm91Z2ggQk9EWSBmb3IgdGhl IHBhY2thZ2UgYW5kIGNsYXNzLiAgSWYgZm91bmQsIHB1dCB0aGVtCit0b2dldGhlciBpbnRvIGEg ZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgYW5kIHJldHVybi4gIEVsc2UganVzdAorcmV0dXJu IGNsYXNzIG5hbWUuICBJZiB0aGF0IGlzbid0IGZvdW5kIGVpdGhlciwgZGVmYXVsdCB0byBNYWlu LiIKKyAgKGxldCAoKHBhY2thZ2UgKGlmIChzdHJpbmctbWF0Y2ggInBhY2thZ2UgXFxcKFteIF0q XFxcKTsiIGJvZHkpCisgICAgICAgICAgICAgICAgICAgICAobWF0Y2gtc3RyaW5nIDEgYm9keSkp KQorICAgICAgICAoY2xhc3MgKGlmIChzdHJpbmctbWF0Y2ggInB1YmxpYyBjbGFzcyBcXFwoW14g XG5dKlxcXCkiIGJvZHkpCisgICAgICAgICAgICAgICAgICAgKG1hdGNoLXN0cmluZyAxIGJvZHkp KSkpCisgICAgKG9yIChhbmQgcGFja2FnZSBjbGFzcyAoY29uY2F0IHBhY2thZ2UgIi4iIGNsYXNz KSkKKyAgICAgICAgKGFuZCBjbGFzcyBjbGFzcykKKyAgICAgICAgKGFuZCBwYWNrYWdlIChjb25j YXQgcGFja2FnZSAiLk1haW4iKSkKKyAgICAgICAgIk1haW4iKSkpCisKKyhkZWZjb25zdCBvcmct YmFiZWwtamF2YS0tcGFja2FnZS1yZSAiXltbOnNwYWNlOl1dKnBhY2thZ2UgLio7JCIKKyAgIlJl Z2V4cCBmb3IgdGhlIHBhY2thZ2Ugc3RhdGVtZW50LiIpCisoZGVmY29uc3Qgb3JnLWJhYmVsLWph dmEtLWltcG9ydHMtcmUgIl5bWzpzcGFjZTpdXSppbXBvcnQgLio7JCIKKyAgIlJlZ2V4cCBmb3Ig aW1wb3J0IHN0YXRlbWVudHMuIikKKyhkZWZjb25zdCBvcmctYmFiZWwtamF2YS0tY2xhc3MtcmUg Il5wdWJsaWMgY2xhc3MgW1s6YWxudW06XV9dK1tbOnNwYWNlOl1dKlxuP1tbOnNwYWNlOl1dKnsi CisgICJSZWdleHAgZm9yIHRoZSBjbGFzcyBkZWNsYXJhdGlvbi4iKQorKGRlZmNvbnN0IG9yZy1i YWJlbC1qYXZhLS1tYWluLXJlICJwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdcXCg/Olxc W11cXCk/IGFyZ3NcXCg/OlxcW11cXCk/KS4qXG4/W1s6c3BhY2U6XV0qeyIKKyAgIlJlZ2V4cCBm b3IgdGhlIG1haW4gbWV0aG9kIGRlY2xhcmF0aW9uLiIpCisoZGVmY29uc3Qgb3JnLWJhYmVsLWph dmEtLWFueS1tZXRob2QtcmUgInB1YmxpYyAuKiguKikuKlxuP1tbOnNwYWNlOl1dKnsiCisgICJS ZWdleHAgZm9yIGFueSBtZXRob2QuIikKKyhkZWZjb25zdCBvcmctYmFiZWwtamF2YS0tcmVzdWx0 LXdyYXBwZXIgIlxuICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIF9fdG9TdHJpbmcoT2JqZWN0IHZh bCkgeworICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICBy ZXR1cm4gXCJcXFwiXCIgKyB2YWwgKyBcIlxcXCJcIjsKKyAgICAgICAgfSBlbHNlIGlmICh2YWwg PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiOworICAgICAgICB9IGVsc2Ug aWYgKHZhbC5nZXRDbGFzcygpLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgU3RyaW5nQnVmZmVy IHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgT2JqZWN0W10gdmFscyA9IChP YmplY3RbXSl2YWw7CisgICAgICAgICAgICBzYi5hcHBlbmQoXCJbXCIpOworICAgICAgICAgICAg Zm9yIChpbnQgaWk9MDsgaWk8dmFscy5sZW5ndGg7IGlpKyspIHsKKyAgICAgICAgICAgICAgICBz Yi5hcHBlbmQoX190b1N0cmluZyh2YWxzW2lpXSkpOworICAgICAgICAgICAgICAgIGlmIChpaTx2 YWxzLmxlbmd0aC0xKQorICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoXCIsXCIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgc2IuYXBwZW5kKFwiXVwiKTsKKyAgICAgICAgICAgIHJl dHVybiBzYi50b1N0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIExp c3QpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsK KyAgICAgICAgICAgIExpc3QgdmFscyA9IChMaXN0KXZhbDsKKyAgICAgICAgICAgIHNiLmFwcGVu ZChcIltcIik7CisgICAgICAgICAgICBmb3IgKGludCBpaT0wOyBpaTx2YWxzLnNpemUoKTsgaWkr KykgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChfX3RvU3RyaW5nKHZhbHMuZ2V0KGlpKSkp OworICAgICAgICAgICAgICAgIGlmIChpaTx2YWxzLnNpemUoKS0xKQorICAgICAgICAgICAgICAg ICAgICBzYi5hcHBlbmQoXCIsXCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2IuYXBw ZW5kKFwiXVwiKTsKKyAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKHZhbCk7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0 aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXRwdXQgPSBuZXcg QnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoXCIlc1wiKSk7CisgICAgICAgIG91dHB1dC53 cml0ZShfX3RvU3RyaW5nKF9tYWluKGFyZ3MpKSk7CisgICAgICAgIG91dHB1dC5jbG9zZSgpOwor ICAgIH0iCisgICJDb2RlIHRvIGluamVjdCBpbnRvIGEgY2xhc3Mgc28gdGhhdCB3ZSBjYW4gY2Fw dHVyZSB0aGUgdmFsdWUgaXQgcmV0dXJucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gd2FzIGluc3Bp cmVkIGJ5IG9iLXB5dGhvbiwgYWx0aG91Z2ggbm90IGFzCitlbGVnYW50LiAgVGhpcyBtb2RpZmll ZCB0aGUgc291cmNlIGJsb2NrIHRvIHdyaXRlIG91dCB0aGUgdmFsdWUKK2l0IHdhbnRzIHRvIHJl dHVybiB0byBhIHRlbXBvcmFyeSBmaWxlIHNvIHRoYXQgb2ItamF2YSBjYW4gcmVhZAoraXQgYmFj ay4gIFRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSB0byB3cml0ZSBtdXN0IGJlCityZXBs YWNlZCBpbiB0aGlzIHN0cmluZy4iKQorCisoZGVmdW4gb3JnLWJhYmVsLWphdmEtLWV4cGFuZC1m b3ItZXZhbHVhdGlvbiAoYm9keSBzdXBwcmVzcy1wYWNrYWdlLXAgcmVzdWx0LXR5cGUgcmVzdWx0 LWZpbGUpCisgICJFeHBhbmQgc291cmNlIGJsb2NrIGZvciBldmFsdWF0aW9uLgorSW4gb3JkZXIg dG8gcmV0dXJuIGEgdmFsdWUgd2UgaGF2ZSB0byBhZGQgYSBfX3RvU3RyaW5nIG1ldGhvZC4KK0lu IG9yZGVyIHRvIHByZXZlbnQgY2xhc3NlcyB3aXRob3V0IG1haW4gbWV0aG9kcyBmcm9tIGVycm9y aW5nIHdlCithZGQgYSBkdW1teSBtYWluIG1ldGhvZCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLiAg VGhlc2UKK21hbmlwdWxhdGlvbnMgYXJlIGRvbmUgb3V0c2lkZSBvZiBgb3JnLWJhYmVsLS1leHBh bmQtYm9keScgc28KK3RoYXQgdGhleSBhcmUgaGlkZGVuIGZyb20gdGFuZ2xlcy4KKworQk9EWSBp cyB0aGUgZmlsZSBjb250ZW50IGJlZm9yZSBpbnN0cnVtZW50YXRpb24uCisKK1NVUFBSRVNTLVBB Q0tBR0UtUCBpZiB0cnVlLCBzdXBwcmVzcyB0aGUgcGFja2FnZSBzdGF0ZW1lbnQuCisKK1JFU1VM VC1UWVBFIGlzIHRha2VuIGZyb20gcGFyYW1zLgorCitSRVNVTFQtRklMRSBpcyB0aGUgdGVtcCBm aWxlIHRvIHdyaXRlIHRoZSByZXN1bHQuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNl cnQgYm9keSkKKworICAgIDs7IHN1cHByZXNzIHBhY2thZ2Ugc3RhdGVtZW50CisgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkKKyAgICAod2hlbiAoYW5kIHN1cHByZXNzLXBhY2thZ2UtcAorCSAg ICAgICAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWJhYmVsLWphdmEtLXBhY2thZ2UtcmUgbmlsIHQp KQorICAgICAgKHJlcGxhY2UtbWF0Y2ggIiIpKQorCisgICAgOzsgYWRkIGEgZHVtbXkgbWFpbiBt ZXRob2QgaWYgbmVlZGVkCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAod2hlbiAo bm90IChyZS1zZWFyY2gtZm9yd2FyZCBvcmctYmFiZWwtamF2YS0tbWFpbi1yZSBuaWwgdCkpCisg ICAgICAob3JnLWJhYmVsLWphdmEtLW1vdmUtcGFzdCBvcmctYmFiZWwtamF2YS0tY2xhc3MtcmUp CisgICAgICAoaW5zZXJ0ICJcbiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBh cmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoXCJzdWNjZXNzXCIpOworfVxuXG4iKSkK KworICAgIDs7IHNwZWNpYWwgaGFuZGxpbmcgdG8gcmV0dXJuIHZhbHVlCisgICAgKHdoZW4gKGVx IHJlc3VsdC10eXBlICd2YWx1ZSkKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAg ICAob3JnLWJhYmVsLWphdmEtLW1vdmUtcGFzdCBvcmctYmFiZWwtamF2YS0tY2xhc3MtcmUpCisg ICAgICAoaW5zZXJ0IChmb3JtYXQgb3JnLWJhYmVsLWphdmEtLXJlc3VsdC13cmFwcGVyCisJCSAg ICAgIChvcmctYmFiZWwtcHJvY2Vzcy1maWxlLW5hbWUgcmVzdWx0LWZpbGUgJ25vcXVvdGUpKSkK KyAgICAgIChzZWFyY2gtZm9yd2FyZCAicHVibGljIHN0YXRpYyB2b2lkIG1haW4oIikgOyByZW5h bWUgZXhpc3RpbmcgbWFpbgorICAgICAgKHJlcGxhY2UtbWF0Y2ggInB1YmxpYyBzdGF0aWMgT2Jq ZWN0IF9tYWluKCIpKQorCisgICAgOzsgYWRkIGltcG9ydHMKKyAgICAob3JnLWJhYmVsLWphdmEt LWltcG9ydC1tYXliZSAiamF2YS51dGlsIiAiTGlzdCIpCisgICAgKG9yZy1iYWJlbC1qYXZhLS1p bXBvcnQtbWF5YmUgImphdmEudXRpbCIgIkFycmF5cyIpCisgICAgKG9yZy1iYWJlbC1qYXZhLS1p bXBvcnQtbWF5YmUgImphdmEuaW8iICJCdWZmZXJlZFdyaXRlciIpCisgICAgKG9yZy1iYWJlbC1q YXZhLS1pbXBvcnQtbWF5YmUgImphdmEuaW8iICJGaWxlV3JpdGVyIikKKyAgICAob3JnLWJhYmVs LWphdmEtLWltcG9ydC1tYXliZSAiamF2YS5pbyIgIklPRXhjZXB0aW9uIikKKworICAgIChidWZm ZXItc3RyaW5nKSkpCisKKyhkZWZ1biBvcmctYmFiZWwtamF2YS0tbW92ZS1wYXN0IChyZSkKKyAg Ik1vdmUgcG9pbnQgcGFzdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gcmVnZXhw IFJFLiIKKyAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkKKyAgICAoZ290by1j aGFyICgxKyAobWF0Y2gtZW5kIDApKSkpKQorCisoZGVmdW4gb3JnLWJhYmVsLWphdmEtLWltcG9y dC1tYXliZSAocGFja2FnZSBjbGFzcykKKyAgIkltcG9ydCBmcm9tIFBBQ0tBR0UgdGhlIGdpdmVu IENMQVNTIGlmIGl0IGlzIHVzZWQgYW5kIG5vdCBhbHJlYWR5IGltcG9ydGVkLiIKKyAgKGxldCAo Y2xhc3MtZm91bmQgaW1wb3J0LWZvdW5kKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisg ICAgKHNldHEgY2xhc3MtZm91bmQgKHJlLXNlYXJjaC1mb3J3YXJkIGNsYXNzIG5pbCB0KSkKKyAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgIChzZXRxIGltcG9ydC1mb3VuZCAocmUtc2Vh cmNoLWZvcndhcmQgKGNvbmNhdCAiXmltcG9ydCAuKiIgcGFja2FnZSAiLioiIGNsYXNzICI7Iikg bmlsIHQpKQorICAgIChtZXNzYWdlICIlcy4lczogJXMgJXMiIHBhY2thZ2UgY2xhc3MgY2xhc3Mt Zm91bmQgaW1wb3J0LWZvdW5kKQorICAgICh3aGVuIChhbmQgY2xhc3MtZm91bmQgKG5vdCBpbXBv cnQtZm91bmQpKQorICAgICAgKG9yZy1iYWJlbC1qYXZhLS1tb3ZlLXBhc3Qgb3JnLWJhYmVsLWph dmEtLXBhY2thZ2UtcmUpCisgICAgICAoaW5zZXJ0IChjb25jYXQgImltcG9ydCAiIHBhY2thZ2Ug Ii4iIGNsYXNzICI7XG4iKSkpKSkKKworKGRlZnVuIG9yZy1iYWJlbC1leHBhbmQtYm9keTpqYXZh IChib2R5IHBhcmFtcykKKyAgIkV4cGFuZCBCT0RZIHdpdGggUEFSQU1TLgorQk9EWSBjb3VsZCBi ZSBhIGZldyBzdGF0ZW1lbnRzLCBvciBjb3VsZCBpbmNsdWRlIGEgZnVsbCBjbGFzcworZGVmaW5p dGlvbiBzcGVjaWZ5aW5nIHBhY2thZ2UsIGltcG9ydHMsIGFuZCBjbGFzcy4gIEJlY2F1c2Ugd2UK K2FsbG93IHRoaXMgZmxleGliaWxpdHkgaW4gd2hhdCB0aGUgc291cmNlIGJsb2NrIGNhbiBjb250 YWluLCBpdAoraXMgc2ltcGxlc3QgdG8gZXhwYW5kIHRoZSBjb2RlIGJsb2NrIGZyb20gdGhlIGlu c2lkZSBvdXQuIgorICAobGV0KiAoKGZ1bGxjbGFzc25hbWUgKG9yIChjZHIgKGFzc3EgOmNsYXNz bmFtZSBwYXJhbXMpKSA7IGNsYXNzIGFuZCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG9yZy1iYWJlbC1qYXZhLWZpbmQtY2xhc3NuYW1lIGJvZHkpKSkKKyAgICAgICAgIChj bGFzc25hbWUgKGNhciAobGFzdCAoc3BsaXQtc3RyaW5nIGZ1bGxjbGFzc25hbWUgIlxcLiIpKSkp IDsganVzdCBjbGFzcyBuYW1lCisgICAgICAgICAocGFja2FnZW5hbWUgKGlmIChzZXEtY29udGFp bnMgZnVsbGNsYXNzbmFtZSA/LikgIDsganVzdCBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZpbGUtbmFtZS1iYXNlIGZ1bGxjbGFzc25hbWUpKSkKKyAgICAgICAgICh2 YXItbGluZXMgKG9yZy1iYWJlbC12YXJpYWJsZS1hc3NpZ25tZW50czpqYXZhIHBhcmFtcykpCisg ICAgICAgICAoaW1wb3J0cy12YWwgKGFzc3EgOmltcG9ydHMgcGFyYW1zKSkKKyAgICAgICAgIChp bXBvcnRzIChpZiBpbXBvcnRzLXZhbAorICAgICAgICAgICAgICAgICAgICAgIChzcGxpdC1zdHJp bmcgKG9yZy1iYWJlbC1yZWFkIChjZHIgaW1wb3J0cy12YWwpIG5pbCkgIiAiKQorICAgICAgICAg ICAgICAgICAgICBuaWwpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGluc2VydCBi b2R5KQorCisgICAgICA7OyB3cmFwIG1haW4uICBJZiB0aGVyZSBhcmUgbWV0aG9kcyBkZWZpbmVk LCBidXQgbm8gbWFpbiBtZXRob2QKKyAgICAgIDs7IGFuZCBubyBjbGFzcywgd3JhcCBldmVyeXRo aW5nIGluIGEgZ2VuZXJpYyBtYWluIG1ldGhvZC4KKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpCisgICAgICAod2hlbiAoYW5kIChub3QgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1iYWJlbC1q YXZhLS1jbGFzcy1yZSBuaWwgdCkpCisgICAgICAgICAgICAgICAgIChub3QgKHJlLXNlYXJjaC1m b3J3YXJkIG9yZy1iYWJlbC1qYXZhLS1hbnktbWV0aG9kLXJlIG5pbCB0KSkpCisgICAgICAgIChv cmctYmFiZWwtamF2YS0tbW92ZS1wYXN0IG9yZy1iYWJlbC1qYXZhLS1wYWNrYWdlLXJlKSA7IGlm IHBhY2thZ2UgaXMgZGVmaW5lZCwgbW92ZSBwYXN0IGl0CisgICAgICAgIChvcmctYmFiZWwtamF2 YS0tbW92ZS1wYXN0IG9yZy1iYWJlbC1qYXZhLS1pbXBvcnRzLXJlKSA7IGlmIGltcG9ydHMgYXJl IGRlZmluZWQsIG1vdmUgcGFzdCB0aGVtCisgICAgICAgIChpbnNlcnQgInB1YmxpYyBzdGF0aWMg dm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiIpCisgICAgICAgIChpbmRlbnQtY29kZS1yaWdp ZGx5IChwb2ludCkgKHBvaW50LW1heCkgNCkKKyAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4 KSkKKyAgICAgICAgKGluc2VydCAiXG59IikpCisKKyAgICAgIDs7IHdyYXAgY2xhc3MuICBJZiB0 aGVyZSdzIG5vIGNsYXNzLCB3cmFwIGV2ZXJ5dGhpbmcgaW4gYQorICAgICAgOzsgZ2VuZXJpYyBj bGFzcy4KKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hlbiAobm90IChy ZS1zZWFyY2gtZm9yd2FyZCBvcmctYmFiZWwtamF2YS0tY2xhc3MtcmUgbmlsIHQpKQorICAgICAg ICAob3JnLWJhYmVsLWphdmEtLW1vdmUtcGFzdCBvcmctYmFiZWwtamF2YS0tcGFja2FnZS1yZSkg OyBpZiBwYWNrYWdlIGlzIGRlZmluZWQsIG1vdmUgcGFzdCBpdAorICAgICAgICAob3JnLWJhYmVs LWphdmEtLW1vdmUtcGFzdCBvcmctYmFiZWwtamF2YS0taW1wb3J0cy1yZSkgOyBpZiBpbXBvcnRz IGFyZSBkZWZpbmVkLCBtb3ZlIHBhc3QgdGhlbQorICAgICAgICAoaW5zZXJ0IChjb25jYXQgIlxu cHVibGljIGNsYXNzICIgKGZpbGUtbmFtZS1iYXNlIGNsYXNzbmFtZSkgIiB7XG4iKSkKKyAgICAg ICAgKGluZGVudC1jb2RlLXJpZ2lkbHkgKHBvaW50KSAocG9pbnQtbWF4KSA0KQorICAgICAgICAo Z290by1jaGFyIChwb2ludC1tYXgpKQorICAgICAgICAoaW5zZXJ0ICJcbn0iKSkKKyAgICAgIChn b3RvLWNoYXIgKHBvaW50LW1pbikpCisKKyAgICAgIDs7IGluc2VydCB2YXJpYWJsZXMgZnJvbSBz b3VyY2UgYmxvY2sgaGVhZGVycworICAgICAgKHdoZW4gdmFyLWxpbmVzCisgICAgICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgIChvcmctYmFiZWwtamF2YS0tbW92ZS1wYXN0IG9y Zy1iYWJlbC1qYXZhLS1jbGFzcy1yZSkgICA7IG1vdmUgaW5zaWRlIGNsYXNzCisgICAgICAgIChp bnNlcnQgKG1hcGNvbmNhdCAnaWRlbnRpdHkgdmFyLWxpbmVzICJcbiIpKQorICAgICAgICAoaW5z ZXJ0ICJcbiIpKQorCisgICAgICA7OyBhZGQgaW1wb3J0cyBmcm9tIHNvdXJjZSBibG9jayBoZWFk ZXJzCisgICAgICAod2hlbiBpbXBvcnRzCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp CisgICAgICAgIChvcmctYmFiZWwtamF2YS0tbW92ZS1wYXN0IG9yZy1iYWJlbC1qYXZhLS1wYWNr YWdlLXJlKSA7IGlmIHBhY2thZ2UgaXMgZGVmaW5lZCwgbW92ZSBwYXN0IGl0CisgICAgICAgIChp bnNlcnQgKG1hcGNvbmNhdCAobGFtYmRhIChwYWNrYWdlKSAoY29uY2F0ICJpbXBvcnQgIiBwYWNr YWdlICI7IikpIGltcG9ydHMgIlxuIikgIlxuIikpCisKKyAgICAgIDs7IGFkZCBwYWNrYWdlIGF0 IHRoZSB0b3AKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hlbiAoYW5k IHBhY2thZ2VuYW1lIChub3QgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1iYWJlbC1qYXZhLS1wYWNr YWdlLXJlIG5pbCB0KSkpCisgICAgICAgIChpbnNlcnQgKGNvbmNhdCAicGFja2FnZSAiIHBhY2th Z2VuYW1lICI7XG4iKSkpCisKKyAgICAgIDs7IHJldHVybiBleHBhbmRlZCBib2R5CisgICAgICAo YnVmZmVyLXN0cmluZykpKSkKKworKGRlZnVuIG9yZy1iYWJlbC12YXJpYWJsZS1hc3NpZ25tZW50 czpqYXZhIChwYXJhbXMpCisgICJSZXR1cm4gYSBsaXN0IG9mIGphdmEgc3RhdGVtZW50cyBhc3Np Z25pbmcgdGhlIGJsb2NrJ3MgdmFyaWFibGVzLgordmFyaWFibGVzIGFyZSBjb250YWluZWQgaW4g UEFSQU1TLiIKKyAgKG1hcGNhcgorICAgKGxhbWJkYSAocGFpcikKKyAgICAgKGxldCogKCh0eXBl LWRhdGEgKG9yZy1iYWJlbC1qYXZhLXZhbC10by10eXBlIChjZHIgcGFpcikpKQorICAgICAgICAg ICAgKGJhc2V0eXBlIChjYXIgdHlwZS1kYXRhKSkKKyAgICAgICAgICAgICh2YXItdG8tamF2YSAo bGFtYmRhICh2YXIpIChmdW5jYWxsICMnb3JnLWJhYmVsLWphdmEtdmFyLXRvLWphdmEgdmFyIGJh c2V0eXBlKSkpKQorICAgICAgIChmb3JtYXQgIiAgICBzdGF0aWMgJXMgJXMgPSAlczsiCisgICAg ICAgICAgICAgICAoY2RyIHR5cGUtZGF0YSkgICAgICAgICAgICAgICAgICAgICA7IHR5cGUKKyAg ICAgICAgICAgICAgIChjYXIgcGFpcikgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbmFtZQor ICAgICAgICAgICAgICAgKGZ1bmNhbGwgdmFyLXRvLWphdmEgKGNkciBwYWlyKSkpKSkgOyB2YWx1 ZQorICAgKG9yZy1iYWJlbC0tZ2V0LXZhcnMgcGFyYW1zKSkpCisKKyhkZWZ1biBvcmctYmFiZWwt amF2YS12YXItdG8tamF2YSAodmFyIGJhc2V0eXBlKQorICAiQ29udmVydCBhbiBlbGlzcCB2YWx1 ZSB0byBhIGphdmEgdmFyaWFibGUuCitDb252ZXJ0IGFuIGVsaXNwIHZhbHVlLCBWQVIsIG9mIHR5 cGUgQkFTRVRZUEUgaW50byBhIHN0cmluZyBvZgoramF2YSBzb3VyY2UgY29kZSBzcGVjaWZ5aW5n IGEgdmFyaWFibGUgb2YgdGhlIHNhbWUgdmFsdWUuIgorICAoY29uZCAoKGFuZCAoc2VxdWVuY2Vw IHZhcikgKG5vdCAoc3RyaW5ncCB2YXIpKSkKKyAgICAgICAgIChsZXQgKCh2YXItdG8tamF2YSAo bGFtYmRhICh2YXIpIChmdW5jYWxsICMnb3JnLWJhYmVsLWphdmEtdmFyLXRvLWphdmEgdmFyIGJh c2V0eXBlKSkpKQorICAgICAgICAgICAoY29uY2F0ICJBcnJheXMuYXNMaXN0KCIgKG1hcGNvbmNh dCB2YXItdG8tamF2YSB2YXIgIiwgIikgIikiKSkpCisgICAgICAgICgoZXEgdmFyICdobGluZSkg b3JnLWJhYmVsLWphdmEtaGxpbmUtdG8pCisgICAgICAgICgoZXEgYmFzZXR5cGUgJ2ludGVnZXJw KSAoZm9ybWF0ICIlZCIgdmFyKSkKKyAgICAgICAgKChlcSBiYXNldHlwZSAnZmxvYXRwKSAoZm9y bWF0ICIlZiIgdmFyKSkKKyAgICAgICAgKChlcSBiYXNldHlwZSAnc3RyaW5ncCkgKGlmIChhbmQg KHN0cmluZ3AgdmFyKSAoc3RyaW5nLW1hdGNoLXAgIi5cbisuIiB2YXIpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJKYXZhIGRvZXMgbm90IHN1cHBvcnQgbXVs dGlsaW5lIHN0cmluZyBsaXRlcmFscyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGZvcm1hdCAiXCIlc1wiIiB2YXIpKSkpKQorCisoZGVmdW4gb3JnLWJhYmVsLWphdmEtdmFs LXRvLXR5cGUgKHZhbCkKKyAgIkRldGVybWluZSB0aGUgdHlwZSBvZiBWQUwuCitSZXR1cm4gKEJB U0VUWVBFIC4gTElTVFRZUEUpLCB3aGVyZSBCQVNFVFlQRSBpcyBhIHN5bWJvbAorcmVwcmVzZW50 aW5nIHRoZSB0eXBlIG9mIHRoZSBpbmRpdmlkdWFsIGl0ZW1zIGluIFZBTCwgYW5kCitMSVNUVFlQ RSBpcyBhIHN0cmluZyBuYW1lIG9mIHRoZSB0eXBlIHBhcmFtZXRlciBmb3IgYSBjb250YWluZXIK K2ZvciBCQVNFVFlQRSBpdGVtcy4iCisgIChsZXQqICgoYmFzZXR5cGUgKG9yZy1iYWJlbC1qYXZh LXZhbC10by1iYXNlLXR5cGUgdmFsKSkKKyAgICAgICAgIChiYXNldHlwZS1zdHIgKHBjYXNlIGJh c2V0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGBpbnRlZ2VycCAiSW50ZWdlciIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgKGBmbG9hdHAgIkRvdWJsZSIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgKGBzdHJpbmdwICJTdHJpbmciKQorICAgICAgICAgICAgICAgICAgICAgICAg IChfIChlcnJvciAiVW5rbm93biB0eXBlICVTIiBiYXNldHlwZSkpKSkpCisgICAgKGNvbmQKKyAg ICAgKChhbmQgKGxpc3RwIHZhbCkgKGxpc3RwIChjYXIgdmFsKSkpIDsgYSB0YWJsZQorICAgICAg KGNvbnMgYmFzZXR5cGUgKGZvcm1hdCAiTGlzdDxMaXN0PCVzPj4iIGJhc2V0eXBlLXN0cikpKQor ICAgICAoKG9yIChsaXN0cCB2YWwpICh2ZWN0b3JwIHZhbCkpICAgICAgOyBhIGxpc3QgZGVjbGFy ZWQgaW4gdGhlIHNvdXJjZSBibG9jayBoZWFkZXIKKyAgICAgIChjb25zIGJhc2V0eXBlIChmb3Jt YXQgIkxpc3Q8JXM+IiBiYXNldHlwZS1zdHIpKSkKKyAgICAgKHQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgcmV0dXJuIGJhc2UgdHlwZQorICAgICAgKGNvbnMgYmFzZXR5cGUg YmFzZXR5cGUtc3RyKSkpKSkKKworKGRlZnVuIG9yZy1iYWJlbC1qYXZhLXZhbC10by1iYXNlLXR5 cGUgKHZhbCkKKyAgIkRldGVybWluZSB0aGUgYmFzZSB0eXBlIG9mIFZBTC4KK1ZBTCBtYXkgYmUK K2BpbnRlZ2VycCcgaWYgYWxsIGJhc2UgdmFsdWVzIGFyZSBpbnRlZ2VycworYGZsb2F0cCcgaWYg YWxsIGJhc2UgdmFsdWVzIGFyZSBlaXRoZXIgZmxvYXRpbmcgcG9pbnRzIG9yIGludGVnZXJzCitg c3RyaW5ncCcgb3RoZXJ3aXNlLiIKKyAgKGNvbmQKKyAgICgoaW50ZWdlcnAgdmFsKSAnaW50ZWdl cnApCisgICAoKGZsb2F0cCB2YWwpICdmbG9hdHApCisgICAoKG9yIChsaXN0cCB2YWwpICh2ZWN0 b3JwIHZhbCkpCisgICAgKGxldCAoKHR5cGUgbmlsKSkKKyAgICAgIChtYXBjIChsYW1iZGEgKHYp CisgICAgICAgICAgICAgIChwY2FzZSAob3JnLWJhYmVsLWphdmEtdmFsLXRvLWJhc2UtdHlwZSB2 KQorICAgICAgICAgICAgICAgIChgc3RyaW5ncCAoc2V0cSB0eXBlICdzdHJpbmdwKSkKKyAgICAg ICAgICAgICAgICAoYGZsb2F0cAorICAgICAgICAgICAgICAgICAod2hlbiAob3IgKG5vdCB0eXBl KSAoZXEgdHlwZSAnaW50ZWdlcnApKQorICAgICAgICAgICAgICAgICAgIChzZXRxIHR5cGUgJ2Zs b2F0cCkpKQorICAgICAgICAgICAgICAgIChgaW50ZWdlcnAKKyAgICAgICAgICAgICAgICAgKHVu bGVzcyB0eXBlIChzZXRxIHR5cGUgJ2ludGVnZXJwKSkpKSkKKyAgICAgICAgICAgIHZhbCkKKyAg ICAgIHR5cGUpKQorICAgKHQgJ3N0cmluZ3ApKSkKKworKGRlZnVuIG9yZy1iYWJlbC1qYXZhLXRh YmxlLW9yLXN0cmluZyAocmVzdWx0cykKKyAgIkNvbnZlcnQgUkVTVUxUUyBpbnRvIGFuIGFwcHJv cHJpYXRlIGVsaXNwIHZhbHVlLgorSWYgdGhlIHJlc3VsdHMgbG9vayBsaWtlIGEgbGlzdCBvciB2 ZWN0b3IsIHRoZW4gY29udmVydCB0aGVtIGludG8gYW4KK0VtYWNzLWxpc3AgdGFibGUsIG90aGVy d2lzZSByZXR1cm4gdGhlIHJlc3VsdHMgYXMgYSBzdHJpbmcuIgorICAobGV0ICgocmVzIChvcmct YmFiZWwtc2NyaXB0LWVzY2FwZSByZXN1bHRzKSkpCisgICAgKGlmIChsaXN0cCByZXMpCisgICAg ICAgIChtYXBjYXIgKGxhbWJkYSAoZWwpIChpZiAoZXEgJ251bGwgZWwpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvcmctYmFiZWwtamF2YS1udWxsLXRvCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWwpKQorICAgICAgICAgICAgICAgIHJlcykKKyAgICAgIHJlcykp KQorCisoZGVmdW4gb3JnLWJhYmVsLWphdmEtZXZhbHVhdGUgKGNtZCByZXN1bHQtdHlwZSByZXN1 bHQtcGFyYW1zIHJlc3VsdC1maWxlKQorICAiRXZhbHVhdGUgdXNpbmcgYW4gZXh0ZXJuYWwgamF2 YSBwcm9jZXNzLgorQ01EIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuCisKK0lmIFJFU1VMVC1UWVBF IGVxdWFscyAnb3V0cHV0IHRoZW4gcmV0dXJuIHN0YW5kYXJkIG91dHB1dCBhcyBhCitzdHJpbmcu ICBJZiBSRVNVTFQtVFlQRSBlcXVhbHMgJ3ZhbHVlIHRoZW4gcmV0dXJuIHRoZSB2YWx1ZQorcmV0 dXJuZWQgYnkgdGhlIHNvdXJjZSBibG9jaywgYXMgZWxpc3AuCisKK1JFU1VMVC1QQVJBTVMgaW5w dXQgcGFyYW1zIHVzZWQgdG8gZm9ybWF0IHRoZSByZXBvbnNlLgorCitSRVNVTFQtRklMRSBmaWxl bmFtZSBvZiB0aGUgdGVtcGZpbGUgdG8gc3RvcmUgdGhlIHJldHVybmVkIHZhbHVlIGluCitmb3Ig J3ZhbHVlIFJFU1VMVC1UWVBFLiAgTm90IHVzZWQgZm9yICdvdXRwdXQgUkVTVUxULVRZUEUuIgor ICAobGV0ICgocmF3IChwY2FzZSByZXN1bHQtdHlwZQorICAgICAgICAgICAgICAgKCdvdXRwdXQg KG9yZy1iYWJlbC1ldmFsIGNtZCAiIikpCisgICAgICAgICAgICAgICAoJ3ZhbHVlIChvcmctYmFi ZWwtZXZhbCBjbWQgIiIpCisgICAgICAgICAgICAgICAgICAgICAgIChvcmctYmFiZWwtZXZhbC1y ZWFkLWZpbGUgcmVzdWx0LWZpbGUpKSkpKQorICAgIChvcmctYmFiZWwtcmVzdWx0LWNvbmQgcmVz dWx0LXBhcmFtcyByYXcKKyAgICAgIChvcmctYmFiZWwtamF2YS10YWJsZS1vci1zdHJpbmcgcmF3 KSkpKQogCiAocHJvdmlkZSAnb2ItamF2YSkKIApkaWZmIC0tZ2l0IGEvdGVzdGluZy9saXNwL3Rl c3Qtb2ItamF2YS5lbCBiL3Rlc3RpbmcvbGlzcC90ZXN0LW9iLWphdmEuZWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40ZTIyYmQ4YjUKLS0tIC9kZXYvbnVsbAorKysgYi90 ZXN0aW5nL2xpc3AvdGVzdC1vYi1qYXZhLmVsCkBAIC0wLDAgKzEsNTc0IEBACis7OzsgdGVzdC1v Yi1qYXZhLmVsIC0tLSB0ZXN0cyBmb3Igb2ItamF2YS5lbAorCis7OyBDb3B5cmlnaHQgKGMpIDIw MjAgSWFuIE1hcnRpbnMKKzs7IEF1dGhvcnM6IElhbiBNYXJ0aW5zCisKKzs7IFRoaXMgZmlsZSBp cyBub3QgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7OyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK Kzs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor Ozs7IENvZGU6CisocmVxdWlyZSAnb3JnLXRlc3QpCisKKyhvcmctdGVzdC1mb3ItZXhlY3V0YWJs ZSAiamF2YSIpCisodW5sZXNzIChmZWF0dXJlcCAnb2ItamF2YSkKKyAgKHNpZ25hbCAnbWlzc2lu Zy10ZXN0LWRlcGVuZGVuY3kgIlN1cHBvcnQgZm9yIGphdmEgY29kZSBibG9ja3MiKSkKKworOyBz aW1wbGUgdGVzdHMKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvc2ltcGxlICgpCisgICJIZWxsbyB3 b3JsZCBwcm9ncmFtIHRoYXQgd3JpdGVzIG91dHB1dC4iCisgIChvcmctdGVzdC13aXRoLXRlbXAt dGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnJlc3VsdHMgb3V0cHV0IHNpbGVudAorU3lz dGVtLm91dC5wcmludCg0Mik7CisjK2VuZF9zcmMiCisgICAoc2hvdWxkIChzdHJpbmc9ICI0MiIg KG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZh L3NpbXBsZS13aXRoLWJyYWNrZXQgKCkKKyAgIkhlbGxvIHdvcmxkIHByb2dyYW0gdGhhdCBvdXRw dXRzIGFuIG9wZW4gc3F1YXJlIGJyYWNrZXQuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQK KyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQKK1N5c3RlbS5v dXQucHJpbnQoXCJbNDJcIik7CisjK2VuZF9zcmMiCisgICAoc2hvdWxkIChzdHJpbmc9ICJbNDIi IChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2 YS9zaW1wbGUtd2l0aC1xdW90ZSAoKQorICAiSGVsbG8gd29ybGQgcHJvZ3JhbSB0aGF0IHdyaXRl cyBxdW90ZXMuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3Ny YyBqYXZhIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQKK1N5c3RlbS5vdXQucHJpbnQoXCJcXFwiNDJc XFwiXCIpOworIytlbmRfc3JjIgorICAgKHNob3VsZCAoc3RyaW5nPSAiXCI0MlwiIiAob3JnLWJh YmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvc2ltcGxl LXJldHVybi1pbnQgKCkKKyAgIkhlbGxvIHdvcmxkIHByb2dyYW0gdGhhdCByZXR1cm5zIGFuIGlu dCB2YWx1ZS4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAorICAgICAgIiMrYmVnaW5fc3Jj IGphdmEgOnJlc3VsdHMgc2lsZW50CityZXR1cm4gNDI7CisjK2VuZF9zcmMiCisgICAoc2hvdWxk IChlcSA0MiAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0 IG9iLWphdmEvc2ltcGxlLXJldHVybi1mbG9hdCAoKQorICAiSGVsbG8gd29ybGQgcHJvZ3JhbSB0 aGF0IHJldHVybnMgYSBmbG9hdCB2YWx1ZS4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAor ICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnJlc3VsdHMgc2lsZW50CityZXR1cm4gNDIuMDsKKyMr ZW5kX3NyYyIKKyAgIChzaG91bGQgKGVxdWFsIDQyLjAgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1i bG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZhL3NpbXBsZS1yZXR1cm4tc3RyaW5nICgp CisgICJIZWxsbyB3b3JsZCBwcm9ncmFtIHRoYXQgcmV0dXJucyBhIHN0cmluZyB2YWx1ZS4iCisg IChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnJlc3Vs dHMgc2lsZW50CityZXR1cm4gXCJmb3J0eSB0d29cIjsKKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxk IChzdHJpbmc9ICJmb3J0eSB0d28iIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQor CisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9zaW1wbGUtd2l0aC1tYWluICgpCisgICJIZWxsbyB3b3Js ZCBwcm9ncmFtIHRoYXQgZGVmaW5lcyBhIG1haW4gZnVuY3Rpb24uIgorICAob3JnLXRlc3Qtd2l0 aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIG91dHB1dCBzaWxl bnQKK3B1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0u b3V0LnByaW50KDQyKTsKK30KKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkIChzdHJpbmc9ICI0MiIg KG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZh L3NpbXBsZS13aXRoLXR3by1tZXRob2RzICgpCisgICJIZWxsbyB3b3JsZCBwcm9ncmFtIHdpdGgg dHdvIG1ldGhvZHMgYW5kIG5vIGNsYXNzLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0Cisg ICAgICAiIytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRwdXQgc2lsZW50CitwdWJsaWMgc3Rh dGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludChmb28o KSk7Cit9CitwdWJsaWMgc3RhdGljIGludCBmb28oKSB7CisgICAgcmV0dXJuIDQyOworfQorIytl bmRfc3JjIgorICAgIChzaG91bGQgKHN0cmluZz0gIjQyIiAob3JnLWJhYmVsLWV4ZWN1dGUtc3Jj LWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvc2ltcGxlLXdpdGgtbm8tbWFpbiAo KQorICAiSGVsbG8gd29ybGQgcHJvZ3JhbSB3aXRoIG5vIG1haW4gbWV0aG9kLiAgQmFiZWwgYWRk cyBhIGR1bW15IG9uZSBzbyBpdCBjYW4gcnVuIHdpdGhvdXQgZXJyb3IuIgorICAob3JnLXRlc3Qt d2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIG91dHB1dCBz aWxlbnQKK3B1YmxpYyBzdGF0aWMgaW50IGZvbygpIHsKKyAgICByZXR1cm4gNDI7Cit9CisjK2Vu ZF9zcmMiCisgICAgKHNob3VsZCAoc3RyaW5nPSAic3VjY2VzcyIgKG9yZy1iYWJlbC1leGVjdXRl LXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZhL3NpbXBsZS13aXRoLW1haW4t YXJncy1hcnJheSAoKQorICAiSGVsbG8gd29ybGQgcHJvZ3JhbSB0aGF0IGRlZmluZXMgYSBtYWlu IGZ1bmN0aW9uIHdpdGggdGhlIHNxdWFyZSBicmFja2V0cyBhZnRlciBgYXJncycuIgorICAob3Jn LXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIG91 dHB1dCBzaWxlbnQKK3B1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAg ICBTeXN0ZW0ub3V0LnByaW50KDQyKTsKK30KKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkIChzdHJp bmc9ICI0MiIgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVz dCBvYi1qYXZhL3NpbXBsZS13aXRoLWNsYXNzICgpCisgICJIZWxsbyB3b3JsZCBwcm9ncmFtIHRo YXQgZGVmaW5lcyBhIGNsYXNzLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAi IytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRwdXQgc2lsZW50CitwdWJsaWMgY2xhc3MgU2lt cGxlIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAg ICAgIFN5c3RlbS5vdXQucHJpbnQoNDIpOworICAgIH0KK30KKyMrZW5kX3NyYyIKKyAgIChzaG91 bGQgKHN0cmluZz0gIjQyIiAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVy dC1kZWZ0ZXN0IG9iLWphdmEvc2ltcGxlLXdpdGgtY2xhc3MtYW5kLXBhY2thZ2UgKCkKKyAgIkhl bGxvIHdvcmxkIHByb2dyYW0gdGhhdCBkZWZpbmVzIGEgY2xhc3MgYW5kIHBhY2thZ2UuIgorICAo b3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRz IG91dHB1dCBzaWxlbnQKK3BhY2thZ2UgcGtnOworcHVibGljIGNsYXNzIFNpbXBsZSB7CisgICAg cHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0u b3V0LnByaW50KDQyKTsKKyAgICB9Cit9CisjK2VuZF9zcmMiCisgICAgKHNob3VsZCAoc3RyaW5n PSAiNDIiIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qg b2ItamF2YS9zaW1wbGUtd2l0aC1jbGFzcy1hdHRyICgpCisgICJIZWxsbyB3b3JsZCBwcm9ncmFt IHdpdGggY2xhc3MgaGVhZGVyIGF0dHJpYnV0ZS4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4 dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnJlc3VsdHMgb3V0cHV0IHNpbGVudCA6Y2xhc3Nu YW1lIFNpbXBsZQorcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAg IFN5c3RlbS5vdXQucHJpbnQoNDIpOworfQorIytlbmRfc3JjIgorICAgKHNob3VsZCAoc3RyaW5n PSAiNDIiIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qg b2ItamF2YS9zaW1wbGUtd2l0aC1jbGFzcy1hdHRyLXdpdGgtcGFja2FnZSAoKQorICAiSGVsbG8g d29ybGQgcHJvZ3JhbSB3aXRoIGNsYXNzIGF0dHIgd2l0aCBwYWNrYWdlLiIKKyAgKG9yZy10ZXN0 LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRwdXQg c2lsZW50IDpjbGFzc25hbWUgcGtnLlNpbXBsZQorcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3Ry aW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnQoNDIpOworfQorIytlbmRfc3JjIgor ICAgIChzaG91bGQgKHN0cmluZz0gIjQyIiAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkp KSkKKworCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9vbmUtYXJnICgpCisgICJDb21tYW5kIGxpbmUg YXJnLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2 YSA6cmVzdWx0cyBvdXRwdXQgc2lsZW50IDpjbWRhcmdzIFwiZm9ydHl0d29cIgorU3lzdGVtLm91 dC5wcmludChhcmdzWzBdKTsKKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkIChzdHJpbmc9ICJmb3J0 eXR3byIgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBv Yi1qYXZhL2FyZ3MtcXVvdGVkLXN0cmluZyAoKQorICAiVHdvIGNvbW1hbmQgbGluZSBhcmdzLCBm aXJzdCBjb250YWlucyBhIHNwYWNlLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAg ICAiIytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRwdXQgc2lsZW50IDpjbWRhcmdzIFwiXFxc ImZvcnR5IHR3b1xcXCIgNDJcIgorU3lzdGVtLm91dC5wcmludGxuKGFyZ3NbMF0pOworU3lzdGVt Lm91dC5wcmludGxuKGFyZ3NbMV0pOworIytlbmRfc3JjIgorICAgIChzaG91bGQgKHN0cmluZz0g ImZvcnR5IHR3b1xuNDJcbiIgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKzs7 IHZhciB0ZXN0cworCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9pbnRlZ2VyLXZhciAoKQorICAiUmVh ZCBhbmQgd3JpdGUgYW4gaW50ZWdlciB2YXJpYWJsZS4iCisgIChvcmctdGVzdC13aXRoLXRlbXAt dGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnZhciBhPTQyIDpyZXN1bHRzIG91dHB1dCBz aWxlbnQKK1N5c3RlbS5vdXQucHJpbnQoYSk7CisjK2VuZF9zcmMiCisgICAgKHNob3VsZCAoc3Ry aW5nPSAiNDIiIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRl c3Qgb2ItamF2YS92YXItd2l0aC1tYWluICgpCisgICJSZWFkIGFuZCB3cml0ZSBhbiBpbnRlZ2Vy IHZhcmlhYmxlLCB3aXRoIG1haW4gZnVuY3Rpb24gcHJvdmlkZWQuIgorICAob3JnLXRlc3Qtd2l0 aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDp2YXIgYT00MiA6cmVzdWx0cyBv dXRwdXQgc2lsZW50CitwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Cisg ICAgU3lzdGVtLm91dC5wcmludChhKTsKK30KKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkIChzdHJp bmc9ICI0MiIgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVz dCBvYi1qYXZhL3Zhci13aXRoLWNsYXNzICgpCisgICJSZWFkIGFuZCB3cml0ZSBhbiBpbnRlZ2Vy IHZhcmlhYmxlLCB3aXRoIGNsYXNzIHByb3ZpZGVkLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10 ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6dmFyIGE9NDIgOnJlc3VsdHMgb3V0cHV0IHNp bGVudAorcHVibGljIGNsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0 cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludChhKTsKKyAgICB9Cit9Cisj K2VuZF9zcmMiCisgICAgKHNob3VsZCAoc3RyaW5nPSAiNDIiIChvcmctYmFiZWwtZXhlY3V0ZS1z cmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS92YXItd2l0aC1jbGFzcy1hbmQt cGFja2FnZSAoKQorICAiUmVhZCBhbmQgd3JpdGUgYW4gaW50ZWdlciB2YXJpYWJsZSwgd2l0aCBj bGFzcyBhbmQgcGFja2FnZSBwcm92aWRlZC4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAor ICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnZhciBhPTQyIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQK K3BhY2thZ2UgcGtnOworcHVibGljIGNsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9p ZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludChhKTsKKyAg ICB9Cit9CisjK2VuZF9zcmMiCisgICAgKHNob3VsZCAoc3RyaW5nPSAiNDIiIChvcmctYmFiZWwt ZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS92YXItd2l0aC1j bGFzcy1hbmQtaGFuZ2luZy1jdXJsaWVzICgpCisgICJSZWFkIGFuZCB3cml0ZSBhbiBpbnRlZ2Vy IHZhcmlhYmxlLCB3aXRoIGNsYXNzIHdpdGggaGFuZ2luZyBjdXJsaWVzLiIKKyAgKG9yZy10ZXN0 LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6dmFyIGE9NDIgOnJlc3Vs dHMgb3V0cHV0IHNpbGVudAorcHVibGljIGNsYXNzIE1haW4KK3sKKyAgICBwdWJsaWMgc3RhdGlj IHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQorICAgIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmlu dChhKTsKKyAgICB9Cit9CisjK2VuZF9zcmMiCisgICAgKHNob3VsZCAoc3RyaW5nPSAiNDIiIChv cmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS90 d28tdmFycyAoKQorICAiUmVhZCB0d28gaW50ZWdlciB2YXJpYWJsZXMsIGNvbWJpbmUgYW5kIHdy aXRlIHRoZW0uIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3Ny YyBqYXZhIDp2YXIgYT0yMSBiPTIgOnJlc3VsdHMgb3V0cHV0IHNpbGVudAorU3lzdGVtLm91dC5w cmludChhKmIpOworIytlbmRfc3JjIgorICAgIChzaG91bGQgKHN0cmluZz0gIjQyIiAob3JnLWJh YmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvc3RyaW5n LXZhciAoKQorICAiUmVhZCBhbmQgd3JpdGUgYSBzdHJpbmcgdmFyaWFibGUuIgorICAob3JnLXRl c3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDp2YXIgYT1cImZvcnR5 IHR3b1wiIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQKK1N5c3RlbS5vdXQucHJpbnQoU3RyaW5nLmZv cm1hdChcIiVzLCBsZW49JWRcIiwgYSwgYS5sZW5ndGgoKSkpOworIytlbmRfc3JjIgorICAgIChz aG91bGQgKHN0cmluZz0gImZvcnR5IHR3bywgbGVuPTkiIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMt YmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9tdWx0aWxpbmUtc3RyaW5nLXZhciAo KQorICAiSmF2YSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlsaW5lIHN0cmluZyBsaXRlcmFscywgc28g dGhpcyBlcnJvcnMuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2lu X3NyYyBqYXZhIDp2YXIgYT1cImZvcnR5XG50d29cIiA6cmVzdWx0cyBvdXRwdXQgc2lsZW50CitT eXN0ZW0ub3V0LnByaW50KFN0cmluZy5mb3JtYXQoXCIlcywgbGVuPSVkXCIsIGEsIGEubGVuZ3Ro KCkpKTsKKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkLWVycm9yIChvcmctYmFiZWwtZXhlY3V0ZS1z cmMtYmxvY2spKSkKKyAgOnR5cGUgJ2Vycm9yKQorCis7OyByZXR1cm4gbGlzdAorCisoZXJ0LWRl ZnRlc3Qgb2ItamF2YS9yZXR1cm4tdmVjdG9yLXVzaW5nLWxpc3QgKCkKKyAgIlJldHVybiBhIHZl Y3RvciB1c2luZyBhIGxpc3QuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIj K2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIHZlY3RvciBzaWxlbnQKK2ltcG9ydCBqYXZhLnV0aWwu TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworTGlzdDxMaXN0PEludGVnZXI+PiBhID0g QXJyYXlzLmFzTGlzdChBcnJheXMuYXNMaXN0KDQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KDIpKTsKK3JldHVybiBhOworIytlbmRfc3JjIgor ICAgIChzaG91bGQgKGVxdWFsICcoKDQpICgyKSkKKyAgICAgICAgICAgICAgICAgICAob3JnLWJh YmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvcmV0dXJu LXZlY3Rvci11c2luZy1hcnJheSAoKQorICAiUmV0dXJuIGEgdmVjdG9yIHVzaW5nIGFuIGFycmF5 LiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6 cmVzdWx0cyB2ZWN0b3Igc2lsZW50CitJbnRlZ2VyW11bXSBhID0ge3s0fSwgezJ9fTsKK3JldHVy biBhOworIytlbmRfc3JjIgorICAgIChzaG91bGQgKGVxdWFsICcoKDQpICgyKSkKKyAgICAgICAg ICAgICAgICAgICAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0 ZXN0IG9iLWphdmEvcmVhZC1yZXR1cm4tbGlzdCAoKQorICAiUmVhZCBhbmQgcmV0dXJuIGEgbGlz dC4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEg OnZhciBhPWphdmFfbGlzdCA6cmVzdWx0cyBzaWxlbnQKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsK K2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworTGlzdDxTdHJpbmc+IGIgPSBBcnJheXMuYXNMaXN0 KGEuZ2V0KDApLmdldCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmdldCgx KS5nZXQoMCkpOworcmV0dXJuIGI7CisjK2VuZF9zcmMKKworIytuYW1lOiBqYXZhX2xpc3QKKy0g Zm9ydHkKKy0gdHdvIgorICAgIChzaG91bGQgKGVxdWFsICcoImZvcnR5IiAidHdvIikKKyAgICAg ICAgICAgICAgICAgICAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1k ZWZ0ZXN0IG9iLWphdmEvcmVhZC1saXN0LXJldHVybi1hcnJheSAoKQorICAiUmVhZCBhIGxpc3Qg YW5kIHJldHVybiBhbiBhcnJheS4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAorICAgICAg IiMrYmVnaW5fc3JjIGphdmEgOnZhciBhPWphdmFfbGlzdCA6cmVzdWx0cyBzaWxlbnQKK1N0cmlu Z1tdIGIgPSB7YS5nZXQoMCkuZ2V0KDApLCBhLmdldCgxKS5nZXQoMCl9OworcmV0dXJuIGI7Cisj K2VuZF9zcmMKKworIytuYW1lOiBqYXZhX2xpc3QKKy0gZm9ydHkKKy0gdHdvIgorICAgIChzaG91 bGQgKGVxdWFsICcoImZvcnR5IiAidHdvIikKKyAgICAgICAgICAgICAgICAgICAob3JnLWJhYmVs LWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvcmVhZC1yZXR1 cm4tbGlzdC13aXRoLXBhY2thZ2UgKCkKKyAgIlJldHVybiBhIHZlY3Rvci4iCisgIChvcmctdGVz dC13aXRoLXRlbXAtdGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnZhciBhPWphdmFfbGlz dCA6cmVzdWx0cyBzaWxlbnQKK3BhY2thZ2UgcGtnOworaW1wb3J0IGphdmEudXRpbC5MaXN0Owor aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitMaXN0PFN0cmluZz4gYiA9IEFycmF5cy5hc0xpc3Qo YS5nZXQoMCkuZ2V0KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0KDEp LmdldCgwKSk7CityZXR1cm4gYjsKKyMrZW5kX3NyYworCisjK25hbWU6IGphdmFfbGlzdAorLSBm b3J0eQorLSB0d28iCisgICAgKHNob3VsZCAoZXF1YWwgJygiZm9ydHkiICJ0d28iKQorICAgICAg ICAgICAgICAgICAgIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRl ZnRlc3Qgb2ItamF2YS9vdXRwdXQtbGlzdC13aXRoLXNwYWNlcyAoKQorICAiUmV0dXJuIGEgdmVj dG9yLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2 YSA6cmVzdWx0cyBvdXRwdXQgbGlzdCByYXcgc2lsZW50CitTeXN0ZW0ub3V0LnByaW50bG4oXCJm b3J0eSB0d29cIik7CitTeXN0ZW0ub3V0LnByaW50bG4oXCJmb3J0eSB0d29cIik7CisjK2VuZF9z cmMiCisgICAgKHNob3VsZCAoZXF1YWwgImZvcnR5IHR3b1xuZm9ydHkgdHdvXG4iCisgICAgICAg ICAgICAgICAgICAgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKzs7IGxpc3Qg dmFycworCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9saXN0LXZhciAoKQorICAiUmVhZCBhbmQgd3Jp dGUgYSBsaXN0IHZhcmlhYmxlLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAi IytiZWdpbl9zcmMgamF2YSA6dmFyIGE9JyhcImZvcnR5XCIgXCJ0d29cIikgOnJlc3VsdHMgc2ls ZW50CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitMaXN0PFN0cmluZz4gYiA9IGE7CityZXR1cm4g YjsKKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkIChlcXVhbCAnKCJmb3J0eSIgInR3byIpCisgICAg ICAgICAgICAgICAgICAgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQt ZGVmdGVzdCBvYi1qYXZhL3ZlY3Rvci12YXIgKCkKKyAgIlJlYWQgYW5kIHdyaXRlIGEgdmVjdG9y IHZhcmlhYmxlLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9z cmMgamF2YSA6dmFyIGE9J1tcImZvcnR5XCIgXCJ0d29cIl0gOnJlc3VsdHMgc2lsZW50CitpbXBv cnQgamF2YS51dGlsLkxpc3Q7CitMaXN0PFN0cmluZz4gYiA9IGE7CityZXR1cm4gYjsKKyMrZW5k X3NyYyIKKyAgICAoc2hvdWxkIChlcXVhbCAnKCJmb3J0eSIgInR3byIpCisgICAgICAgICAgICAg ICAgICAgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykpKSkpCisKKyhlcnQtZGVmdGVzdCBv Yi1qYXZhL21hdHJpeC12YXIgKCkKKyAgIlJlYWQgYW5kIHdyaXRlIG1hdHJpeCB2YXJpYWJsZS4i CisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dAorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnZh ciBhPWphdmFfbWF0cml4IDpyZXN1bHRzIHNpbGVudAoraW1wb3J0IGphdmEudXRpbC5MaXN0Owor aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitMaXN0PExpc3Q8SW50ZWdlcj4+IGIgPSBBcnJheXMu YXNMaXN0KEFycmF5cy5hc0xpc3QoYS5nZXQoMCkuZ2V0KDApLCBhLmdldCgxKS5nZXQoMCkpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGEuZ2V0 KDApLmdldCgxKSwgYS5nZXQoMSkuZ2V0KDEpKSk7CityZXR1cm4gYjsgLy8gdHJhbnNwb3NlCisj K2VuZF9zcmMKKworIytuYW1lOiBqYXZhX21hdHJpeAorfCAyIHwgMSB8Cit8IDQgfCAyIHwiCisg ICAgKHNob3VsZCAoZXF1YWwgJygoMiA0KSAoMSAyKSkKKyAgICAgICAgICAgICAgICAgICAob3Jn LWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEvbWF0 cml4LXZhci13aXRoLWhlYWRlciAoKQorICAiUmVhZCBtYXRyaXggdmFyaWFibGUgYW5kIHdyaXRl IGl0IHdpdGggaGVhZGVyLiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIyti ZWdpbl9zcmMgamF2YSA6dmFyIGE9amF2YV9tYXRyaXggOnJlc3VsdHMgdmFsdWUgdGFibGUgc2ls ZW50CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK0xp c3Q8TGlzdD4gYiA9IEFycmF5cy5hc0xpc3QoQXJyYXlzLmFzTGlzdChcImNvbDFcIiwgXCJjb2wy XCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChhLmdldCgwKS5nZXQo MCksIGEuZ2V0KDEpLmdldCgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJyYXlzLmFzTGlzdChhLmdldCgwKS5nZXQoMSksIGEuZ2V0KDEpLmdldCgxKSkpOworcmV0 dXJuIGI7IC8vIHRyYW5zcG9zZQorIytlbmRfc3JjCisKKyMrbmFtZTogamF2YV9tYXRyaXgKK3wg MiB8IDEgfAorfCA0IHwgMiB8IgorICAgIChzaG91bGQgKGVxdWFsICcoKCJjb2wxIiAiY29sMiIp IGhsaW5lICgyIDQpICgxIDIpKQorICAgICAgICAgICAgICAgICAgIChvcmctYmFiZWwtZXhlY3V0 ZS1zcmMtYmxvY2spKSkpKQorCis7OyBvdXRwdXQgdGFibGUKKworKGVydC1kZWZ0ZXN0IG9iLWph dmEvb3V0cHV0LXRhYmxlLXdpdGgtaGVhZGVyICgpCisgICJXcml0ZSBhIHRhYmxlIHRoYXQgaW5j bHVkZXMgYSBoZWFkZXIuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2Jl Z2luX3NyYyBqYXZhIDp2YXIgYT1qYXZhX21hdHJpeCA6cmVzdWx0cyBvdXRwdXQgcmF3IHRhYmxl IHNpbGVudAorU3lzdGVtLm91dC5wcmludGxuKFwifGNvbDF8Y29sMnxcIik7CitTeXN0ZW0ub3V0 LnByaW50bG4oXCJ8LVwiKTsKK2ZvciAoaW50IGlpPTA7IGlpPGEuc2l6ZSgpOyBpaSsrKSB7Cisg ICAgZm9yIChpbnQgamo9MDsgamo8YS5nZXQoMCkuc2l6ZSgpOyBqaisrKSB7CisgICAgICAgIFN5 c3RlbS5vdXQucHJpbnQoXCJ8XCIgKyBhLmdldChpaSkuZ2V0KGpqKSk7CisgICAgfQorICAgIFN5 c3RlbS5vdXQucHJpbnRsbihcIlwiKTsKKyB9CisjK2VuZF9zcmMKKworIytuYW1lOiBqYXZhX21h dHJpeAorfCAyIHwgMSB8Cit8IDQgfCAyIHwiCisgICAgKHNob3VsZCAoZXF1YWwgInxjb2wxfGNv bDJ8XG58LVxufDJ8MVxufDR8MlxuIgorICAgICAgICAgICAgICAgICAgIChvcmctYmFiZWwtZXhl Y3V0ZS1zcmMtYmxvY2spKSkpKQorCisoZXJ0LWRlZnRlc3Qgb2ItamF2YS9pbmhvbW9nZW5lb3Vz X3RhYmxlICgpCisgICJSZWFkIGFuZCB3cml0ZSBhbiBpbmhvbW9nZW5lb3VzIHRhYmxlLiIKKyAg KG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6dmFyIGE9 amF2YV90YWJsZSA6cmVzdWx0cyBzaWxlbnQKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9y dCBqYXZhLnV0aWwuQXJyYXlzOworTGlzdDxMaXN0PiBiID0gQXJyYXlzLmFzTGlzdChBcnJheXMu YXNMaXN0KGEuZ2V0KDApLmdldCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KGEuZ2V0KDApLmdldCgxKSkqMiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoYS5nZXQoMSkuZ2V0KDApLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQo YS5nZXQoMSkuZ2V0KDEpKSoyKSk7CityZXR1cm4gYjsKKyMrZW5kX3NyYworCisjK25hbWU6IGph dmFfdGFibGUKKyAgfCBzdHJpbmcgfCBudW1iZXIgfAorICB8LS0tLS0tLS0rLS0tLS0tLS18Cisg IHwgZm9ydHkgIHwgICAgICAyIHwKKyAgfCB0d28gICAgfCAgICAgIDEgfCIKKyAgIChzaG91bGQg KGVxdWFsCisgICAgICAgICAgICAnKCgiZm9ydHkiIDQpICgidHdvIiAyKSkKKyAgICAgICAgICAg IChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCis7OyBpbXBvcnRzCisKKyhlcnQt ZGVmdGVzdCBvYi1qYXZhL2ltcG9ydF9saWJyYXJ5ICgpCisgICJJbXBvcnQgYSBzdGFuZGFyZCBq YXZhIGxpYnJhcnkuIgorICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2lu X3NyYyBqYXZhIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQgOmltcG9ydHMgamF2YS51dGlsLkJhc2U2 NAorYnl0ZVtdIGVuY29kZWQgPSBCYXNlNjQuZ2V0RW5jb2RlcigpLmVuY29kZShcIjQyXCIuZ2V0 Qnl0ZXMoKSk7CitTdHJpbmcgZGVjb2RlZCA9IG5ldyBTdHJpbmcoQmFzZTY0LmdldERlY29kZXIo KS5kZWNvZGUoZW5jb2RlZCkpOworU3lzdGVtLm91dC5wcmludChTdHJpbmcuZm9ybWF0KFwiZW5j b2RlZD0lcywgZGVjb2RlZD0lc1wiLCBuZXcgU3RyaW5nKGVuY29kZWQpLCBkZWNvZGVkKSk7Cisj K2VuZF9zcmMiCisgICAoc2hvdWxkIChzdHJpbmc9CisgICAgICAgICAgICAiZW5jb2RlZD1OREk9 LCBkZWNvZGVkPTQyIgorICAgICAgICAgICAgKG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jaykp KSkpCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZhL2ltcG9ydF9saWJyYXJ5X2lubGluZSAoKQorICAi SW1wb3J0IGEgc3RhbmRhcmQgamF2YSBsaWJyYXJ5LiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10 ZXh0CisgICAgICAiIytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRwdXQgc2lsZW50CitpbXBv cnQgamF2YS51dGlsLkJhc2U2NDsKK2J5dGVbXSBlbmNvZGVkID0gQmFzZTY0LmdldEVuY29kZXIo KS5lbmNvZGUoXCI0MlwiLmdldEJ5dGVzKCkpOworU3RyaW5nIGRlY29kZWQgPSBuZXcgU3RyaW5n KEJhc2U2NC5nZXREZWNvZGVyKCkuZGVjb2RlKGVuY29kZWQpKTsKK1N5c3RlbS5vdXQucHJpbnQo U3RyaW5nLmZvcm1hdChcImVuY29kZWQ9JXMsIGRlY29kZWQ9JXNcIiwgbmV3IFN0cmluZyhlbmNv ZGVkKSwgZGVjb2RlZCkpOworIytlbmRfc3JjIgorICAgKHNob3VsZCAoc3RyaW5nPQorICAgICAg ICAgICAgImVuY29kZWQ9TkRJPSwgZGVjb2RlZD00MiIKKyAgICAgICAgICAgIChvcmctYmFiZWwt ZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQorCis7OyB0YW5nbGUKKworKGVydC1kZWZ0ZXN0IG9iLWph dmEvdGFuZ2xlICgpCisgICJUYW5nbGUgYSBzb3VyY2UgYmxvY2suIgorICAob3JnLXRlc3Qtd2l0 aC10ZW1wLXRleHQtaW4tZmlsZQorICAgICAgIiMrYmVnaW5fc3JjIGphdmEgOnRhbmdsZSBcIlRh bmdsZS5qYXZhXCIgOnJlc3VsdHMgdmFsdWUgOmNsYXNzbmFtZSBUYW5nbGUKK3JldHVybiBcInRh bmdsZWRcIjsKKyMrZW5kX3NyYyIKKyAgICAoc2hvdWxkCisgICAgIChzdHJpbmc9CisgICAgICAi cHVibGljIGNsYXNzIFRhbmdsZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5n W10gYXJncykgeworICAgICAgICByZXR1cm4gXCJ0YW5nbGVkXCI7CisgICAgfQorfQorIgorICAg ICAgKHVud2luZC1wcm90ZWN0CisgICAgICAgICAgKHByb2duIChvcmctYmFiZWwtdGFuZ2xlKQor ICAgICAgICAgICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgIChp bnNlcnQtZmlsZS1jb250ZW50cyAiVGFuZ2xlLmphdmEiKQorICAgICAgICAgICAgICAgICAgIChi dWZmZXItc3RyaW5nKSkpCisgICAgICAgIChkZWxldGUtZmlsZSAiVGFuZ2xlLmphdmEiKSkpKSkp CisKKyhlcnQtZGVmdGVzdCBvYi1qYXZhL3RhbmdsZS13aXRoLXBhY2thZ2UgKCkKKyAgIlRhbmds ZSBhIHNvdXJjZSBibG9jay4iCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dC1pbi1maWxlCisg ICAgICAiIytiZWdpbl9zcmMgamF2YSA6dGFuZ2xlIFwidGFuZ2xlL1RhbmdsZS5qYXZhXCIgOnJl c3VsdHMgdmFsdWUgOmNsYXNzbmFtZSB0YW5nbGUuVGFuZ2xlCityZXR1cm4gXCJ0YW5nbGVkXCI7 CisjK2VuZF9zcmMiCisgICAgKHNob3VsZAorICAgICAoc3RyaW5nPQorICAgICAgInBhY2thZ2Ug dGFuZ2xlOworCitwdWJsaWMgY2xhc3MgVGFuZ2xlIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQg bWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHJldHVybiBcInRhbmdsZWRcIjsKKyAgICB9 Cit9CisiCisgICAgICAodW53aW5kLXByb3RlY3QKKyAgICAgICAgICAocHJvZ24KKyAgICAgICAg ICAgIChtYWtlLWRpcmVjdG9yeSAidGFuZ2xlIikKKyAgICAgICAgICAgIChvcmctYmFiZWwtdGFu Z2xlKQorICAgICAgICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAgICAgICAgKGluc2Vy dC1maWxlLWNvbnRlbnRzICJ0YW5nbGUvVGFuZ2xlLmphdmEiKQorICAgICAgICAgICAgICAoYnVm ZmVyLXN0cmluZykpKQorICAgICAgICAoZGVsZXRlLWZpbGUgInRhbmdsZS9UYW5nbGUuamF2YSIp CisgICAgICAgIChkZWxldGUtZGlyZWN0b3J5ICJ0YW5nbGUiKSkpKSkpCisKKworOzsgc3BlY2lm eSBvdXRwdXQgZGlyCisKKyhlcnQtZGVmdGVzdCBvYi1qYXZhL3NpbXBsZS1kaXIgKCkKKyAgIkhl bGxvIHdvcmxkIHByb2dyYW0gdGhhdCB3cml0ZXMgb3V0cHV0LiIKKyAgKG9yZy10ZXN0LXdpdGgt dGVtcC10ZXh0CisgICAgICAoZm9ybWF0ICAiIytiZWdpbl9zcmMgamF2YSA6cmVzdWx0cyBvdXRw dXQgc2lsZW50IDpkaXIgJXMKK1N5c3RlbS5vdXQucHJpbnQoNDIpOworIytlbmRfc3JjIiBvcmct YmFiZWwtdGVtcG9yYXJ5LWRpcmVjdG9yeSkKKyAgICAoc2hvdWxkIChzdHJpbmc9CisgICAgICAg ICAgICAgIjQyIgorICAgICAgICAgICAgICh1bndpbmQtcHJvdGVjdAorICAgICAgICAgICAgICAg ICAob3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrKQorICAgICAgICAgICAgICAgKGRlbGV0ZS1m aWxlIChjb25jYXQgKGZpbGUtbmFtZS1hcy1kaXJlY3Rvcnkgb3JnLWJhYmVsLXRlbXBvcmFyeS1k aXJlY3RvcnkpCisJCQkJICAgICJNYWluLmphdmEiKSkKKwkgICAgICAgKGRlbGV0ZS1maWxlIChj b25jYXQgKGZpbGUtbmFtZS1hcy1kaXJlY3Rvcnkgb3JnLWJhYmVsLXRlbXBvcmFyeS1kaXJlY3Rv cnkpCisJCQkJICAgICJNYWluLmNsYXNzIikpKSkpKSkKKworKGVydC1kZWZ0ZXN0IG9iLWphdmEv c2ltcGxlLWRpci13aXRoLXBhY2thZ2UgKCkKKyAgIkhlbGxvIHdvcmxkIHByb2dyYW0gdGhhdCB3 cml0ZXMgb3V0cHV0LiIKKyAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0CisgICAgICAoZm9ybWF0 ICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRzIG91dHB1dCBzaWxlbnQgOmRpciAlcworcGFja2Fn ZSBwa2c7CisKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFp bihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50KDQyKTsKKyAgICB9Cit9 CisjK2VuZF9zcmMiIG9yZy1iYWJlbC10ZW1wb3JhcnktZGlyZWN0b3J5KQorICAgIChzaG91bGQg KHN0cmluZz0KKyAgICAgICAgICAgICAiNDIiCisgICAgICAgICAgICAgKHVud2luZC1wcm90ZWN0 CisgICAgICAgICAgICAgICAgIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spCisgICAgICAg ICAgICAgICAoZGVsZXRlLWZpbGUgKGNvbmNhdCAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSBvcmct YmFiZWwtdGVtcG9yYXJ5LWRpcmVjdG9yeSkKKwkJCQkgICAgInBrZy9NYWluLmphdmEiKSkKKwkg ICAgICAgKGRlbGV0ZS1maWxlIChjb25jYXQgKGZpbGUtbmFtZS1hcy1kaXJlY3Rvcnkgb3JnLWJh YmVsLXRlbXBvcmFyeS1kaXJlY3RvcnkpCisJCQkJICAgICJwa2cvTWFpbi5jbGFzcyIpKQorCSAg ICAgICAoZGVsZXRlLWRpcmVjdG9yeSAoY29uY2F0IChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IG9y Zy1iYWJlbC10ZW1wb3JhcnktZGlyZWN0b3J5KQorCQkJCQkgInBrZyIpKSkpKSkpCisKKworOzs7 IHRlc3Qtb2ItamF2YS5lbCBlbmRzIGhlcmUKLS0gCjIuMjUuMQoK --00000000000080f57805b0ebb726--