From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id DxtfI3zoxGJbVAEAbAwnHQ (envelope-from ) for ; Wed, 06 Jul 2022 03:42:20 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id iAtfIXzoxGKpHAEAG6o9tA (envelope-from ) for ; Wed, 06 Jul 2022 03:42:20 +0200 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 C20A1A408 for ; Wed, 6 Jul 2022 03:42:19 +0200 (CEST) Received: from localhost ([::1]:46630 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o8u3W-0000ny-EY for larch@yhetil.org; Tue, 05 Jul 2022 21:42:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8u2q-0000nc-Qo for emacs-orgmode@gnu.org; Tue, 05 Jul 2022 21:41:36 -0400 Received: from mail-4319.protonmail.ch ([185.70.43.19]:56115) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o8u2m-0006Fu-D1 for emacs-orgmode@gnu.org; Tue, 05 Jul 2022 21:41:36 -0400 Date: Wed, 06 Jul 2022 01:41:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1657071684; x=1657330884; bh=VCvc5xf3Qz4+TrJoi7PiBeu5e/UbyevU0nlpSGdPSKw=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=hsf2UMj1QSE/IgDloVNmEu8D83d1Cvc7kVoHSj0qONaJ5ZrRncoDySBckEHFHTRFc 44bFsWn6RTcxPvAJKdQ/a0gTbzgQvlX4k18YlaKxzxFCz/e73CUUxEOuxvfNt2rz1J OWSKGPgKYzN40fh226RBoi5o+vvexFOayqZhUhkfhVgxh9SzszUJzVlj8yyt123pMC qT2EnUOdoP1nIsdUtaHVv3aimenyVFoFSeLqaX4JyOYkNEvGVRMNq07rJN0+p2kNzt mUeHTz3n9Ay/xJbyWhGj+tiOjD3IcWhEyW8tj4AtrdPSlLyJFK0up89fpJNFJm6Nha 0HK/tgwqyBY0Q== To: Ihor Radchenko From: Ivar Fredholm Cc: "emacs-orgmode@gnu.org" , "bzg@bzg.fr" Subject: Re: We have asynchronous sessions, why have anything else? Message-ID: In-Reply-To: <87y1xio2cn.fsf@localhost> References: <87fsjs3xws.fsf@localhost> <87y1xio2cn.fsf@localhost> Feedback-ID: 16540637:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_39fUrj2fL6D8PDolKEkDwpi0x5sXIvmXCCdtjxaIl8E" Received-SPF: pass client-ip=185.70.43.19; envelope-from=freddyholms@protonmail.com; helo=mail-4319.protonmail.ch X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Ivar Fredholm Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1657071740; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=VCvc5xf3Qz4+TrJoi7PiBeu5e/UbyevU0nlpSGdPSKw=; b=WC3InG+f26QaUAnyc4UJ/xCUr8MMeVVh5KslQCkXsiDug9CG7Vx0CeQnD3Trsy9AS76td3 uAyBvviQOw8DGZ6fYiGbB7wRGxJQ8igPb9uQkafL/XI6moGvswrxDoBiXLsSEmXqQZ8STB RbaKgANb3PnNFuo2ld0MdbjHLvRnFVhtUg+i5LLN610TITkcuYJ6BUqao37H/Ae+i3yAGQ jnzvADkxVGowM5aP6IBKfgdppnscKAJkle8GnDPsj4tHtiOaVWpRYyYfk597xQO1prAdeC dflseJmWLETQdSrXQluiFMPmG2EkKGDCOY6+uapA3AuviRz1mr6Vj84tkCMMkA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1657071740; a=rsa-sha256; cv=none; b=TV3AnG6G2P7vdxANJuiYrm0SlPE7zo/6RiUthQUbP03nv+SU3qV/WTo8PnN3m5jn5w1vy1 msI+KD1uXgsO3EG0b//4k6QAQ+B1mdPpu/8arNXj7cnX/zbf9e/eNTsGRqF8XpoTtbQ2TU g64HN4lDsUuDb83nHU/A83YC7jXZzZ3PQpYA3xCHXDwKMeNdGjYWsOER0tReJRur/uz66n twKcmUOBwoSDO3NMVrg5ZkctjS4L2oJszuzUeod1hkeb+q9UsZZhISvzdVYJjFcRbd0xOy lOYwIXeewvgQxAnNfk/JDwW1jWbXbU4tqxo/yuMiI9O6zkwI/Gh3kOaYTRm+2Q== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=protonmail.com header.s=protonmail3 header.b=hsf2UMj1; dmarc=pass (policy=quarantine) header.from=protonmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -0.85 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=protonmail.com header.s=protonmail3 header.b=hsf2UMj1; dmarc=pass (policy=quarantine) header.from=protonmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: C20A1A408 X-Spam-Score: -0.85 X-Migadu-Scanner: scn1.migadu.com X-TUID: gVdmPa/U9Vf2 This is a multi-part message in MIME format. --b1_39fUrj2fL6D8PDolKEkDwpi0x5sXIvmXCCdtjxaIl8E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Ihor, I have a prototype of what I mentioned earlier, at least for pytho= n. This supports asynchronous, synchronous, session, and session-less block= s. It's pretty messy but it helps to illustrate what I had in mind. Let me = know what you think. Sent with Proton Mail secure email. ------- Original Message ------- On Monday, June 27th, 2022 at 4:56 AM, Ihor Radchenko = wrote: > Ivar Fredholm freddyholms@protonmail.com writes: > > > I believe the two could be unified if we expand the functionality of > > the async filter to look for 'exception' tags. Then each language > > implementation must only put the org-babel src block in a try-except > > type construction and put the error message into the except block. > > > I am not even sure if all the babel backends support try-except. > Think about ob-gnuplot or, say, ob-latex. > > Best, > Ihor --b1_39fUrj2fL6D8PDolKEkDwpi0x5sXIvmXCCdtjxaIl8E Content-Type: text/x-emacs-lisp; name=ob-session4.el Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=ob-session4.el KGRlZnVuIGV2YWwtZmlsZSAoZmlsZSkKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGluc2VydC1m aWxlLWNvbnRlbnRzIGZpbGUpCiAgICAoZXZhbC1idWZmZXIpKSkKKGV2YWwtZmlsZSAifi9uZXdf b3JnL29yZy1tb2RlL2xpc3Avb2ItY29yZS5lbCIpCihldmFsLWZpbGUgIn4vbmV3X29yZy9vcmct bW9kZS9saXNwL29iLWNvbWludC5lbCIpCihldmFsLWZpbGUgIn4vbmV3X29yZy9vcmctbW9kZS9s aXNwL29iLXB5dGhvbi5lbCIpCihldmFsLWZpbGUgIn4vbmV3X29yZy9vcmctbW9kZS9saXNwL29y Zy1hdHRhY2guZWwiKQoKKHJlcXVpcmUgJ3N1YnIteCkKKHJlcXVpcmUgJ2VpZWlvKQoocmVxdWly ZSAnY2wtbGliKQoKCihkZWZ2YXIgb3JnLWJhYmVsLXNlc3Npb24tbGlzdCBuaWwKICAiTGlzdCBv ZiBhbGwgc2Vzc2lvbnMiKQoKKGRlZnZhciBvcmctYmFiZWwtc2hlbGwtYnVmZmVycyBuaWwKICAi TGlzdCBvZiBpbnRlcnByZXRlciBidWZmZXJzLiBUaGlzIGdldHMgZ2FyYmFnZSBjb2xsZWN0ZWQg ZXZlcnkKICB0aW1lIGEgc291cmNlIGJsb2NrIGlzIHJ1bi4gQW55IHByb2Nlc3MtbGVzcyBidWZm ZXIgZ2V0cyBkZWxldGVkLiIpCgoKKGRlZmNsYXNzIGxhdGNoICgpCiAgKChwcm9jZXNzIDppbml0 Zm9ybSAoc3RhcnQtcHJvY2VzcyAibGF0Y2giIG5pbCBuaWwpKQogICAodmFsdWUgOmluaXRmb3Jt IG5pbCkpCiAgOmRvY3VtZW50YXRpb24gIkEgYmxvY2tpbmcgbGF0Y2ggdGhhdCBjYW4gYmUgdXNl ZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiIpCgooY2wtZGVmbWV0aG9kIHdhaXQgKChsYXRjaCBsYXRj aCkgJm9wdGlvbmFsIHRpbWVvdXQpCiAgIkJsb2NraW5nIHdhaXQgb24gTEFUQ0ggZm9yIGEgY29y cmVzcG9uZGluZyBgbm90aWZ5JywgcmV0dXJuaW5nCnRoZSB2YWx1ZSBwYXNzZWQgYnkgdGhlIG5v dGlmaWNhdGlvbi4gV2FpdCBhdCBtb3N0IFRJTUVPVVQKc2Vjb25kcyAoZmxvYXQgYWxsb3dlZCks IHJldHVybmluZyBuaWwgaWYgdGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQKd2l0aCBubyBpbnB1dC4g VGhlIEVtYWNzIGRpc3BsYXkgd2lsbCBub3QgdXBkYXRlIGR1cmluZyB0aGlzCnBlcmlvZCBidXQg SS9PIGFuZCB0aW1lcnMgd2lsbCBjb250aW51ZSB0byBydW4uIgogIChhY2NlcHQtcHJvY2Vzcy1v dXRwdXQgKHNsb3QtdmFsdWUgbGF0Y2ggJ3Byb2Nlc3MpIHRpbWVvdXQpCiAgKHNsb3QtdmFsdWUg bGF0Y2ggJ3ZhbHVlKSkKCihjbC1kZWZtZXRob2Qgbm90aWZ5ICgobGF0Y2ggbGF0Y2gpICZvcHRp b25hbCB2YWx1ZSkKICAiUmVsZWFzZSBhbGwgZXhlY3V0aW9uIGNvbnRleHRzIHdhaXRpbmcgb24g TEFUQ0gsIHBhc3NpbmcgdGhlbSBWQUxVRS4iCiAgKHNldGYgKHNsb3QtdmFsdWUgbGF0Y2ggJ3Zh bHVlKSB2YWx1ZSkKICAocHJvY2Vzcy1zZW5kLXN0cmluZyAoc2xvdC12YWx1ZSBsYXRjaCAncHJv Y2VzcykgIlxuIikpCgooY2wtZGVmbWV0aG9kIGRlc3Ryb3kgKChsYXRjaCBsYXRjaCkpCiAgIkRl c3Ryb3kgYSBsYXRjaCwgc2luY2UgdGhleSBjYW4ndCBiZSBmdWxseSBtZW1vcnkgbWFuYWdlZC4i CiAgKGlnbm9yZS1lcnJvcnMKICAgIChkZWxldGUtcHJvY2VzcyAoc2xvdC12YWx1ZSBsYXRjaCAn cHJvY2VzcykpKSkKCihkZWZ1biBtYWtlLWxhdGNoICgpCiAgIk1ha2UgYSBsYXRjaCB3aGljaCBj YW4gYmUgdXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiBJdCBtdXN0IGJlCmBkZXN0cm95J2VkIHdo ZW4gbm8gbG9uZ2VyIHVzZWQsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcHJvY2Vzcwp3aWxsIG5v dCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4iCiAgKG1ha2UtaW5zdGFuY2UgJ2xhdGNoKSkKCihkZWZ1 biBkZXN0cm95LWFsbC1sYXRjaGVzICgpCiAgIkRlc3Ryb3kgYWxsIGtub3duIGxhdGNoZXMuIgog IChjbC1sb29wIGZvciBwcm9jZXNzIGluIChwcm9jZXNzLWxpc3QpCiAgICAgICAgICAgd2hlbiAo c3RyaW5nLW1hdGNoLXAgImxhdGNoXFwoPFswLTldKz5cXCk/IiAocHJvY2Vzcy1uYW1lIHByb2Nl c3MpKQogICAgICAgICAgIGRvIChkZWxldGUtcHJvY2VzcyBwcm9jZXNzKSkpCgo7OyBDb2RlIGZv ciB0aGUgYWRtaW5pc3RyYXRpb24gb2Ygc2Vzc2lvbnMgYW5kIHRoZWlyIHByb2Nlc3Nlcy4KCihk ZWZjbGFzcyBvcmctYmFiZWwtc2Vzc2lvbiAoKQogICgobmFtZSA6aW5pdGFyZyA6bmFtZQoJIDpk b2N1bWVudGF0aW9uICJOYW1lIG9mIHRoZSBzZXNzaW9uLCBzaG91bGQgYmUgdW5pcXVlIG9uCgkg YSBwZXItbGFuZ3VhZ2UgYmFzaXMgb3IgJ25vbmUnIGlmIHRoZSBhc3NvY2lhdGVkIHNvdXJjZQoJ IGJsb2NrIGlzIHNlc3Npb24tbGVzcy4iKQogICAobGFuZ3VhZ2UgOmluaXRhcmcgOmxhbmd1YWdl CgkgICAgIDpkb2N1bWVudGF0aW9uICJUaGUgbGFuZ3VhZ2UgZm9yIHRoZSBzb3VyY2UgYmxvY2sK CSAgICAgYXNzb2NpYXRlZCB0byB0aGlzIHNlc3Npb24uIikKICAgKGlzLW5vbmUgOmluaXRmb3Jt IG5pbAoJICAgIDpkb2N1bWVudGF0aW9uICJJbmRpY2F0ZXMgd2hldGhlciB3ZSBzaG91bGQgZGVs ZXRlCiAgIHRoZSBzZXNzaW9uIG9uY2UgaXQgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZyBpdHMgc291 cmNlIGJsb2NrLiIpCiAgICh1bmlxdWUtaWQgOmluaXRmb3JtICIiCgkgICAgICA6ZG9jdW1lbnRh dGlvbiAiVGhpcyBpcyB0aGUgdW5pcXVlIHByb2Nlc3MKICAgaWRlbnRpZmllciBmb3IgdGhlIHNl c3Npb24uIikKICAgKHByb2Nlc3MgOmluaXRmb3JtIG5pbAoJICAgIDpkb2N1bWVudGF0aW9uICJU aGUgaW50ZXJwcmV0ZXIgb3Igc2hlbGwgZm9yIHRoZQogICBzZXNzaW9uLiIpCiAgIChidWZmZXIg OmluaXRmb3JtIG5pbAoJICAgOmRvY3VtZW50YXRpb24gIlRoZSBidWZmZXIgYXNzb2NpYXRlZCB3 aXRoIHByb2Nlc3MiKQogICAocmVhZHktZm9yLWlucHV0IDppbml0Zm9ybSBuaWwKCQkgICAgOmRv Y3VtZW50YXRpb24gIkEgdmFyaWFibGUgaW5kaWNhdGluZyB3aGV0aGVyCiAgIHRoZSBpbnRlcnBy ZXRlciBpcyByZWFkeSB0byBhY2NlcHQgbW9yZSBpbnB1dC4iKQogICAoaW5wdXQtbGF0Y2ggOmlu aXRmb3JtIG5pbAoJCTpkb2N1bWVudGF0aW9uICJBIGxhdGNoIHRoYXQgYmxvY2tzIGV4ZWN1dGlv bgogICB1bnRpbCB0aGUgaW50ZXJwcmV0ZXIgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIGN1 cnJlbnQKICAgaW5wdXQuIFRoaXMgaXMgdXNlZCB0byBlbXVsYXRlIHN5bmNocm9ub3VzIGJsb2Nr cyB1c2luZyB0aGUKICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgZmlsdGVyLiIpCiAgIChpbmRpY2F0 b3ItcmVnZXhwIDppbml0Zm9ybSBuaWwKCQkgICAgIDpkb2N1bWVudGF0aW9uICJIb2xkcyB0aGUg aW5kaWNhdG9yIHJlZ2V4cAoJCSAgICAgdGhhdCB0aGUgYXN5bmMgZmlsdGVyIHdpbGwgbG9vayBm b3IgaW4gdGhlCgkJICAgICBjb21pbnQgb3V0cHV0LiBUaGUgdXNlciBtdXN0IGRlZmluZSB0aGlz IG9uCgkJICAgICBhIHBlci1sYW5ndWFnZSBiYXNpcyBieSBkZWZpbmluZyBhCgkJICAgICBgb3Jn LWJhYmVsLWFzeW5jLWluZGljYXRvcjpMQU5HJyBjb25zdGFudC4iKQogICAob3JnLWJ1ZmZlcnMg OmluaXRmb3JtIG5pbAoJCTpkb2N1bWVudGF0aW9uICJBIGxpc3Qgb2YgYnVmZmVycyB0byBsb29r IHRocm91Z2gKCQl3aGVuIHNlYXJjaGluZyBmb3IgYSBwbGFjZSB0byBpbnNlcnQgdGhlIHJlc3Vs dHMKCQlvZiBhIHNvdXJjZSBibG9jay4iKQogICAoYXN5bmMgOmluaXRmb3JtIG5pbAoJICA6ZG9j dW1lbnRhdGlvbiAiVGVsbCB0aGUgcHJvY2VzcyB3aGV0aGVyIHRvIG5vdGlmeSBpdHMKCSAgbGF0 Y2ggd2hlbiByZWFkeSBmb3IgaW5wdXQgb3Igbm90IikKICAgKGN1cnJlbnQtZGFuZ2xpbmcgOmlu aXRmb3JtICIiCgkJICAgICA6ZG9jdW1lbnRhdGlvbiAiSG9sZHMgdGhlIG1vc3QgcmVjZW50IHRl eHQKCQkgICAgIHByb3ZpZGVkIGJ5IHRoZSBpbnRlcnByZXRlciBpbiBjYXNlIG9mCgkJICAgICBv dXRwdXQgYnVmZmVyaW5nLiIpKQogICJUbyBpbXBsZW1lbnQgY29uY3JldGUgY2xhc3NlcyBvZiB0 aGlzIGNsYXNzLCBvbmUgbXVzdCBmaXJzdAogIGRlZmluZTogYSBzZXNzaW9uIGluaXRpYWxpemVy IHdoaWNoIGxhdW5jaGVzIGFuIGludGVycHJldGVyLAogIGFuZCBhIG1ldGhvZCB0byBhc3luY2hy b25vdXNseSBzZW5kIGlucHV0IHRvIHNhaWQKICBpbnRlcnByZXRlci4gTGFuZ3VhZ2Ugc3BlY2lm aWMgcHJlLXByb2Nlc3Npbmcgb2YgdGhlIGlucHV0IGNvZGUKICBhbmQgcG9zdC1wcm9jZXNzaW5n IG9mIHRoZSByZXN1bHRzIG11c3QgYmUgaW1wbGVtZW50ZWQgc2VwYXJhdGVseS4iKQoKOzsgTWFr aW5nIHNlc3Npb25zCgooY2wtZGVmbWV0aG9kIGluaXRpYWxpemUtaW5zdGFuY2UgOmFmdGVyICgo c2VzcyBvcmctYmFiZWwtc2Vzc2lvbikgJnJlc3QgXykKICAobGV0KiAoKG5hbWUgKG9yZWYgc2Vz cyBuYW1lKSkKCSAobGFuZ3VhZ2UgKG9yZWYgc2VzcyBsYW5ndWFnZSkpCgkgKGlzLW5vbmUgKGlm IChzdHJpbmc9IG5hbWUgIm5vbmUiKSB0KSkKCSAodW5pcXVlLWlkIChpZiAoc3RyaW5nPSBuYW1l ICJub25lIikKCQkJOzsgR2VuZXJhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBlLmcKCQkJOzsgcHl0 aG9uODFiNTA5YzQ2YTljNTAyZGE2YTdhODYyOTk5OTRjYTAKCQkJKGNvbmNhdCBsYW5ndWFnZSAo bWQ1IChudW1iZXItdG8tc3RyaW5nIChyYW5kb20gMTAwMDAwMDAwKSkpKQoJCSAgICAgIDs7IE90 aGVyd2lzZSB1c2UgdGhlIHNlc3Npb24gbmFtZQoJCSAgICAgIChjb25jYXQgbGFuZ3VhZ2UgbmFt ZSkpKQoJIChidWZmZXIgKGNvbmNhdCB1bmlxdWUtaWQgIi1idWZmZXIiKSkKCSA7OyBGb3IgZWFj aCBsYW5ndWFnZSwgb25lIG11c3QgaW1wbGVtZW50IGEKCSA7OyBvcmctYmFiZWwtaW50ZXJwcmV0 ZXItY21kOkxBTkcgZnVuY3Rpb24gd2hpY2ggZG9lcyB0aGUKCSA7OyBuZWNlc3NhcnkgdmVyaWZp Y2F0aW9ucyBhbmQgcmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZQoJIDs7IGNvbW1hbmQgdG8gcnVu IHRoZSBpbnRlcnByZXRlciBpbiBhIG1ha2UtY29taW50LWluLWJ1ZmZlcgoJIDs7IGZ1bmN0aW9u LgkgCgkgKHByb2Nlc3MgKG1ha2UtY29taW50LWluLWJ1ZmZlciAoY29uY2F0IHVuaXF1ZS1pZCAi LXNlc3Npb24iKQoJCQkJCSBidWZmZXIKCQkJCQkgKG9yZy1iYWJlbC1pbnRlcnByZXRlci1jbWQg c2VzcykpKSkKICAgIDs7IEFkZCBhIHNlbnRpbmVsIHRvIGtpbGwgdGhlIGJ1ZmZlciBvbmNlIHRo ZSBwcm9jZXNzIGlzIGtpbGxlZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGZpbHRlcgog ICAgKHNldC1wcm9jZXNzLXNlbnRpbmVsICAoZ2V0LWJ1ZmZlci1wcm9jZXNzIHByb2Nlc3MpCgkJ CSAgIGAobGFtYmRhIChwcm9jIGV2ZW50KQkJCQkJCSAgCiAgICAJCQkgICAgICAod2hlbiAoc3Ry aW5nPSBldmVudCAia2lsbGVkXG4iKQoJCQkJKHNldHEgb3JnLWJhYmVsLXNoZWxsLWJ1ZmZlcnMg KHJlbW92ZSAsYnVmZmVyIG9yZy1iYWJlbC1zaGVsbC1idWZmZXJzKSkKICAgIAkJCQkoa2lsbC1i dWZmZXIgLGJ1ZmZlcikpKSkJCQkJCQkgIAoKICAgIDs7IEFkZCB0aGUgYnVmZmVyIHRvIGBvcmct YmFiZWwtc2hlbGwtYnVmZmVycycgc28gaXQgaXMgZ2FyYmFnZQogICAgOzsgY29sbGVjdGVkIGFm dGVyIGl0IGlzIGtpbGxlZC4KICAgIChzZXRxIG9yZy1iYWJlbC1zaGVsbC1idWZmZXJzIChwdXNo IGJ1ZmZlciBvcmctYmFiZWwtc2hlbGwtYnVmZmVycykpCiAgICAoc2V0ZiAoc2xvdC12YWx1ZSBz ZXNzICdpcy1ub25lKSBpcy1ub25lKQogICAgKHNldGYgKHNsb3QtdmFsdWUgc2VzcyAndW5pcXVl LWlkKSB1bmlxdWUtaWQpCiAgICAoc2V0ZiAoc2xvdC12YWx1ZSBzZXNzICdwcm9jZXNzKSBwcm9j ZXNzKQogICAgKHNldGYgKHNsb3QtdmFsdWUgc2VzcyAnYnVmZmVyKSBidWZmZXIpCiAgICAoc2V0 ZiAoc2xvdC12YWx1ZSBzZXNzICdpbnB1dC1sYXRjaCkgKG1ha2UtbGF0Y2gpKSkpCgooZGVmdW4g b3JnLWJhYmVsLWZldGNoLXNlc3Npb24gKHNlc3Npb24gbGFuZ3VhZ2UgJm9wdGlvbmFsIGxvY2F0 aW9uKQogICJDcmVhdGVzIGFuIG9yZy1iYWJlbC1zZXNzaW9uIG9iamVjdCB3aXRoIG5hbWUgU0VT U0lPTiBmb3IgdGhlCiAgbGFuZ3VhZ2UgTEFOR1VBR0UgaWYgaXQgZG9lcyBub3QgZXhpc3QuIElm IFNFU1NJT04gaXMgbm9uZSwgYQogIG5ldyBzZXNzaW9uIGlzIGNyZWF0ZWQgYnkgZGVmYXVsdCwg YW5kIGluc3RydWN0ZWQgdG8KICBzZWxmLWRlc3RydWN0IGFmdGVyIHByb2Nlc3NpbmcgaXRzIGlu cHV0LiBUbyBoYW5kbGUgbm9uZQogIHNlc3Npb25zLCBpZiBMT0NBVElPTiBpcyBub3QgbmlsLCB3 ZSByZXR1cm4gIgogIChsZXQqICgoc2Vzcy1pZCAoY29uY2F0IGxhbmd1YWdlIHNlc3Npb24pKSA7 dW5pcXVlIGlkIGZvciBzZXNzaW9uCgkgKHNlc3Npb24taW4tbGlzdCAoYXNzb2Mgc2Vzcy1pZCBv cmctYmFiZWwtc2Vzc2lvbi1saXN0KSkKCSAoc2Vzc2lvbi1vYmogKGlmIHNlc3Npb24taW4tbGlz dAoJCQkgIChjZHIgc2Vzc2lvbi1pbi1saXN0KQoJCQkoZnVuY2FsbCAoaW50ZXJuIChjb25jYXQg Im9yZy1iYWJlbC1zZXNzaW9uOiIgbGFuZ3VhZ2UpKSA6bmFtZSBzZXNzaW9uKSkpKQogICAgOzsg RG8gbm90IHNhdmUgc2Vzc2lvbi1sZXNzIHByb2Nlc3NlcyBzbyB0aGV5IGFyZSBuZXZlciBmb3Vu ZAogICAgOzsgZHVyaW5nIHRoZSBsb29rdXAgc3RhZ2UgYW5kIHRodXMgd2UgYWx3YXlzIGdldCBh IGZyZXNoIG5ldwogICAgOzsgaW50ZXJwcmV0ZXIuCiAgICAodW5sZXNzIChzdHJpbmc9IHNlc3Np b24gIm5vbmUiKQogICAgICAocHVzaCAoY29ucyBzZXNzLWlkIHNlc3Npb24tb2JqKSBvcmctYmFi ZWwtc2Vzc2lvbi1saXN0KSkKICAgIHNlc3Npb24tb2JqKSkKCjs7IERlc3Ryb3lpbmcgc2Vzc2lv bnMKCihjbC1kZWZtZXRob2Qgb3JnLWJhYmVsLWtpbGwtc2Vzc2lvbi1pbnN0YW5jZSAoKHNlc3Mg b3JnLWJhYmVsLXNlc3Npb24pKQogICJEZXN0cm95cyB0aGUgaW5zdGFuY2UgYnkga2lsbGluZyBp dHMgcHJvY2VzcywgYnVmZmVyLCBhbmQKICBsYXRjaCwgYXMgd2VsbCBhcyBkZWxldGluZyBpdHMg b3RoZXIgZmllbGRzLiBUaGlzIGZ1bmN0aW9uIGFsc28KICBkZWxldGVzIHNlc3Npb24gZnJvbSBg b3JnLWJhYmVsLXNlc3Npb24tbGlzdCciCiAgKGlmIChzbG90LXZhbHVlIHNlc3MgJ2lucHV0LWxh dGNoKQogICAgICAoZGVzdHJveSAoc2xvdC12YWx1ZSBzZXNzICdpbnB1dC1sYXRjaCkpKQogICh1 bmxlc3MgKHNsb3QtdmFsdWUgc2VzcyAnaXMtbm9uZSkKICAgIChzZXRxIG9yZy1iYWJlbC1zZXNz aW9uLWxpc3QgKHJlbW92ZSAoY29ucyAoc2xvdC12YWx1ZSBzZXNzICd1bmlxdWUtaWQpIHNlc3Mp IG9yZy1iYWJlbC1zZXNzaW9uLWxpc3QpKSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoc2xvdC12 YWx1ZSBzZXNzICdidWZmZXIpCiAgICAobGV0IChraWxsLWJ1ZmZlci1ob29rIGtpbGwtYnVmZmVy LXF1ZXJ5LWZ1bmN0aW9ucykKICAgICAgKGtpbGwtcHJvY2VzcyAoc2xvdC12YWx1ZSBzZXNzICdw cm9jZXNzKSkpKSkKCjs7IFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBuZWVkIHRvIGJlIGltcGxlbWVu dGVkIG9uIGEgcGVyLWxhbmd1YWdlCjs7IGJhc2lzLgoKKGNsLWRlZm1ldGhvZCBvcmctYmFiZWwt c2Vzc2lvbi1leGVjdXRlICgoc2VzcyBvcmctYmFiZWwtc2Vzc2lvbikgYm9keSBwYXJhbXMgYXN5 bmMpCiAgIkV4ZWN1dGUgQk9EWSBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5IChkZXBl bmRpbmcgb24KICBBU1lOQykgdXNpbmcgU0VTUydzIHByb2Nlc3MuIEZvciB0aGlzIG9uZSBtdXN0 IGltcGxlbWVudCBhCiAgY29uY3JldGUgc3ViY2xhc3Mgb2YgYG9yZy1iYWJlbC1zZXNzaW9uJyB3 aXRoIGEgbWV0aG9kIHRoYXQKICBzZW5kcyBpbnB1dCBhc3luY2hyb25vdXNseSB0byBwcm9jZXNz LiBUaGlzIGlzIGFuIGFic3RyYWN0CiAgbWV0aG9kIGFuZCBtdXN0IGJlIGltcGxlbWVudGVkIG9u IGEgcGVyLWxhbmd1YWdlIGJhc2lzLiIKICAoZXJyb3IgIk5vIGBvcmctYmFiZWwtc2Vzc2lvbi1l eGVjdXRlJyBtZXRob2QgZm9yIHRoaXMgbGFuZ3VhZ2UuIikpCgooY2wtZGVmbWV0aG9kIG9yZy1i YWJlbC1pbnRlcnByZXRlci1jbWQgKChzZXNzIG9yZy1iYWJlbC1zZXNzaW9uKSkKICAiUGVyZm9y bSBuZWNlc3NhcnkgY2hlY2tzIGFuZCByZXR1cm4gdGhlIGNvbW1hbmQgdG8gc3RhcnQgdGhlCmFz eW5jaHJvbm91cyBpbnRlcnByZXRlci4iCiAgKGVycm9yICJJbXBsZW1lbnQgYG9yZy1iYWJlbC1p bnRlcnByZXRlci1jbWQnIGZvciBsYW5ndWFnZSAlcyIgKHNsb3QtdmFsdWUgc2VzcyAnbGFuZ3Vh Z2UpKSkKCihjbC1kZWZtZXRob2Qgb3JnLWJhYmVsLXRhYmxlLW9yLXN0cmluZyAoKHNlc3Mgb3Jn LWJhYmVsLXNlc3Npb24pIHN0cmluZykKICAiQ29udmVydCBSRVNVTFRTIGludG8gYW4gYXBwcm9w cmlhdGUgZWxpc3AgdmFsdWUuCklmIHRoZSByZXN1bHRzIGxvb2sgbGlrZSBhIGxpc3Qgb3IgdHVw bGUsIHRoZW4gY29udmVydCB0aGVtIGludG8KYW4gRW1hY3MtbGlzcCB0YWJsZSwgb3RoZXJ3aXNl IHJldHVybiB0aGUgcmVzdWx0cyBhcyBhIHN0cmluZy4iCiAgKGVycm9yICJJbXBsZW1lbnQgYG9y Zy1iYWJlbC10YWJsZS1vci1zdHJpbmcnIGZvciBsYW5ndWFnZSAlcyIgKHNsb3QtdmFsdWUgc2Vz cyAnbGFuZ3VhZ2UpKSkKCihjbC1kZWZtZXRob2Qgb3JnLWJhYmVsLXBsYWNlLWV4Y2VwdGlvbnMg KChzZXNzaW9uIG9yZy1iYWJlbC1zZXNzaW9uKSBleGNlcHRpb24tdGV4dCBpbmZvIGxhbmcgcGFy YW1zIHJlc3VsdC1wYXJhbXMpCiAgIlByb2Nlc3MgdGhlIGV4Y2VwdGlvbiB0ZXN0IGFjY29yZGlu ZyB0byB0aGUgbGFuZ2F1Z2UuIEJ5CmRlZmF1bHQsIGl0IGp1c3QgcmVwbGFjZXMgYW55IHByZXZp b3VzIHJlc3VsdCB1bmRlciB0aGUgc291cmNlCmJsb2NrLiIKICAobWVzc2FnZSAiVXNpbmcgZGVm YXVsdCBleGNlcHRpb24gaW5zZXJ0aW9uLCBpbXBsZW1lbnQKICBgb3JnLWJhYmVsLWludGVycHJl dGVyLWNtZCcgZm9yIGxhbmd1YWdlICVzIiAoc2xvdC12YWx1ZSBzZXNzaW9uCgkJCQkJCQkgICAn bGFuZ3VhZ2UpKQogIChvcmctYmFiZWwtcmVtb3ZlLXJlc3VsdCkKICAob3JnLWJhYmVsLWluc2Vy dC1yZXN1bHQgZXhjZXB0aW9uLXRleHQpCiAgKQoKKGRlZm1hY3JvIGdvdG8tcmVzdWx0LXdpdGgt dGFnIChsb2NhdGlvbiBpbiBvcmctYnVmZmVycyAmcmVzdCBib2R5KQogICJHbyB0byB0aGUgc291 cmNlIGJsb2NrIHdob3NlIHJlc3VsdCBpcyB0YWdnZWQgd2l0aCBMT0NBVElPTiBpbgpzb21lIGJ1 ZmZlciBpbiBPUkctQlVGRkVSUyBhbmQgZmV0Y2ggaW5mbywgbGFuZ3VhZ2UsIHBhcmFtcywKcmVz dWx0LXBhcmFtcywgYW5kIHNlc3Npb24gdmFyaWFibGVzIGZyb20gdGhlIGhlYWRlciBiZWZvcmUK ZXhlY3V0aW5nIGJvZHkuIgogIChkZWNsYXJlIChpbmRlbnQgMSkgKGRlYnVnIHQpKQogIGAoY2wt bG9vcCBmb3IgYnVmIGluICxvcmctYnVmZmVycwoJICAgIHVudGlsCgkgICAgOzsgSW4gZWFjaCBi dWZmZXIuLi4JICAgCgkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmCgkgICAgICAoc2F2ZS1l eGN1cnNpb24KCQkoZ290by1jaGFyIChwb2ludC1taW4pKQoJCTs7IHNlYXJjaCBmb3IgTE9DQVRJ T04KCQkod2hlbiAoc2VhcmNoLWZvcndhcmQgLGxvY2F0aW9uIG5pbCB0KQoJCSAgKG9yZy1iYWJl bC1wcmV2aW91cy1zcmMtYmxvY2spCgkJICA7OyBSZW1vdmUgcHJldmlvdXMgcmVzdWx0cwoJCSAg KG9yZy1iYWJlbC1yZW1vdmUtcmVzdWx0KSA7OyBSZXBsYWNlIHRoaXMgd2l0aCBhIG1hY3JvPwoJ CSAgKGxldCogKChpbmZvIChvcmctYmFiZWwtZ2V0LXNyYy1ibG9jay1pbmZvKSkKCQkJIChsYW5n IChudGggMCBpbmZvKSkKCQkJIChwYXJhbXMgKG50aCAyIGluZm8pKQoJCQkgKHJlc3VsdC1wYXJh bXMKCQkJICAoY2RyIChhc3NxIDpyZXN1bHQtcGFyYW1zIHBhcmFtcykpKSkKCQkgICAgLEBib2R5 KQoJCSAgdCkpKSkpCgooZGVmdW4gb3JnLWJhYmVsLW1heWJlLWdldC1jYWNoZSAoaW5mbyBwYXJh bXMgYXJnKQogICJSZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQgb2YgdGhlIGJsb2NrIHdpdGggaW5m byBJTkZPIGlmIGl0CmV4aXN0cy4iCiAgKGxldCogKChjYWNoZSAobGV0ICgoYyAoY2RyIChhc3Nx IDpjYWNoZSBwYXJhbXMpKSkpCgkJICAoYW5kIChub3QgYXJnKSBjIChzdHJpbmc9ICJ5ZXMiIGMp KSkpCgkgKG5ldy1oYXNoIChhbmQgY2FjaGUgKG9yZy1iYWJlbC1zaGExLWhhc2ggaW5mbyA6ZXZh bCkpKQoJIChvbGQtaGFzaCAoYW5kIGNhY2hlIChvcmctYmFiZWwtY3VycmVudC1yZXN1bHQtaGFz aCkpKQoJIChjdXJyZW50LWNhY2hlIChhbmQgbmV3LWhhc2ggKGVxdWFsIG5ldy1oYXNoIG9sZC1o YXNoKSkpKSAgICAKICAgIChpZiBjdXJyZW50LWNhY2hlCgkoc2F2ZS1leGN1cnNpb24KCSAgKGdv dG8tY2hhciAob3JnLWJhYmVsLXdoZXJlLWlzLXNyYy1ibG9jay1yZXN1bHQgbmlsIGluZm8pKQoJ ICAoZm9yd2FyZC1saW5lKQoJICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQoJICAobGV0ICgo cmVzdWx0IChvcmctYmFiZWwtcmVhZC1yZXN1bHQpKSkKCSAgICAobWVzc2FnZSAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nICIlIiAiJSUiIChmb3JtYXQgIiVTIiByZXN1bHQpKSkKCSAgICByZXN1 bHQpKSkpKQoKKGRlZnVuIG9yZy1iYWJlbC1zZXQtZGVmYXVsdC1kaXIgKG1rZGlycCBkaXIpCiAg IkNoYW5nZSBkZWZhdWx0IGRpcmVjdG9yaWVzIHRvIERJUiBpZiBpbnN0cnVjdGVkIGJ5IGhlYWRl cgp2YXJpYWJsZXMuIElmIE1LRElSUCB0aGVuIG1ha2UgYSBuZXcgZGlyZWN0b3J5LiIKICAoY29u ZAogICAoKG5vdCBkaXIpIGRlZmF1bHQtZGlyZWN0b3J5KQogICAoKG1lbWJlciBta2RpcnAgJygi bm8iICJuaWwiIG5pbCkpCiAgICAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSAoZXhwYW5kLWZpbGUt bmFtZSBkaXIpKSkKICAgKHQKICAgIChsZXQgKChkIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IChl eHBhbmQtZmlsZS1uYW1lIGRpcikpKSkKICAgICAgKG1ha2UtZGlyZWN0b3J5IGQgJ3BhcmVudHMp CiAgICAgIGQpKSkpCgooZGVmdW4gb3JnLWJhYmVsLXJ1bi1zcmMtYmxrIChpbmZvIHBhcmFtcykK ICAiUnVuIHRoZSBjdXJyZW50IHNvdXJjZSBibG9jayBieSBleHBhbmRpbmcgdGhlIGNvZGUgYW5k CnJlZ2lzdGVyaW5nIHRoZSBzZXNzaW9uIHRvIGV4ZWN1dGUuIFdlIHdhaXQgaWYgbm8gYXN5bmNo cm9ub3VzCmV4ZWN1dGlvbiBpcyBzcGVjaWZpZWQgYW5kIHRoZW4gaW5zZXJ0IHRoZSByZXN1bHRz IG9mIHRoZQpjb21wdXRhdGlvbi4iCiAgOzsgUGFyc2UgdGhlIGhlYWRlciBhcmd1bWVudHMgYW5k IGV4cGFuZCBub3dlYiByZWZlcmVuY2VzIGluCiAgOzsgdGhlIGJsb2NrLiAgQWZ0ZXIgdGhpcywg YGJvZHknIG11c3QgYmUgZ2l2ZW4gdG8gYQogIDs7IGxhbmd1YWdlLXNwZWNpZmljIGlucHV0IHBy ZS1wcm9jZXNzb3IgYmVmb3JlIGl0IGNhbiBiZQogIDs7IGV4ZWN1dGVkLgogIChsZXQqICgobGFu ZyAobnRoIDAgaW5mbykpCgkgKHJlc3VsdC1wYXJhbXMgKGNkciAoYXNzcSA6cmVzdWx0LXBhcmFt cyBwYXJhbXMpKSkKCSAoYXN5bmMgKGlmIChhc3NxIDphc3luYyBwYXJhbXMpIHQpKQoJIChib2R5 IChvcmctYmFiZWwtLWV4cGFuZC1ib2R5IGluZm8pKQoJIChzZXNzaW9uIChvcmctYmFiZWwtZmV0 Y2gtc2Vzc2lvbiAoY2RyIChhc3NvYyA6c2Vzc2lvbiBwYXJhbXMpKSBsYW5nKSkKCSAoZGlyIChj ZHIgKGFzc3EgOmRpciBwYXJhbXMpKSkKCSAobWtkaXJwIChjZHIgKGFzc3EgOm1rZGlycCBwYXJh bXMpKSkKCSAoZGVmYXVsdC1kaXJlY3RvcnkgKG9yZy1iYWJlbC1zZXQtZGVmYXVsdC1kaXIgbWtk aXJwIGRpcikpCgkgKGluZGljYXRvciAoc2xvdC12YWx1ZSBzZXNzaW9uICdpbmRpY2F0b3ItcmVn ZXhwKSkKCSByZXN1bHQpCSAgICAKICAgIDs7IExldCB0aGUgcHJvY2VzcyBrbm93IHdoZXRoZXIg aXQgc2hvdWxkIG5vdGlmeSBpdHMgbGF0Y2gKICAgIDs7IG9uY2UgaXQgaGFzIGZpbmlzaGVkIGV4 ZWN1dGluZwogICAgKHNldGYgKHNsb3QtdmFsdWUgc2Vzc2lvbiAnYXN5bmMpIGFzeW5jKQogICAg OzsgUmVzZXQgY3VycmVudC1kYW5nbGluZyBpbiBjYXNlIGVycm9ycyBpbiBwcmV2aW91cwogICAg OzsgZXhlY3V0aW9ucyBwb2xsdXRlZCB0aGUgb3V0cHV0CiAgICAoc2V0ZiAoc2xvdC12YWx1ZSBz ZXNzaW9uICdjdXJyZW50LWRhbmdsaW5nKSAiIikKICAgIDs7IFdlIG11c3QgcmVnaXN0ZXIgdGhl IHNlc3Npb24gdG8gaGF2ZSBpdHMgb3duCiAgICA7OyBhc3luYy1maWx0ZXIgaW4gb3JkZXIgdG8g aGFuZGxlIHNlc3Npb24tbGVzcyBibG9ja3MuCiAgICAob3JnLWJhYmVsLWNvbWludC1hc3luYy1y ZWdpc3RlciBzZXNzaW9uIChjdXJyZW50LWJ1ZmZlcikgaW5kaWNhdG9yIGFyZykJICAgIAogICAg OzsgTm93IGNvbXB1dGUgdGhlIHJlc3VsdCwgdGhlIHVzZXIgaGFzIHRvIGltcGxlbWVudCBhCiAg ICA7OyBsYW5ndWFnZSBzcGVjaWZpYyBvcmctYmFiZWwtc2Vzc2lvbi1leGVjdXRlIGZ1bmN0aW9u CiAgICAoc2V0cSByZXN1bHQgKG9yZy1iYWJlbC1zZXNzaW9uLWV4ZWN1dGUgc2Vzc2lvbiBib2R5 IHBhcmFtcykpCiAgICA7OyBJbmZvcm0gdXNlciB3ZSBhcmUgZXhlY3V0aW5nIHRoZSBjb2RlCiAg ICAobWVzc2FnZSAiZXhlY3V0aW5nICVzIGNvZGUgYmxvY2slcy4uLiIKCSAgICAgKGNhcGl0YWxp emUgbGFuZykKCSAgICAgKGxldCAoKG5hbWUgKG50aCA0IGluZm8pKSkKCSAgICAgICAoaWYgbmFt ZSAoZm9ybWF0ICIgKCVzKSIgbmFtZSkgIiIpKSkKICAgIDs7IEluc2VydCB0aGUgdGFnIGZvciB0 aGUgcmVzdWx0CiAgICAob3JnLWJhYmVsLWluc2VydC1yZXN1bHQKICAgICByZXN1bHQgcmVzdWx0 LXBhcmFtcyBpbmZvIG5pbCBsYW5nKQogICAgKHJ1bi1ob29rcyAnb3JnLWJhYmVsLWFmdGVyLWV4 ZWN1dGUtaG9vaykKICAgIDs7IEJsb2NrIGV4ZWN1dGlvbiBpZiBub3QgYXN5bmNocm9ub3VzCiAg ICAodW5sZXNzIGFzeW5jCiAgICAgICh3YWl0IChzbG90LXZhbHVlIHNlc3Npb24gJ2lucHV0LWxh dGNoKSkpCiAgICByZXN1bHQpKQoKKGRlZnVuIG9yZy1iYWJlbC1zZXNzaW9uLWV4ZWN1dGUtc3Jj LWJsb2NrICgmb3B0aW9uYWwgYXJnIGluZm8gcGFyYW1zKQogICJFeGVjdXRlIHRoZSBjdXJyZW50 IHNvdXJjZSBjb2RlIGJsb2NrLgpJbnNlcnQgdGhlIHJlc3VsdHMgb2YgZXhlY3V0aW9uIGludG8g dGhlIGJ1ZmZlci4gIFNvdXJjZSBjb2RlCmV4ZWN1dGlvbiBhbmQgdGhlIGNvbGxlY3Rpb24gYW5k IGZvcm1hdHRpbmcgb2YgcmVzdWx0cyBjYW4gYmUKY29udHJvbGxlZCB0aHJvdWdoIGEgdmFyaWV0 eSBvZiBoZWFkZXIgYXJndW1lbnRzLgoKV2l0aCBwcmVmaXggYXJndW1lbnQgQVJHLCBmb3JjZSBy ZS1leGVjdXRpb24gZXZlbiBpZiBhbiBleGlzdGluZwpyZXN1bHQgY2FjaGVkIGluIHRoZSBidWZm ZXIgd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiByZXR1cm5lZC4KCk9wdGlvbmFsbHkgc3VwcGx5 IGEgdmFsdWUgZm9yIElORk8gaW4gdGhlIGZvcm0gcmV0dXJuZWQgYnkKYG9yZy1iYWJlbC1nZXQt c3JjLWJsb2NrLWluZm8nLgoKT3B0aW9uYWxseSBzdXBwbHkgYSB2YWx1ZSBmb3IgUEFSQU1TIHdo aWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGgKdGhlIGhlYWRlciBhcmd1bWVudHMgc3BlY2lmaWVkIGF0 IHRoZSBmcm9udCBvZiB0aGUgc291cmNlIGNvZGUKYmxvY2suIgogIChpbnRlcmFjdGl2ZSkKICA7 OyBVcGRhdGUgdGhlIGN1cnJlbnQgc291cmNlIGJsb2NrIGxvY2F0aW9uCiAgKGxldCogKChvcmct YmFiZWwtY3VycmVudC1zcmMtYmxvY2stbG9jYXRpb24KCSAgKG9yIG9yZy1iYWJlbC1jdXJyZW50 LXNyYy1ibG9jay1sb2NhdGlvbgoJICAgICAgKG50aCA1IGluZm8pCgkgICAgICAob3JnLWJhYmVs LXdoZXJlLWlzLXNyYy1ibG9jay1oZWFkKSkpCgkgOzsgRXh0cmFjdCBoZWFkZXIgaW5mb3JtYXRp b24KCSAoaW5mbyAoaWYgaW5mbyAoY29weS10cmVlIGluZm8pIChvcmctYmFiZWwtZ2V0LXNyYy1i bG9jay1pbmZvKSkpKQogICAgOzsgTWVyZ2UgUEFSQU1TIHdpdGggSU5GTyBiZWZvcmUgY29uc2lk ZXJpbmcgc291cmNlIGJsb2NrCiAgICA7OyBldmFsdWF0aW9uIHNpbmNlIGJvdGggY291bGQgZGlz YWdyZWUuCiAgICAoY2wtY2FsbGYgb3JnLWJhYmVsLW1lcmdlLXBhcmFtcyAobnRoIDIgaW5mbykg cGFyYW1zKQogICAgKHdoZW4gKG9yZy1iYWJlbC1jaGVjay1ldmFsdWF0ZSBpbmZvKQogICAgICAo Y2wtY2FsbGYgb3JnLWJhYmVsLXByb2Nlc3MtcGFyYW1zIChudGggMiBpbmZvKSkgICAgICAKICAg ICAgKGlmLWxldCogKChwYXJhbXMgKG50aCAyIGluZm8pKQoJCShyZXN1bHQgKG9yZy1iYWJlbC1t YXliZS1nZXQtY2FjaGUgaW5mbyBwYXJhbXMgYXJnKSkpCgkgIDs7IElmIHRoZSByZXN1bHQgd2Fz IGFscmVhZHkgY2FjaGVkLCByZXR1cm4gaXQKCSAgcmVzdWx0Cgk7OyBPdGhlcndpc2UsIHdlIG11 c3QgZXhlY3V0ZSB0aGUgc291cmNlIGJsb2NrCgkob3JnLWJhYmVsLXJ1bi1zcmMtYmxrIGluZm8g cGFyYW1zKSkpKSkKCihkZWZ1biBvcmctYmFiZWwtY29taW50LWFzeW5jLXJlZ2lzdGVyCiAgICAo c2Vzc2lvbiBvcmctYnVmZmVyIGluZGljYXRvci1yZWdleHAgYXJnKQogICJTZXQgbG9jYWwgb3Jn LWJhYmVsLWNvbWludC1hc3luYyB2YXJpYWJsZXMgaW4gU0VTU0lPTi4KT1JHLUJVRkZFUiBpcyBh ZGRlZCB0byBgb3JnLWJhYmVsLWNvbWludC1hc3luYy1idWZmZXJzJyBpZiBub3QKcHJlc2VudC4g IGBvcmctYmFiZWwtY29taW50LWFzeW5jLWluZGljYXRvcicsCmBvcmctYmFiZWwtY29taW50LWFz eW5jLWNodW5rLWNhbGxiYWNrJywgYW5kCmBvcmctYmFiZWwtY29taW50LWFzeW5jLWZpbGUtY2Fs bGJhY2snIGFyZSBzZXQgdG8KSU5ESUNBVE9SLVJFR0VYUCwgQ0hVTkstQ0FMTEJBQ0ssIGFuZCBG SUxFLUNBTExCQUNLCnJlc3BlY3RpdmVseS4iCiAgKG9yZy1iYWJlbC1jb21pbnQtaW4tYnVmZmVy IChzbG90LXZhbHVlIHNlc3Npb24gJ2J1ZmZlcikgICAgICAgCiAgICAodW5sZXNzIChtZW1xIG9y Zy1idWZmZXIgKHNsb3QtdmFsdWUgc2Vzc2lvbiAnb3JnLWJ1ZmZlcnMpKQogICAgICAoc2V0ZiAo c2xvdC12YWx1ZSBzZXNzaW9uICdvcmctYnVmZmVycykKCSAgICAoY29ucyBvcmctYnVmZmVyIChz bG90LXZhbHVlIHNlc3Npb24gJ29yZy1idWZmZXJzKSkpKQogICAgKGFkZC1ob29rICdjb21pbnQt b3V0cHV0LWZpbHRlci1mdW5jdGlvbnMKCSAgICAgIGAobGFtYmRhIChzdHJpbmcpCgkJIChvcmct YmFiZWwtY29taW50LWFzeW5jLWZpbHRlciBzdHJpbmcgLHNlc3Npb24gLGFyZykpIG5pbCB0KSkp CgoKKGRlZnVuIG9yZy1iYWJlbC1jb21pbnQtYXN5bmMtZmlsdGVyIChzdHJpbmcgc2Vzc2lvbiBh cmcpCiAgIkNhcHR1cmVzIEJhYmVsIGFzeW5jIG91dHB1dCBmcm9tIGNvbWludCBidWZmZXIgYmFj ayB0byBPcmcgbW9kZSBidWZmZXJzLgpUaGlzIGZ1bmN0aW9uIGlzIGFkZGVkIGFzIGEgaG9vayB0 byBgY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zJy4KU1RSSU5HIGNvbnRhaW5zIHRoZSBv dXRwdXQgb3JpZ2luYWxseSBpbnNlcnRlZCBpbnRvIHRoZSBjb21pbnQgYnVmZmVyLiIgIAogIDs7 IFJlbW92ZSBvdXRkYXRlZCBPcmcgbW9kZSBidWZmZXJzICAKICAoc2V0ZiAoc2xvdC12YWx1ZSBz ZXNzaW9uICdvcmctYnVmZmVycykKCShjbC1sb29wIGZvciBidWYgaW4gKHNsb3QtdmFsdWUgc2Vz c2lvbiAnb3JnLWJ1ZmZlcnMpCgkgICAgICAgICBpZiAoYnVmZmVyLWxpdmUtcCBidWYpCgkgICAg ICAgICBjb2xsZWN0IGJ1ZikpCiAgOzsgU2V0IGxvY2FsIGNvcGllcyBvZiBnbG9iYWwgYm9va2tl ZXBpbmcgdmFyaWFibGVzIGFuZCBnZXQgdGhlIGN1cnJlbnQsCiAgOzsgcG9zc2libHkgaW5jb21w bGV0ZSBvdXRwdXQgZnJvbSB0aGUgcHJvY2VzcyBpbnRvIGNvbWJpbmVkLXN0cmluZwogIChmaWx0 ZXItb3V0cHV0LXN0cmluZyBzdHJpbmcKCQkJKHNsb3QtdmFsdWUgc2Vzc2lvbiAnaW5kaWNhdG9y LXJlZ2V4cCkKCQkJc2Vzc2lvbgoJCQkoc2xvdC12YWx1ZSBzZXNzaW9uICdvcmctYnVmZmVycykK CQkJYXJnKSkKCihkZWZ1biBvcmctYmFiZWwtc2Nhbi1mb3ItcmVzdWx0cwogICAgKGluZGljYXRv ciB1dWlkLWxpc3Qgb3JnLWJ1ZmZlcnMgZW5kLXRva2VuIGluc2VydGlvbi1mdW5jIGFyZykKICAi U2NhbiB0aGUgY29taW50IGJ1ZmZlciBmb3IgSU5ESUNBVE9SIHBhaXJzIHdpdGggdXVpZCdzIGlu ClVVSUQtTElTVCBoYXZpbmcgdGhlIGVuZCB0b2tlbiBFTkQtVE9LRU4gKGUuZy4gJ2VuZCcgb3IK J2V4Y2VwdGVuZCcpIGFuZCBpbnNlcnQgdGhlIHRleHQgaW4gYmV0d2VlbiBpbnRvIGEgYnVmZmVy IGluCk9SRy1CVUZGRVJTIHVzaW5nIHRoZSBmdW5jdGlvbiBJTlNFUlRJT04tRlVOQywgd2hpY2gg c2hvdWxkIHRha2UKYXMgYXJndW1lbnRzIGEgc3RyaW5nIHJlc3VsdCB0byBpbnNlcnQsIGEgdXVp ZCBsb2NhdGlvbiwKb3JnLWJ1ZmZlcnMsIGFuZCB0aGUgJ2FyZycgdmFyaWFibGUgcGFzc2VkIGlu IG9wdGlvbmFsbHkgdG8Kb3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrLgoiICAKICAod2hlbiB1 dWlkLWxpc3QKICAgIDs7IFNlYXJjaCBmb3IgcmVzdWx0cyBpbiB0aGUgY29taW50IGJ1ZmZlcgog ICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCiAgICAgICh3 aGlsZSB1dWlkLWxpc3QKCShyZS1zZWFyY2gtYmFja3dhcmQgaW5kaWNhdG9yCgkJCSAgICAod2hl biAoZXF1YWwgKG1hdGNoLXN0cmluZyAxKSBlbmQtdG9rZW4pCgkJCSAgICAgIChsZXQqICgodXVp ZCAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpCgkJCQkgICAgIChyZXMtc3RyLXJhdwoJ CQkJICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcKCQkJCSAgICAgICA7OyBtb3ZlIHBvaW50IHRvIGJl Z2lubmluZyBvZiBpbmRpY2F0b3IKCQkJCSAgICAgICAoLSAobWF0Y2gtYmVnaW5uaW5nIDApIDEp CgkJCQkgICAgICAgOzsgZmluZCB0aGUgbWF0Y2hpbmcgc3RhcnQgaW5kaWNhdG9yCgkJCQkgICAg ICAgKGNsLWxvb3AKCQkJCQlkbyAocmUtc2VhcmNoLWJhY2t3YXJkIGluZGljYXRvcikKCQkJCQl1 bnRpbCAoYW5kIChlcXVhbCAobWF0Y2gtc3RyaW5nIDEpICJzdGFydCIpCgkJCQkJCSAgIChlcXVh bCAobWF0Y2gtc3RyaW5nIDIpIHV1aWQpKQoJCQkJCWZpbmFsbHkgcmV0dXJuICgrIDEgKG1hdGNo LWVuZCAwKSkpKSkKCQkJCSAgICAgOzsgQXBwbHkgY2FsbGJhY2sgdG8gY2xlYW4gdXAgdGhlIHJl c3VsdAoJCQkJICAgICAocmVzLXN0ciAob3JnLXRyaW0gcmVzLXN0ci1yYXcpKSkKCQkJCTs7IElu c2VydCByZXN1bHRzCgkJCQkoZ290by1yZXN1bHQtd2l0aC10YWcgdXVpZCBpbiBvcmctYnVmZmVy cwoJCQkJCQkgICAgICAoZnVuY2FsbCBpbnNlcnRpb24tZnVuYwoJCQkJCQkJICAgICAgIHNlc3Np b24KCQkJCQkJCSAgICAgICByZXMtc3RyCgkJCQkJCQkgICAgICAgaW5mbwoJCQkJCQkJICAgICAg IGxhbmcKCQkJCQkJCSAgICAgICBwYXJhbXMKCQkJCQkJCSAgICAgICByZXN1bHQtcGFyYW1zKSkK CQkJCTs7IFJlbW92ZSB1dWlkIGZyb20gdGhlIGxpc3QgdG8gc2VhcmNoIGZvcgoJCQkJKHNldHEg dXVpZC1saXN0IChkZWxldGUgdXVpZCB1dWlkLWxpc3QpKSkpKSkpKSkKCihkZWZ1biBvcmctYmFi ZWwtcGxhY2UtcmVzdWx0cyAoc2Vzc2lvbiByZXN1bHQgaW5mbyBsYW5nIHBhcmFtcyByZXN1bHQt cGFyYW1zKQogIChsZXQqICgoZmlsZSAoYW5kIChtZW1iZXIgImZpbGUiIHJlc3VsdC1wYXJhbXMp CgkJICAgIChjZHIgKGFzc3EgOmZpbGUgcGFyYW1zKSkpKQoJIChwb3N0IChjZHIgKGFzc3EgOnBv c3QgcGFyYW1zKSkpKQogICAgOzsgV2l0aCB0aGUgcmF3IHN0cmluZyByZXN1bHQsIHdlIGNhbiBz dGFydAogICAgOzsgcG9zdC1wcm9jZXNzIGl0IGFuZCBpbnNlcnQgaXQgc28gbG9uZyBhcyB0aGUK ICAgIDs7IHVzZXIgZGlkIG5vdCBzaWxlbmNlIHRoZSByZXN1bHRzLgogICAgKGlmIChtZW1iZXIg Im5vbmUiIHJlc3VsdC1wYXJhbXMpCgkobWVzc2FnZSAicmVzdWx0IHNpbGVuY2VkIikKICAgICAg OzsgVHJhbnNmb3JtIHJlc3VsdCB0byBsaXNwIHRhYmxlIGlmIGluZGljYXRlZCBieSBoZWFkZXIg YXJndW1lbnRzCiAgICAgIChzZXRxIHJlc3VsdCAob3JnLWJhYmVsLW1heWJlLW1ha2UtdGFibGUg cmVzdWx0IHBhcmFtcyByZXN1bHQtcGFyYW1zIHNlc3Npb24pKQkJICAgICAKICAgICAgOzsgSWYg bm9uLWVtcHR5IHJlc3VsdCBhbmQgOmZpbGUgdGhlbiB3cml0ZSB0byA6ZmlsZS4KICAgICAgKHdo ZW4gZmlsZQkJICAgICAgIAoJOzsgTm93IHJldHVybiB0aGUgZmlsZSByYXRoZXIgdGhhbiB0aGUg cmVzdWx0cwoJKHNldHEgcmVzdWx0IChvcmctYmFiZWwtd3JpdGUtcmVzdWx0LXRvLWZpbGUgZmls ZSByZXN1bHQgcGFyYW1zIHJlc3VsdC1wYXJhbXMpKQoJKHNldHEgcmVzdWx0LXBhcmFtcyAocmVt b3ZlICJmaWxlIiByZXN1bHQtcGFyYW1zKSkpCiAgICAgIDs7IFBvc3NpYmx5IHBlcmZvcm0gcG9z dCBwcm9jZXNzIHByb3ZpZGVkIGl0cwogICAgICA7OyBhcHByb3ByaWF0ZS4gIER5bmFtaWNhbGx5 IGJpbmQgIip0aGlzKiIgdG8gdGhlCiAgICAgIDs7IGFjdHVhbCByZXN1bHRzIG9mIHRoZSBibG9j ay4KICAgICAgKHdoZW4gcG9zdAoJOzsgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIDpwb3N0LCBlbWJl ZCB0aGUgcmVzdWx0IGludG8gdGhlCgk7OyBzdHJpbmcgZ2l2ZW4gaW4gc2FpZCBoZWFkZXIgYXJn dW1lbnQuCgkoc2V0cSByZXN1bHQgKG9yZy1iYWJlbC1tYXliZS1wb3N0cHJvY2VzcyBmaWxlIHJl c3VsdCBwYXJhbXMgcG9zdCkpKQkJICAgICAKICAgICAgOzsgRmluYWxseSBpbnNlcnQgdGhlIHJl c3VsdHMKICAgICAgKG9yZy1iYWJlbC1pbnNlcnQtcmVzdWx0CiAgICAgICByZXN1bHQgcmVzdWx0 LXBhcmFtcyBpbmZvIG5pbCBsYW5nKSkpKQoKKGRlZnVuIGZpbHRlci1vdXRwdXQtc3RyaW5nIChz dHJpbmcgaW5kaWNhdG9yIHNlc3Npb24gb3JnLWJ1ZmZlcnMgYXJnKQogICJDYXB0dXJlcyBCYWJl bCBhc3luYyBvdXRwdXQgZnJvbSBjb21pbnQgYnVmZmVyIGJhY2sgdG8gT3JnIG1vZGUgYnVmZmVy cy4KVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCBhcyBhIGhvb2sgdG8gYGNvbWludC1vdXRwdXQtZmls dGVyLWZ1bmN0aW9ucycuClNUUklORyBjb250YWlucyB0aGUgb3V0cHV0IG9yaWdpbmFsbHkgaW5z ZXJ0ZWQgaW50byB0aGUgY29taW50IGJ1ZmZlci4iICAKICAobGV0KiAoKGNvbWJpbmVkLXN0cmlu ZyAoY29uY2F0IChzbG90LXZhbHVlIHNlc3Npb24gJ2N1cnJlbnQtZGFuZ2xpbmcpIHN0cmluZykp CgkgKG5ldy1kYW5nbGluZyBjb21iaW5lZC1zdHJpbmcpCgkgOzsgSW5kaWNhdGUgd2hldGhlciBv ciBub3Qgd2UgaW5zZXJ0ZWQgYSByZXN1bHQgdG8gc2lnbmFsIGFueSBibG9ja2VkIGZ1bmN0aW9u cwoJIDs7IHRoYXQgdGhleSBtYXkgcmVzdW1lCgkgKHJlc3VtZS1leGVjIG5pbCkKCSA7OyBsaXN0 IG9mIFVVSUQncyBtYXRjaGVkIGJ5IGBvcmctYmFiZWwtY29taW50LWFzeW5jLWluZGljYXRvcicK CSB1dWlkLWxpc3QKCSBleGNlcHQtdXVpZC1saXN0KQogICAgKHdpdGgtdGVtcC1idWZmZXIKICAg ICAgKGluc2VydCBjb21iaW5lZC1zdHJpbmcpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp CiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgaW5kaWNhdG9yIG5pbCB0KQoJOzsgdXBk YXRlIGRhbmdsaW5nCgkoc2V0cSBuZXctZGFuZ2xpbmcgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50 KSAocG9pbnQtbWF4KSkpCgkoY29uZCAoKGVxdWFsIChtYXRjaC1zdHJpbmcgMSkgImVuZCIpCgkg ICAgICAgOzsgV2UgZmluaXNoZWQgZXhlY3V0aW5nCgkgICAgICAgKHNldHEgcmVzdW1lLWV4ZWMg dCkKCSAgICAgICA7OyBzYXZlIFVVSUQgZm9yIGluc2VydGlvbiBsYXRlcgoJICAgICAgIChwdXNo IChtYXRjaC1zdHJpbmcgMikgdXVpZC1saXN0KSkKCSAgICAgICgoZXF1YWwgKG1hdGNoLXN0cmlu ZyAxKSAiZXhjZXB0ZW5kIikKCSAgICAgICA7OyBXZSBmaW5pc2hlZCBleGVjdXRpbmcKCSAgICAg ICAoc2V0cSByZXN1bWUtZXhlYyB0KQoJICAgICAgIDs7IHNhdmUgVVVJRCBmb3IgaW5zZXJ0aW9u IGxhdGVyCgkgICAgICAgKHB1c2ggKG1hdGNoLXN0cmluZyAyKSBleGNlcHQtdXVpZC1saXN0KSkK CSAgICAgICgoZXF1YWwgKG1hdGNoLXN0cmluZyAxKSAiZmlsZSIpCgkgICAgICAgOzsgV2UgZmlu aXNoZWQgZXhlY3V0aW5nCgkgICAgICAgKHNldHEgcmVzdW1lLWV4ZWMgdCkKCSAgICAgICA7OyBp bnNlcnQgcmVzdWx0cyBmcm9tIHRtcC1maWxlCgkgICAgICAgKGxldCogKCh0bXAtZmlsZSAobWF0 Y2gtc3RyaW5nIDIpKQoJCSAgICAgIChyZXN1bHQgKG9yZy1iYWJlbC1ldmFsLXJlYWQtZmlsZSB0 bXAtZmlsZSkpKQoJCSAoZ290by1yZXN1bHQtd2l0aC10YWcgdG1wLWZpbGUgaW4gb3JnLWJ1ZmZl cnMgCgkJCQkgICAgICAgKG9yZy1iYWJlbC1wbGFjZS1yZXN1bHRzIHNlc3Npb24gcmVzdWx0IGlu Zm8KCQkJCQkJCQlsYW5nIHBhcmFtcyByZXN1bHQtcGFyYW1zKSkpKSkpCiAgICAgIDs7IFRydW5j YXRlIGRhbmdsaW5nIHRvIG9ubHkgdGhlIG1vc3QgcmVjZW50IG91dHB1dAogICAgICAod2hlbiAo PiAobGVuZ3RoIG5ldy1kYW5nbGluZykgKGxlbmd0aCBzdHJpbmcpKQoJKHNldHEgbmV3LWRhbmds aW5nIHN0cmluZykpKQogICAgKHNldGYgKHNsb3QtdmFsdWUgc2Vzc2lvbiAnY3VycmVudC1kYW5n bGluZykgbmV3LWRhbmdsaW5nKSAgICAgICAgCiAgICAob3JnLWJhYmVsLXNjYW4tZm9yLXJlc3Vs dHMgaW5kaWNhdG9yIHV1aWQtbGlzdCAgICAgICAgb3JnLWJ1ZmZlcnMgImVuZCIgICAgICAgJ29y Zy1iYWJlbC1wbGFjZS1yZXN1bHQgICAgIGFyZykKICAgIChvcmctYmFiZWwtc2Nhbi1mb3ItcmVz dWx0cyBpbmRpY2F0b3IgZXhjZXB0LXV1aWQtbGlzdCBvcmctYnVmZmVycyAiZXhjZXB0ZW5kIiAn b3JnLWJhYmVsLXBsYWNlLWV4Y2VwdGlvbnMgYXJnKQogICAgKGlmIHJlc3VtZS1leGVjCgkocHJv Z24KCSAgOzsgQWxzbyBub3RpZnkgdGhhdCB3ZSBhcmUgcmVhZHkgZm9yIG5ldyBpbnB1dCBpZiB3 ZSBhcmUgYmVpbmcgd2FpdGVkIG9uCgkgICh1bmxlc3MgKHNsb3QtdmFsdWUgc2Vzc2lvbiAnYXN5 bmMpCgkgICAgKG5vdGlmeSAoc2xvdC12YWx1ZSBzZXNzaW9uICdpbnB1dC1sYXRjaCkpKSAgICAg ICAgCQoJICA7OyBTaW5jZSB3ZSBhcmUgZG9uZSwgd2UgY2FuIHNhZmVseSBraWxsIHRoZSBub25l IHNlc3Npb24gaW4KCSAgOzsgY2FzZSBpdCB3YXMgY3JlYXRlZC4KCSAgKGlmIChzbG90LXZhbHVl IHNlc3Npb24gJ2lzLW5vbmUpCgkgICAgICAob3JnLWJhYmVsLWtpbGwtc2Vzc2lvbi1pbnN0YW5j ZSBzZXNzaW9uKSkpKSkpCgooZGVmdW4gb3JnLWJhYmVsLXdyaXRlLXJlc3VsdC10by1maWxlIChm aWxlIHJlc3VsdCBwYXJhbXMgcmVzdWx0LXBhcmFtcykKICAiSWYgYDpyZXN1bHRzJyBhcmUgc3Bl Y2lhbCB0eXBlcyBsaWtlIGBsaW5rJyBvciBgZ3JhcGhpY3MnLApkb24ndCB3cml0ZSByZXN1bHQg dG8gYDpmaWxlJy4gIE9ubHkgaW5zZXJ0IGEgbGluayB0bwpgOmZpbGUnLiBDaGFuZ2UgdGhlIGZp bGUgbW9kZXMgYXMgd2VsbC4iCiAgKHVubGVzcyAob3IgKG1lbWJlciAibGluayIgcmVzdWx0LXBh cmFtcykKCSAgICAgIChtZW1iZXIgImdyYXBoaWNzIiByZXN1bHQtcGFyYW1zKSkKICAgICh3aXRo LXRlbXAtZmlsZSBmaWxlCiAgICAgIChpbnNlcnQgKG9yZy1iYWJlbC1mb3JtYXQtcmVzdWx0Cgkg ICAgICAgcmVzdWx0CgkgICAgICAgKGNkciAoYXNzcSA6c2VwIHBhcmFtcykpKSkpCiAgICA7OyBT ZXQgZmlsZSBwZXJtaXNzaW9ucyBpZiBoZWFkZXIgYXJndW1lbnQKICAgIDs7IGA6ZmlsZS1tb2Rl JyBpcyBwcm92aWRlZC4KICAgICh3aGVuIChhc3NxIDpmaWxlLW1vZGUgcGFyYW1zKQogICAgICAo c2V0LWZpbGUtbW9kZXMgZmlsZSAoY2RyIChhc3NxIDpmaWxlLW1vZGUgcGFyYW1zKSkpKSkKICBm aWxlKQoKKGRlZnVuIG9yZy1iYWJlbC1tYXliZS1tYWtlLXRhYmxlIChyZXN1bHQgcGFyYW1zIHJl c3VsdC1wYXJhbXMgc2Vzc2lvbikKICAiVHVybiB0aGUgdGV4dC1vdXRwdXQgb2YgdGhlIHByb2Nl c3MgaW50byBhIGxpc3AgZm9ybSBpZgpyZXF1aXJlZCBieSB0aGUgaGVhZGVyIGFyZ3VtZW50cy4i CiAgOzsgUmVjZWl2ZSB0aGUgcmF3IHN0cmluZyByZXN1bHQgYW5kIHRyYW5zZm9ybSBpdCB3aXRo IHRoZQogIDs7IGxhbmd1YWdlIHNwZWNpZmljIG9yZy1iYWJlbC10YWJsZS1vci1zdHJpbmc6TEFO RyB0byBhbiBlbGlzcAogIDs7IGZvcm0sIHRoZW4gdG8gYSB0YWJsZSBpZiBpbnN0cnVjdGVkIGJ5 IHRoZSBoZWFkZXJzLgogIChsZXQgKChyZXN1bHQgKG9yZy1iYWJlbC1yZWFzc2VtYmxlLXRhYmxl CgkJIChvcmctYmFiZWwtcmVzdWx0LWNvbmQgcmVzdWx0LXBhcmFtcwoJCSAgIHJlc3VsdAoJCSAg IChvcmctYmFiZWwtdGFibGUtb3Itc3RyaW5nIHNlc3Npb24gKG9yZy10cmltIHJlc3VsdCkpKSAK CQkgKG9yZy1iYWJlbC1waWNrLW5hbWUgKGNkciAoYXNzcSA6Y29sbmFtZS1uYW1lcyBwYXJhbXMp KQoJCQkJICAgICAgKGNkciAoYXNzcSA6Y29sbmFtZXMgcGFyYW1zKSkpCgkJIChvcmctYmFiZWwt cGljay1uYW1lIChjZHIgKGFzc3EgOnJvd25hbWUtbmFtZXMgcGFyYW1zKSkKCQkJCSAgICAgIChj ZHIgKGFzc3EgOnJvd25hbWVzIHBhcmFtcykpKSkpKQogICAgOzsgSWYgdGhlIHVzZXIgcmVxdWVz dGVkIHRoZSB2YWx1ZSBvZiB0aGUgY29tcHV0YXRpb24gaW4gZWl0aGVyCiAgICA7OyB2ZWN0b3Ig b3IgdGFibGUgZm9ybSwgdHJhbnNmb3JtIGl0IHRvIGFuIGVxdWl2YWxlbnQgZWxpc3AKICAgIDs7 IGV4cHJlc3Npb24uCiAgICAoaWYgKGFuZCAoZXEgKGNkciAoYXNzcSA6cmVzdWx0LXR5cGUgcGFy YW1zKSkgJ3ZhbHVlKQoJICAgICAob3IgKG1lbWJlciAidmVjdG9yIiByZXN1bHQtcGFyYW1zKQoJ CSAobWVtYmVyICJ0YWJsZSIgcmVzdWx0LXBhcmFtcykpCgkgICAgIChub3QgKGxpc3RwIHJlc3Vs dCkpKQoJKGxpc3QgKGxpc3QgcmVzdWx0KSkKICAgICAgcmVzdWx0KSkpCgooZGVmdW4gb3JnLWJh YmVsLW1heWJlLXBvc3Rwcm9jZXNzIChmaWxlIHJlc3VsdCBwYXJhbXMgcG9zdCkKICAobGV0ICgo KnRoaXMqIChpZiAobm90IGZpbGUpIHJlc3VsdAoJCSAgKG9yZy1iYWJlbC1yZXN1bHQtdG8tZmls ZQoJCSAgIGZpbGUKCQkgICAob3JnLWJhYmVsLS1maWxlLWRlc2MgcGFyYW1zIHJlc3VsdCkKCQkg ICAnYXR0YWNobWVudCkpKSkKICAgIChvcmctYmFiZWwtcmVmLXJlc29sdmUgcG9zdCkpKQoKCjs7 IFB5dGhvbiBzdHVmZiB0byBiZSBtb3ZlZCBvdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQooZGVmY2xhc3Mgb3JnLWJhYmVsLXNlc3Npb246cHl0aG9uIChvcmctYmFi ZWwtc2Vzc2lvbikKICAoKGluZGljYXRvci1yZWdleHAgOmluaXRmb3JtICJvYl9jb21pbnRfYXN5 bmNfcHl0aG9uX1xcKC4rXFwpX1xcKC4rXFwpIgoJCSAgICAgIlRoZSByZWdleHAgZm9yIHRoZSBp bmRpY2F0b3IgdGhhdCBkZWxpbWl0cyBuZXcKCSAgICAgc291cmNlLWJsb2NrIG91dHB1dCIpCiAg IChsYW5ndWFnZSA6aW5pdGZvcm0gInB5dGhvbiIpKSkKCihjbC1kZWZtZXRob2Qgb3JnLWJhYmVs LWludGVycHJldGVyLWNtZCAoKHNlc3Mgb3JnLWJhYmVsLXNlc3Npb246cHl0aG9uKSkKICAiRXhl Y3V0ZSBCT0RZIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkgKGRlcGVuZGluZyBvbgog IEFTWU5DKSB1c2luZyBTRVNTJ3MgcHJvY2Vzcy4gRm9yIHRoaXMgb25lIG11c3QgaW1wbGVtZW50 IGEKICBjb25jcmV0ZSBzdWJjbGFzcyBvZiBgb3JnLWJhYmVsLXNlc3Npb24nIHdpdGggYSBtZXRo b2QgdGhhdAogIHNlbmRzIGlucHV0IGFzeW5jaHJvbm91c2x5IHRvIHByb2Nlc3MuIFRoaXMgaXMg YW4gYWJzdHJhY3QKICBtZXRob2QgYW5kIG11c3QgYmUgaW1wbGVtZW50ZWQgb24gYSBwZXItbGFu Z3VhZ2UgYmFzaXMuIgogICJweXRob24zIikKCihkZWZ1biBvcmctYmFiZWwtcHl0aG9uLWZvcm1h dC1zZXNzaW9uLXZhbHVlCiAgICAoc3JjLWZpbGUgcmVzdWx0LWZpbGUgcmVzdWx0LXBhcmFtcykK ICAiUmV0dXJuIFB5dGhvbiBjb2RlIHRvIGV2YWx1YXRlIFNSQy1GSUxFIGFuZCB3cml0ZSByZXN1 bHQgdG8gUkVTVUxULUZJTEUuIgogIChmb3JtYXQgIlwKaW1wb3J0IGFzdAp3aXRoIG9wZW4oJyVz JykgYXMgX19vcmdfYmFiZWxfcHl0aG9uX3RtcGZpbGU6CiAgICBfX29yZ19iYWJlbF9weXRob25f YXN0ID0gYXN0LnBhcnNlKF9fb3JnX2JhYmVsX3B5dGhvbl90bXBmaWxlLnJlYWQoKSkKX19vcmdf YmFiZWxfcHl0aG9uX2ZpbmFsID0gX19vcmdfYmFiZWxfcHl0aG9uX2FzdC5ib2R5Wy0xXQppZiBp c2luc3RhbmNlKF9fb3JnX2JhYmVsX3B5dGhvbl9maW5hbCwgYXN0LkV4cHIpOgogICAgX19vcmdf YmFiZWxfcHl0aG9uX2FzdC5ib2R5ID0gX19vcmdfYmFiZWxfcHl0aG9uX2FzdC5ib2R5WzotMV0K ICAgIGV4ZWMoY29tcGlsZShfX29yZ19iYWJlbF9weXRob25fYXN0LCAnPHN0cmluZz4nLCAnZXhl YycpKQogICAgX19vcmdfYmFiZWxfcHl0aG9uX2ZpbmFsID0gZXZhbChjb21waWxlKGFzdC5FeHBy ZXNzaW9uKAogICAgICAgIF9fb3JnX2JhYmVsX3B5dGhvbl9maW5hbC52YWx1ZSksICc8c3RyaW5n PicsICdldmFsJykpCiAgICB3aXRoIG9wZW4oJyVzJywgJ3crJykgYXMgX19vcmdfYmFiZWxfcHl0 aG9uX3RtcGZpbGU6CiAgICAgICAgaWYgJXM6CiAgICAgICAgICAgIGltcG9ydCBwcHJpbnQKICAg ICAgICAgICAgX19vcmdfYmFiZWxfcHl0aG9uX3RtcGZpbGUud3JpdGUocHByaW50LnBmb3JtYXQo X19vcmdfYmFiZWxfcHl0aG9uX2ZpbmFsKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBfX29y Z19iYWJlbF9weXRob25fdG1wZmlsZS53cml0ZShzdHIoX19vcmdfYmFiZWxfcHl0aG9uX2ZpbmFs KSkKZWxzZToKICAgIGV4ZWMoY29tcGlsZShfX29yZ19iYWJlbF9weXRob25fYXN0LCAnPHN0cmlu Zz4nLCAnZXhlYycpKQogICAgX19vcmdfYmFiZWxfcHl0aG9uX2ZpbmFsID0gTm9uZSIKCSAgKG9y Zy1iYWJlbC1wcm9jZXNzLWZpbGUtbmFtZSBzcmMtZmlsZSAnbm9xdW90ZSkKCSAgKG9yZy1iYWJl bC1wcm9jZXNzLWZpbGUtbmFtZSByZXN1bHQtZmlsZSAnbm9xdW90ZSkKCSAgKGlmIChtZW1iZXIg InBwIiByZXN1bHQtcGFyYW1zKSAiVHJ1ZSIgIkZhbHNlIikpKQoKKGRlZnVuIGluc2VydC10b2tl bi1jbWQgKGNtZCBsb2MpCiAgKGluc2VydCAoZm9ybWF0ICJcdHByaW50ICgnb2JfY29taW50X2Fz eW5jX3B5dGhvbl97dG9rZW59X3tsb2NhdGlvbn0nLmZvcm1hdCh0b2tlbj0nJXMnLCBsb2NhdGlv bj0nJXMnKSkiIGNtZCBsb2MpKSkKCihkZWZ1biBleGVjdXRlLXB5dGhvbi1jbWQtaW4tc2hlbGwg KHByb2MgdG1wLWNtZC1maWxlIHJldC1sb2MpCiAgKHdpdGgtY3VycmVudC1idWZmZXIgcHJvYwog ICAgKGluc2VydCAiaW1wb3J0IHRyYWNlYmFjayIpIChjb21pbnQtc2VuZC1pbnB1dCkgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgIChpbnNlcnQgInRyeToiKSAoY29taW50LXNlbmQtaW5wdXQp ICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgKGluc2VydC10b2tlbi1jbWQgInN0YXJ0IiBy ZXQtbG9jKSAoY29taW50LXNlbmQtaW5wdXQpICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAg KGluc2VydCAoZm9ybWF0ICJcdGV4ZWMob3BlbignJXMnKS5yZWFkKCkpIiB0bXAtY21kLWZpbGUp KSAoY29taW50LXNlbmQtaW5wdXQpICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgKGluc2Vy dC10b2tlbi1jbWQgImVuZCIgcmV0LWxvYykgKGNvbWludC1zZW5kLWlucHV0KSAgKGdvdG8tY2hh ciAocG9pbnQtbWF4KSkKICAgIChpbnNlcnQgImV4Y2VwdCBTeW50YXhFcnJvcjoiKSAoY29taW50 LXNlbmQtaW5wdXQpICAoZ290by1jaGFyIChwb2ludC1tYXgpKSAgCiAgICAoaW5zZXJ0ICJcdHBy aW50KHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpIikgKGNvbWludC1zZW5kLWlucHV0KSAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgIChpbnNlcnQtdG9rZW4tY21kICJleGNlcHRlbmQiIHJldC1s b2MpIChjb21pbnQtc2VuZC1pbnB1dCkgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCiAgICAoaW5z ZXJ0ICJleGNlcHQgRXhjZXB0aW9uOiIpIChjb21pbnQtc2VuZC1pbnB1dCkgIChnb3RvLWNoYXIg KHBvaW50LW1heCkpICAKICAgIChpbnNlcnQgIlx0cHJpbnQodHJhY2ViYWNrLmZvcm1hdF9leGMo KSkiKSAoY29taW50LXNlbmQtaW5wdXQpICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgKGlu c2VydC10b2tlbi1jbWQgImV4Y2VwdGVuZCIgcmV0LWxvYykgKGNvbWludC1zZW5kLWlucHV0KSAg KGdvdG8tY2hhciAocG9pbnQtbWF4KSkgKGNvbWludC1zZW5kLWlucHV0KSkpCgoKKGNsLWRlZm1l dGhvZCBvcmctYmFiZWwtc2Vzc2lvbi1leGVjdXRlICgoc2VzcyBvcmctYmFiZWwtc2Vzc2lvbjpw eXRob24pIGJvZHkgcGFyYW1zKQogICJFeGVjdXRlIEJPRFkgc3luY2hyb25vdXNseSBvciBhc3lu Y2hyb25vdXNseSAoZGVwZW5kaW5nIG9uCiAgQVNZTkMpIHVzaW5nIFNFU1MncyBwcm9jZXNzLiBG b3IgdGhpcyBvbmUgbXVzdCBpbXBsZW1lbnQgYQogIGNvbmNyZXRlIHN1YmNsYXNzIG9mIGBvcmct YmFiZWwtc2Vzc2lvbicgd2l0aCBhIG1ldGhvZCB0aGF0CiAgc2VuZHMgaW5wdXQgYXN5bmNocm9u b3VzbHkgdG8gcHJvY2Vzcy4gVGhpcyBpcyBhbiBhYnN0cmFjdAogIG1ldGhvZCBhbmQgbXVzdCBi ZSBpbXBsZW1lbnRlZCBvbiBhIHBlci1sYW5ndWFnZSBiYXNpcy4iCiAgKGxldCogKChyZXN1bHQt cGFyYW1zIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpCgkgKHJlc3VsdC10eXBl IChjZHIgKGFzc3EgOnJlc3VsdC10eXBlIHBhcmFtcykpKQoJIChyZXR1cm4tdmFsICh3aGVuIChl cSByZXN1bHQtdHlwZSAndmFsdWUpCgkJICAgICAgIChjZHIgKGFzc3EgOnJldHVybiBwYXJhbXMp KSkpCgkgKHByb2MgKHNsb3QtdmFsdWUgc2Vzc2lvbiAncHJvY2VzcykpCgkgKGZ1bGwtYm9keQoJ ICAoY29uY2F0CgkgICAob3JnLWJhYmVsLWV4cGFuZC1ib2R5OmdlbmVyaWMKCSAgICBib2R5IHBh cmFtcwoJICAgIChvcmctYmFiZWwtdmFyaWFibGUtYXNzaWdubWVudHM6cHl0aG9uIHBhcmFtcykp CgkgICAod2hlbiByZXR1cm4tdmFsCgkgICAgIChmb3JtYXQgIlxuJXMiIHJldHVybi12YWwpKSkp KQogICAgKHBjYXNlIHJlc3VsdC10eXBlCiAgICAgIChgb3V0cHV0CiAgICAgICAobGV0ICgodXVp ZCAobWQ1IChudW1iZXItdG8tc3RyaW5nIChyYW5kb20gMTAwMDAwMDAwKSkpKQoJICAgICAodG1w LWNtZC1maWxlIChvcmctYmFiZWwtdGVtcC1maWxlICJweXRob24tIikpKQogICAgICAgICAod2l0 aC10ZW1wLWZpbGUgdG1wLWNtZC1maWxlCiAgICAgICAgICAgKGluc2VydCBmdWxsLWJvZHkpKQoJ IChleGVjdXRlLXB5dGhvbi1jbWQtaW4tc2hlbGwgcHJvYyB0bXAtY21kLWZpbGUgdXVpZCkKICAg ICAgICAgdXVpZCkpCiAgICAgIChgdmFsdWUKICAgICAgIChsZXQgKCh0bXAtcmVzdWx0cy1maWxl IChvcmctYmFiZWwtdGVtcC1maWxlICJweXRob24tIikpCiAgICAgICAgICAgICAodG1wLXNyYy1m aWxlIChvcmctYmFiZWwtdGVtcC1maWxlICJweXRob24tIikpCgkgICAgICh0bXAtY21kLWZpbGUg KG9yZy1iYWJlbC10ZW1wLWZpbGUgInB5dGhvbi0iKSkpCiAgICAgICAgICh3aXRoLXRlbXAtZmls ZSB0bXAtc3JjLWZpbGUgKGluc2VydCBmdWxsLWJvZHkpKQogICAgICAgICAod2l0aC10ZW1wLWZp bGUgdG1wLWNtZC1maWxlCiAgICAgICAgICAgKGluc2VydCAob3JnLWJhYmVsLXB5dGhvbi1mb3Jt YXQtc2Vzc2lvbi12YWx1ZSB0bXAtc3JjLWZpbGUgdG1wLXJlc3VsdHMtZmlsZSByZXN1bHQtcGFy YW1zKSkKICAgICAgICAgICAoaW5zZXJ0ICJcbiIpCiAgICAgICAgICAgKGluc2VydCAoZm9ybWF0 ICJwcmludCAoJ29iX2NvbWludF9hc3luY19weXRob25fZmlsZV8lcycpIiAgdG1wLXJlc3VsdHMt ZmlsZSkpKQoJIChleGVjdXRlLXB5dGhvbi1jbWQtaW4tc2hlbGwgcHJvYyB0bXAtY21kLWZpbGUg dG1wLXJlc3VsdHMtZmlsZSkKICAgICAgICAgdG1wLXJlc3VsdHMtZmlsZSkpKSkpCgooY2wtZGVm bWV0aG9kIG9yZy1iYWJlbC10YWJsZS1vci1zdHJpbmcgKChzZXNzIG9yZy1iYWJlbC1zZXNzaW9u OnB5dGhvbikgc3RyaW5nKQogICJDb252ZXJ0IFJFU1VMVFMgaW50byBhbiBhcHByb3ByaWF0ZSBl bGlzcCB2YWx1ZS4KSWYgdGhlIHJlc3VsdHMgbG9vayBsaWtlIGEgbGlzdCBvciB0dXBsZSwgdGhl biBjb252ZXJ0IHRoZW0gaW50bwphbiBFbWFjcy1saXNwIHRhYmxlLCBvdGhlcndpc2UgcmV0dXJu IHRoZSByZXN1bHRzIGFzIGEgc3RyaW5nLiIKICAobGV0ICgocmVzIChvcmctYmFiZWwtc2NyaXB0 LWVzY2FwZSBzdHJpbmcpKSkKICAgIChpZiAobGlzdHAgcmVzKQogICAgICAgIChtYXBjYXIgKGxh bWJkYSAoZWwpIChpZiAoZXEgZWwgJ05vbmUpCgkJCQkgb3JnLWJhYmVsLXB5dGhvbi1Ob25lLXRv IGVsKSkKICAgICAgICAgICAgICAgIHJlcykKICAgICAgcmVzKSkpCgoKCgoKCgoKCgoK --b1_39fUrj2fL6D8PDolKEkDwpi0x5sXIvmXCCdtjxaIl8E--