From owner-freebsd-stable@freebsd.org Tue Jul 14 18:05:30 2020 Return-Path: Delivered-To: freebsd-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D5E3236ABBE for ; Tue, 14 Jul 2020 18:05:30 +0000 (UTC) (envelope-from dwilde1@gmail.com) Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B5pMs1kB9z47yG; Tue, 14 Jul 2020 18:05:28 +0000 (UTC) (envelope-from dwilde1@gmail.com) Received: by mail-pl1-x636.google.com with SMTP id x8so7338254plm.10; Tue, 14 Jul 2020 11:05:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=L4pfAPXoYfdJ8POBQVcvZ/lHv2INhBnKDLADWts2wKQ=; b=gtOSJp2AVOUirHml1EQr/nyng7LP35leK3Fn9BnDoBd0k0CamSHZNR5RHy0ippFZ93 q9/Ybu+c1Kvoetcc/a4KJxmAVEJRwvZOef0ZOgbO3tBUHI88JyyDSztitrGkQz0mCavN BCjAQkrLjnrb8PYlrxkDOK12LyPwNj8okUkxqUpGISvvBpkfJIBZHvAkmQRMBqj2bl96 PQA00du73cHujXic1cd5bnk09nEMHiNbWs89JzMb7OTufqHZCXrHpUcqk00agLnDih/t kj7orJR7rDRWLhq9dl0JjFOZbYIMyQ84xN3p8Fa6FN+vTcGdU8lZ7JH4Ugc0P0KPvA3l kWsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=L4pfAPXoYfdJ8POBQVcvZ/lHv2INhBnKDLADWts2wKQ=; b=gwUZdNolAvLzEwekECWQRa0M9VFpY6H7fAU1fpQ3zpp5qgQbdlmUkkjk9+K217PN1I 31rVhmTqNN5gHYA7pFA1jPkwzDMOTu8vdiCQbM6DdM42aoX2UN3Yw+4EgbGEQ4Xqp6dI kc7cX4KnhtT8QYM26TGujqxY4aPdR7WyLNdOvbTlQRmTTnxxnsQi9QI7uxyd2C5Np1kB 7mozh8VNk7biJ7I7KbgAB4w5qW+8GIvVwe4MYdX6S+32S1ZOkc7poPmWf825aQI8ZyoX h0rV5lFZ2L7aKEfiR0vVQ4D19H4uPGJsSx47P5Awbwo/TloMDKP79Z6yHTYY2fXBP4AX RhjA== X-Gm-Message-State: AOAM530HYgeXxQphb94lCJd07JfaAQnShxW9/BHoa8VR+c9rKZN7K/rT cr1LVE3czxDNQaMyivWFWNjCkyf3VKc= X-Google-Smtp-Source: ABdhPJxDWaMK9/q89i3NDrlzD9A+mTSQFrf9PEEBJzNcGo9EvelF7tpYjRdBhQB7yvKoJwfgTuokSA== X-Received: by 2002:a17:902:7688:: with SMTP id m8mr1046676pll.12.1594749926716; Tue, 14 Jul 2020 11:05:26 -0700 (PDT) Received: from [192.168.0.4] (174-26-202-167.phnx.qwest.net. [174.26.202.167]) by smtp.gmail.com with ESMTPSA id i66sm17260504pfc.12.2020.07.14.11.05.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 14 Jul 2020 11:05:25 -0700 (PDT) Subject: Re: quirk in libpng16.{a|so} To: yuri@freebsd.org Cc: freebsd-stable@freebsd.org References: <05550c7e-e76b-5373-03ec-8e9008f3927f@gmail.com> From: Don Wilde Message-ID: <0fc386c4-35dc-39de-a0f0-365e82d4efde@gmail.com> Date: Tue, 14 Jul 2020 11:05:24 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------2213BD46D49BCD2C860E8E1F" Content-Language: en-US X-Rspamd-Queue-Id: 4B5pMs1kB9z47yG X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=gtOSJp2A; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of dwilde1@gmail.com designates 2607:f8b0:4864:20::636 as permitted sender) smtp.mailfrom=dwilde1@gmail.com X-Spamd-Result: default: False [-2.77 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4000::/36]; HAS_ATTACHMENT(0.00)[]; TO_DN_NONE(0.00)[]; MIME_BASE64_TEXT_BOGUS(1.00)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[gmail.com:+]; MIME_BASE64_TEXT(0.10)[]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_SHORT(-0.85)[-0.849]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RECEIVED_SPAMHAUS_PBL(0.00)[174.26.202.167:received]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; MID_RHS_MATCH_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.04)[-1.043]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-0.98)[-0.975]; MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-python]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::636:from]; RCVD_TLS_ALL(0.00)[] X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2020 18:05:31 -0000 This is a multi-part message in MIME format. --------------2213BD46D49BCD2C860E8E1F Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 7/14/20 10:10 AM, yuri@freebsd.org wrote: > On 2020-07-14 09:59, Don Wilde wrote: >> Hi, Yuri -- I understand that you maintain the png++ "C++ wrapper for >> libpng"? >> >> There's a game engine I'm trying to work with on my 12-stable system, >> called Drag[en]gine. >> >> https://dragondreams.ch/ >> >> It's a complicated port, and I'll end up tweaking some heavy-duty >> OpenGL graphics to get it to do stuff for me. The first issue is that >> our libpng16 library is missing a C++ call: >> png_access_version_number(), which causes its setup program (a Python >> script)to crash. >> >> I have both png and png++ installed and both libpng16.so and >> libpng16.a are present. >> >> I'm in the process of (also) installing it on my Ubuntu 18.04.4 >> machine. It hasn't given me this libpng16 issue. >> >> What do you think of this problem? Is this yours or is it the actual >> libpng library itself? >> > > Hi Don, > > > I used png++ on both Linux (CentOS) and FreeBSD without any problems. > > > I also can't find png_access_version_number() call in the png++ sources. Okay, this must actually be a call in the actual libpng sources. > > > Could you please provide an example code that exhibits the problem? Here's what happens, though there's evidently quite a bit of construction that happens in the middle. scons is Yet Another Super-Make, and it's plus (evidently) is that it can also generate Android and Windows code. I type 'scons -h', and the output is: scons: Reading SConscript files ... Checking for zlibVersion() in C++ library z... yes Checking for png_access_version_number() in C++ library png16... no KeyError: 'forceRuntimeLibs':   File "/opt/dragengine/SConstruct", line 633:     duplicate=0, exports='parent_env parent_targets parent_report' )   File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 660:     return method(*args, **kw)   File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 597:     return _SConscript(self.fs, *files, **subst_kw)   File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 286:     exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)   File "/opt/dragengine/extern/libpng/SConscript", line 120: forceRuntimeLibs.extend(parent_targets['lib_zlib']['forceRuntimeLibs']) The SConscript files are generated from the (attached) custom.py, from what I understand. The error happens in the construct between lines 631 - 633 of that attached SConscript file (which acts like Makefile does for C and C++). Don Wilde **************************************************** * What is the Internet of Things but a system * * of systems including humans? * **************************************************** --------------2213BD46D49BCD2C860E8E1F Content-Type: text/plain; charset=UTF-8; name="SConstruct" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="SConstruct" ZnJvbSBTQ29uc0NvbW1vbiBpbXBvcnQgKg0KZnJvbSBTQ29uc1BsYXRmb3JtQW5kcm9pZCBp bXBvcnQgYW5kcm9pZFVwZGF0ZUVudg0KDQojIGNyZWF0ZSBlbnZpcm9ubWVudA0KdG9vbHMg PSBBUkdVTUVOVFMuZ2V0KCAndG9vbHMnLCAnJyApDQppZiB0b29sczoNCglpZiB0b29scyA9 PSAnbWluZ3c2NCc6DQoJCXBhcmVudF9lbnYgPSBFbnZpcm9ubWVudCggQ1BQUEFUSD0nLics IExJQlBBVEg9Jy4nLCB0b29scz1bJ21pbmd3J10gKQ0KCQkNCgkJY29tcGlsZXIgPSAneDg2 XzY0LXc2NC1taW5ndzMyJw0KCQlpZiBub3QgcGFyZW50X2Vudi5EZXRlY3QoICd7fS1nKysn LmZvcm1hdCggY29tcGlsZXIgKSApOg0KCQkJcHJpbnQoICdXaW5kb3dzIDY0LWJpdCBDcm9z cy1Db21waWxlciBub3QgZm91bmQuJyApDQoJCQlSZXR1cm4oKQ0KCQkNCgkJcGFyZW50X2Vu di5SZXBsYWNlKCBDQyA9ICd7fS1nY2MnLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVu dF9lbnYuUmVwbGFjZSggQ1hYID0gJ3t9LWcrKycuZm9ybWF0KCBjb21waWxlciApICkNCgkJ cGFyZW50X2Vudi5SZXBsYWNlKCBMRCA9ICd7fS1sZCcuZm9ybWF0KCBjb21waWxlciApICkN CgkJcGFyZW50X2Vudi5SZXBsYWNlKCBBUiA9ICd7fS1hcicuZm9ybWF0KCBjb21waWxlciAp ICkNCgkJcGFyZW50X2Vudi5SZXBsYWNlKCBTVFJJUCA9ICd7fS1zdHJpcCcuZm9ybWF0KCBj b21waWxlciApICkNCgkJI3BhcmVudF9lbnYuUmVwbGFjZSggTUFLRSA9ICd7fS1tYWtlJy5m b3JtYXQoIGNvbXBpbGVyICkgKQ0KCQlwYXJlbnRfZW52LlJlcGxhY2UoIFJBTkxJQiA9ICd7 fS1yYW5saWInLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVudF9lbnYuUmVwbGFjZSgg Tk0gPSAne30tbm0nLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVudF9lbnYuUmVwbGFj ZSggUkMgPSAne30td2luZHJlcycuZm9ybWF0KCBjb21waWxlciApICkNCgkJcGFyZW50X2Vu di5SZXBsYWNlKCBETExUT09MID0gJ3t9LWRsbHRvb2wnLmZvcm1hdCggY29tcGlsZXIgKSAp DQoJCQ0KCQlwYXJlbnRfZW52LlJlcGxhY2UoIFNIQ0NGTEFHUyA9IFsgJyRDQ0ZMQUdTJyBd ICkgIyByZW1vdmUgLWZQSUMgaWYgaW5jbHVkZWQuIGp1c3QgdG8gc2lsZW5jZSBtaXNsZWFk aW5nIHdhcm5pbmdzDQoJCXBhcmVudF9lbnYuUmVwbGFjZSggU0hMSUJQUkVGSVggPSAnJyAp ICMgZml4IHByZWZpeCBzaW5jZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGZvciB1bml4 DQoJCXBhcmVudF9lbnYuUmVwbGFjZSggU0hMSUJTVUZGSVggPSAnLmRsbCcgKSAjIGZpeCBz dWZmaXggc2luY2UgdGhlIGVudmlyb25tZW50IGlzIHNldCB1cCBmb3IgdW5peA0KCQlwYXJl bnRfZW52LlJlcGxhY2UoIExJQlBSRUZJWCA9ICcnICkgIyBmaXggcHJlZml4IHNpbmNlIHRo ZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgZm9yIHVuaXgNCgkJcGFyZW50X2Vudi5SZXBsYWNl KCBMSUJQUkVGSVhFUyA9IFsgJycgXSApICMgZml4IHByZWZpeCBzaW5jZSB0aGUgZW52aXJv bm1lbnQgaXMgc2V0IHVwIGZvciB1bml4DQoJCXBhcmVudF9lbnYuUmVwbGFjZSggTElCU1VG RklYID0gJy5saWInICkNCgkJcGFyZW50X2Vudi5SZXBsYWNlKCBMSUJTVUZGSVhFUyA9IFsg Jy5saWInLCAnLmEnIF0gKQ0KCQkNCgkJcGFyZW50X2VudlsgJ09TX05BTUUnIF0gPSAnd2lu MzInDQoJCXBhcmVudF9lbnZbICdTWVNfUExBVEZPUk0nIF0gPSAnd2luMzInDQoJCXBhcmVu dF9lbnZbICdDUk9TU0NPTVBJTEVfSE9TVCcgXSA9IGNvbXBpbGVyDQoJCXBhcmVudF9lbnZb ICdDUk9TU0NPTVBJTEVfU1lTUk9PVCcgXSA9ICcvdXNyL3t9Jy5mb3JtYXQoIGNvbXBpbGVy ICkNCgkJDQoJCSMgcHJldmVudCBzdGRjKys2IHByb2JsZW1zIHdpdGggbWlzc25pZyBzeW1i b2xzIG9uIGRpZmZlcmVudCBjb21waWxlcnMNCgkJI3BhcmVudF9lbnYuQXBwZW5kKCBDUFBG TEFHUyA9IFsgJy1zdGQ9YysrMTEnIF0gKQ0KCQkjcGFyZW50X2Vudi5BcHBlbmQoIENST1NT Q09NUElMRV9DRkxBR1MgPSBbICctc3RkPWMrKzExJyBdICkNCgkJI3BhcmVudF9lbnYuQXBw ZW5kKCBDUk9TU0NPTVBJTEVfQ1BQRkxBR1MgPSBbICctc3RkPWMrKzExJyBdICkNCgkJDQoJ CXByaW50KCAnKioqIFVzaW5nIFdpbmRvd3MgNjQgQ3Jvc3MgQ29tcGlsZXInICkNCgkJDQoJ ZWxzZToNCgkJcGFyZW50X2VudiA9IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFU SD0nLicsIHRvb2xzPVsgdG9vbHMgXSApDQoJCXBhcmVudF9lbnZbICdPU19OQU1FJyBdID0g b3MubmFtZQ0KCQlwYXJlbnRfZW52WyAnU1lTX1BMQVRGT1JNJyBdID0gc3lzLnBsYXRmb3Jt DQoNCmVsaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6DQoJcHJpbnQoICdXaW5kb3dzIGRl dGVjdGVkLiBTZXR0aW5nIHVwIE1pbkdXNjQgdG9vbGNoYWluJyApDQoJcGFyZW50X2VudiA9 IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFUSD0nLicsIHRvb2xzPVsgJ21pbmd3 JyBdICkNCgkiIiJwYXJlbnRfZW52LlJlcGxhY2UoIENDID0gJ3g4Nl82NC13NjQtbWluZ3cz Mi1nY2MuZXhlJyApDQoJcGFyZW50X2Vudi5SZXBsYWNlKCBDWFggPSAneDg2XzY0LXc2NC1t aW5ndzMyLWcrKy5leGUnICkNCglwYXJlbnRfZW52LlJlcGxhY2UoIExEID0gJ3g4Nl82NC13 NjQtbWluZ3czMi1nKysuZXhlJyApDQoJcGFyZW50X2Vudi5SZXBsYWNlKCBBUiA9ICd4ODZf NjQtdzY0LW1pbmd3MzItYXInICkNCglwYXJlbnRfZW52LlJlcGxhY2UoIFNUUklQID0gJ3g4 Nl82NC13NjQtbWluZ3czMi1zdHJpcCcgKQ0KCXBhcmVudF9lbnYuUmVwbGFjZSggTUFLRSA9 ICd4ODZfNjQtdzY0LW1pbmd3MzItbWFrZScgKQ0KCXBhcmVudF9lbnYuUmVwbGFjZSggUkMg PSAneDg2XzY0LXc2NC1taW5ndzMyLXdpbmRyZXMnICkNCglwYXJlbnRfZW52LlJlcGxhY2Uo IFJDID0gJ3g4Nl82NC13NjQtbWluZ3czMi1kbGx0b29sJyApIiIiDQoJI3BhcmVudF9lbnYu QXBwZW5kKCBFTlYgPSB7ICdQQVRIJyA6ICdDOlxcTWluR1dcXHg4Nl82NC13NjQtbWluZ3cz MlxcYmluXFwnIH0gKQ0KCSNwYXJlbnRfZW52LkFwcGVuZCggRU5WID0geyAnUEFUSCcgOiAn QzpcTWluR1dcYmluO0M6XE1pbkdXXGxpYmV4ZWNcZ2NjXHg4Nl82NC13NjQtbWluZ3czMlw0 LjguMzsnICsgb3MuZW52aXJvblsgJ1BBVEgnIF0gfSApDQoJIyNwYXJlbnRfZW52LkFwcGVu ZCggRU5WID0geyAnUEFUSCcgOiAnQzpcTWluR1dcYmluOycgKyBvcy5lbnZpcm9uWyAnUEFU SCcgXSB9ICkNCglwYXJlbnRfZW52WyAnT1NfTkFNRScgXSA9IG9zLm5hbWUNCglwYXJlbnRf ZW52WyAnU1lTX1BMQVRGT1JNJyBdID0gc3lzLnBsYXRmb3JtDQoNCmVsc2U6DQoJcGFyZW50 X2VudiA9IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFUSD0nLicgKQ0KCXBhcmVu dF9lbnZbICdPU19OQU1FJyBdID0gb3MubmFtZQ0KCXBhcmVudF9lbnZbICdTWVNfUExBVEZP Uk0nIF0gPSBzeXMucGxhdGZvcm0NCg0KcGFyZW50X2Vudi5Ub29sKCdsb2dTdGRPdXQnKQ0K aWYgcGFyZW50X2VudlsnTG9nU3RkT3V0X0VuYWJsZWQnXToNCglwYXJlbnRfZW52WydMT0df U1REX09VVF9GSUxFJ10gPSBvcGVuKCdidWlsZC5sb2cnLCAndycpDQoNCnBhcmVudF9lbnYu VG9vbCgncnVuSXNvbGF0ZWQnKQ0KDQpwYXJlbnRfZW52LlRvb2woJ21hY29zX2J1bmRsZScp DQoNCkluaXRDb21tb24oIHBhcmVudF9lbnYgKQ0KI3ByaW50KCdvcy5uYW1lJywgb3MubmFt ZSkNCiNwcmludCgnc3lzLnBsYXRmb3JtJywgc3lzLnBsYXRmb3JtKQ0KDQojIGFwcGVuZCBm bGFncw0KcGFyZW50X2Vudi5SZXBsYWNlKCBNT0RVTEVfQ1BQRkxBR1MgPSBbXSApDQpwYXJl bnRfZW52LlJlcGxhY2UoIE1PRFVMRV9MSU5LRkxBR1MgPSBbXSApDQoNCmlmICdDUFBGTEFH UycgaW4gb3MuZW52aXJvbjoNCglwYXJlbnRfZW52LkFwcGVuZCggQ1BQRkxBR1MgPSBvcy5l bnZpcm9uWyAnQ1BQRkxBR1MnIF0gKQ0KDQppZiAnTERGTEFHUycgaW4gb3MuZW52aXJvbjoN CglwYXJlbnRfZW52LkFwcGVuZCggTElOS0ZMQUdTID0gb3MuZW52aXJvblsgJ0xERkxBR1Mn IF0gKQ0KDQppZiBwYXJlbnRfZW52WydPU1Bvc2l4J106DQoJcGFyZW50X2Vudi5BcHBlbmQo IENQUEZMQUdTID0gWyAnLURPU19VTklYJyBdICkNCg0KaWYgcGFyZW50X2VudlsnT1NXaW5k b3dzJ106DQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLURPU19XMzInLCAn LW13aW5kb3dzJyBdICkNCgkjIG1pbmd3IHJlcXVpcmVzIHRoaXMgdG8gcmVjb2duaXplIHdX aW5NYWluDQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLW11bmljb2RlJyBd ICkNCgkNCmVsaWYgcGFyZW50X2VudlsnT1NCZU9TJ106DQoJcGFyZW50X2Vudi5BcHBlbmQo IENQUEZMQUdTID0gWyAnLURPU19CRU9TJyBdICkNCglwYXJlbnRfZW52LkFwcGVuZCggTElO S0ZMQUdTID0gWyAnLUwvYm9vdC9jb21tb24vbGliJyBdICkNCgkNCmVsaWYgcGFyZW50X2Vu dlsnT1NNYWNPUyddOg0KCXBhcmVudF9lbnYuQXBwZW5kKENQUEZMQUdTID0gWyctRE9TX01B Q09TJ10pDQoNCmlmIG5vdCAocGFyZW50X2VudlsnT1NQb3NpeCddIG9yIHBhcmVudF9lbnZb J09TV2luZG93cyddIG9yIHBhcmVudF9lbnZbJ09TQmVPUyddIG9yIHBhcmVudF9lbnZbJ09T TWFjT1MnXSk6DQoJRXhpdCggJ05vIHN1cHBvcnRlZCBPUyBmb3VuZCEnKQ0KDQojIHBhcmFt ZXRlcnMNCiNwYXJhbXMgPSBWYXJpYWJsZXMoIFsgJ3BhcmFtZXRlcnMuY2FjaGUnLCAnY3Vz dG9tLnB5JyBdICkNCnBhcmFtcyA9IFZhcmlhYmxlcyggWyAnY3VzdG9tLnB5JyBdICkNCg0K cGFyYW1zLkFkZCggRW51bVZhcmlhYmxlKCAncGxhdGZvcm1fYW5kcm9pZCcsICdCdWlsZCBm b3IgQW5kcm9pZCBwbGF0Zm9ybScsICdubycsIFsnbm8nLCdhcm12NycsJ3g4NiddICkgKQ0K cGFyYW1zLkFkZCggQm9vbFZhcmlhYmxlKCAnd2l0aF90ZXN0cycsICdCdWlsZCBlbmdpbmUg dGVzdHMnLCBGYWxzZSApICkNCnBhcmFtcy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfZGVi dWcnLCAnQnVpbGQgd2l0aCBkZWJ1ZyBzeW1ib2xzIGZvciBHREIgdXNhZ2UnLCBGYWxzZSAp ICkNCnBhcmFtcy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfd2FybmVycm9ycycsICdUcmVh dCB3YXJuaW5ncyBhcyBlcnJvcnMgKCBkZXYtYnVpbGRzICknLCBGYWxzZSApICkNCnBhcmFt cy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfc2FuaXRpemUnLCAnRW5hYmxlIHNhbml0aXpp bmcgKGRldi1idWlsZHMpJywgRmFsc2UgKSApDQpwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUo ICd3aXRoX3Nhbml0aXplX3RocmVhZCcsICdFbmFibGUgdGhyZWFkIHNhbml0aXppbmcgKGRl di1idWlsZHMpJywgRmFsc2UgKSApDQpwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUoICd3aXRo X3ZlcmJvc2UnLCAnVmVyYm9zZSBjb21waWxhdGlvbiBzaG93aW5nIGNvbW1hbmQgbGluZXMo IGRldi1idWlsZHMgKScsIEZhbHNlICkgKQ0KcGFyYW1zLkFkZChTdHJpbmdWYXJpYWJsZSgn Zm9yY2VfdmVyc2lvbicsICdGb3JjZSB2ZXJzaW9uIChlbXB0eSB0byBkaXNhYmxlKScsICcn KSkNCg0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1femxpYics ICdVc2UgU3lzdGVtIFpsaWInICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAn d2l0aF9zeXN0ZW1fbGlicG5nJywgJ1VzZSBTeXN0ZW0gbGlicG5nJyApICkNCnBhcmFtcy5B ZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX3NuZGlvJywgJ1VzZSBTeXN0ZW0g c25kaW8nICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1f bGliYXBuZycsICdVc2UgU3lzdGVtIGxpYmFwbmcnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFy eVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1fbGlianBlZycsICdVc2UgU3lzdGVtIEpQRUcnICkg KQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1fb3BlbmFsJywg J1VzZSBTeXN0ZW0gT3BlbkFMJyApICkNCnBhcmFtcy5BZGQoIExpc3RWYXJpYWJsZSggJ3dp dGhfb3BlbmFsX2JhY2tlbmRzJywgJ1doZW4gY29tcGlsaW5nIE9wZW5BTCB3aGF0IGJhY2tl bmRzIGFyZSByZXF1aXJlZCcsDQoJW10sIFsnYWxzYScsICdwdWxzZWF1ZGlvJywgJ3BvcnRh dWRpbycsICdvc3MnXSApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhf c3lzdGVtX2xpYm9nZycsICdVc2UgU3lzdGVtIGxpYm9nZycgKSApDQpwYXJhbXMuQWRkKCBU ZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJ2b3JiaXMnLCAnVXNlIFN5c3RlbSBs aWJ2b3JiaXMnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0 ZW1fbGlidGhlb3JhJywgJ1VzZSBTeXN0ZW0gbGlidGhlb3JhJyApICkNCnBhcmFtcy5BZGQo IFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2ZveCcsICdVc2UgU3lzdGVtIEZPWCBU b29sa2l0JyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVt X2RyYWdvbnNjcmlwdCcsICdVc2UgU3lzdGVtIERyYWdvblNjcmlwdCcgKSApDQpwYXJhbXMu QWRkKCBQYXRoVmFyaWFibGUoICd3aXRoX2RyYWdvbnNjcmlwdF9pbmMnLA0KCSdQYXRoIHRv IERyYWdvblNjcmlwdCBpbmNsdWRlIGZpbGVzIG9yIGVtcHR5IHRvIHVzZSBzeXN0ZW0gZGVm YXVsdCcsDQoJJycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KcGFyYW1zLkFkZCgg UGF0aFZhcmlhYmxlKCAnd2l0aF9kcmFnb25zY3JpcHRfbGliJywNCgknUGF0aCB0byBEcmFn b25TY3JpcHQgbGlicmFyeSBmaWxlcyBvciBlbXB0eSB0byB1c2Ugc3lzdGVtIGRlZmF1bHQn LA0KCScnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCnBhcmFtcy5BZGQoIFRlcm5h cnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2xpYmZmaScsICdVc2UgU3lzdGVtIGxpYmZmaScg KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJsdGRs JywgJ1VzZSBTeXN0ZW0gbGlibHRkbCcgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFi bGUoICd3aXRoX3N5c3RlbV9saWJzaWdzZWd2JywgJ1VzZSBTeXN0ZW0gbGlic2lnc2Vndicg KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9zbWFsbHRh bGsnLCAnVXNlIFN5c3RlbSBTbWFsbHRhbGsnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZh cmlhYmxlKCAnd2l0aF9zeXN0ZW1fbGliZXZkZXYnLCAnVXNlIFN5c3RlbSBsaWJldmRldicg KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJ1c2In LCAnVXNlIFN5c3RlbSBsaWJ1c2InICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxl KCAnd2l0aF9zeXN0ZW1fbGliaGlkYXBpJywgJ1VzZSBTeXN0ZW0gbGliaGlkYXBpJyApICkN CnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2xpYm9wZW5obWQn LCAnVXNlIFN5c3RlbSBsaWJvcGVuaG1kJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJp YWJsZSggJ3dpdGhfc3lzdGVtX2ZmdHcnLCAnVXNlIFN5c3RlbSBmZnR3JyApICkNCg0KcGFy YW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9vcGVuZ2wnLCAnVXNlIE9wZW5HTCcg KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3B5dGhvbicsICdVc2Ug UHl0aG9uJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfbnBhcGlz ZGsnLCAnVXNlIE5QQVBJIFNESycgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUo ICdidWlsZF9hdWRpb19vcGVuYWwnLCAnQnVpbGQgT3BlbkFMIEF1ZGlvIE1vZHVsZScgKSAp DQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9jcl9iYXNpYycsICdCdWls ZCBCYXNpYyBDcmFzaC1SZWNvdmVyeSBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFy eVZhcmlhYmxlKCAnYnVpbGRfZ3JhcGhpY3Nfb3BlbmdsJywgJ0J1aWxkIE9wZW5HTCBHcmFw aGljcyBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRf aW1hZ2VfcG5nJywgJ0J1aWxkIFBORyBJbWFnZSBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCgg VGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW1hZ2VfcG5nM2QnLCAnQnVpbGQgUE5HLTNEIElt YWdlIE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9p bWFnZV9qcGVnJywgJ0J1aWxkIEpQRUcgSW1hZ2UgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQo IFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X3gnLCAnQnVpbGQgWCBJbnB1dCBNb2R1 bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW5wdXRfdzMy JywgJ0J1aWxkIFdpbmRvd3MgSW5wdXQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5h cnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X2Jlb3MnLCAnQnVpbGQgQmVPUyBJbnB1dCBNb2R1 bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW5wdXRfbWFj b3MnLCAnQnVpbGQgTWFjT1MgSW5wdXQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5h cnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X2FuZHJvaWQnLCAnQnVpbGQgQW5kcm9pZCBJbnB1 dCBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfcGh5 c2ljc19idWxsZXQnLCAnQnVpbGQgQnVsbGV0IFBoeXNpY3MgTW9kdWxlJywgVHJ1ZSApICkN CnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3NjcmlwdF9kcycsICdCdWls ZCBEcmFnb25TY3JpcHQgU2NyaXB0IE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5 VmFyaWFibGUoICdidWlsZF9zY3JpcHRfcHl0aG9uJywgJ0J1aWxkIFB5dGhvbiBTY3JpcHQg TW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3Njcmlw dF9zbWFsbHRhbGsnLCAnQnVpbGQgU21hbGx0YWxrIFNjcmlwdCBNb2R1bGUnICkgKQ0KcGFy YW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfc291bmRfb2dnJywgJ0J1aWxkIE9H RyBWb3JiaXMgU291bmQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJs ZSggJ2J1aWxkX3ZpZGVvX3RoZW9yYScsICdCdWlsZCBUaGVvcmEgVmlkZW8gTW9kdWxlJyAp ICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3ZpZGVvX2FwbmcnLCAn QnVpbGQgQW5pbWF0ZWQgUE5HIFZpZGVvIE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJu YXJ5VmFyaWFibGUoICdidWlsZF9pZ2RlJywgJ0J1aWxkIElHREUnICkgKQ0KcGFyYW1zLkFk ZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfZ3VpbGF1bmNoZXInLCAnQnVpbGQgR1VJIExh dW5jaGVyJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX2xhdW5j aGVyX2FuZHJvaWQnLCAnQnVpbGQgQW5kcm9pZCBMYXVuY2hlcicgKSApDQpwYXJhbXMuQWRk KCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9hcmNoaXZlX2RlbGdhJywgJ0J1aWxkIERFTEdB IEFyY2hpdmUgTW9kdWxlJyApICkNCg0KcGFyYW1zLkFkZCggRW51bVZhcmlhYmxlKCAnYXJj aGl2ZV9mb3JtYXQnLCAnQXJjaGl2ZSBmaWxlIGZvcm1hdCcsICd0YXJiejInLCBbJ3RhcmJ6 MicsICd6aXAnXSApICkNCnBhcmFtcy5BZGQoIFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9u YW1lX2VuZ2luZScsDQoJJ0FyY2hpdmUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIGZv ciBEcmFnW2VuXWdpbmUgYXJjaGl2ZScsICdkcmFnZW5naW5lJyApICkNCnBhcmFtcy5BZGQo IFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9uYW1lX2VuZ2luZV9kZXYnLA0KCSdBcmNoaXZl IGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbiBmb3IgRHJhZ1tlbl1naW5lIERldmVsb3Bt ZW50IGFyY2hpdmUnLCAnZHJhZ2VuZ2luZS1kZXYnICkgKQ0KcGFyYW1zLkFkZCggU3RyaW5n VmFyaWFibGUoICdhcmNoaXZlX25hbWVfaWdkZScsDQoJJ0FyY2hpdmUgZmlsZSBuYW1lIHdp dGhvdXQgZXh0ZW5zaW9uIGZvciBJR0RFIGFyY2hpdmUnLCAnZGVpZ2RlJyApICkNCnBhcmFt cy5BZGQoIFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9uYW1lX2lnZGVfZGV2JywNCgknQXJj aGl2ZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIElHREUgRGV2ZWxvcG1lbnQg YXJjaGl2ZScsICdkZWlnZGVfZGV2JyApICkNCnBhcmFtcy5BZGQoIFN0cmluZ1ZhcmlhYmxl KCAnYXJjaGl2ZV9uYW1lX3NwZWNpYWwnLA0KCSdBcmNoaXZlIGZpbGUgbmFtZSB3aXRob3V0 IGV4dGVuc2lvbiBmb3IgU3BlY2lhbCBhcmNoaXZlJywgJ2Rlc3BlY2lhbCcgKSApDQpwYXJh bXMuQWRkKCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxlcl9uYW1lX2VuZ2luZScsDQoJJ0lu c3RhbGxlciBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIERyYWdbZW5dZ2luZSBp bnN0YWxsZXInLCAnaW5zdGFsbC1kcmFnZW5naW5lJyApICkNCnBhcmFtcy5BZGQoIFN0cmlu Z1ZhcmlhYmxlKCAnaW5zdGFsbGVyX25hbWVfZW5naW5lX2RldicsDQoJJ0luc3RhbGxlciBm aWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIERyYWdbZW5dZ2luZSBEZXZlbG9wbWVu dCBpbnN0YWxsZXInLCAnaW5zdGFsbC1kcmFnZW5naW5lLWRldicgKSApDQpwYXJhbXMuQWRk KCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxlcl9uYW1lX2lnZGUnLA0KCSdJbnN0YWxsZXIg ZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIGZvciBJR0RFIGluc3RhbGxlcicsICdpbnN0 YWxsLWRlaWdkZScgKSApDQpwYXJhbXMuQWRkKCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxl cl9uYW1lX2lnZGVfZGV2JywNCgknSW5zdGFsbGVyIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVu c2lvbiBmb3IgSUdERSBEZXZlbG9wbWVudCBpbnN0YWxsZXInLCAnaW5zdGFsbC1kZWlnZGUt ZGV2JyApICkNCg0KDQppZiBwYXJlbnRfZW52WydPU01hY09TJ106DQoJcGFyYW1zLkFkZCgg VGVybmFyeVZhcmlhYmxlKCAnd2l0aF9kbCcsICdVc2UgdGhlIGR5bmFtaWMgbGlicmFyeSBz eXN0ZW0nICkgKQ0KCXBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfcHRocmVh ZCcsICdVc2UgcHRocmVhZCcgKSApDQoJcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAn d2l0aF94JywgJ1VzZSB0aGUgWCBXaW5kb3cgU3lzdGVtJyApICkNCgkNCglwYXJhbXMuQWRk KEVudW1WYXJpYWJsZSgnaWdkZV90b29sa2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWls ZGluZyBJR0RFJywgJ251bGwnLCBbJ251bGwnXSkpDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZh cmlhYmxlKCAncHJlZml4JywgJ1N5c3RlbSBwYXRoJywgJy91c3InLCBQYXRoVmFyaWFibGUu UGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdsaWJkaXInLCAn U3lzdGVtIGxpYnJhcmllcycsICcke3ByZWZpeH0vbGliJywgUGF0aFZhcmlhYmxlLlBhdGhB Y2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnaW5jbHVkZWRpcicsICdT eXN0ZW0gaW5jbHVkZXMnLCAnJHtwcmVmaXh9L2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0 aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdkYXRhZGlyJywgJ1N5 c3RlbSBzaGFyZXMnLCAnJHtwcmVmaXh9L3NoYXJlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2Nl cHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnc3lzY29uZmRpcicsICdTeXN0 ZW0gY29uZmlndXJhdGlvbicsICcvZXRjJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp DQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnZXhlY2RpcicsICdTeXN0ZW0gYmluYXJp ZXMnLCAnL0FwcGxpY2F0aW9ucycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3N5c3ZhcmRpcicsICdTeXN0ZW0gdmFyJywgJyR7 cHJlZml4fS92YXInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdjYWNoZWRpcicsICdTeXN0ZW0gY2FjaGUnLCAnJHtzeXN2YXJk aXJ9L2xpYicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCgg UGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4nLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5l IGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCAp ICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRv IHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVzJywNCgkJJyR7bGliZGlyfScsIFBhdGhWYXJp YWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhf ZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCSck e2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkN CglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2NvbmZpZycsICdQYXRoIHRv IHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJhdGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2Ry YWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQ YXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5l IGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFj Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3NoYXJlJywg J1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kcmFn ZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0 aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUg Y2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRo QWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2Jp bicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRo VmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdw YXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhlIElHREUgbGlicmFyaWVzJywNCgkJJyR7bGli ZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhW YXJpYWJsZSggJ3BhdGhfaWdkZV9pbmNsdWRlJywgJ1BhdGggdG8gdGhlIElHREUgaGVhZGVy cycsDQoJCScke2luY2x1ZGVkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0 ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcnLCAn UGF0aCB0byB0aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lzY29uZmRpcn0vZGVp Z2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZh cmlhYmxlKCAncGF0aF9pZ2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgSUdERSBkYXRhJywNCgkJ JyR7bGliZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJh bXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUg SUdERSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0 aEFjY2VwdCApICkNCg0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNo ZXJfYmluJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rp cn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFy aWFibGUoICdwYXRoX2xhdW5jaGVyX2Jpbl9saWInLCAnUGF0aCB0byB0aGUgTGF1bmNoZXIg YmluYXJ5IGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFj Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2Nv bmZpZycsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lz Y29uZmRpcn0vZGVsYXVuY2hlcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZGF0YScsICdQYXRoIHRv IHRoZSBMYXVuY2hlciBkYXRhJywNCgkJJyR7bGliZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZh cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0 aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0KCQkn JHtkYXRhZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9nYW1lcycsICdQYXRo IHRvIHRoZSBMYXVuY2hlciBnYW1lcycsDQoJCScvb3B0L2RlbGF1bmNoZXIvZ2FtZXMnLCBQ YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCg0KCQ0KZWxpZiBwYXJlbnRfZW52WydPU0Jl T1MnXToNCglwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX2RsJywgJ1VzZSB0 aGUgZHluYW1pYyBsaWJyYXJ5IHN5c3RlbScgKSApDQoJcGFyYW1zLkFkZCggVGVybmFyeVZh cmlhYmxlKCAnd2l0aF9wdGhyZWFkJywgJ1VzZSBwdGhyZWFkJyApICkNCglwYXJhbXMuQWRk KCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3gnLCAnVXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0n ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoRW51bVZhcmlhYmxlKCdpZ2RlX3Rvb2xraXQnLCAnVG9v bEtpdCB0byB1c2UgZm9yIGJ1aWxkaW5nIElHREUnLCAnbnVsbCcsIFsnbnVsbCddKSkNCgkN CglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwcmVmaXgnLCAnU3lzdGVtIHBhdGgnLCAn L2Jvb3Qvc3lzdGVtJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFk ZCggUGF0aFZhcmlhYmxlKCAnbGliZGlyJywgJ1N5c3RlbSBsaWJyYXJpZXMnLCAnJHtwcmVm aXh9L2xpYicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh dGhWYXJpYWJsZSggJ2luY2x1ZGVkaXInLCAnU3lzdGVtIGluY2x1ZGVzJywgJyR7cHJlZml4 fS9kZXZlbG9wL2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJh bXMuQWRkKCBQYXRoVmFyaWFibGUoICdkYXRhZGlyJywgJ1N5c3RlbSBzaGFyZXMnLCAnJHtw cmVmaXh9L2RhdGEnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdzeXNjb25mZGlyJywgJ1N5c3RlbSBjb25maWd1cmF0aW9uJywg JyR7cHJlZml4fS9zZXR0aW5ncycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2V4ZWNkaXInLCAnU3lzdGVtIGJpbmFyaWVzJywg JyR7cHJlZml4fS9iaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu QWRkKCBQYXRoVmFyaWFibGUoICdzeXN2YXJkaXInLCAnU3lzdGVtIHZhcicsICcke3ByZWZp eH0vdmFyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0 aFZhcmlhYmxlKCAnY2FjaGVkaXInLCAnU3lzdGVtIGNhY2hlJywgJyR7cHJlZml4fS9jYWNo ZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJp YWJsZSggJ2RvY2RpcicsICdTeXN0ZW0gZG9jdW1lbnRhdGlvbicsICcke3ByZWZpeH0vZG9j dW1lbnRhdGlvbicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFk ZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4nLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1n aW5lIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2Vw dCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRo IHRvIHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVzJywNCgkJJyR7bGliZGlyfScsIFBhdGhW YXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3Bh dGhfZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJ CScke2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCAp ICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2NvbmZpZycsICdQYXRo IHRvIHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJhdGlvbicsDQoJCScke3N5c2NvbmZkaXJ9 L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1n aW5lIGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0 aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3NoYXJl JywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9k cmFnZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCgg UGF0aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdp bmUgY2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5Q YXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2Rl X2JpbicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQ YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo ICdwYXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhlIElHREUgbGlicmFyaWVzJywNCgkJJyR7 bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh dGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9pbmNsdWRlJywgJ1BhdGggdG8gdGhlIElHREUgaGVh ZGVycycsDQoJCScke2luY2x1ZGVkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcn LCAnUGF0aCB0byB0aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lzY29uZmRpcn0v ZGVpZ2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0 aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgSUdERSBkYXRhJywN CgkJJyR7bGliZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0 aGUgSUdERSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUu UGF0aEFjY2VwdCApICkNCg0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1 bmNoZXJfYmluJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGJpbmFyaWVzJywNCgkJJyR7ZXhl Y2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo VmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2Jpbl9saWInLCAnUGF0aCB0byB0aGUgTGF1bmNo ZXIgYmluYXJ5IGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0 aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVy X2NvbmZpZycsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBjb25maWd1cmF0aW9uJywNCgkJJyR7 c3lzY29uZmRpcn0vZGVsYXVuY2hlcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZGF0YScsICdQYXRo IHRvIHRoZSBMYXVuY2hlciBkYXRhJywNCgkJJyR7bGliZGlyfS9kZWxhdW5jaGVyJywgUGF0 aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAn cGF0aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0K CQknJHtkYXRhZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp DQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9nYW1lcycsICdQ YXRoIHRvIHRoZSBMYXVuY2hlciBnYW1lcycsDQoJCScvYm9vdC9zeXN0ZW0vZGVsYXVuY2hl ci9nYW1lcycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KZWxpZiBwYXJlbnRf ZW52WydPU1Bvc2l4J106DQoJcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9k bCcsICdVc2UgdGhlIGR5bmFtaWMgbGlicmFyeSBzeXN0ZW0nICkgKQ0KCXBhcmFtcy5BZGQo IFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfcHRocmVhZCcsICdVc2UgcHRocmVhZCcgKSApDQoJ cGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF94JywgJ1VzZSB0aGUgWCBXaW5k b3cgU3lzdGVtJyApICkNCgkNCglwYXJhbXMuQWRkKEVudW1WYXJpYWJsZSgnaWdkZV90b29s a2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWlsZGluZyBJR0RFJywgJ2ZveCcsIFsnZm94 JywnbnVsbCddKSkNCgkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwcmVmaXgnLCAn U3lzdGVtIHBhdGgnLCAnL3VzcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2xpYmRpcicsICdTeXN0ZW0gbGlicmFyaWVzJywg JyR7cHJlZml4fS9saWInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu QWRkKCBQYXRoVmFyaWFibGUoICdpbmNsdWRlZGlyJywgJ1N5c3RlbSBpbmNsdWRlcycsICck e3ByZWZpeH0vaW5jbHVkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFt cy5BZGQoIFBhdGhWYXJpYWJsZSggJ2RhdGFkaXInLCAnU3lzdGVtIHNoYXJlcycsICcke3By ZWZpeH0vc2hhcmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdzeXNjb25mZGlyJywgJ1N5c3RlbSBjb25maWd1cmF0aW9uJywg Jy9ldGMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo VmFyaWFibGUoICdleGVjZGlyJywgJ1N5c3RlbSBiaW5hcmllcycsICcke3ByZWZpeH0vYmlu JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlh YmxlKCAnc3lzdmFyZGlyJywgJ1N5c3RlbSB2YXInLCAnL3ZhcicsIFBhdGhWYXJpYWJsZS5Q YXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2NhY2hlZGlyJywg J1N5c3RlbSBjYWNoZScsICcke3N5c3ZhcmRpcn0vbGliJywgUGF0aFZhcmlhYmxlLlBhdGhB Y2NlcHQgKSApDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4n LCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5lIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0n LCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFi bGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVz JywNCgkJJyR7bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFt cy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBE cmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCScke2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQ YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo ICdwYXRoX2RlX2NvbmZpZycsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJh dGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0 aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEn LCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5lIGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdl bmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo VmFyaWFibGUoICdwYXRoX2RlX3NoYXJlJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBz aGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kcmFnZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhB Y2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScs ICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJh Z2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KCXBhcmFtcy5BZGQo IFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9iaW4nLCAnUGF0aCB0byB0aGUgSUdERSBiaW5h cmllcycsDQoJCScke2V4ZWNkaXJ9JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2xpYicsICdQYXRoIHRvIHRo ZSBJR0RFIGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFj Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfaW5jbHVk ZScsICdQYXRoIHRvIHRoZSBJR0RFIGhlYWRlcnMnLA0KCQknJHtpbmNsdWRlZGlyfS9kZWln ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFy aWFibGUoICdwYXRoX2lnZGVfY29uZmlnJywgJ1BhdGggdG8gdGhlIElHREUgY29uZmlndXJh dGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9kYXRhJywg J1BhdGggdG8gdGhlIElHREUgZGF0YScsDQoJCScke2xpYmRpcn0vZGVpZ2RlJywgUGF0aFZh cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0 aF9pZ2RlX3NoYXJlJywgJ1BhdGggdG8gdGhlIElHREUgc2hhcmVzJywNCgkJJyR7ZGF0YWRp cn0vZGVpZ2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJDQoJcGFyYW1zLkFk ZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9iaW4nLCAnUGF0aCB0byB0aGUgTGF1 bmNoZXIgYmluYXJpZXMnLA0KCQknJHtleGVjZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfYmlu X2xpYicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBiaW5hcnkgbGlicmFyaWVzJywNCgkJJyR7 bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh dGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfY29uZmlnJywgJ1BhdGggdG8gdGhlIExhdW5j aGVyIGNvbmZpZ3VyYXRpb24nLA0KCQknJHtzeXNjb25mZGlyfS9kZWxhdW5jaGVyJywgUGF0 aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAn cGF0aF9sYXVuY2hlcl9kYXRhJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGRhdGEnLA0KCQkn JHtsaWJkaXJ9L2RlbGF1bmNoZXInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX3NoYXJlJywgJ1BhdGgg dG8gdGhlIExhdW5jaGVyIHNoYXJlcycsDQoJCScke2RhdGFkaXJ9L2RlbGF1bmNoZXInLCBQ YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo ICdwYXRoX2xhdW5jaGVyX2dhbWVzJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGdhbWVzJywN CgkJJy9vcHQvZGVsYXVuY2hlci9nYW1lcycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkg KQ0KCQ0KZWxpZiBwYXJlbnRfZW52WydPU1dpbmRvd3MnXToNCglwYXJhbXMuQWRkKEVudW1W YXJpYWJsZSgnaWdkZV90b29sa2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWlsZGluZyBJ R0RFJywgJ2ZveCcsIFsnZm94JywnbnVsbCddKSkNCgkNCglwYXJhbXMuQWRkKCBQYXRoVmFy aWFibGUoICdwcm9ncmFtZmlsZXMnLCAnV2luZG93IHByb2dyYW0gZmlsZXMgZGlyZWN0b3J5 JywNCgkJJ0BQcm9ncmFtRmlsZXMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdzeXN0ZW1yb290JywgJ1dpbmRvdyBzeXN0ZW0g cm9vdCBkaXJlY3RvcnknLA0KCQknQFN5c3RlbScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0 ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfc2RrJywgJ1Bh dGggdG8gRHJhZ1tlbl1naW5lIFNESyBkaXJlY3RvcnknLA0KCQknJHtwYXRoX2RlfS9TREsn LCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFi bGUoICdwYXRoX2RlX3Nka19saWInLCAnUGF0aCB0byBEcmFnW2VuXWdpbmUgU0RLIGxpYnJh cmllcycsDQoJCScke3BhdGhfZGVfc2RrfS9saWInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2Vw dCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3Nka19pbmMnLCAn UGF0aCB0byBEcmFnW2VuXWdpbmUgU0RLIGluY2x1ZGVzJywNCgkJJyR7cGF0aF9kZV9zZGt9 L2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCgkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBJ bnN0YWxsYXRpb24nLA0KCQknJHtwcm9ncmFtZmlsZXN9L0RyYWdlbmdpbmUnLCBQYXRoVmFy aWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRo X2RlX2JpbicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgYmluYXJpZXMnLA0KCQknJHtw YXRoX2RlfS9CaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdp bmUgbGlicmFyaWVzJywNCgkJJyR7cGF0aF9kZV9zZGtfbGlifScsIFBhdGhWYXJpYWJsZS5Q YXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfaW5j bHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCScke3BhdGhf ZGVfc2RrX2luY30vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfY29uZmlnJywgJ1BhdGggdG8g dGhlIERyYWdbZW5dZ2luZSBjb25maWd1cmF0aW9uJywNCgkJJyR7cGF0aF9kZX0vQ29uZmln JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlh YmxlKCAncGF0aF9kZV9kYXRhJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBkYXRhJywN CgkJJyR7cGF0aF9kZX0vRGF0YScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUg RHJhZ1tlbl1naW5lIHNoYXJlcycsDQoJCScke3BhdGhfZGV9L1NoYXJlJywgUGF0aFZhcmlh YmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9k ZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY2FjaGUnLA0KCQknQExvY2Fs QXBwRGF0YS9EcmFnZW5naW5lL0NhY2hlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp DQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX3NkaycsICdQYXRo IHRvIERyYWdbZW5dZ2luZSBJR0RFIFNESyBkaXJlY3RvcnknLA0KCQknJHtwYXRoX2lnZGV9 L1NESycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhW YXJpYWJsZSggJ3BhdGhfaWdkZV9zZGtfbGliJywgJ1BhdGggdG8gRHJhZ1tlbl1naW5lIElH REUgU0RLIGxpYnJhcmllcycsDQoJCScke3BhdGhfaWdkZV9zZGt9L2xpYicsIFBhdGhWYXJp YWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhf aWdkZV9zZGtfaW5jJywgJ1BhdGggdG8gRHJhZ1tlbl1naW5lIElHREUgU0RLIGluY2x1ZGVz JywNCgkJJyR7cGF0aF9pZ2RlX3Nka30vaW5jbHVkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj ZXB0ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZScsICdQ YXRoIHRvIHRoZSBJR0RFIEluc3RhbGxhdGlvbicsDQoJCScke3Byb2dyYW1maWxlc30vREVJ R0RFJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZh cmlhYmxlKCAncGF0aF9pZ2RlX2JpbicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywN CgkJJyR7cGF0aF9pZ2RlfS9CaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhl IElHREUgbGlicmFyaWVzJywNCgkJJyR7cGF0aF9pZ2RlX3Nka19saWJ9JywgUGF0aFZhcmlh YmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9p Z2RlX2luY2x1ZGUnLCAnUGF0aCB0byB0aGUgSUdERSBoZWFkZXJzJywNCgkJJyR7cGF0aF9p Z2RlX3Nka19pbmN9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcnLCAnUGF0aCB0byB0 aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7cGF0aF9pZ2RlfS9Db25maWcnLCBQYXRo VmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdw YXRoX2lnZGVfZGF0YScsICdQYXRoIHRvIHRoZSBJR0RFIGRhdGEnLA0KCQknJHtwYXRoX2ln ZGV9L0RhdGEnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQ YXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUgSUdERSBzaGFy ZXMnLA0KCQknJHtwYXRoX2lnZGV9L1NoYXJlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQg KSApDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcicsICdQ YXRoIHRvIHRoZSBMYXVuY2hlciBJbnN0YWxsYXRpb24nLA0KCQknJHtwYXRoX2RlfS9MYXVu Y2hlcnMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo VmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2JpbicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBi aW5hcmllcycsDQoJCScke3BhdGhfbGF1bmNoZXJ9L0JpbicsIFBhdGhWYXJpYWJsZS5QYXRo QWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJf YmluX2xpYicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBiaW5hcnkgbGlicmFyaWVzJywNCgkJ JyR7cGF0aF9sYXVuY2hlcl9iaW59JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9jb25maWcnLCAnUGF0 aCB0byB0aGUgTGF1bmNoZXIgY29uZmlndXJhdGlvbicsDQoJCSdAUm9hbWluZ0FwcERhdGEv REVMYXVuY2hlcnMvQ29uZmlnJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFy YW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9kYXRhJywgJ1BhdGggdG8g dGhlIExhdW5jaGVyIGRhdGEnLA0KCQknJHtwYXRoX2xhdW5jaGVyfS9EYXRhJywgUGF0aFZh cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0 aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0KCQkn JHtwYXRoX2xhdW5jaGVyfS9TaGFyZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZ2FtZXMnLCAnUGF0 aCB0byB0aGUgTGF1bmNoZXIgZ2FtZXMnLA0KCQknJHtwYXRoX2xhdW5jaGVyfS9HYW1lcycs IFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KZWxzZToNCglFeGl0KCAnTm8gc3Vw cG9ydGVkIE9TIGZvdW5kIScpDQoNCnBhcmFtcy5VcGRhdGUoIHBhcmVudF9lbnYgKQ0KI3By aW50KHBhcmVudF9lbnYuRHVtcCgpKQ0KDQojIGRldGVybWluZSBzYW5pdGl6ZSBmbGFncyB0 byB1c2UNCnBhcmVudF9lbnYuUmVwbGFjZShTQU5JVElaRV9GTEFHUyA9IFtdKQ0KDQppZiBw YXJlbnRfZW52Wyd3aXRoX2RlYnVnJ10gYW5kIHBhcmVudF9lbnZbJ3dpdGhfc2FuaXRpemUn XToNCglpZiBwYXJlbnRfZW52Wyd3aXRoX3Nhbml0aXplX3RocmVhZCddOg0KCQlwYXJlbnRf ZW52LkFwcGVuZChTQU5JVElaRV9GTEFHUyA9IFsnLWZzYW5pdGl6ZT10aHJlYWQnXSkNCgkJ DQoJZWxzZToNCgkJcGFyZW50X2Vudi5BcHBlbmQoU0FOSVRJWkVfRkxBR1MgPSBbDQoJCQkn LWZzYW5pdGl6ZT1hZGRyZXNzJywNCgkJCSctZnNhbml0aXplLWFkZHJlc3MtdXNlLWFmdGVy LXNjb3BlJywNCgkJCSctZnNhbml0aXplPXBvaW50ZXItY29tcGFyZScsDQoJCQknLWZzYW5p dGl6ZT1wb2ludGVyLXN1YnRyYWN0J10pDQoJCXBhcmVudF9lbnYuQXBwZW5kKFNBTklUSVpF X0ZMQUdTID0gWw0KCQkJJy1mc2FuaXRpemU9bGVhayddKQ0KCQlwYXJlbnRfZW52LkFwcGVu ZChTQU5JVElaRV9GTEFHUyA9IFsNCgkJCSctZnNhbml0aXplPXVuZGVmaW5lZCcsDQoJCQkn LWZzYW5pdGl6ZT1zaGlmdCcsDQoJCQknLWZzYW5pdGl6ZT1zaGlmdC1leHBvbmVudCcsDQoJ CQknLWZzYW5pdGl6ZT1zaGlmdC1iYXNlJywNCgkJCSctZnNhbml0aXplPWludGVnZXItZGl2 aWRlLWJ5LXplcm8nLA0KCQkJJy1mc2FuaXRpemU9dW5yZWFjaGFibGUnLA0KCQkJJy1mc2Fu aXRpemU9dmxhLWJvdW5kJywNCgkJCSctZnNhbml0aXplPW51bGwnLA0KCQkJJy1mc2FuaXRp emU9cmV0dXJuJywNCgkJCSctZnNhbml0aXplPXNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93JywN CgkJCSctZnNhbml0aXplPWJvdW5kcycsDQoJCQknLWZzYW5pdGl6ZT1ib3VuZHMtc3RyaWN0 JywNCgkJCSctZnNhbml0aXplPWFsaWdubWVudCcsDQoJCQknLWZzYW5pdGl6ZT1vYmplY3Qt c2l6ZScsDQoJCQknLWZzYW5pdGl6ZT1mbG9hdC1kaXZpZGUtYnktemVybycsDQoJCQknLWZz YW5pdGl6ZT1mbG9hdC1jYXN0LW92ZXJmbG93JywNCgkJCSctZnNhbml0aXplPW5vbm51bGwt YXR0cmlidXRlJywNCgkJCSctZnNhbml0aXplPXJldHVybnMtbm9ubnVsbC1hdHRyaWJ1dGUn LA0KCQkJJy1mc2FuaXRpemU9Ym9vbCcsDQoJCQknLWZzYW5pdGl6ZT1lbnVtJywNCgkJCSct ZnNhbml0aXplPXZwdHInLA0KCQkJJy1mc2FuaXRpemU9cG9pbnRlci1vdmVyZmxvdycsDQoJ CQknLWZzYW5pdGl6ZT1idWlsdGluJ10pDQoNCiMgZm9yIG1vZHVsZXMgaGlkZSBldmVyeXRo aW5nIGV4Y2VwdCB0aGUgZW50cnkgcG9pbnQuIGZvciB0aGlzIHRoZSBkZWZhdWx0IHZpc2li aWxpdHkNCiMgaXMgc2V0IHRvIGhpZGRlbiBhbmQgb25seSB0aGUgZW50cnkgcG9pbnQgaXMg cXVhbGlmaWVkIHdpdGggbm9ybWFsIHZpc2liaWxpdHkuDQojIGhpZGluZyBhbHNvIGlubGlu ZXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBoZWxwcyB0byByZW1vdmUgc29tZSBzcGVjaWFs IGNhc2VzLg0KIyB0aGUgdmVyc2lvbiBzY3JpcHQgaXMgcmVxdWlyZWQgdG8gaGlkZSBzeW1i b2xzIG9mIGxpbmtlZCBzdGF0aWMgbGlicmFyaWVzLg0KIyB0aGUgLXMgZmxhZyBldmVudHVh bGx5IHN0cmlwcyB1bnVzZWQgY29kZSBsaW5rZWQgaW4gYnkgc3RhdGljIGxpYnJhcmllcw0K DQppZiBwYXJlbnRfZW52Wyd3aXRoX2RlYnVnJ106DQoJcGFyZW50X2Vudi5BcHBlbmQoTU9E VUxFX0NQUEZMQUdTID0gWyctRE1PRF9FTlRSWV9QT0lOVF9BVFRSPSddKQ0KCWlmIHBhcmVu dF9lbnZbJ3dpdGhfc2FuaXRpemUnXToNCgkJcGFyZW50X2Vudi5BcHBlbmQoTU9EVUxFX0NQ UEZMQUdTID0gcGFyZW50X2VudlsnU0FOSVRJWkVfRkxBR1MnXSkNCgkJcGFyZW50X2Vudi5B cHBlbmQoTU9EVUxFX0xJTktGTEFHUyA9IHBhcmVudF9lbnZbJ1NBTklUSVpFX0ZMQUdTJ10p DQoJDQplbHNlOg0KCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9DUFBGTEFHUyA9IFsnLWZ2 aXNpYmlsaXR5PWhpZGRlbiddKQ0KCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxB R1MgPSBbJy1mdmlzaWJpbGl0eT1oaWRkZW4nXSkNCgkNCglwYXJlbnRfZW52LkFwcGVuZChN T0RVTEVfQ1hYRkxBR1MgPSBbJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiddKQ0KCXBh cmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxBR1MgPSBbJy1mdmlzaWJpbGl0eS1pbmxp bmVzLWhpZGRlbiddKQ0KCQ0KCWlmIG5vdCBwYXJlbnRfZW52WydPU01hY09TJ106DQoJCXBh cmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxBR1MgPSBbJy1XbCwtLXZlcnNpb24tc2Ny aXB0PW1vZHVsZS52ZXJzaW9uJ10pDQoJCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5L RkxBR1MgPSBbJy1zJ10pDQoJcGFyZW50X2Vudi5BcHBlbmQoTU9EVUxFX0NQUEZMQUdTID0g WyctRE1PRF9FTlRSWV9QT0lOVF9BVFRSPV9fYXR0cmlidXRlX19cXChcXCh2aXNpYmlsaXR5 XFwoXFwiZGVmYXVsdFxcIlxcKVxcKVxcKSddKQ0KDQojIGFuZHJvaWQNCmlmIHBhcmVudF9l bnZbICdwbGF0Zm9ybV9hbmRyb2lkJyBdICE9ICdubyc6DQoJcGFyYW1zLkFkZCggUGF0aFZh cmlhYmxlKCAnbmRrcm9vdCcsICdQYXRoIHRvIE5ESyB0b29sY2hhaW4gKE5ES19ST09UIGVu di1wYXJhbSBieSBkZWZhdWx0KScsDQoJCW9zLnBhdGguZXhwYW5kdXNlciggb3MuZW52aXJv blsnTkRLX1JPT1QnXSApLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu QWRkKCBTdHJpbmdWYXJpYWJsZSggJ2FwaWxldmVsJywgJ0FuZHJvaWQgQVBJIGxldmVsJywg JzE4JyApICkNCglwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUoICdoYXJkZnAnLCAnVXNlIGhh cmR3YXJlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgaW5zdGVhZCBvZiBzb2Z0ZnAgb24gQVJN djcgb25seScsIEZhbHNlICkgKQ0KCQ0KCXBhcmFtcy5VcGRhdGUoIHBhcmVudF9lbnYgKQ0K CQ0KCWFuZHJvaWRVcGRhdGVFbnYoIHBhcmVudF9lbnYgKQ0KDQojIGRpc2FibGUgdmVyYm9z ZSBjb21waWxlIG1lc3NhZ2VzIGlmIHJlcXVlc3RlZA0KaWYgbm90IHBhcmVudF9lbnZbICd3 aXRoX3ZlcmJvc2UnIF06DQoJRGlzYWJsZVZlcmJvc2VDb21waWxpbmcoIHBhcmVudF9lbnYg KQ0KDQppZiBwYXJlbnRfZW52Wyd3aXRoX2RlYnVnJ106DQoJaWYgcGFyZW50X2VudlsnT1NX aW5kb3dzJ106DQoJCXBhcmVudF9lbnYuQXBwZW5kKENQUEZMQUdTID0gWyctZycsICctZ3N0 YWJzJywgJy1nZ2RiJ10pDQoJZWxzZToNCgkJcGFyZW50X2Vudi5BcHBlbmQoQ1BQRkxBR1Mg PSBbJy1nJ10pDQoJCSMgbWluZ3cgcHJvZHVjZXMgaW50ZXJuYWwgY29tcGlsZXIgZXJyb3Jz IG9uIDgueCBHQ0MuIGRpc2FibGVkIHVudGlsIGZpeGVkIG9yIGEgY2hlY2sgaXMgcHJlc2Vu dA0KCQlwYXJlbnRfZW52LkFwcGVuZChDUFBGTEFHUyA9IFsnLWZuby1vbWl0LWZyYW1lLXBv aW50ZXInXSkNCg0KIyBzZXQgZmxhZ3MgYmFzZWQgb24gcGFyYW1ldGVycw0KaWYgcGFyZW50 X2VudlsgJ3BsYXRmb3JtX2FuZHJvaWQnIF0gPT0gJ25vJzoNCglwYXJlbnRfZW52LkFwcGVu ZCggQ1BQRkxBR1MgPSBbICctTzInIF0gKSAgIyBiZWNhdXNlIGFuZHJvaWQgcGxhdGZvcm0g c2NyaXB0IGRlZmluZXMgdGhpcyBhbHJlYWR5DQpwYXJlbnRfZW52LkFwcGVuZCggQ1BQRkxB R1MgPSBbICctV2FsbCcgXSApDQoNCiMgZGlzYWJsZSB0aGUgbmV3IChhbmQgdHJ1ZWx5IHN0 dXBpZCkgbmV3IGdjYyA4LjEgc2hlbmFuaWdhbnMuDQojIHNlZSBodHRwczovL2djYy5nbnUu b3JnL29ubGluZWRvY3MvZ2NjL0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2lu ZGV4LVdjbGFzcy1tZW1hY2Nlc3MgLg0KIyB0aGUgaWRlYSBiZWhpbmQgYWxsIHRoaXMgaXMg YWxsIG5pY2UgYW5kIGRhbmR5IGJ1dCBpdCBwcmV2ZW50cyBsZWdpdCBmYXN0IG1lbW9yeSBo YW5kbGluZw0KIyB0cnlpbmcgdG8gcHJldGVuZCBpZGlvdHMgZnJvbSBzaG9vdGluZyB0aGVt c2VsdmVzIGluIHRoZSBmb290LiBpZiBzb21lYm9keSB1c2VzIG1lbWNweSB0aGVuDQojIGhl IHNob3VsZCBrbm93IHdoYXQgaGUgaXMgZG9pbmcgc28gc3RvcCBicmVha2luZyBidWlsZHMg d2l0aCBub24tc2Vuc2UgZXJyb3JzLg0KcGFyZW50X2Vudi5BcHBlbmQoQ1hYRkxBR1MgPSBb Jy1Xbm8tY2xhc3MtbWVtYWNjZXNzJ10pDQoNCmlmIHBhcmVudF9lbnZbICd3aXRoX3dhcm5l cnJvcnMnIF06DQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLVdlcnJvcicg XSApDQoNCmlmIHBhcmVudF9lbnZbICdwbGF0Zm9ybV9hbmRyb2lkJyBdICE9ICdubyc6DQoJ cGFyZW50X2Vudi5BcHBlbmQoQ1BQRkxBR1MgPSBbJy1Xbm8tdW51c2VkLXByaXZhdGUtZmll bGQnXSkNCglwYXJlbnRfZW52LkFwcGVuZChDUFBGTEFHUyA9IFsnLVduby10YXV0b2xvZ2lj YWwtY29uc3RhbnQtY29tcGFyZSddKQ0KDQojIG5vIGRlZmF1bHQgdGFyZ2V0cw0KRGVmYXVs dCggTm9uZSApDQoNCiMgZGVmaW5lIHRoZSB0YXJnZXRzIGFycmF5IGFuZCByZXBvcnRzIGRp Y3Rpb25hcnkgdG8gYmUgZmlsbGVkDQpwYXJlbnRfdGFyZ2V0cyA9IHt9DQpwYXJlbnRfcmVw b3J0ID0ge30NCg0KIyByZXBvcnQgc3R1ZmYNCmlmIHBhcmVudF9lbnZbJ09TUG9zaXgnXToN CglwYXJlbnRfcmVwb3J0WyAncHJlZml4JyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50 X2VudlsgJ3ByZWZpeCcgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgYmluYXJ5 IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9iaW4n IF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGxpYnJhcnkgcGF0aCcgXSA9IHBh cmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2RlX2xpYicgXSApDQoJcGFyZW50 X3JlcG9ydFsgJ2RyYWdlbmdpbmUgaW5jbHVkZSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJz dCggcGFyZW50X2VudlsgJ3BhdGhfZGVfaW5jbHVkZScgXSApDQoJcGFyZW50X3JlcG9ydFsg J2RyYWdlbmdpbmUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCgg cGFyZW50X2VudlsgJ3BhdGhfZGVfY29uZmlnJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJh Z2VuZ2luZSBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAn cGF0aF9kZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBzaGFyZWQg ZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVf c2hhcmUnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGNhY2hlIHBhdGgnIF0g PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9jYWNoZScgXSApDQoN CmVsaWYgcGFyZW50X2VudlsnT1NXaW5kb3dzJ106DQoJcGFyZW50X3JlcG9ydFsgJ3N5c3Rl bSBsaWJyYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAnc3lz dGVtcm9vdCcgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgc2RrIHBhdGgnIF0g PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9zZGsnIF0gKQ0KCXBh cmVudF9yZXBvcnRbICdkcmFnZW5naW5lIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBw YXJlbnRfZW52WyAncGF0aF9kZScgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUg YmluYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9k ZV9iaW4nIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGxpYnJhcnkgcGF0aCcg XSA9IHBhcmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2RlX2xpYicgXSApDQoJ cGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgaW5jbHVkZSBwYXRoJyBdID0gcGFyZW50X2Vu di5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVfaW5jbHVkZScgXSApDQoJcGFyZW50X3Jl cG9ydFsgJ2RyYWdlbmdpbmUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFyZW50X2Vudi5z dWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVfY29uZmlnJyBdICkNCglwYXJlbnRfcmVwb3J0 WyAnZHJhZ2VuZ2luZSBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRf ZW52WyAncGF0aF9kZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBz aGFyZWQgZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3Bh dGhfZGVfc2hhcmUnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkZWlnZGUgcGF0aCcgXSA9IHBh cmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2lnZGUnIF0gKQ0KCXBhcmVudF9y ZXBvcnRbICdkZWlnZGUgYmluYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJl bnRfZW52WyAncGF0aF9pZ2RlX2JpbicgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RlaWdkZSBs aWJyYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9p Z2RlX2xpYicgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RlaWdkZSBpbmNsdWRlIHBhdGgnIF0g PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9pZ2RlX2luY2x1ZGUnIF0g KQ0KCXBhcmVudF9yZXBvcnRbICdkZWlnZGUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFy ZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfaWdkZV9jb25maWcnIF0gKQ0KCXBh cmVudF9yZXBvcnRbICdkZWlnZGUgZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCgg cGFyZW50X2VudlsgJ3BhdGhfaWdkZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZGVp Z2RlIHNoYXJlZCBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52 WyAncGF0aF9pZ2RlX3NoYXJlJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBj YWNoZSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVf Y2FjaGUnIF0gKQ0KCSNwYXJlbnRfcmVwb3J0WyAncHJvZ3JhbSBmaWxlcycgXSA9IHBhcmVu dF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwcm9ncmFtZmlsZXMnIF0gKQ0KDQpwYXJlbnRf cmVwb3J0WyAncGxhdGZvcm1fYW5kcm9pZCcgXSA9IHBhcmVudF9lbnZbICdwbGF0Zm9ybV9h bmRyb2lkJyBdDQppZiBwYXJlbnRfZW52WyAncGxhdGZvcm1fYW5kcm9pZCcgXSAhPSAnbm8n Og0KCXBhcmVudF9yZXBvcnRbICduZGtyb290JyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFy ZW50X2VudlsgJ25ka3Jvb3QnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdhcGlsZXZlbCcgXSA9 IHBhcmVudF9lbnZbICdhcGlsZXZlbCcgXQ0KCXBhcmVudF9yZXBvcnRbICdoYXJkZnAnIF0g PSAneWVzJyBpZiBwYXJlbnRfZW52WyAnaGFyZGZwJyBdIGVsc2UgJ25vJw0KDQpwYXJlbnRf cmVwb3J0WyAnYnVpbGQgZHJhZ2VuZ2luZSB0ZXN0cycgXSA9ICd5ZXMnIGlmIHBhcmVudF9l bnZbICd3aXRoX3Rlc3RzJyBdIGVsc2UgJ25vJw0KcGFyZW50X3JlcG9ydFsgJ3RyZWF0IHdh cm5pbmdzIGFzIGVycm9ycycgXSA9ICd5ZXMnIGlmIHBhcmVudF9lbnZbICd3aXRoX3dhcm5l cnJvcnMnIF0gZWxzZSAnbm8nDQpwYXJlbnRfcmVwb3J0WyAnYnVpbGQgd2l0aCBkZWJ1ZyBz eW1ib2xzJyBdID0gJ3llcycgaWYgcGFyZW50X2VudlsgJ3dpdGhfZGVidWcnIF0gZWxzZSAn bm8nDQpwYXJlbnRfcmVwb3J0WyAnYnVpbGQgd2l0aCBzYW5pdGl6aW5nJyBdID0gJ3llcycg aWYgcGFyZW50X2VudlsgJ3dpdGhfc2FuaXRpemUnIF0gZWxzZSAnbm8nDQpwYXJlbnRfcmVw b3J0WyAnYnVpbGQgd2l0aCB0aHJlYWQgc2FuaXRpemluZycgXSA9ICd5ZXMnIGlmIHBhcmVu dF9lbnZbICd3aXRoX3Nhbml0aXplX3RocmVhZCcgXSBlbHNlICdubycNCg0KDQoNCiMgZXh0 ZXJuYWwgbGlicmFyaWVzDQpleHRkaXJzID0gW10NCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJu L3psaWInICkNCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJuL2xpYnBuZycgKQ0KZXh0ZGlycy5h cHBlbmQoICdleHRlcm4vbGliYXBuZycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGli anBlZycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vc25kaW8nICkNCmV4dGRpcnMuYXBw ZW5kKCAnZXh0ZXJuL29wZW5hbCcgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGlib2dn JyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9saWJ2b3JiaXMnICkNCmV4dGRpcnMuYXBw ZW5kKCAnZXh0ZXJuL2xpYnRoZW9yYScgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vZm94 JyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9kcmFnb25zY3JpcHQnICkNCmV4dGRpcnMu YXBwZW5kKCAnZXh0ZXJuL2xpYmZmaScgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGli bHRkbCcgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGlic2lnc2VndicgKQ0KI2V4dGRp cnMuYXBwZW5kKCAnZXh0ZXJuL3NtYWxsdGFsaycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRl cm4vbGliZXZkZXYnICkNCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJuL2xpYnVzYicgKQ0KZXh0 ZGlycy5hcHBlbmQoICdleHRlcm4vbGliaGlkYXBpJyApDQpleHRkaXJzLmFwcGVuZCggJ2V4 dGVybi9saWJvcGVuaG1kJyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9mZnR3JyApDQoN CmZvciBleHRkaXIgaW4gZXh0ZGlyczoNCglTQ29uc2NyaXB0KCBkaXJzPWV4dGRpciwgdmFy aWFudF9kaXI9J3t9L2J1aWxkJy5mb3JtYXQoIGV4dGRpciApLA0KCQlkdXBsaWNhdGU9MCwg ZXhwb3J0cz0ncGFyZW50X2VudiBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoN ClNDb25zY3JpcHQoIGRpcnM9J2V4dGVybi9taW5ndycsIHZhcmlhbnRfZGlyPSdleHRlcm4v bWluZ3cvYnVpbGQnLA0KCWR1cGxpY2F0ZT0wLCBleHBvcnRzPSdwYXJlbnRfZW52IHBhcmVu dF90YXJnZXRzIHBhcmVudF9yZXBvcnQnICkNCg0KIyBkcmFnW2VuXWdpbmUgZ2FtZSBlbmdp bmUNClNDb25zY3JpcHQoIGRpcnM9J3NyYy9kcmFnZW5naW5lJywgdmFyaWFudF9kaXI9J3Ny Yy9kcmFnZW5naW5lL2J1aWxkJywgZHVwbGljYXRlPTAsDQoJZXhwb3J0cz0ncGFyZW50X2Vu diBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoNCnNjZGlycyA9IFtdDQoNCiMg Z2FtZSBlbmdpbmUgbW9kdWxlcw0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FuaW1h dG9yL2RlYW5pbWF0b3InICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FpL2Rl YWknICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FuaW1hdGlvbi9kZWFuaW0n ICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2F1ZGlvL251bGwnICkNCnNjZGly cy5hcHBlbmQoICdzcmMvbW9kdWxlcy9hdWRpby9vcGVuYWwnICkNCg0Kc2NkaXJzLmFwcGVu ZCggJ3NyYy9tb2R1bGVzL2NyYXNocmVjb3Zlcnkvc2ltcGx5cXVpdCcgKQ0Kc2NkaXJzLmFw cGVuZCggJ3NyYy9tb2R1bGVzL2NyYXNocmVjb3ZlcnkvYmFzaWNyZWNvdmVyeScgKQ0KDQpz Y2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMvZm9udC9kZWZvbnQnICkNCg0Kc2NkaXJzLmFw cGVuZCggJ3NyYy9tb2R1bGVzL2dyYXBoaWMvbnVsbCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3Ny Yy9tb2R1bGVzL2dyYXBoaWMvb3BlbmdsJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9k dWxlcy9pbWFnZS9wbmcnICkNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbWFnZS9w bmczZCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2ltYWdlL3RnYScgKQ0Kc2Nk aXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2ltYWdlL2pwZWcnICkNCg0Kc2NkaXJzLmFwcGVu ZCggJ3NyYy9tb2R1bGVzL2lucHV0L2NvbnNvbGUnICkNCnNjZGlycy5hcHBlbmQoICdzcmMv bW9kdWxlcy9pbnB1dC94c3lzdGVtJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMv aW5wdXQvdzMyaW5wdXQnICkNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbnB1dC9i ZW9zJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMvaW5wdXQvbWFjb3MnICkNCnNj ZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbnB1dC9hbmRyb2lkJyApDQoNCnNjZGlycy5h cHBlbmQoICdzcmMvbW9kdWxlcy9sYW5ncGFjay9kZWxhbmdwYWNrJyApDQoNCnNjZGlycy5h cHBlbmQoICdzcmMvbW9kdWxlcy9tb2RlbC9kZW1vZGVsJyApDQoNCnNjZGlycy5hcHBlbmQo ICdzcmMvbW9kdWxlcy9uZXR3b3JrL2Jhc2ljJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMv bW9kdWxlcy9vY2NsdXNpb25tZXNoL2Rlb2NjbHVzaW9ubWVzaCcgKQ0KDQpzY2RpcnMuYXBw ZW5kKCAnc3JjL21vZHVsZXMvcGh5c2ljcy9idWxsZXQnICkNCg0Kc2NkaXJzLmFwcGVuZCgg J3NyYy9tb2R1bGVzL3JpZy9kZXJpZycgKQ0KDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVs ZXMvc2NyaXB0aW5nL2RyYWdvbnNjcmlwdCcgKQ0KI3NjZGlycy5hcHBlbmQoICdzcmMvbW9k dWxlcy9zY3JpcHRpbmcvcHl0aG9uJyApDQojc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVz L3NjcmlwdGluZy9zbWFsbHRhbGsnICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVz L3NraW4vZGVza2luJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9zb3VuZC9v Z2d2b3JiaXMnICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3N5bnRoZXNpemVy L2Rlc3ludGhlc2l6ZXInICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3ZpZGVv L3RoZW9yYScgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3ZpZGVvL2FwbmcnICkN Cg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FyY2hpdmUvZGVsZ2EnICkNCg0Kc2Nk aXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2NvbWJpbmVkL2ZieCcgKQ0KDQojIGxhdW5jaGVy cw0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9sYXVuY2hlci9jb25zb2xlJyApDQpzY2RpcnMuYXBw ZW5kKCAnc3JjL2xhdW5jaGVyL2d1aScgKQ0KI3NjZGlycy5hcHBlbmQoICdzcmMvbGF1bmNo ZXIvYW5kcm9pZCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9sYXVuY2hlci9saXZlJyApDQoN CiMgdGVzdHMNCnNjZGlycy5hcHBlbmQoICdzcmMvdGVzdHMnICkNCg0KIyBpbnRlZ3JhdGVk IGdhbWUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQNCnNjZGlycy5hcHBlbmQoICdzcmMvZGVp Z2RlL2RlaWdkZScgKQ0KDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3dv cmxkJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL2FuaW1hdG9yJyAp DQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3JpZ2VkaXRvcicgKQ0Kc2Nk aXJzLmFwcGVuZCggJ3NyYy9kZWlnZGUvZWRpdG9ycy9mb250JyApDQpzY2RpcnMuYXBwZW5k KCAnc3JjL2RlaWdkZS9lZGl0b3JzL3NreScgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9kZWln ZGUvZWRpdG9ycy9za2luJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3Jz L3BhcnRpY2xlRW1pdHRlcicgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9kZWlnZGUvZWRpdG9y cy9zcGVlY2hBbmltYXRpb24nICkNCnNjZGlycy5hcHBlbmQoICdzcmMvZGVpZ2RlL2VkaXRv cnMvY29udmVyc2F0aW9uJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3Jz L2xhbmdwYWNrJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3N5bnRo ZXNpemVyJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL2dhbWVEZWZp bml0aW9uJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3Byb2plY3Qn ICkNCg0KZm9yIHNjZGlyIGluIHNjZGlyczoNCglTQ29uc2NyaXB0KCBkaXJzPXNjZGlyLCB2 YXJpYW50X2Rpcj0ne30vYnVpbGQnLmZvcm1hdCggc2NkaXIgKSwNCgkJZHVwbGljYXRlPTAs IGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcgKQ0K DQojdG9vbHMNClNDb25zY3JpcHQoIGRpcnM9J3NyYy90b29scy9ibGVuZGVyJywgdmFyaWFu dF9kaXI9J3NyYy90b29scy9ibGVuZGVyL2J1aWxkJywNCglkdXBsaWNhdGU9MCwgZXhwb3J0 cz0ncGFyZW50X2VudiBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoNCiMgc3Bl Y2lhbCBzdHVmZg0KU0NvbnNjcmlwdCggZGlycz0nc3JjL2xhdW5jaGVyL3VzYmRyaXZlJywg dmFyaWFudF9kaXI9J3NyYy9sYXVuY2hlci91c2Jkcml2ZS9idWlsZCcsDQoJZHVwbGljYXRl PTAsIGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcg KQ0KDQoNCg0KIyBhcmNoaXZpbmcNClNDb25zY3JpcHQoIGRpcnM9J2FyY2hpdmUnLCB2YXJp YW50X2Rpcj0nYXJjaGl2ZS9idWlsZCcsDQoJZHVwbGljYXRlPTAsIGV4cG9ydHM9J3BhcmVu dF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcgKQ0KDQoiIiINClNDb25zY3Jp cHQoICdzcmMvdG9vbHMvbGF1bmNoZXIvYW5kcm9pZC9TQ29uc2NyaXB0U3BlY2lhbCcsDQoJ dmFyaWFudF9kaXI9J3NyYy90b29scy9sYXVuY2hlci9hbmRyb2lkL2J1aWxkX2FwaycsDQoJ ZHVwbGljYXRlPTAsIGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50 X3JlcG9ydCcgKQ0KIiIiDQoNClNDb25zY3JpcHQoJ2FyY2hpdmUvU0NvbnNIYWlrdUhwa2cu cHknLCB2YXJpYW50X2Rpcj0nYXJjaGl2ZS9idWlsZFBhY2thZ2UnLA0KCWR1cGxpY2F0ZT0w LCBleHBvcnRzPSdwYXJlbnRfZW52IHBhcmVudF90YXJnZXRzIHBhcmVudF9yZXBvcnQnKQ0K DQoNCg0KIyBpbnN0YWxsZXJzDQpTQ29uc2NyaXB0KGRpcnM9J2luc3RhbGxlcicsIHZhcmlh bnRfZGlyPSdpbnN0YWxsZXIvYnVpbGQnLA0KCWR1cGxpY2F0ZT0wLCBleHBvcnRzPSdwYXJl bnRfZW52IHBhcmVudF90YXJnZXRzIHBhcmVudF9yZXBvcnQnKQ0KDQoNCiNwYXJhbXMuU2F2 ZSggJ3BhcmFtZXRlcnMuY2FjaGUnLCBwYXJlbnRfZW52ICkNCg0KIyBhZGQgYWxpYXNlcw0K YnVpbGRBbGwgPSBbXQ0KaW5zdGFsbEFsbCA9IFtdDQppbnN0YWxsQWxsUnVudGltZSA9IFtd DQppbnN0YWxsRW5naW5lUnVudGltZSA9IFtdDQppbnN0YWxsSWdkZVJ1bnRpbWUgPSBbXQ0K ZG94eWdlbkFsbCA9IFtdDQpjbG9jQWxsID0gW10NCmNsb2NSZXBvcnRzID0gW10NCg0KZm9y IGtleSBpbiBwYXJlbnRfdGFyZ2V0czoNCglpZiAnYnVpbGQnIGluIHBhcmVudF90YXJnZXRz WyBrZXkgXToNCgkJYnVpbGRBbGwuYXBwZW5kKCBwYXJlbnRfdGFyZ2V0c1sga2V5IF1bICdi dWlsZCcgXSApDQoJDQoJaWYgJ2luc3RhbGwnIGluIHBhcmVudF90YXJnZXRzWyBrZXkgXToN CgkJaW5zdGFsbEFsbC5hcHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsgJ2luc3RhbGwn IF0gKQ0KCQlpZiAnaW5zdGFsbC1ydW50aW1lJyBpbiBwYXJlbnRfdGFyZ2V0c1sga2V5IF06 DQoJCQlpbnN0YWxsQWxsUnVudGltZS5hcHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsg J2luc3RhbGwtcnVudGltZScgXSApDQoJCWVsc2U6DQoJCQlpbnN0YWxsQWxsUnVudGltZS5h cHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsgJ2luc3RhbGwnIF0gKQ0KCQ0KCWlmICdp bnN0YWxsLWVuZ2luZS1ydW50aW1lJyBpbiBwYXJlbnRfdGFyZ2V0c1trZXldOg0KCQlpbnN0 YWxsRW5naW5lUnVudGltZS5hcHBlbmQocGFyZW50X3RhcmdldHNba2V5XVsnaW5zdGFsbC1l bmdpbmUtcnVudGltZSddKQ0KCQ0KCWlmICdpbnN0YWxsLWlnZGUtcnVudGltZScgaW4gcGFy ZW50X3RhcmdldHNba2V5XToNCgkJaW5zdGFsbElnZGVSdW50aW1lLmFwcGVuZChwYXJlbnRf dGFyZ2V0c1trZXldWydpbnN0YWxsLWlnZGUtcnVudGltZSddKQ0KCQ0KCWlmICdkb3h5Z2Vu JyBpbiBwYXJlbnRfdGFyZ2V0c1sga2V5IF06DQoJCWRveHlnZW5BbGwuYXBwZW5kKCBwYXJl bnRfdGFyZ2V0c1sga2V5IF1bICdkb3h5Z2VuJyBdICkNCgkNCglpZiAnY2xvYycgaW4gcGFy ZW50X3RhcmdldHNbIGtleSBdOg0KCQljbG9jQWxsLmFwcGVuZCggcGFyZW50X3RhcmdldHNb IGtleSBdWyAnY2xvYycgXSApDQoJCWNsb2NSZXBvcnRzLmFwcGVuZCggcGFyZW50X3Rhcmdl dHNbIGtleSBdWyAnY2xvY1JlcG9ydCcgXSApDQoNCnRhcmdldEJ1aWxkQWxsID0gcGFyZW50 X2Vudi5BbGlhcyggJ2J1aWxkJywgYnVpbGRBbGwgKQ0KcGFyZW50X3RhcmdldHNbICdidWls ZCcgXSA9IHsNCgknbmFtZScgOiAnQnVpbGQgRXZlcnl0aGluZycsDQoJJ3RhcmdldCcgOiB0 YXJnZXRCdWlsZEFsbCB9DQoNCnRhcmdldEluc3RhbGxBbGwgPSBwYXJlbnRfZW52LkFsaWFz KCAnaW5zdGFsbCcsIGluc3RhbGxBbGwgKQ0KcGFyZW50X3RhcmdldHNbICdpbnN0YWxsJyBd ID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIEV2ZXJ5dGhpbmcnLA0KCSd0YXJnZXQnIDogdGFy Z2V0SW5zdGFsbEFsbCB9DQoNCnRhcmdldEluc3RhbGxBbGxSdW50aW1lID0gcGFyZW50X2Vu di5BbGlhcyggJ2luc3RhbGxfcnVudGltZScsIGluc3RhbGxBbGxSdW50aW1lICkNCnBhcmVu dF90YXJnZXRzWyAnaW5zdGFsbF9ydW50aW1lJyBdID0gew0KCSduYW1lJyA6ICdJbnN0YWxs IEV2ZXJ5dGhpbmcgUnVudGltZSAobm8gZGV2ZWxvcG1lbnQgZmlsZXMpJywNCgkndGFyZ2V0 JyA6IHRhcmdldEluc3RhbGxBbGxSdW50aW1lIH0NCg0KdGFyZ2V0SW5zdGFsbEVuZ2luZVJ1 bnRpbWUgPSBwYXJlbnRfZW52LkFsaWFzKCdpbnN0YWxsX2VuZ2luZV9ydW50aW1lJywgaW5z dGFsbEVuZ2luZVJ1bnRpbWUpDQpwYXJlbnRfdGFyZ2V0c1snaW5zdGFsbF9lbmdpbmVfcnVu dGltZSddID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIEVuZ2luZSBSdW50aW1lIChubyBkZXZl bG9wbWVudCBmaWxlcyknLA0KCSd0YXJnZXQnIDogdGFyZ2V0SW5zdGFsbEVuZ2luZVJ1bnRp bWUgfQ0KDQp0YXJnZXRJbnN0YWxsSWdkZVJ1bnRpbWUgPSBwYXJlbnRfZW52LkFsaWFzKCdp bnN0YWxsX2lnZGVfcnVudGltZScsIGluc3RhbGxJZ2RlUnVudGltZSkNCnBhcmVudF90YXJn ZXRzWydpbnN0YWxsX2lnZGVfcnVudGltZSddID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIElH REUgUnVudGltZSAobm8gZGV2ZWxvcG1lbnQgZmlsZXMpJywNCgkndGFyZ2V0JyA6IHRhcmdl dEluc3RhbGxJZ2RlUnVudGltZSB9DQoNCnRhcmdldERveHlnZW5BbGwgPSBwYXJlbnRfZW52 LkFsaWFzKCAnZG94eWdlbicsIGRveHlnZW5BbGwgKQ0KcGFyZW50X3RhcmdldHNbICdkb3h5 Z2VuJyBdID0gew0KCSduYW1lJyA6ICdEb3h5Z2VuIEV2ZXJ5dGhpbmcnLA0KCSd0YXJnZXQn IDogdGFyZ2V0RG94eWdlbkFsbCB9DQoNCmlmIGNsb2NSZXBvcnRzOg0KCXRhcmdldENsb2NT dW1tYXJ5ID0gcGFyZW50X2Vudi5BbGlhcyggJ2Nsb2Nfc3VtbWFyeScsDQoJCUJ1aWxkQ0xP Q1N1bW1hcnkoIHBhcmVudF9lbnYsIGNsb2NSZXBvcnRzLCAnY2xvY3N1bW1hcnkuY3N2JyAp ICkNCgljbG9jQWxsLmFwcGVuZCggdGFyZ2V0Q2xvY1N1bW1hcnkgKQ0KDQp0YXJnZXRDbG9j QWxsID0gcGFyZW50X2Vudi5BbGlhcyggJ2Nsb2MnLCBjbG9jQWxsICkNCnBhcmVudF90YXJn ZXRzWyAnY2xvYycgXSA9IHsNCgknbmFtZScgOiAnQ0xvYyBFdmVyeXRoaW5nJywNCgkndGFy Z2V0JyA6IHRhcmdldENsb2NBbGwgfQ0KDQojIGRlZmF1bHQgaXMgYnVpbGRpbmcgYW5kIGlu c3RhbGxpbmcgZXZlcnl0aGluZw0KRGVmYXVsdCggJ2luc3RhbGwnICkNCg0KDQoNCiMgcHJv ZHVjZSBoZWxwDQpIZWxwKCBCdWlsZEhlbHBUZXh0KCBwYXJlbnRfdGFyZ2V0cyApICkNCg0K IyBwcmludCBvdXQgcmVwb3J0DQpQcmludENvbmZpZ1JlcG9ydCggcGFyZW50X3JlcG9ydCAp DQo= --------------2213BD46D49BCD2C860E8E1F--