Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1avOu6-0000qE-6b for pgadmin-hackers@arkaria.postgresql.org; Wed, 27 Apr 2016 12:49:18 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1avOu4-0002zn-T9 for pgadmin-hackers@arkaria.postgresql.org; Wed, 27 Apr 2016 12:49:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1avOtb-0002lB-LD for pgadmin-hackers@postgresql.org; Wed, 27 Apr 2016 12:48:47 +0000 Received: from mail-wm0-x22a.google.com ([2a00:1450:400c:c09::22a]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1avOtX-0003Ba-9G for pgadmin-hackers@postgresql.org; Wed, 27 Apr 2016 12:48:46 +0000 Received: by mail-wm0-x22a.google.com with SMTP id u206so47794577wme.1 for ; Wed, 27 Apr 2016 05:48:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=xubX+sX2uJY6Syi0R+RgkmJfxT1B7/DJkV2zu4wPfC4=; b=JSwTybYqnf7wvWJMB1C3yM34q/kYuFiuD0dqjIx8PumVODaJMJta2oNxVSG/+4sHXr lkPv3fqgH6nEWmUiZ5I8xccz54zJU+bKXnHX2FVCmUL9fnWy/utSYSs8T2xKBUocq+wP rpTPwI1XepvPxG43VK5JOt45VsxtHzWINEU+OjIUJ9g3pJWj/wPMJKM8v6GrU+xVpoUb eFWFog7dsf1PQNxauVlHsIvHS0F9+rTWB8NTaVmbeH+GkEIaN7MREVl2mTTO857qGdcG 5/+nhZexkl6XTCIJPJIyH7iZLqXSKFFvwcJDry7vYq8Nt7BUEcjWsAM5GJRxy0h7thQq A4uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=xubX+sX2uJY6Syi0R+RgkmJfxT1B7/DJkV2zu4wPfC4=; b=dy82pEEqKSp5QZc6BCIhlCvQHKbXGChgo9otl+aXx83M8jzuLZHzofJOEUe/Of+s5N M02UMAa9aKX3ODvKUfZHOP7sK3P5G2jzo90TpVfTDGPrVHfwAi7gJbZhTjhPKPAqlFDt 3YovfG/p0qH7DNO0PtYZn75aRg967cDubAbrJcpJhgQV5VN4XoLOzwUx5qS4NSe2KSN5 P67ttXHl3hJcX/ez7ab4a965OuIPFDqA135Vi/lmG478TNjW2PwA7DDQ2sBm4Y/8ECwY Hh0YziD2GpRU2/+zMX0ZJevBRwgNneyJTwVAv/KUz3U6Y3bLEJtUHV0EO7vahh7KPFom Pl/Q== X-Gm-Message-State: AOPr4FWCzii8Dxu2HCK3kLpk+ZAxtdxM0Z+L4WU/8H+pS+NA7i6+v8NlKCLc27rpLdWAGDwQ5ZePwCeLFSe9GRDc X-Received: by 10.28.223.86 with SMTP id w83mr5688279wmg.95.1461761321969; Wed, 27 Apr 2016 05:48:41 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.53.133 with HTTP; Wed, 27 Apr 2016 05:48:12 -0700 (PDT) From: Surinder Kumar Date: Wed, 27 Apr 2016 18:18:12 +0530 Message-ID: Subject: [pgAdmin4][Patch]: File Manager & Backform FileControl To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114b080657d60c053176d44a X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114b080657d60c053176d44a Content-Type: multipart/alternative; boundary=001a114b080657d607053176d448 --001a114b080657d607053176d448 Content-Type: text/plain; charset=UTF-8 Hi, The patch is for *File Manager and Backform FileControl*. *File Manager:* It allows user to store their files at one place. The user can set path to this directory in preferences which file manger will use. It will be used by various modules of pgAdmin4 such as *import data from file, query tool, backup & recovery tool* so on.. It allows user to perform various operations such as: - File deletion - File upload - Create new directory - File rename - File download and - List files & folders in list and grid view. *FileControl: *This control is used with *File Manager. *It can be used for: - File Selection - Folder Selection - File Creation - Storage Manager Dialog.( it supports all operations listed above). Usage*:* schema:[{ id: 'select_file', label: '{{ _('Select File')}}', type: 'text', *control*: *Backform.FileControl*, *dialog_type: 'select_file'*, *supp_types: ['*', 'pdf', 'text', 'patch', 'py']* } Where: - *control* - It should be *Backform.FileControl* - *dialog_type *- the type of dialog to use. - options can be: *select_file, select_folder, create_file & storage_dialog*. - *supp_types(*not mandatory) - the types of files allowed to show and upload. Please review the patch and let me know for the review comments. Thanks Surinder Kumar --001a114b080657d607053176d448 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

The patch is for File Manager an= d Backform=C2=A0FileControl.

File Manage= r:=C2=A0It allows user to store their files at one place. The user = can set path to this directory in preferences which file manger will use.

It will be used by various modules of pgAdmin4 such= as
import data from file, query tool, backup & recovery t= ool=C2=A0so on.. It allows user to perform various operations such as:= =C2=A0
  • File deletion
  • File upload
  • Crea= te new directory
  • File rename
  • File download and=C2=A0
  • List files & folders in list and grid view.
FileControl:=C2=A0This control is used with=C2=A0File M= anager.=C2=A0It=C2=A0can be used for:
  • File Selection = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
  • Folder=C2=A0Selection= =C2=A0 =C2=A0 =C2=A0=C2=A0
  • File Creation =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A0
  • Storage Manager Dialog.( it supports= all operations listed above).

Usage:

schema:[{
=C2=A0 id: 'select_file', label: '{{ _('Select File'= ;)}}',=C2=A0
=C2=A0 = type: 'text',=C2=A0control:=C2=A0Backform.FileControl= ,
=C2=A0=C2=A0dialog_= type: 'select_file',=C2=A0supp_types: ['*', 'pdf= ', 'text', 'patch', 'py']
= }

W= here:
  • control=C2=A0- It should be=C2=A0Backform.FileControl
  • dia= log_type=C2=A0- the type of dialog to use.
  • options can be:= =C2=A0=C2=A0select_file, select_folder, create_file & storage_dialog= .
  • supp_types(not mandatory)=C2=A0- the types = of files allowed to show and upload.
Please= review the patch and let me know for the review comments.


Thanks
Surinder Kumar
--001a114b080657d607053176d448-- --001a114b080657d60c053176d44a Content-Type: application/octet-stream; name="FileManager_and_Backform_FileControl.patch" Content-Disposition: attachment; filename="FileManager_and_Backform_FileControl.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iniunfp10 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL19f aW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19p bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NzdkYzUzOAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNjI5IEBACisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAt IDIwMTYsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBz b2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJJ bXBsZW1lbnRzIEZpbGUgTWFuYWdlciIiIgorIyBUaGlzIGlzbid0IHJlcXVp cmVkIGluIFB5dGhvbiAyLjYKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3 aXRoX3N0YXRlbWVudAorZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBQZ0Fk bWluTW9kdWxlCitmcm9tIGZsYXNrLmV4dC5iYWJlbCBpbXBvcnQgZ2V0dGV4 dAorZnJvbSBmbGFzay5leHQuc2VjdXJpdHkgaW1wb3J0IGxvZ2luX3JlcXVp cmVkCitmcm9tIGZsYXNrIGltcG9ydCByZW5kZXJfdGVtcGxhdGUsIFJlc3Bv bnNlLCBzZXNzaW9uLCByZXF1ZXN0IGFzIHJlcSwgdXJsX2ZvcgorZnJvbSBw Z2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZQor aW1wb3J0IHJhbmRvbQoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1w b3J0IHRpbWUKK2ltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KK2Zyb20gcGdh ZG1pbi51dGlscy5tZW51IGltcG9ydCBNZW51SXRlbQorCitfX21ldGFjbGFz c19fID0gdHlwZQorCisKK01PRFVMRV9OQU1FID0gJ2ZpbGVfbWFuYWdlcicK K2dsb2JhbCB0cmFuc2lkCisKK3BhdGhfZXhpc3RzID0gb3MucGF0aC5leGlz dHMKK3NwbGl0X3BhdGggPSBvcy5wYXRoLnNwbGl0CitlbmNvZGVfanNvbiA9 IGpzb24uSlNPTkVuY29kZXIoKS5lbmNvZGUKKworCisjIHV0aWxpdHkgZnVu Y3Rpb25zCitkZWYgc2l6ZW9mX2ZtdChudW0sIHN1ZmZpeD0nQicpOgorICAg IGZvciB1bml0IGluIFsnJywgJ0tpJywgJ01pJywgJ0dpJywgJ1RpJywgJ1Bp JywgJ0VpJywgJ1ppJ106CisgICAgICAgIGlmIGFicyhudW0pIDwgMTAyNC4w OgorICAgICAgICAgICAgcmV0dXJuICIlMy4xZiVzJXMiICUgKG51bSwgdW5p dCwgc3VmZml4KQorICAgICAgICBudW0gLz0gMTAyNC4wCisgICAgcmV0dXJu ICIlLjFmJXMlcyIgJSAobnVtLCAnWWknLCBzdWZmaXgpCisKKworZGVmIGdl dFNpemUocGF0aCk6CisgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgcmV0 dXJuIHN0LnN0X3NpemUKKworCitkZWYgc3BsaXRleHQocGF0aCk6CisgICAg Zm9yIGV4dCBpbiBbJy50YXIuZ3onLCAnLnRhci5iejInXToKKyAgICAgICAg aWYgcGF0aC5lbmRzd2l0aChleHQpOgorICAgICAgICAgICAgcGF0aCwgZXh0 ID0gcGF0aFs6LWxlbihleHQpXSwgcGF0aFstbGVuKGV4dCk6XQorICAgICAg ICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwYXRoLCBleHQgPSBv cy5wYXRoLnNwbGl0ZXh0KHBhdGgpCisgICAgcmV0dXJuIGV4dFsxOl0KKwor CitjbGFzcyBGaWxlTWFuYWdlck1vZHVsZShQZ0FkbWluTW9kdWxlKToKKyAg ICAiIiIKKyAgICBGaWxlTWFuYWdlciBpcyB0byBtYW5hZ2UgdGhlIGZpbGVz CisgICAgIiIiCisKKyAgICBMQUJFTCA9ICJTdG9yYWdlIgorCisgICAgZGVm IGdldF9vd25famF2YXNjcmlwdHMoc2VsZik6CisgICAgICAgIHJldHVybiBb CisgICAgICAgICAgeworICAgICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5m aWxlX21hbmFnZXInLAorICAgICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKCdm aWxlX21hbmFnZXIuaW5kZXgnKSArICdmaWxlX21hbmFnZXInLAorICAgICAg ICAgICAgJ3doZW4nOiBOb25lCisgICAgICAgICAgfSwKKyAgICAgICAgICBd CisKKyAgICBkZWYgZ2V0X293bl9zdHlsZXNoZWV0cyhzZWxmKToKKyAgICAg ICAgcmV0dXJuIFsKKyAgICAgICAgICAgICAgdXJsX2Zvcignc3RhdGljJywg ZmlsZW5hbWU9J2Nzcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuY3NzJykK KyAgICAgICAgICAgIF0KKworICAgIGRlZiBnZXRfb3duX21lbnVpdGVtcyhz ZWxmKToKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdmaWxlX2l0 ZW1zJzogW10KKyAgICAgICAgfQorCisgICAgZGVmIGdldF9maWxlX3NpemVf cHJlZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV91 cGxvYWRfc2l6ZQorCisgICAgZGVmIGdldF9zdG9yYWdlX2Rpcl9wcmVmZXJl bmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlX2Rpcgor CisgICAgZGVmIHJlZ2lzdGVyX3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAg ICAjIFJlZ2lzdGVyICdmaWxlIHVwbG9hZCBzaXplJyBwcmVmZXJlbmNlCisg ICAgICAgIHNlbGYuZmlsZV91cGxvYWRfc2l6ZSA9IHNlbGYucHJlZmVyZW5j ZS5yZWdpc3RlcigKKyAgICAgICAgICAgICdvcHRpb25zJywgJ2ZpbGVfdXBs b2FkX3NpemUnLAorICAgICAgICAgICAgZ2V0dGV4dCgiTWF4aW11bSBmaWxl IHVwbG9hZCBzaXplKE1CKSIpLCAnaW50ZWdlcicsIDUwLAorICAgICAgICAg ICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4dCgnT3B0aW9ucycpCisgICAgICAg ICAgICApCisKKyAgICAgICAgIyBSZWdpc3RlciAnU3RvcmFnZSBEaXJlY3Rv cnknIHByZWZlcmVuY2UKKyAgICAgICAgc2VsZi5zdG9yYWdlX2RpciA9IHNl bGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAgICAgICAgICdvcHRpb25z JywgJ3N0b3JhZ2VfZGlyJywKKyAgICAgICAgICAgIGdldHRleHQoIkRpcmVj dG9yeSBuYW1lIGZvciBTdG9yYWdlIE1hbmFnZXIiKSwgJ3RleHQnLCAnLycs CisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1nZXR0ZXh0KCdPcHRpb25z JykKKyAgICAgICAgICAgICkKKworIyBJbml0aWFsaXNlIHRoZSBtb2R1bGUK K2JsdWVwcmludCA9IEZpbGVNYW5hZ2VyTW9kdWxlKAorICAgIE1PRFVMRV9O QU1FLAorICAgIF9fbmFtZV9fLAorICAgICkKKworCitAYmx1ZXByaW50LnJv dXRlKCIvIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGluZGV4KCk6CisgICAg IiIiUmVuZGVyIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2cuIiIiCisgICAgcmV0 dXJuIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgIE1PRFVMRV9OQU1F ICsgIi9pbmRleC5odG1sIiwgXz1nZXR0ZXh0KQorCisKK0BibHVlcHJpbnQu cm91dGUoIi91dGlsaXR5LmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHV0 aWxpdHkoKToKKyAgICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFzY3Jp cHQiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAiZmlsZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMi LCBfPWdldHRleHQpLAorICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICBt aW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKworQGJsdWVw cmludC5yb3V0ZSgiL2ZpbGVfbWFuYWdlci5qcyIpCitAbG9naW5fcmVxdWly ZWQKK2RlZiBmaWxlX21hbmFnZXJfanMoKToKKyAgICAiIiJyZW5kZXIgdGhl IHJlcXVpcmVkIGphdmFzY3JpcHQiIiIKKyAgICByZXR1cm4gUmVzcG9uc2Uo cmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAiZmlsZV9tYW5h Z2VyL2pzL2ZpbGVfbWFuYWdlci5qcyIsIF89Z2V0dGV4dCksCisgICAgICAg IHN0YXR1cz0yMDAsCisgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9q YXZhc2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvZW4uanMiKQor QGxvZ2luX3JlcXVpcmVkCitkZWYgbGFuZ3VhZ2UoKToKKyAgICAiIiJyZW5k ZXIgdGhlIHJlcXVpcmVkIGphdmFzY3JpcHQiIiIKKyAgICByZXR1cm4gUmVz cG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAiZmls ZV9tYW5hZ2VyL2pzL2xhbmd1YWdlcy9lbi5qcyIsIF89Z2V0dGV4dCksCisg ICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNh dGlvbi9qYXZhc2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvZmls ZV9tYW5hZ2VyX2NvbmZpZy5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBm aWxlX21hbmFnZXJfY29uZmlnX2pzKCk6CisgICAgIiIicmVuZGVyIHRoZSBy ZXF1aXJlZCBqYXZhc2NyaXB0IiIiCisgICAgcmV0dXJuIFJlc3BvbnNlKHJl c3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgImZpbGVfbWFuYWdl ci9qcy9maWxlX21hbmFnZXJfY29uZmlnLmpzIiwgXz1nZXR0ZXh0KSwKKyAg ICAgICAgc3RhdHVzPTIwMCwKKyAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0 aW9uL2phdmFzY3JpcHQiKQorCisKK0BibHVlcHJpbnQucm91dGUoIi88aW50 OnRyYW5zX2lkPi9maWxlX21hbmFnZXJfY29uZmlnLmpzb24iKQorQGxvZ2lu X3JlcXVpcmVkCitkZWYgZmlsZV9tYW5hZ2VyX2NvbmZpZyh0cmFuc19pZCk6 CisgICAgIiIicmVuZGVyIHRoZSByZXF1aXJlZCBqc29uIiIiCisgICAgIyB0 cmFuc19pZCA9IEZpbGVtYW5hZ2VyLmNyZWF0ZV9uZXdfdHJhbnNhY3Rpb24o KQorICAgIGRhdGEgPSBGaWxlbWFuYWdlci5nZXRfdHJhc2FjdGlvbl9zZWxl Y3Rpb24odHJhbnNfaWQpCisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNl PXJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgImZpbGVfbWFuYWdlci9qcy9m aWxlX21hbmFnZXJfY29uZmlnLmpzb24iLCBfPWdldHRleHQsCisgICAgICAg IGRhdGE9ZGF0YSksCisgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgIG1p bWV0eXBlPSJhcHBsaWNhdGlvbi9qc29uIikKKworCitAYmx1ZXByaW50LnJv dXRlKCIvZ2V0X3RyYW5zX2lkIiwgbWV0aG9kcz1bIkdFVCIsICJQT1NUIl0p CitAbG9naW5fcmVxdWlyZWQKK2RlZiBnZXRfdHJhbnNfaWQoKToKKyAgICBp ZiBsZW4ocmVxLmRhdGEpICE9IDA6CisgICAgICAgIGNvbmZpZ3MgPSBqc29u LmxvYWRzKHJlcS5kYXRhKQorICAgICAgICB0cmFuc19pZCA9IEZpbGVtYW5h Z2VyLmNyZWF0ZV9uZXdfdHJhbnNhY3Rpb24oY29uZmlncykKKyAgICAgICAg Z2xvYmFsIHRyYW5zaWQKKyAgICAgICAgdHJhbnNpZCA9IHRyYW5zX2lkCisg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgZGF0YT17 J2ZpbGVUcmFuc0lkJzogdHJhbnNpZH0KKyAgICApCisKKworQGJsdWVwcmlu dC5yb3V0ZSgiL2RlbF90cmFuc19pZC88aW50OnRyYW5zX2lkPiIsIG1ldGhv ZHM9WyJHRVQiLCAiUE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgZGVs ZXRlX3RyYW5zX2lkKHRyYW5zX2lkKToKKyAgICBGaWxlbWFuYWdlci5yZWxl YXNlX3RyYW5zYWN0aW9uKHRyYW5zX2lkKQorICAgIHJldHVybiBtYWtlX2pz b25fcmVzcG9uc2UoCisgICAgICAgIGRhdGE9e30KKyAgICApCisKKworY2xh c3MgRmlsZW1hbmFnZXIob2JqZWN0KToKKyAgICAiIiJGaWxlTWFuYWdlciBD bGFzcy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNfaWQpOgor ICAgICAgICBzZWxmLnRyYW5zX2lkID0gdHJhbnNfaWQKKyAgICAgICAgc2Vs Zi5wYXRoZXJyb3IgPSBlbmNvZGVfanNvbigKKyAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICdFcnJvcic6ICdObyBwZXJtaXNzaW9u IHRvIG9wZXJhdGUgb24gc3BlY2lmaWVkIHBhdGguJywKKyAgICAgICAgICAg ICAgICAgICAgJ0NvZGUnOiAtMQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICkKKyAgICAgICAgc2VsZi5kaXIgPSBibHVlcHJpbnQuZ2V0X3N0 b3JhZ2VfZGlyX3ByZWZlcmVuY2UoKS5nZXQoKQorCisgICAgQHN0YXRpY21l dGhvZAorICAgIGRlZiBjcmVhdGVfbmV3X3RyYW5zYWN0aW9uKHBhcmFtcyk6 CisgICAgICAgICIiIgorICAgICAgICBJdCB3aWxsIGFsc28gY3JlYXRlIGEg dW5pcXVlIHRyYW5zYWN0aW9uIGlkIGFuZAorICAgICAgICBzdG9yZSB0aGUg aW5mb3JtYXRpb24gaW50byBzZXNzaW9uIHZhcmlhYmxlLgorICAgICAgICBB cmdzOgorICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBBbGxvdy9EaXNhbGxv dyB1c2VyIHRvIHBlcmZvcm0KKyAgICAgICAgICAgIHNlbGVjdGlvbiwgcmVu YW1lLCBkZWxldGUgZXRjLgorICAgICAgICAiIiIKKworICAgICAgICAjIERl ZmluZSBjb25maWdzIGZvciBkaWFsb2cgdHlwZXMKKyAgICAgICAgIyBzZWxl Y3QgZmlsZSwgc2VsZWN0IGZvbGRlciwgY3JlYXRlIG1vZGUKKyAgICAgICAg Zm1fdHlwZSA9IHBhcmFtc1snZGlhbG9nX3R5cGUnXQorICAgICAgICAjIHN1 cHBfdHlwZXMgPSBbXQorICAgICAgICBzdXBwX3R5cGVzID0gYWxsb3dfdXBs b2FkX2ZpbGVzID0gcGFyYW1zWydzdXBwb3J0ZWRfdHlwZXMnXSBcCisgICAg ICAgICAgICBpZiAnc3VwcG9ydGVkX3R5cGVzJyBpbiBwYXJhbXMgZWxzZSBb XQorICAgICAgICBpZiBmbV90eXBlID09ICdzZWxlY3RfZmlsZSc6CisgICAg ICAgICAgICBjYXBhYmlsaXRpZXMgPSBbJ3NlbGVjdF9maWxlJywgJ3JlbmFt ZScsICd1cGxvYWQnLCAnY3JlYXRlJ10KKyAgICAgICAgICAgIHN1cHBfdHlw ZXMgPSBzdXBwX3R5cGVzCisgICAgICAgICAgICBmaWxlc19vbmx5ID0gVHJ1 ZQorICAgICAgICAgICAgZm9sZGVyc19vbmx5ID0gRmFsc2UKKyAgICAgICAg ICAgIHRpdGxlID0gIlNlbGVjdCBGaWxlIgorICAgICAgICBlbGlmIGZtX3R5 cGUgPT0gJ3NlbGVjdF9mb2xkZXInOgorICAgICAgICAgICAgY2FwYWJpbGl0 aWVzID0gWydzZWxlY3RfZm9sZGVyJywgJ3JlbmFtZScsICdjcmVhdGUnXQor ICAgICAgICAgICAgZmlsZXNfb25seSA9IEZhbHNlCisgICAgICAgICAgICBm b2xkZXJzX29ubHkgPSBUcnVlCisgICAgICAgICAgICB0aXRsZSA9ICJTZWxl Y3QgRm9sZGVyIgorICAgICAgICBlbGlmIGZtX3R5cGUgPT0gJ2NyZWF0ZV9m aWxlJzoKKyAgICAgICAgICAgIGNhcGFiaWxpdGllcyA9IFsnc2VsZWN0X2Zp bGUnLCAncmVuYW1lJywgJ2NyZWF0ZSddCisgICAgICAgICAgICBzdXBwX3R5 cGVzID0gc3VwcF90eXBlcworICAgICAgICAgICAgZmlsZXNfb25seSA9IFRy dWUKKyAgICAgICAgICAgIGZvbGRlcnNfb25seSA9IEZhbHNlCisgICAgICAg ICAgICB0aXRsZSA9ICJDcmVhdGUgRmlsZSIKKyAgICAgICAgZWxpZiBmbV90 eXBlID09ICdzdG9yYWdlX2RpYWxvZyc6CisgICAgICAgICAgICBjYXBhYmls aXRpZXMgPSBbJ3NlbGVjdF9mb2xkZXInLCAnc2VsZWN0X2ZpbGUnLCAnZG93 bmxvYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZW5hbWUn LCAnZGVsZXRlJywgJ3VwbG9hZCcsICdjcmVhdGUnXQorICAgICAgICAgICAg c3VwcF90eXBlcyA9IHN1cHBfdHlwZXMKKyAgICAgICAgICAgIGZpbGVzX29u bHkgPSBUcnVlCisgICAgICAgICAgICBmb2xkZXJzX29ubHkgPSBGYWxzZQor ICAgICAgICAgICAgdGl0bGUgPSAiU3RvcmFnZSBNYW5hZ2VyIgorCisgICAg ICAgICMgY3JlYXRlIGNvbmZpZ3MgdXNpbmcgYWJvdmUgY29uZmlncworICAg ICAgICBjb25maWdzID0geworICAgICAgICAgICJmaWxlcm9vdCI6ICIvIiwK KyAgICAgICAgICAiZGlhbG9nX3R5cGUiOiBmbV90eXBlLAorICAgICAgICAg ICJ0aXRsZSI6IHRpdGxlLAorICAgICAgICAgICJ1cGxvYWQiOiB7CisgICAg ICAgICAgICAgICJtdWx0aXBsZSI6IFRydWUKKyAgICAgICAgICB9LAorICAg ICAgICAgICJjYXBhYmlsaXRpZXMiOiBjYXBhYmlsaXRpZXMsCisgICAgICAg ICAgInNlY3VyaXR5IjogeworICAgICAgICAgICAgICAidXBsb2FkUG9saWN5 IjogIiIsCisgICAgICAgICAgICAgICJ1cGxvYWRSZXN0cmljdGlvbnMiOiBh bGxvd191cGxvYWRfZmlsZXMKKyAgICAgICAgICB9LAorICAgICAgICAgICJm aWxlc19vbmx5IjogZmlsZXNfb25seSwKKyAgICAgICAgICAiZm9sZGVyc19v bmx5IjogZm9sZGVyc19vbmx5LAorICAgICAgICAgICJzdXBwb3J0ZWRfdHlw ZXMiOiBzdXBwX3R5cGVzCisgICAgICAgIH0KKworICAgICAgICAjIENyZWF0 ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIHRy YW5zX2lkID0gc3RyKHJhbmRvbS5yYW5kaW50KDEsIDk5OTk5OTkpKQorCisg ICAgICAgIGlmICdmaWxlTWFuYWdlckRhdGEnIG5vdCBpbiBzZXNzaW9uOgor ICAgICAgICAgICAgZmlsZV9tYW5hZ2VyX2RhdGEgPSBkaWN0KCkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gc2Vz c2lvblsnZmlsZU1hbmFnZXJEYXRhJ10KKworICAgICAgICBmaWxlX3VwbG9h ZF9zaXplID0gYmx1ZXByaW50LmdldF9maWxlX3NpemVfcHJlZmVyZW5jZSgp LmdldCgpCisgICAgICAgIGNvbmZpZ3NbJ3VwbG9hZCddWydmaWxlU2l6ZUxp bWl0J10gPSBmaWxlX3VwbG9hZF9zaXplCisgICAgICAgIGZpbGVfbWFuYWdl cl9kYXRhW3RyYW5zX2lkXSA9IGNvbmZpZ3MKKyAgICAgICAgc2Vzc2lvblsn ZmlsZU1hbmFnZXJEYXRhJ10gPSBmaWxlX21hbmFnZXJfZGF0YQorCisgICAg ICAgIHJldHVybiB0cmFuc19pZAorCisgICAgQHN0YXRpY21ldGhvZAorICAg IGRlZiBnZXRfdHJhc2FjdGlvbl9zZWxlY3Rpb24odHJhbnNfaWQpOgorICAg ICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaW5m b3JtYXRpb24gb2YgdW5pcXVlIHRyYW5zYWN0aW9uCisgICAgICAgIGlkIGZy b20gdGhlIHNlc3Npb24gdmFyaWFibGUuCisKKyAgICAgICAgQXJnczoKKyAg ICAgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAg ICAgICAgIiIiCisgICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gc2Vzc2lv blsnZmlsZU1hbmFnZXJEYXRhJ10KKworICAgICAgICAjIFJldHVybiBmcm9t IHRoZSBmdW5jdGlvbiBpZiB0cmFuc2FjdGlvbiBpZCBub3QgZm91bmQKKyAg ICAgICAgaWYgc3RyKHRyYW5zX2lkKSBpbiBmaWxlX21hbmFnZXJfZGF0YToK KyAgICAgICAgICAgIHJldHVybiBmaWxlX21hbmFnZXJfZGF0YVtzdHIodHJh bnNfaWQpXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZWxlYXNl X3RyYW5zYWN0aW9uKHRyYW5zX2lkKToKKyAgICAgICAgIiIiCisgICAgICAg IFRoaXMgbWV0aG9kIGlzIHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gb2Yg dW5pcXVlIHRyYW5zYWN0aW9uCisgICAgICAgIGlkIGZyb20gdGhlIHNlc3Np b24gdmFyaWFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRy YW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgIiIiCisg ICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gc2Vzc2lvblsnZmlsZU1hbmFn ZXJEYXRhJ10KKyAgICAgICAgIyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24g aWYgdHJhbnNhY3Rpb24gaWQgbm90IGZvdW5kCisgICAgICAgIGlmIHN0cih0 cmFuc19pZCkgbm90IGluIGZpbGVfbWFuYWdlcl9kYXRhOgorICAgICAgICAg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzog VHJ1ZX0pCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIGluZm9ybWF0aW9uIG9m IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAorICAgICAgICAjIGZyb20gdGhlIHNl c3Npb24gdmFyaWFibGUuCisgICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhLnBv cChzdHIodHJhbnNfaWQpLCBOb25lKQorICAgICAgICBzZXNzaW9uWydmaWxl TWFuYWdlckRhdGEnXSA9IGZpbGVfbWFuYWdlcl9kYXRhCisKKyAgICAgICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogVHJ1 ZX0pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxpc3RfZmlsZXN5 c3RlbShkaXIsIHBhdGgsIHRyYW5zX2RhdGEsIGZpbGVfdHlwZSk6CisgICAg ICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisg ICAgICAgIHVzZXJfZGlyID0gcGF0aAorICAgICAgICBmaWxlcyA9IHt9Cisg ICAgICAgIGZvbGRlcnNfb25seSA9IHRyYW5zX2RhdGFbJ2ZvbGRlcnNfb25s eSddIGlmICdmb2xkZXJzX29ubHknIGluIFwKKyAgICAgICAgICAgIHRyYW5z X2RhdGEgZWxzZSAnJworICAgICAgICBmaWxlc19vbmx5ID0gdHJhbnNfZGF0 YVsnZmlsZXNfb25seSddIGlmICdmaWxlc19vbmx5JyBpbiBcCisgICAgICAg ICAgICB0cmFuc19kYXRhIGVsc2UgJycKKyAgICAgICAgc3VwcG9ydGVkX3R5 cGVzID0gdHJhbnNfZGF0YVsnc3VwcG9ydGVkX3R5cGVzJ10gXAorICAgICAg ICAgICAgaWYgJ3N1cHBvcnRlZF90eXBlcycgaW4gdHJhbnNfZGF0YSBlbHNl IFtdCisgICAgICAgIGZvciBmIGluIHNvcnRlZChvcy5saXN0ZGlyKG9yaWdf cGF0aCkpOgorICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKCcuJyk6Cisg ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHVzZXJfcGF0 aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmpvaW4odXNlcl9kaXIsIGYpKQor ICAgICAgICAgICAgc3lzdGVtX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0 aC5qb2luKG9yaWdfcGF0aCwgZikpCisgICAgICAgICAgICBjcmVhdGVkID0g dGltZS5jdGltZShvcy5wYXRoLmdldGN0aW1lKHN5c3RlbV9wYXRoKSkKKyAg ICAgICAgICAgIG1vZGlmaWVkID0gdGltZS5jdGltZShvcy5wYXRoLmdldG10 aW1lKHN5c3RlbV9wYXRoKSkKKyAgICAgICAgICAgIGZpbGVfZXh0ZW5zaW9u ID0gc3RyKHNwbGl0ZXh0KHN5c3RlbV9wYXRoKSkKKyAgICAgICAgICAgIGlm IG9zLnBhdGguaXNkaXIoc3lzdGVtX3BhdGgpOgorICAgICAgICAgICAgICAg IGlmIGZpbGVzX29ubHkgPT0gJ3RydWUnOgorICAgICAgICAgICAgICAgICAg ICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVfZXh0ZW5zaW9uID0g c3RyKCdkaXInKQorICAgICAgICAgICAgICAgIHVzZXJfcGF0aCA9ICJ7MH0v Ii5mb3JtYXQodXNlcl9wYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBpZiBmb2xkZXJzX29ubHk6CisgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICAgICAgaWYgbGVuKHN1cHBvcnRlZF90eXBlcykgPiAwIGFuZCBm aWxlX2V4dGVuc2lvbiBub3QgaW4gc3VwcG9ydGVkX3R5cGVzOgorICAgICAg ICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAg ICAgaWYgKGZpbGVfdHlwZSBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgZmlsZV90eXBlICE9ICcnIGFuZAorICAgICAgICAgICAg ICAgICAgICAgICBmaWxlX3R5cGUgIT0gJyonIGFuZAorICAgICAgICAgICAg ICAgICAgICAgICBmaWxlX3R5cGUgIT0gZmlsZV9leHRlbnNpb24pOgorICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAg ZmlsZXNbdXNlcl9wYXRoXSA9IHsKKyAgICAgICAgICAgICAgIkZpbGVuYW1l IjogZiwKKyAgICAgICAgICAgICAgIlBhdGgiOiB1c2VyX3BhdGgsCisgICAg ICAgICAgICAgICJmaWxlX3R5cGUiOiBmaWxlX2V4dGVuc2lvbiwKKyAgICAg ICAgICAgICAgIlByb3RlY3RlZCI6IDAsCisgICAgICAgICAgICAgICJQcm9w ZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICJEYXRlIENyZWF0ZWQiOiBj cmVhdGVkLAorICAgICAgICAgICAgICAgICJEYXRlIE1vZGlmaWVkIjogbW9k aWZpZWQsCisgICAgICAgICAgICAgICAgImZpbGVtdGltZSI6IDE0NTkxODIx MTYsCisgICAgICAgICAgICAgICAgIkhlaWdodCI6ICcnLAorICAgICAgICAg ICAgICAgICJXaWR0aCI6ICcnLAorICAgICAgICAgICAgICAgICJTaXplIjog c2l6ZW9mX2ZtdChnZXRTaXplKHN5c3RlbV9wYXRoKSkKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsZXMKKwor ICAgIGRlZiB2YWxpZGF0ZV9yZXF1ZXN0KHNlbGYsIGNhcGFiaWxpdHkpOgor ICAgICAgICB0cmFuc19kYXRhID0gRmlsZW1hbmFnZXIuZ2V0X3RyYXNhY3Rp b25fc2VsZWN0aW9uKHNlbGYudHJhbnNfaWQpCisgICAgICAgIHJldHVybiBG YWxzZSBpZiBjYXBhYmlsaXR5IG5vdCBpbiB0cmFuc19kYXRhWydjYXBhYmls aXRpZXMnXSBlbHNlIFRydWUKKworICAgIGRlZiBnZXRpbmZvKHNlbGYsIHBh dGg9Tm9uZSwgZ2V0c2l6ZT1UcnVlLCBuYW1lPU5vbmUsIHJlcT1Ob25lKToK KyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBKU09OIG9iamVjdCBj b250YWluaW5nIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IHRoZSBnaXZl biBmaWxlLgorICAgICAgICAiIiIKKworICAgICAgICBkaXIgPSBzZWxmLmRp cgorICAgICAgICBvcmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBw YXRoKQorICAgICAgICB1c2VyX2RpciA9IHBhdGgKKyAgICAgICAgdGhlZmls ZSA9IHsKKyAgICAgICAgICAgICdGaWxlbmFtZSc6IHNwbGl0X3BhdGgob3Jp Z19wYXRoKVstMV0sCisgICAgICAgICAgICAnRmlsZSBUeXBlJzogJycsCisg ICAgICAgICAgICAnUGF0aCc6IHVzZXJfZGlyLAorICAgICAgICAgICAgJ0Vy cm9yJzogJycsCisgICAgICAgICAgICAnQ29kZSc6IDAsCisgICAgICAgICAg ICAnUHJvcGVydGllcyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ0RhdGUg Q3JlYXRlZCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAnRGF0ZSBNb2Rp ZmllZCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAnV2lkdGgnOiAnJywK KyAgICAgICAgICAgICAgICAgICAgJ0hlaWdodCc6ICcnLAorICAgICAgICAg ICAgICAgICAgICAnU2l6ZSc6ICcnCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorCisgICAgICAgIGlmIG5vdCBwYXRoX2V4aXN0cyhvcmln X3BhdGgpOgorICAgICAgICAgICAgdGhlZmlsZVsnRXJyb3InXSA9IGdldHRl eHQoJ0ZpbGUgZG9lcyBub3QgZXhpc3QuJykKKyAgICAgICAgICAgIHJldHVy biAoZW5jb2RlX2pzb24odGhlZmlsZSksIE5vbmUsICdhcHBsaWNhdGlvbi9q c29uJykKKworICAgICAgICBpZiBzcGxpdF9wYXRoKHVzZXJfZGlyKVstMV0g PT0gJy8nOgorICAgICAgICAgICAgdGhlZmlsZVsnRmlsZSBUeXBlJ10gPSAn RGlyZWN0b3J5JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGhlZmls ZVsnRmlsZSBUeXBlJ10gPSBzcGxpdGV4dCh1c2VyX2RpcikKKworICAgICAg ICBjcmVhdGVkID0gdGltZS5jdGltZShvcy5wYXRoLmdldGN0aW1lKG9yaWdf cGF0aCkpCisgICAgICAgIG1vZGlmaWVkID0gdGltZS5jdGltZShvcy5wYXRo LmdldG10aW1lKG9yaWdfcGF0aCkpCisKKyAgICAgICAgdGhlZmlsZVsnUHJv cGVydGllcyddWydEYXRlIENyZWF0ZWQnXSA9IGNyZWF0ZWQKKyAgICAgICAg dGhlZmlsZVsnUHJvcGVydGllcyddWydEYXRlIE1vZGlmaWVkJ10gPSBtb2Rp ZmllZAorICAgICAgICB0aGVmaWxlWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSA9 IHNpemVvZl9mbXQoZ2V0U2l6ZShvcmlnX3BhdGgpKQorCisgICAgICAgIHJl dHVybiB0aGVmaWxlCisKKyAgICBkZWYgZ2V0Zm9sZGVyKHNlbGYsIHBhdGg9 Tm9uZSwgZmlsZV90eXBlPSIiLCBuYW1lPU5vbmUsIHJlcT1Ob25lKToKKyAg ICAgICAgdHJhbnNfZGF0YSA9IEZpbGVtYW5hZ2VyLmdldF90cmFzYWN0aW9u X3NlbGVjdGlvbihzZWxmLnRyYW5zX2lkKQorICAgICAgICBkaXIgPSBzZWxm LmRpcgorICAgICAgICBmaWxlbGlzdCA9IHNlbGYubGlzdF9maWxlc3lzdGVt KGRpciwgcGF0aCwgdHJhbnNfZGF0YSwgZmlsZV90eXBlKQorICAgICAgICBy ZXR1cm4gZmlsZWxpc3QKKworICAgIGRlZiByZW5hbWUoc2VsZiwgb2xkPU5v bmUsIG5ldz1Ob25lLCByZXE9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxm LnZhbGlkYXRlX3JlcXVlc3QoJ3JlbmFtZScpOgorICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAnRXJyb3InOiBnZXR0ZXh0KCdOb3QgYWxs b3dlZCcpLAorICAgICAgICAgICAgICdDb2RlJzogMQorICAgICAgICAgICAg fQorCisgICAgICAgIGRpciA9IHNlbGYuZGlyCisgICAgICAgICMgY2hlY2sg aWYgaXQncyBkaXIKKyAgICAgICAgaWYgb2xkWy0xXSA9PSAnLyc6CisgICAg ICAgICAgICBvbGQgPSBvbGRbOi0xXQorCisgICAgICAgICMgZXh0cmFjdCBm aWxlbmFtZQorICAgICAgICBvbGRuYW1lID0gc3BsaXRfcGF0aChvbGQpWy0x XQorICAgICAgICBwYXRoID0gc3RyKG9sZCkKKyAgICAgICAgcGF0aCA9IHNw bGl0X3BhdGgocGF0aClbMF0gICMgZXh0cmFjdCBwYXRoCisKKyAgICAgICAg aWYgbm90IHBhdGhbLTFdID09ICcvJzoKKyAgICAgICAgICAgIHBhdGggKz0g Jy8nCisKKyAgICAgICAgIyBuZXduYW1lID0gZW5jb2RlX3VybHBhdGgobmV3 KQorICAgICAgICBuZXduYW1lID0gbmV3CisgICAgICAgIG5ld3BhdGggPSBw YXRoICsgbmV3bmFtZQorCisgICAgICAgICMgbWFrZSBzeXN0ZW0gb2xkIHBh dGgKKyAgICAgICAgb2xkcGF0aF9zeXMgPSAiezB9ezF9Ii5mb3JtYXQoZGly LCBvbGQpCisgICAgICAgIG5ld3BhdGhfc3lzID0gInswfXsxfSIuZm9ybWF0 KGRpciwgbmV3cGF0aCkKKworICAgICAgICBlcnJvcl9tc2cgPSBnZXR0ZXh0 KCdSZW5hbWVkIFN1Y2Nlc3NmdWxseS4nKQorICAgICAgICBjb2RlID0gMQor ICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW5hbWUob2xkcGF0aF9z eXMsIG5ld3BhdGhfc3lzKQorICAgICAgICAgICAgY29kZSA9IDAKKyAgICAg ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyb3Jf bXNnID0gInswfSAtIHsxfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGdl dHRleHQoJ1RoZXJlIHdhcyBhbiBlcnJvciByZW5hbWluZyB0aGUgZmlsZS4n KSwKKyAgICAgICAgICAgICAgICBzdHIoZSkpCisKKyAgICAgICAgcmVzdWx0 ID0geworICAgICAgICAgICAgJ09sZCBQYXRoJzogb2xkLAorICAgICAgICAg ICAgJ09sZCBOYW1lJzogb2xkbmFtZSwKKyAgICAgICAgICAgICdOZXcgUGF0 aCc6IG5ld3BhdGgsCisgICAgICAgICAgICAnTmV3IE5hbWUnOiBuZXduYW1l LAorICAgICAgICAgICAgJ0Vycm9yJzogZXJyb3JfbXNnLAorICAgICAgICAg ICAgJ0NvZGUnOiBjb2RlCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g cmVzdWx0CisKKyAgICBkZWYgZGVsZXRlKHNlbGYsIHBhdGg9Tm9uZSwgcmVx PU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9yZXF1ZXN0 KCdkZWxldGUnKToKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg ICAgJ0Vycm9yJzogZ2V0dGV4dCgnTm90IGFsbG93ZWQnKSwKKyAgICAgICAg ICAgICAnQ29kZSc6IDEKKyAgICAgICAgICAgIH0KKworICAgICAgICBkaXIg PSBzZWxmLmRpcgorICAgICAgICBvcmlnX3BhdGggPSAiezB9ezF9Ii5mb3Jt YXQoZGlyLCBwYXRoKQorCisgICAgICAgIGVycl9tc2cgPSAnJworICAgICAg ICBjb2RlID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBvcy5w YXRoLmlzZGlyKG9yaWdfcGF0aCk6CisgICAgICAgICAgICAgICAgb3Mucm1k aXIob3JpZ19wYXRoKQorICAgICAgICAgICAgICAgIGNvZGUgPSAwCisgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcmln X3BhdGgpCisgICAgICAgICAgICAgICAgY29kZSA9IDAKKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyX21zZyA9ICJF cnJvcjogezB9Ii5mb3JtYXQoZS5zdHJlcnJvcikKKworICAgICAgICByZXN1 bHQgPSB7CisgICAgICAgICAgICAnUGF0aCc6IHBhdGgsCisgICAgICAgICAg ICAnRXJyb3InOiBlcnJfbXNnLAorICAgICAgICAgICAgJ0NvZGUnOiBjb2Rl CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBk ZWYgYWRkKHNlbGYsIHJlcT1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYu dmFsaWRhdGVfcmVxdWVzdCgndXBsb2FkJyk6CisgICAgICAgICAgICByZXR1 cm4geworICAgICAgICAgICAgICdFcnJvcic6ICdOb3QgYWxsb3dlZCcsCisg ICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisKKyAgICAg ICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcnCisgICAg ICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGgg PSByZXEuZm9ybS5nZXQoJ2N1cnJlbnRwYXRoJykKKyAgICAgICAgICAgIG9y aWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisgICAgICAg ICAgICB0aGVmaWxlID0gcmVxLmZpbGVzWyduZXdmaWxlJ10KKyAgICAgICAg ICAgIG5ld05hbWUgPSAnezB9ezF9Jy5mb3JtYXQob3JpZ19wYXRoLCB0aGVm aWxlLmZpbGVuYW1lKQorCisgICAgICAgICAgICB3aXRoIG9wZW4obmV3TmFt ZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRoZWZp bGUucmVhZCgpKQorICAgICAgICAgICAgY29kZSA9IDAKKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyX21zZyA9IHN0 cihlKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQYXRo JzogcGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAgICAg ICAgICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6 IGNvZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKwor ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0TmV3TmFtZShkaXIsIHBh dGgsIG5ld05hbWUsIGNvdW50PTEpOgorICAgICAgICBsYXN0X2NoYXIgPSBu ZXdOYW1lWy0xXQorICAgICAgICB0bmV3UGF0aCA9IGRpciArICcvJyArIHBh dGggKyBuZXdOYW1lICsgJ18nK3N0cihjb3VudCkKKyAgICAgICAgaWYgbGFz dF9jaGFyID09ICdyJyBhbmQgbm90IHBhdGhfZXhpc3RzKHRuZXdQYXRoKToK KyAgICAgICAgICAgIHJldHVybiB0bmV3UGF0aCwgbmV3TmFtZQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgbGFzdF9jaGFyID0gaW50KHRuZXdQYXRo Wy0xXSkgKyAxCisgICAgICAgICAgICBuZXdQYXRoID0gZGlyICsgJy8nICsg cGF0aCArIG5ld05hbWUgKyAnXycrc3RyKGxhc3RfY2hhcikKKyAgICAgICAg ICAgIGlmIHBhdGhfZXhpc3RzKG5ld1BhdGgpOgorICAgICAgICAgICAgICAg IGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gRmlsZW1hbmFn ZXIuZ2V0TmV3TmFtZShkaXIsIHBhdGgsIG5ld05hbWUsIGNvdW50KQorICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3UGF0 aCwgbmV3TmFtZQorCisgICAgZGVmIGFkZGZvbGRlcihzZWxmLCBwYXRoLCBu YW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVfcmVxdWVzdCgn Y3JlYXRlJyk6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg ICdFcnJvcic6ICdOb3QgYWxsb3dlZCcsCisgICAgICAgICAgICAgJ0NvZGUn OiAxCisgICAgICAgICAgICB9CisKKyAgICAgICAgZGlyID0gc2VsZi5kaXIK KyAgICAgICAgbmV3TmFtZSA9IG5hbWUKKyAgICAgICAgbmV3UGF0aCA9IGRp ciArICcvJyArIHBhdGggKyBuZXdOYW1lICsgJy8nCisKKyAgICAgICAgZXJy X21zZyA9ICcnCisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIGlmIG5vdCBw YXRoX2V4aXN0cyhuZXdQYXRoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAg ICAgICAgICAgICBvcy5ta2RpcihuZXdQYXRoKQorICAgICAgICAgICAgICAg IGNvZGUgPSAwCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6 CisgICAgICAgICAgICAgICAgZXJyX21zZyA9IHN0cihlKQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgbmV3UGF0aCwgbmV3TmFtZSA9IHNlbGYuZ2V0 TmV3TmFtZShkaXIsIHBhdGgsIG5ld05hbWUpCisgICAgICAgICAgICB0cnk6 CisgICAgICAgICAgICAgICAgb3MubWtkaXIobmV3UGF0aCkKKyAgICAgICAg ICAgICAgICBjb2RlID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBlOgorICAgICAgICAgICAgICAgIGVycl9tc2cgPSBzdHIoZSkKKwor ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAnUGFyZW50JzogcGF0 aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAgICAgICAgICAg ICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUK KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRl ZiBkb3dubG9hZChzZWxmLCBwYXRoPU5vbmUsIG5hbWU9Tm9uZSwgcmVxPU5v bmUpOgorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9yZXF1ZXN0KCdk b3dubG9hZCcpOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg ICAnRXJyb3InOiAnTm90IGFsbG93ZWQnLAorICAgICAgICAgICAgICdDb2Rl JzogMQorICAgICAgICAgICAgfQorCisgICAgICAgIGRpciA9IHNlbGYuZGly CisgICAgICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBh dGgpCisgICAgICAgIG5hbWUgPSBwYXRoLnNwbGl0KCcvJylbLTFdCisgICAg ICAgIGNvbnRlbnQgPSBvcGVuKG9yaWdfcGF0aCwgJ3InKQorICAgICAgICBy ZXNwID0gUmVzcG9uc2UoY29udGVudCkKKyAgICAgICAgcmVzcC5oZWFkZXJz WydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5h bWU9JytuYW1lCisgICAgICAgIHJldHVybiByZXNwCisKKworQGJsdWVwcmlu dC5yb3V0ZSgiL2ZpbGVtYW5hZ2VyLzxpbnQ6dHJhbnNfaWQ+LyIsIG1ldGhv ZHM9WyJHRVQiLCAiUE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgZmls ZV9tYW5hZ2VyKHRyYW5zX2lkKToKKyAgICAiIiJSZW5kZXIgdGhlIHByZWZl cmVuY2VzIGRpYWxvZy4iIiIKKyAgICBteUZpbGVtYW5hZ2VyID0gRmlsZW1h bmFnZXIodHJhbnNfaWQpCisgICAgbW9kZSA9ICcnCisgICAga3dhcmdzID0g e30KKyAgICBpZiByZXEubWV0aG9kID09ICdQT1NUJzoKKyAgICAgICAgaWYg cmVxLmZpbGVzOgorICAgICAgICAgICAgbW9kZSA9ICdhZGQnCisgICAgICAg ICAgICBrd2FyZ3MgPSB7J3JlcSc6IHJlcX0KKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGt3YXJncyA9IGpzb24ubG9hZHMocmVxLmRhdGEpCisgICAg ICAgICAgICBrd2FyZ3NbJ3JlcSddID0gcmVxCisgICAgICAgICAgICBtb2Rl ID0ga3dhcmdzWydtb2RlJ10KKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ21v ZGUnXQorICAgIGVsaWYgcmVxLm1ldGhvZCA9PSAnR0VUJzoKKyAgICAgICAg a3dhcmdzID0geworICAgICAgICAgICdwYXRoJzogcmVxLmFyZ3NbJ3BhdGgn XSwKKyAgICAgICAgICAnbmFtZSc6IHJlcS5hcmdzWyduYW1lJ10gaWYgJ25h bWUnIGluIHJlcS5hcmdzIGVsc2UgJycKKyAgICAgICAgfQorICAgICAgICBt b2RlID0gcmVxLmFyZ3NbJ21vZGUnXQorCisgICAgdHJ5OgorICAgICAgICBm dW5jID0gZ2V0YXR0cihteUZpbGVtYW5hZ2VyLCBtb2RlKQorICAgICAgICBy ZXR1cm4ganNvbi5kdW1wcyhmdW5jKCoqa3dhcmdzKSkKKworICAgIGV4Y2Vw dCBFeGNlcHRpb246CisgICAgICAgIHJldHVybiBnZXRhdHRyKG15RmlsZW1h bmFnZXIsIG1vZGUpKCoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9maWxlX21hbmFnZXIvc3RhdGljL2Nzcy9maWxlX21hbmFnZXIu Y3NzIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvc3RhdGljL2Nz cy9maWxlX21hbmFnZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLmE0M2I5N2QKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9zdGF0aWMvY3NzL2ZpbGVfbWFuYWdl ci5jc3MKQEAgLTAsMCArMSw2NTMgQEAKKy8qCisgKiBDU1MgZm9yIFN0b3Jh Z2UgTWFuYWdlciBEaWFsb2cKKyAqLworCisuZmlsZV9tYW5hZ2VyICN1cGxv YWRlciB7CisgIHBhZGRpbmc6IDJweCA0cHg7CisgIGJvcmRlci13aWR0aDog MXB4OworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7 CisgIGhlaWdodDogYXV0bzsKKyAgbWluLWhlaWdodDozMHB4OworICBtYXgt aGVpZ2h0OiA4MHB4OworICBvdmVyZmxvdzogaGlkZGVuOworICBib3JkZXIt Ym90dG9tOiAxcHg7CisgIHRvcDogMzVweDsKK30KKworI3VwbG9hZGVyIGgx IHsKKyAgZm9udC1zaXplOiAxNHB4OworICBtYXJnaW46IDA7CisgIG1hcmdp bi1sZWZ0OiA1cHg7CisgIHBhZGRpbmc6IDA7CisgIGRpc3BsYXk6IGJsb2Nr OworICBmbG9hdDogbGVmdDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgbGlu ZS1oZWlnaHQ6MS45ZW07CisgIHRleHQtc2hhZG93OjFweCAxcHggMHB4ICNm ZmZmZmY7Cit9CisKKyN1cGxvYWRlciBoMSBiIHsKKyAgZm9udC13ZWlnaHQ6 IG5vcm1hbDsKK30KKworLnVwbG9hZHJlc3BvbnNlIHsKKyAgZGlzcGxheTog bm9uZTsKK30KKworLmZpbGVpbmZvIHsKKyAgbWluLXdpZHRoOiAxMDBweDsK KyAgb3ZlcmZsb3c6IGF1dG87CisgIC8qIG5vIG1hcmdpbiBvciBib3JkZXIg YWxsb3dlZCAqLworfQorCisuZmlsZWluZm8gI2NvbnRlbnRzIGxpLnNlbGVj dGVkLCAuZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkIHsK KyAgYmFja2dyb3VuZDogI0Q5RURGNzsKK30KKworLmZpbGVpbmZvICNjb250 ZW50cyBsaSAuZm1fZmlsZV9yZW5hbWUsCisuZmlsZWluZm8gdGFibGUjY29u dGVudHMgdHIgdGQ6Zmlyc3QtY2hpbGQgaW5wdXQuZm1fZmlsZV9yZW5hbWUg eworICBkaXNwbGF5OiBub25lOworICB3aWR0aDogODBweDsKKyAgbWFyZ2lu OiAwIGF1dG87CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgaGVpZ2h0OiAx N3B4OworfQorCisuZmlsZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQgcCB7 CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWFyZ2luLWJvdHRvbTog MDsKK30KKworLmZpbGVpbmZvIHRhYmxlI2NvbnRlbnRzIHRyIHRkIHAgc3Bh biB7CisJZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGlj YSwgQXJpYWwsIHNhbnMtc2VyaWY7Cit9CisKKy5maWxlaW5mbyA+IGgxIHsK KyAgZm9udC1zaXplOiAxNnB4OworICBtYXJnaW46IDEwMHB4IGF1dG87Cit9 CisKKyN0b29sYmFyIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGNsZWFyOiBs ZWZ0OworICBtYXJnaW46IDUwcHggYXV0bzsKK30KKworLmZtX2ZvbGRlciB7 CisgIGZvbnQtc2l6ZTogeHgtbGFyZ2UgIWltcG9ydGFudDsKKyAgY29sb3I6 IHJnYigyNTUsIDIwNCwgMCk7Cit9CisKKy5mbV9maWxlIHsKKyAgZm9udC1z aXplOiB4eC1sYXJnZSAhaW1wb3J0YW50OworfQorCisuZmlsZV9tYW5hZ2Vy IGJ1dHRvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNDMEMwQzA7Cit9CisK Ky5maWxlX21hbmFnZXIgaDEgeworICBmb250LXNpemU6IG1lZGl1bTsKK30K KworLyoqIElucHV0IGZpbGUgUmVwbGFjZW1lbnQgKi8KKy5maWxlLWlucHV0 LWNvbnRhaW5lciB7CisgIG1hcmdpbjowOworICBwb3NpdGlvbjpyZWxhdGl2 ZTsKKyAgdG9wOjBweDsKKyAgd2lkdGg6MjE1cHg7CisgIGhlaWdodDozMnB4 OworICBvdmVyZmxvdzogaGlkZGVuOworfQorCisvKiogRmlyZWZveCBoYWNr ICovCitALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgeworICAuZmlsZS1p bnB1dC1jb250YWluZXIgIHsKKyAgICB0b3A6MTFweDsKKyAgICB3aWR0aDoy NTVweDsKKyAgfQorfQorCisvKiogT3BlcmEgaGFjayAqLworeDotby1wcmVm b2N1cywgLmZpbGUtaW5wdXQtY29udGFpbmVyIHt0b3A6MTZweDt3aWR0aDox OThweDt9CisKKy5uZXdmaWxlIHsKKyAgcG9zaXRpb246IGFic29sdXRlOwor ICB0b3A6MDsKKyAgbGVmdDogM3B4OworICByaWdodDowOworICB3aWR0aDog MTUycHg7CisgIGhlaWdodDoyM3B4OworICBvcGFjaXR5OjA7ICBmaWx0ZXI6 IGFscGhhKG9wYWNpdHk9MCk7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgYm9y ZGVyOjFweCBzb2xpZCBibHVlOworfQorCisuYWx0LWZpbGVpbnB1dCB7Cisg IGRpc3BsYXk6IGlubGluZTsKKyAgd3JhcDogbm8td3JhcDsKK30KKworLmZp bGVwYXRoIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0Y0RjFFRDsKKyAgYm9y ZGVyOiAxcHggc29saWQgI2RjZGNkYzsKKyAgbWFyZ2luOiAwOworICBwYWRk aW5nOiAwLjFlbSAwLjNlbTsKKyAgbGluZS1oZWlnaHQ6IDEuN2VtOworICAt d2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDsKKyAgLXdlYmtp dC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7CisgIC1tb3otYm9y ZGVyLXJhZGl1cy10b3BsZWZ0OiA2cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1 cy1ib3R0b21sZWZ0OiA2cHg7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6 IDZweDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4OworfQor CitALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgeworICAuZmlsZXBhdGgg eworICAgIHBhZGRpbmc6MC4yZW0gMC4zZW07CisgIH0KK30KK2J1dHRvbi5i cm93c2UgeworICBtYXJnaW4tbGVmdDowOworICAtd2Via2l0LWJvcmRlci10 b3AtbGVmdC1yYWRpdXM6IDBweDsKKyAgLXdlYmtpdC1ib3JkZXItYm90dG9t LWxlZnQtcmFkaXVzOiAwcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1cy10b3Bs ZWZ0OiAwcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAw cHg7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBweDsKKyAgYm9yZGVy LWJvdHRvbS1sZWZ0LXJhZGl1czogMHB4OworICBtaW4taGVpZ2h0OiAxNnB4 OworICBtaW4td2lkdGg6IDQwcHg7Cit9CitidXR0b24uYnJvd3NlIHNwYW4g eworICBtYXJnaW46MDsKKyAgcGFkZGluZzowOworICBkaXNwbGF5OiBibG9j azsKKyAgY29sb3I6IzY2NjsKKyAgdGV4dC1zaGFkb3c6IG5vbmU7Cit9Cisv KiogSW5wdXQgZmlsZSBSZXBsYWNlbWVudCAtIGVuZCAqLworCisuZmlsZV9s aXN0aW5nICNjb250ZW50cy5ncmlkIHsKKyAgcGFkZGluZzogMjVweDsKKyAg dGV4dC1hbGlnbjogbGVmdDsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVu dHMuZ3JpZCBsaSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbGVm dDsKKyAgd2lkdGg6IDEwMHB4OworICBtaW4taGVpZ2h0OiA4MHB4OworICB0 ZXh0LWFsaWduOiBjZW50ZXI7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIG1h cmdpbi1ib3R0b206IDEwcHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog MnB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDsKKyAgYm9yZGVyLXJh ZGl1czogMnB4OworfQorCitkaXYuY2xpcCB7CisgIHdpZHRoOiAzMHB4Owor ICBoZWlnaHQ6IDMwcHg7CisgIG1hcmdpbjogMTBweCBhdXRvOworICBvdmVy ZmxvdzogaGlkZGVuOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5n cmlkIGxpIGltZyB7Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmdy aWQgcCB7CisgIGRpc3BsYXk6IGJsb2NrOworICB0ZXh0LWFsaWduOiBjZW50 ZXI7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7Cit9CisKKy5maWxlX2xpc3Rp bmcgI2NvbnRlbnRzLmxpc3QgeworICB3aWR0aDogMTAwJTsKK30KKworLmZp bGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aCwKKy5maWxlX2xpc3Rpbmcg I2NvbnRlbnRzLmxpc3QgdGQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworICBw YWRkaW5nOiA2cHg7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKKy5m aWxlX2xpc3RpbmcgI2NvbnRlbnRzLmxpc3QgdGhlYWQgeworICBiYWNrZ3Jv dW5kOiByZ2IoMjQ0LDI0MSwyMzcpOyAvKiBPbGQgYnJvd3NlcnMgKi8KKyAg YmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDI0 NCwyNDEsMjM3LDEpIDAlLCByZ2JhKDIxNCwyMTIsMjA5LDEpIDEwMCUpOyAv KiBGRjMuNisgKi8KKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChs aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSxy Z2JhKDI0NCwyNDEsMjM3LDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoMjE0 LDIxMiwyMDksMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCisgIGJhY2tn cm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyNDQs MjQxLDIzNywxKSAwJSxyZ2JhKDIxNCwyMTIsMjA5LDEpIDEwMCUpOyAvKiBD aHJvbWUxMCssU2FmYXJpNS4xKyAqLworICBiYWNrZ3JvdW5kOiAtby1saW5l YXItZ3JhZGllbnQodG9wLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEo MjE0LDIxMiwyMDksMSkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAqLworICBi YWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyNDQs MjQxLDIzNywxKSAwJSxyZ2JhKDIxNCwyMTIsMjA5LDEpIDEwMCUpOyAvKiBJ RTEwKyAqLworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90 dG9tLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDks MSkgMTAwJSk7IC8qIFczQyAqLworICBib3JkZXItYm90dG9tOiAxcHggc29s aWQgI2NjYzsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB3aWR0aDog MTAwJTsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aCB7 CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjdXJzb3I6IHBvaW50ZXI7Cit9 CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmxpc3QgdGgudGFibGVzb3J0 ZXItaGVhZGVyQXNjLAorLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0 aC50YWJsZXNvcnRlci1oZWFkZXJEZXNjIHsKKyAgYmFja2dyb3VuZDogcmdi KDIxNCwyMTIsMjA5KTsgLyogT2xkIGJyb3dzZXJzICovCisgIGJhY2tncm91 bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyMTQsMjEyLDIw OSwxKSAwJSwgcmdiYSgyNDQsMjQxLDIzNywxKSAxMDAlKTsgLyogRkYzLjYr ICovCisgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBs ZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUscmdiYSgyMTQs MjEyLDIwOSwxKSksIGNvbG9yLXN0b3AoMTAwJSxyZ2JhKDI0NCwyNDEsMjM3 LDEpKSk7IC8qIENocm9tZSxTYWZhcmk0KyAqLworICBiYWNrZ3JvdW5kOiAt d2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjE0LDIxMiwyMDks MSkgMCUscmdiYSgyNDQsMjQxLDIzNywxKSAxMDAlKTsgLyogQ2hyb21lMTAr LFNhZmFyaTUuMSsgKi8KKyAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRp ZW50KHRvcCwgcmdiYSgyMTQsMjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEs MjM3LDEpIDEwMCUpOyAvKiBPcGVyYSAxMS4xMCsgKi8KKyAgYmFja2dyb3Vu ZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjE0LDIxMiwyMDks MSkgMCUscmdiYSgyNDQsMjQxLDIzNywxKSAxMDAlKTsgLyogSUUxMCsgKi8K KyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdi YSgyMTQsMjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUp OyAvKiBXM0MgKi8KK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlz dCB0aC50YWJsZXNvcnRlci1oZWFkZXJBc2Mgc3BhbiB7CisgIGRpc3BsYXk6 IGJsb2NrOworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy1yaWdodDogMjBw eDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9idWxsZXRfYXJy b3dfdXAucG5nKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsK KyAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgY2VudGVyOworfQorCisu ZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRoLnRhYmxlc29ydGVyLWhl YWRlckRlc2Mgc3BhbiB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDog MTAwJTsKKyAgcGFkZGluZy1yaWdodDogMjBweDsKKyAgYmFja2dyb3VuZC1p bWFnZTogdXJsKC4uL2ltZy9idWxsZXRfYXJyb3dfZG93bi5wbmcpOworICBi YWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kLXBv c2l0aW9uOiByaWdodCBjZW50ZXI7Cit9CisKKy5maWxlX2xpc3RpbmcgI2Nv bnRlbnRzLmxpc3QgdGQgeworICBib3JkZXItYm90dG9tOiAxcHggZG90dGVk ICNjY2M7Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmxpc3QgdGQ6 Zmlyc3QtY2hpbGQgeworICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICBwYWRk aW5nLWxlZnQ6IDA7CisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLWxlZnQ6 IDIycHg7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGJh Y2tncm91bmQtcG9zaXRpb246IDNweCBjZW50ZXI7Cit9CisKKy5maWxlX2xp c3RpbmcgI2NvbnRlbnRzLmxpc3QgdGQudGJsX2ZvbGRlcjpmaXJzdC1jaGls ZDpiZWZvcmUgeworICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgY29sb3I6IHJn YigyNTUsIDIwNCwgMCk7Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRz Lmxpc3QgdGQudGJsX2ZpbGU6Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKKyAgbWFy Z2luLXJpZ2h0OiA1cHg7Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRz Lmxpc3QgdGJvZHkgdHI6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAj ZWVlOworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5maWxlX2xpc3Rpbmcg I2NvbnRlbnRzLmdyaWQgbGk6aG92ZXIgeworICBib3JkZXI6IDFweCBzb2xp ZCAjRTVFNUU1OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGN0Y3OworICBj dXJzb3I6IHBvaW50ZXI7CisgIG1heC1oZWlnaHQ6IDc4cHg7Cit9CisKKy5t ZXRhIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworI2FjdGl2aXR5IHsKKyAg bWFyZ2luOiAxMDBweCBhdXRvOworfQorLnVwbG9hZCBzcGFuLmxvYWRpbmcg eyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2FqYXgtbG9hZGVyLmdp Zik7IGNvbG9yOiM1NTU1NTU7Zm9udC1zaXplOjAuOWVtOyB9CisKK2J1dHRv bi5ncmlkIHNwYW4sCitidXR0b24ubGlzdCBzcGFuIHsKKyAgd2lkdGg6IDIw cHg7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGJhY2tn cm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7Cit9CisKK2J1dHRvbi5P TiB7CisgIGJhY2tncm91bmQ6bm9uZSByZXBlYXQgc2Nyb2xsIDAgMCAjRjlG OEY3OworICBib3JkZXI6IDFweCBpbnNldCAjY2NjOworfQorCitidXR0b24u bGlzdCB7CisgIG1hcmdpbi1sZWZ0OiAwOworfQorCisjcHJvZ3Jlc3NiYXIg eworICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCguLi9pbWcvYWpheC1s b2FkZXIuZ2lmKSBuby1yZXBlYXQgMCAwOworICBkaXNwbGF5OmlubGluZS10 YWJsZTsKKyAgd2lkdGg6MzBweDsKKyAgaGVpZ2h0OjMwcHg7Cit9CisKKy5q cWlib3ggeworICB6LWluZGV4OiAyMDAwICFpbXBvcnRhbnQ7Cit9CisKKy5m aWxlX2xpc3RpbmcgI2NvbnRlbnRzIGxpIHsKKyAgcG9zaXRpb246IHJlbGF0 aXZlOworfQorCisjZHJvcHpvbmUtY29udGFpbmVyIGgyIHsKKyAgZm9udC1z aXplOiAyMHB4OworICBtYXJnaW4tdG9wOiAwOworfQorCisucGdhZG1pbi1z dG9yYWdlLWJvZHkgeworICBtaW4td2lkdGg6IDc1MHB4ICFpbXBvcnRhbnQ7 CisgIG1pbi1oZWlnaHQ6IDM4MHB4ICFpbXBvcnRhbnQ7Cit9CisKKy5wZ2Fk bWluLXN0b3JhZ2UtYm9keSAuYWpzLWNvbnRlbnQgeworICB0b3A6IDBweCAh aW1wb3J0YW50OworICBsZWZ0OiAwICFpbXBvcnRhbnQ7CisgIHJpZ2h0OiAw ICFpbXBvcnRhbnQ7CisgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICB3 aWR0aDogMTAwJSAhaW1wb3J0YW50OworfQorCisuc3RvcmFnZV9kaWFsb2cg eworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisuc3Rv cmFnZV9jb250ZW50IHsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAw JTsKK30KKworLmZpbGVfbWFuYWdlciB7CisgIGhlaWdodDogMTAwJTsKK30K KworLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgt Z3JvdXAgeworICBwYWRkaW5nOiAwOworICBkaXNwbGF5OiBibG9jazsKKyAg Ym9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7CisgIGhlaWdodDogMzBweDsK KyAgYm9yZGVyLXJhZGl1czogNXB4OworICBmbG9hdDogbGVmdDsKKyAgbWFy Z2luLXJpZ2h0OiAxMHB4OworfQorCisuZmlsZV9tYW5hZ2VyICN1cGxvYWRl ciAuYnRuLWdyb3VwIC5idG5bZGlzYWJsZWRdIHsKKyAgY29sb3I6ICM4ODg7 CisgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7Cit9CisKKy5maWxlX21hbmFn ZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1idG4tZ3JvdXAgeworICBib3Jk ZXI6IDFweCBzb2xpZCBkYXJrZ3JleTsKKyAgYm9yZGVyLXJhZGl1czogNXB4 OworICB3aWR0aDogYXV0bzsKKyAgZmxvYXQ6IGxlZnQ7CisgIG92ZXJmbG93 OiBoaWRkZW47Cit9CisKKy5maWxlX21hbmFnZXIgLmJ0bi1ncm91cCB7Cisg IG1hcmdpbjogMnB4IDNweDsKK30KKworLmZpbGVfbWFuYWdlciAuZmlsZWlu Zm8geworICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwOXB4KTsKKyAgb3ZlcmZs b3c6IGhpZGRlbjsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB0b3A6IDM1 cHg7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLmZpbGVfbWFuYWdlciAu ZmlsZWluZm8gI2NvbnRlbnRzeworICBwYWRkaW5nOiA1cHg7CisgIHRleHQt YWxpZ246IGxlZnQ7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgaGVp Z2h0OiAxMDAlOworICBvdmVyZmxvdzogYXV0bzsKK30KKworLmZpbGVfbWFu YWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIHRoZWFkIHRyeworICBwb3NpdGlv bjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAw JTsKK30KKworLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIHRo ZWFkIHRyIHRoOm50aC1jaGlsZCgxKSwKKy5maWxlX21hbmFnZXIgLmZpbGVp bmZvICNjb250ZW50cyB0Ym9keSB0ciB0ZDpudGgtY2hpbGQoMSkgeworICB3 aWR0aDogMTAwJTsKKyAgbWluLXdpZHRoOiAxMDAlOworICBtYXgtd2lkdGg6 IDEwMCU7Cit9CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50 cyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMikgeworICB3aWR0aDogMTUycHg7 CisgIG1pbi13aWR0aDogMTUycHg7CisgIG1heC13aWR0aDogMTUycHg7Cit9 CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50cyB0Ym9keSB0 ciB0ZDpudGgtY2hpbGQoMikgeworICB3aWR0aDogMTUwcHg7CisgIG1pbi13 aWR0aDogMTUwcHg7CisgIG1heC13aWR0aDogMTUwcHg7Cit9CisKKy5maWxl X21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50cyB0aGVhZCB0ciB0aDpudGgt Y2hpbGQoMykgeworICB3aWR0aDogMTk3cHg7CisgIG1pbi13aWR0aDogMTk3 cHg7CisgIG1heC13aWR0aDogMTk3cHg7Cit9CisKKy5maWxlX21hbmFnZXIg LmZpbGVpbmZvICNjb250ZW50cyB0Ym9keSB0ciB0ZDpudGgtY2hpbGQoMykg eworICB3aWR0aDogMTgwcHg7CisgIG1pbi13aWR0aDogMTgwcHg7CisgIG1h eC13aWR0aDogMTgwcHg7Cit9CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZv ICNjb250ZW50cyB0Ym9keSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBvdmVy ZmxvdzogYXV0bzsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogY2FsYygx MDAlIC0gMzBweCk7Cit9CisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29u dGVudHMgdGJvZHkgdHJ7CisgIGRpc3BsYXk6IHRhYmxlOworICBtYXgtd2lk dGg6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisuZmlsZV9tYW5hZ2Vy IC51cGxvYWRfZmlsZSB7CisgIGRpc3BsYXk6IG5vbmU7CisgIHotaW5kZXg6 IDE7CisgIG1hcmdpbi1ib3R0b206IGF1dG87CisgIHRvcDogMDsKKyAgbWFy Z2luLXRvcDogMDsKKyAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1cHgpOworICB3 aWR0aDogMTAwJTsKKyAgYm9yZGVyOiBub25lOworICBwb3NpdGlvbjogYWJz b2x1dGU7CisgIGJvdHRvbTogMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogYmxh Y2s7CisgIHBhZGRpbmc6IDBweDsKKyAgcGFkZGluZy10b3A6IDIycHg7Cisg IHBhZGRpbmctbGVmdDogMTBweDsKK30KKworLmZpbGVfbWFuYWdlciAudXBs b2FkX2ZpbGUgI2Ryb3B6b25lLWNvbnRhaW5lciB7CisgIGhlaWdodDogMTAw JTsKK30KKworLmZpbGVfbWFuYWdlciAudXBsb2FkX2ZpbGUgI211bHRpcGxl LXVwbG9hZHMgeworICBiYWNrZ3JvdW5kOiBibGFjazsKKyAgY29sb3I6IHdo aXRlOworICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDsKKyAgaGVpZ2h0OiBj YWxjKDEwMCUgLSAyMHB4KTsKKyAgb3ZlcmZsb3c6IGF1dG87CisgIHdpZHRo OiAxMDAlOworfQorCisuZmlsZWluZm8gLnByb21wdC1pbmZvIHsKKyAgdGV4 dC1hbGlnbjogY2VudGVyOworICBjb2xvcjogI2ZmZjsKK30KKworLmZpbGVf bWFuYWdlciAjdXBsb2FkZXIgLmJ0bi1ncm91cCAuc2hvd19zZWxlY3RlZF9m aWxlIHsKKyAgZmxvYXQ6IGxlZnQ7CisgIHRleHQtYWxpZ246IGxlZnQ7Cisg IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIHBhZGRpbmc6IDRweCAwIDAg NXB4OworICBoZWlnaHQ6IDEwMCU7Cit9CisKKy5maWxlaW5mbyAuZmlsZV9s aXN0aW5nIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGhlaWdodDogY2FsYygx MDAlIC0gMzVweCk7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJv cmRlci1ib3R0b206IG5vbmU7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KKwor LmZpbGVpbmZvIC5hbGxvd2VkX2ZpbGVfdHlwZXMgeworICBkaXNwbGF5OiBi bG9jazsKKyAgaGVpZ2h0OiAyNnB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7 CisgIHJpZ2h0OiAwOworICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsK KyAgcGFkZGluZy10b3A6IDRweDsKKyAgYm90dG9tOiA0cHg7CisgIHdpZHRo OiAxMDAlOworICBiYWNrZ3JvdW5kOiAjZmZmOworfQorCisuYWxsb3dlZF9m aWxlX3R5cGVzIC5jcmVhdGVfaW5wdXQgeworICBwb3NpdGlvbjogYWJzb2x1 dGU7CisgIGxlZnQ6IDVweDsKK30KKworLmFsbG93ZWRfZmlsZV90eXBlcyAu Y3JlYXRlX2lucHV0IHNwYW4geworICBwYWRkaW5nLXJpZ2h0OiA1cHg7Cit9 CisKKy5hbGxvd2VkX2ZpbGVfdHlwZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0 eXBlPSJ0ZXh0Il0geworICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5h bGxvd2VkX2ZpbGVfdHlwZXMgLmNoYW5nZV9maWxlX3R5cGVzIHsKKyAgcG9z aXRpb246IGFic29sdXRlOworICB0b3A6IDRweDsKKyAgcmlnaHQ6IDA7Cit9 CisKKy5hbGxvd2VkX2ZpbGVfdHlwZXMgLmNoYW5nZV9maWxlX3R5cGVzIHNl bGVjdCB7CisgIHdpZHRoOiA3NXB4OworICBtYXJnaW4tbGVmdDogMTBweDsK KyAgZmxvYXQ6IHJpZ2h0OworICBoZWlnaHQ6IDIycHg7Cit9CisKKy5hbGxv d2VkX2ZpbGVfdHlwZXMgLmNoYW5nZV9maWxlX3R5cGVzIGxhYmVsIHsKKyAg ZmxvYXQ6IHJpZ2h0OworICBwYWRkaW5nLXRvcDogM3B4OworfQorCisudXBs b2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4geworICBwb3NpdGlvbjogcmVs YXRpdmU7CisgIGhlaWdodDogMTI3cHg7OworICB3aWR0aDogMTIwcHg7Cisg IGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWFyZ2luOiAwIDE1cHggMTVw eCAwICFpbXBvcnRhbnQ7CisgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwor ICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGJvcmRlci1yYWRpdXM6IDVweDsK KyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgbWFyZ2luOiAycHg7CisgIG9wYWNp dHk6IDE7Cit9CisKKy51cGxvYWRfZmlsZSAuZmlsZV91cGxvYWRfbWFpbiAu c2hvd19lcnJvciB7CisgIHBhZGRpbmc6IDEwcHggMCAwIDEwcHg7CisgIGNv bG9yOiAjMDAwOworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21h aW4gLnNob3dfZXJyb3IgcC5zaXplIHsKKyAgdGV4dC1hbGlnbjogY2VudGVy OworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gLnNob3df ZXJyb3IgcC5uYW1lIHsKKyAgZm9udC1zaXplOiAxM3B4OworICBvdmVyZmxv dzogaGlkZGVuOworICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKKyAgdGV4 dC1hbGlnbjogY2VudGVyOworfQorCisuZmlsZV91cGxvYWRfbWFpbiAuZHot cHJldmlldyB7CisgIG1hcmdpbjogMDsKK30KKworLmZpbGVfdXBsb2FkX21h aW4gLmR6LXByb2dyZXNzIHsKKyAgdG9wOiA4M3B4ICFpbXBvcnRhbnQ7Cisg IGJvcmRlcjogMXB4IHNvbGlkICM4YTZkM2I7CisgIGJvcmRlci1yYWRpdXM6 IDAgIWltcG9ydGFudDsKK30KKworLmZpbGVfdXBsb2FkX21haW4gLmR6LXBy b2dyZXNzIC5kei11cGxvYWQgeworICBiYWNrZ3JvdW5kOiAjZDllZGY3ICFp bXBvcnRhbnQ7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmZpbGVf dXBsb2FkX21haW4gLmR6LXByb2dyZXNzIC5kei11cGxvYWQuc3VjY2VzcyB7 CisgIGJhY2tncm91bmQ6IGdyZWVuICFpbXBvcnRhbnQ7Cit9CisKK2EuZHot cmVtb3ZlIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorCisu dXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gYS5kel9maWxlX3JlbW92 ZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICByaWdo dDogMDsKKyAgY29sb3I6ICNGRjAwMDA7CisgIGN1cnNvcjogcG9pbnRlcjsK KyAgYm9yZGVyLXJhZGl1czogNXB4OworICBmb250LXNpemU6IGxhcmdlOwor fQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gYS5kel9maWxl X3JlbW92ZTpob3ZlciB7CisgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwor fQorCisuZmlsZWluZm8gLmRlbGV0ZV9pdGVtLCAuZmlsZWluZm8gLnJlcGxh Y2VfZmlsZSB7CisgIGRpc3BsYXk6IG5vbmU7CisgIHBhZGRpbmc6IDdweCA1 cHg7CisgIG9wYWNpdHk6IDAuODsKKyAgY29sb3I6ICNmZmY7CisgIGJvcmRl cjogMXB4IHNvbGlkIGRhcmtncmV5OworICBiYWNrZ3JvdW5kOiAjMDAwOwor ICBib3gtc2hhZG93OiAxcHggMHB4IDNweCAxcHggcmVkOworfQorCisuZmls ZWluZm8gLmRlbGV0ZV9pdGVtIHNwYW4ucHVsbC1yaWdodCAuYnRuLAorLmZp bGVpbmZvIC5yZXBsYWNlX2ZpbGUgc3Bhbi5wdWxsLXJpZ2h0IC5idG4gewor ICBwYWRkaW5nOiAwcHggNXB4OworICBjb2xvcjogIzAwMDsKKyAgYmFja2dy b3VuZDogI2ZmZjsKKyAgZm9udC1zaXplOiAxMnB4OworfQorCisuZmlsZWlu Zm8gLmRlbGV0ZV9pdGVtIHNwYW4sCisuZmlsZWluZm8gLnJlcGxhY2VfZmls ZSBzcGFuIHsKKyAgbWFyZ2luLXJpZ2h0OiAxMHB4OworfQorCisudXBsb2Fk X2ZpbGUgLmR6X2Nyb3NzX2J0biB7CisgIGNvbG9yOiAjZmZmOworICBmb250 LXNpemU6IHgtbGFyZ2U7CisgIHJpZ2h0OiAtNHB4OworICBwb3NpdGlvbjog YWJzb2x1dGU7CisgIHRvcDogLTFweDsKKyAgYmFja2dyb3VuZDogdHJhbnNw YXJlbnQ7CisgIGJvcmRlcjogbm9uZTsKK30KZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFn ZXIvaW5kZXguaHRtbCBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2Vy L3RlbXBsYXRlcy9maWxlX21hbmFnZXIvaW5kZXguaHRtbApuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZGE4YTVkCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvdGVtcGxh dGVzL2ZpbGVfbWFuYWdlci9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTIgQEAK K++7vzxodG1sPgorPGhlYWQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0IiBzcmM9Int7IHVybF9mb3IoJ3N0YXRpYycsIGZpbGVuYW1lPSdq cy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuanMnKSB9fSI+PC9zY3JpcHQ+ CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Int7IHVy bF9mb3IoJ2ZpbGVfbWFuYWdlci5pbmRleCcpIH19dXRpbGl0eS5qcyI+PC9z Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9ImZpbGVfbWFu YWdlciI+CisgIDxmb3JtIGlkPSJ1cGxvYWRlciIgbWV0aG9kPSJwb3N0IiBj bGFzcz0nY29sLXhzLTEyJz4KKyAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAg ZmlsZW1hbmFnZXItcGF0aC1ncm91cCBjb2wtc20tNyBjb2wteHMtMTIiIHJv bGU9Imdyb3VwIj4KKyAgICAgIDxidXR0b24gbmFtZT0iaG9tZSIgdHlwZT0i YnV0dG9uIiB2YWx1ZT0iSG9tZSIgdGl0bGU9IkhvbWUiIGNsYXNzPSJmYSBm YS1ob21lIGJ0biBob21lIj48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAg ICA8YnV0dG9uIG5hbWU9ImxldmVsLXVwIiB0eXBlPSJidXR0b24iIHRpdGxl PSJCYWNrIiB2YWx1ZT0iTGV2ZWxVcCIgY2xhc3M9ImJ0biBmYSBmYS1sZXZl bC11cCBsZXZlbC11cCIgZGlzYWJsZWQ+PHNwYW4+PC9zcGFuPjwvYnV0dG9u PgorICAgICAgPGgxIHRpdGxlPScnPjwvaDE+CisgICAgPC9kaXY+CisgICAg PGRpdiBjbGFzcz0iYnRuLWdyb3VwIGZpbGVtYW5hZ2VyLWJ0bi1ncm91cCIg cm9sZT0iZ3JvdXAiPgorICAgICAgPGRpdiBjbGFzcz0idXBsb2FkcmVzcG9u c2UiPjwvZGl2PgorICAgICAgPGlucHV0IGNsYXNzPSJtb2RlIiBuYW1lPSJt b2RlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJhZGQiIC8+CisgICAgICA8aW5w dXQgY2xhc3M9ImN1cnJlbnRwYXRoIiBuYW1lPSJjdXJyZW50cGF0aCIgdHlw ZT0iaGlkZGVuIiAvPgorICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHRp dGxlPSJSZWZyZXNoIiBjbGFzcz0iYnRuIGZhIGZhLXJlZnJlc2ggcmVmcmVz aCI+PC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdGl0 bGU9IlVwbG9hZCBGaWxlIiB2YWx1ZT0iVXBsb2FkIiBjbGFzcz0iYnRuIGZh IGZhLXVwbG9hZCB1cGxvYWQiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAg ICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iRG93bmxvYWQgRmls ZSIgY2xhc3M9ImJ0biBmYSBmYS1kb3dubG9hZCBkb3dubG9hZCIgZGlzYWJs ZWQ+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBuYW1l PSJkZWxldGUiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkRlbGV0ZSBGaWxlL0Zv bGRlciIgY2xhc3M9ImJ0biBmYSBmYS10cmFzaCBkZWxldGUiIGRpc2FibGVk PjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICAgIDxidXR0b24gbmFtZT0i cmVuYW1lIiB0eXBlPSJidXR0b24iIHRpdGxlPSJSZW5hbWUgRmlsZS9Gb2xk ZXIiIGNsYXNzPSJidG4gZmEgZmEtcGVuY2lsLXNxdWFyZS1vIHJlbmFtZSI+ PHNwYW4+PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBuYW1lPSJu ZXdmb2xkZXIiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkNyZWF0ZSBuZXcgZm9s ZGVyIiB2YWx1ZT0iTmV3IEZvbGRlciIgY2xhc3M9ImJ0biBmYSBmYS1mb2xk ZXItb3BlbiBjcmVhdGUiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICAg IDxidXR0b24gY2xhc3M9Ik9OIGZhIGZhLXRoIGJ0biBncmlkIiB0eXBlPSJi dXR0b24iIHRpdGxlPSJWaWV3IGFzIGdyaWQiPjxzcGFuPjwvc3Bhbj48L2J1 dHRvbj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRu IGZhIGZhLWxpc3QgbGlzdCIgdGl0bGU9IlZpZXcgYXMgVGFibGUiPjxzcGFu Pjwvc3Bhbj48L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgPC9mb3JtPgorICA8 ZGl2IGNsYXNzPSJmaWxlaW5mbyI+CisgICAgPGRpdiBjbGFzcz0nZGVsZXRl X2l0ZW0nPgorICAgICAgPHNwYW4+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRv IGRlbGV0ZSB0aGlzIGl0ZW0gPzwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xh c3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0 dG9uJyBjbGFzcz0nYnRuIGJ0bl95ZXMnPllFUzwvYnV0dG9uPgorICAgICAg ICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuIGJ0bl9ubyc+ Tk88L2J1dHRvbj4KKyAgICAgICAgPC9zcGFuPgorICAgIDwvZGl2PgorICAg IDxkaXYgY2xhc3M9J3JlcGxhY2VfZmlsZSc+CisgICAgICA8c3Bhbj5BcmUg eW91IHN1cmUgeW91IHdhbnQgdG8gcmVwbGFjZSB0aGlzIGZpbGUgPzwvc3Bh bj4KKyAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAg ICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuIGJ0bl95ZXMn PllFUzwvYnV0dG9uPgorICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9u JyBjbGFzcz0nYnRuIGJ0bl9ubyc+Tk88L2J1dHRvbj4KKyAgICAgICAgPC9z cGFuPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZpbGVfbGlzdGlu ZyI+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0idXBsb2FkX2ZpbGUg ZHJvcHpvbmUiPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFsbG93 ZWRfZmlsZV90eXBlcyI+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+ Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2Zp bGVfbWFuYWdlci5qcyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2Vy L3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvZmlsZV9tYW5hZ2VyLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzE4MDkKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdl ci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlci5qcwpA QCAtMCwwICsxLDQ5MCBAQAorCisvL2RlZmluZSgKKy8vICBbJ2pxdWVyeScs ICdhbGVydGlmeScsICdwZ2FkbWluJywgJ3VuZGVyc2NvcmUnLCAnYmFja2Jv bmUnLCAnYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWlu LmJyb3dzZXIubm9kZSddLAorCitkZWZpbmUoWworICAgICAgJ2pxdWVyeScs ICd1bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ2FsZXJ0aWZ5 JywKKyAgICAgICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2JvbmUnLCAnYmFj a2dyaWQnLCAncGdhZG1pbi5icm93c2VyLm5vZGUnLAorICAgICAgJ2JhY2tn cmlkLnNlbGVjdC5hbGwnLCAnYmFja2dyaWQuZmlsdGVyJywgJ3BnYWRtaW4u YnJvd3Nlci5zZXJ2ZXIucHJpdmlsZWdlJywKKyAgICAgICdwZ2FkbWluLmJy b3dzZXIud2l6YXJkJywKKyAgICAgIF0sCisKKyAgLy8gVGhpcyBkZWZpbmVz IEdyYW50IFdpemFyZCBkaWFsb2cKKyAgZnVuY3Rpb24oJCwgXywgUywgYWxl cnRpZnksIHBnQnJvd3NlciwgQmFja2JvbmUsIEJhY2tncmlkLCBwZ05vZGUp IHsKKyAgLy9mdW5jdGlvbigkLCBhbGVydGlmeSwgcGdBZG1pbiwgXywgQmFj a2JvbmUsIEJhY2tmb3JtLCBwZ05vZGUpIHsKKyAgICBwZ0FkbWluID0gcGdB ZG1pbiB8fCB3aW5kb3cucGdBZG1pbiB8fCB7fTsKKworICAgIC8qCisgICAg ICogSG1tLi4uIHRoaXMgbW9kdWxlIGlzIGFscmVhZHkgYmVlbiBpbml0aWFs aXplZCwgd2UgY2FuIHJlZmVyIHRvIHRoZSBvbGQKKyAgICAgKiBvYmplY3Qg ZnJvbSBoZXJlLgorICAgICAqLworICAgIGlmIChwZ0FkbWluLkZpbGVNYW5h Z2VyKQorICAgICAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdlcjsKKwor ICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIgPSB7CisgICAgICBpbml0OiBmdW5j dGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAg ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0 cnVlOworCisgICAgICAgIC8vIERlY2xhcmUgdGhlIFN0b3JhZ2UgZGlhbG9n CisgICAgICAgIGFsZXJ0aWZ5LmRpYWxvZygnc3RvcmFnZU1hbmFnZXJEbGcn LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgY29udHJvbHMgPSBbXSwg Ly8gS2VlcCB0cmFja2luZyBvZiBhbGwgdGhlIGJhY2tmb3JtIGNvbnRyb2xz CisgICAgICAgICAgICAgIC8vIERpYWxvZyBjb250YWludGVyCisgICAgICAg ICAgICAgICRjb250YWluZXIgPSAkKCI8ZGl2IGNsYXNzPSdzdG9yYWdlX2Rp YWxvZyc+PC9kaXY+Iik7CisKKyAgICAgICAgICAvLyBzZW5kIGEgcmVxdWVz dCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgICB2YXIgZ2V0VHJh bnNJZCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHsKKyAgICAgICAgICAgIHJldHVy biAkLmFqYXgoeworICAgICAgICAgICAgICBkYXRhOiBjb25maWdzLAorICAg ICAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgICAgIGFzeW5j OiBmYWxzZSwKKyAgICAgICAgICAgICAgdXJsOiAiLi4vZmlsZV9tYW5hZ2Vy L2dldF90cmFuc19pZCIsCisgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNv biIsCisgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24v anNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgICAgICAgICB9KTsKKyAgICAg ICAgICB9OworCisgICAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHRy YW5zIGlkIGZyb20gc2Vzc2lvbgorICAgICAgICAgIHZhciByZW1vdmVUcmFu c0lkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gJC5hamF4 KHsKKyAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAg IGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgdXJsOiAiLi4vZmlsZV9t YW5hZ2VyL2RlbF90cmFuc19pZC8iK3RyYW5zX2lkLAorICAgICAgICAgICAg ICBkYXRhVHlwZTogImpzb24iLAorICAgICAgICAgICAgICBjb250ZW50VHlw ZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLAorICAgICAg ICAgICAgfSk7CisgICAgICAgICAgfTsKKworICAgICAgICAgIC8qCisgICAg ICAgICAgICogRnVuY3Rpb246IHJlbmRlclN0b3JhZ2VQYW5lbAorICAgICAg ICAgICAqCisgICAgICAgICAgICogUmVuZGVycyB0aGUgRmlsZU1hbmFnZXIg aW4gdGhlIGNvbnRlbnQgZGl2IGJhc2VkIG9uIHRoZSBnaXZlbgorICAgICAg ICAgICAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAg Ki8KKyAgICAgICAgICB2YXIgcmVuZGVyU3RvcmFnZVBhbmVsID0gZnVuY3Rp b24ocGFyYW1zKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICog Q2xlYXIgdGhlIGV4aXN0aW5nIGh0bWwgaW4gdGhlIHN0b3JhZ2UgY29udGVu dAorICAgICAgICAgICAgICovCisgICAgICAgICAgICB2YXIgY29udGVudCA9 ICRjb250YWluZXIuZmluZCgnLnN0b3JhZ2VfY29udGVudCcpOworICAgICAg ICAgICAgY29udGVudC5lbXB0eSgpOworCisgICAgICAgICAgICAkLmdldCgi e3sgdXJsX2ZvcignZmlsZV9tYW5hZ2VyLmluZGV4JykgfX0iLCBmdW5jdGlv bihkYXRhKSB7CisgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kKGRhdGEp OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRyYW5zSWQgPSBn ZXRUcmFuc0lkKHBhcmFtcyk7CisgICAgICAgICAgICBpZiAodHJhbnNJZC5y ZWFkeVN0YXRlID09IDQpCisgICAgICAgICAgICAgIHRfcmVzID0gSlNPTi5w YXJzZSh0cmFuc0lkLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB0cmFu c19pZCA9IHRfcmVzLmRhdGEuZmlsZVRyYW5zSWQ7CisKKyAgICAgICAgICB9 OworCisgICAgICAgICAgLy8gRGlhbG9nIHByb3BlcnR5CisgICAgICAgICAg cmV0dXJuIHsKKyAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHBhcmFtcykg eworICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCBwYXJhbXNbJ3Rp dGxlJ10pOworICAgICAgICAgICAgICB2YXIgdHJhbnNfaWQ7CisgICAgICAg ICAgICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGU7CisKKyAgICAgICAg ICAgICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTsKKyAgICAg ICAgICAgICAgJGNvbnRhaW5lci5maW5kKCcuc3RvcmFnZV9jb250ZW50Jyku cmVtb3ZlKCk7CisgICAgICAgICAgICAgICRjb250YWluZXIuYXBwZW5kKCI8 ZGl2IGNsYXNzPSdzdG9yYWdlX2NvbnRlbnQnPjwvZGl2PiIpOworICAgICAg ICAgICAgICByZW5kZXJTdG9yYWdlUGFuZWwocGFyYW1zKTsKKyAgICAgICAg ICAgICAgdGhpcy5zaG93KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAg ICAgc2V0dXA6ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHJldHVybiB7 CisgICAgICAgICAgICAgICAgYnV0dG9uczpbCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBfKCdTZWxlY3Qn KSB9fSIsIGtleTogMTMsIGNsYXNzTmFtZTogImJ0biBidG4tcHJpbWFyeSBm aWxlX21hbmFnZXJfb2sgZGlzYWJsZWQiCisgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0 ZXh0OiAie3sgXygnQ2FuY2VsJykgfX0iLCBjbGFzc05hbWU6ICJidG4gYnRu LWRhbmdlciIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBdLAorICAgICAgICAgICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAgfSwK KyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAgICAgICAgICAg ICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBjYWxsYmFjazogZnVuY3Rpb24oY2xvc2VFdmVudCkgeworICAgICAg ICAgICAgICBpZiAoY2xvc2VFdmVudC5idXR0b24udGV4dCA9PSAie3sgXygn U2VsZWN0JykgfX0iKSB7CisgICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93 c2VyLkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLXN0b3JhZ2U6ZmluaXNoX2J0 bjpzdG9yYWdlX2RpYWxvZycpOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIHJlbW92ZVRyYW5zSWQodHJhbnNfaWQpOworICAgICAgICAgICAg fSwKKyAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKKyAgICAgICAg ICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250 YWluZXIuZ2V0KDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBo b29rczogeworICAgICAgICAgICAgICBvbnNob3c6IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5KS5hZGRDbGFz cygncGdhZG1pbi1zdG9yYWdlLWJvZHknKTsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0pOworCisg ICAgICAgIC8vIERlY2xhcmUgdGhlIFNlbGVjdGlvbiBkaWFsb2cKKyAgICAg ICAgYWxlcnRpZnkuZGlhbG9nKCdmaWxlU2VsZWN0aW9uRGxnJywgZnVuY3Rp b24oKSB7CisgICAgICAgICAgdmFyIGNvbnRyb2xzID0gW10sIC8vIEtlZXAg dHJhY2tpbmcgb2YgYWxsIHRoZSBiYWNrZm9ybSBjb250cm9scworICAgICAg ICAgICAgICAvLyBEaWFsb2cgY29udGFpbnRlcgorICAgICAgICAgICAgICAk Y29udGFpbmVyID0gJCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9kaWFsb2cnPjwv ZGl2PiIpOworCisgICAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0 IHRyYW5zYWN0aW9uIGlkCisgICAgICAgICAgdmFyIGdldFRyYW5zSWQgPSBm dW5jdGlvbihjb25maWdzKSB7CisgICAgICAgICAgICByZXR1cm4gJC5hamF4 KHsKKyAgICAgICAgICAgICAgZGF0YTogY29uZmlncywKKyAgICAgICAgICAg ICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgICAgICBhc3luYzogZmFsc2Us CisgICAgICAgICAgICAgIHVybDogIi4uL2ZpbGVfbWFuYWdlci9nZXRfdHJh bnNfaWQiLAorICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAorICAg ICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNo YXJzZXQ9dXRmLTgiLAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfTsK KworICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB0cmFucyBpZCBm cm9tIHNlc3Npb24KKyAgICAgICAgICB2YXIgcmVtb3ZlVHJhbnNJZCA9IGZ1 bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuICQuYWpheCh7CisgICAg ICAgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICAgICAgICBhc3luYzog ZmFsc2UsCisgICAgICAgICAgICAgIHVybDogIi4uL2ZpbGVfbWFuYWdlci9k ZWxfdHJhbnNfaWQvIit0cmFuc19pZCwKKyAgICAgICAgICAgICAgZGF0YVR5 cGU6ICJqc29uIiwKKyAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBs aWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwKKyAgICAgICAgICAgIH0p OworICAgICAgICAgIH07CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBG dW5jdGlvbjogcmVuZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAg ICAgICAgICAgKiBSZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29u dGVudCBkaXYgYmFzZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAg ICAgIHZhciByZW5kZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihjb25maWdz KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2xlYXIgdGhl IGV4aXN0aW5nIGh0bWwgaW4gdGhlIHN0b3JhZ2UgY29udGVudAorICAgICAg ICAgICAgICovCisgICAgICAgICAgICB2YXIgY29udGVudCA9ICRjb250YWlu ZXIuZmluZCgnLnN0b3JhZ2VfY29udGVudCcpOworICAgICAgICAgICAgY29u dGVudC5lbXB0eSgpOworCisgICAgICAgICAgICAkLmdldCgie3sgdXJsX2Zv cignZmlsZV9tYW5hZ2VyLmluZGV4JykgfX0iLCBmdW5jdGlvbihkYXRhKSB7 CisgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kKGRhdGEpOworICAgICAg ICAgICAgfSk7CisKKyAgICAgICAgICAgIHRyYW5zSWQgPSBnZXRUcmFuc0lk KGNvbmZpZ3MpOworICAgICAgICAgICAgaWYgKHRyYW5zSWQucmVhZHlTdGF0 ZSA9PSA0KQorICAgICAgICAgICAgICB0X3JlcyA9IEpTT04ucGFyc2UodHJh bnNJZC5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgdHJhbnNfaWQgPSB0 X3Jlcy5kYXRhLmZpbGVUcmFuc0lkOworICAgICAgICAgIH07CisKKyAgICAg ICAgICAvLyBEaWFsb2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4gewor ICAgICAgICAgICAgbWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAg ICAgICAgIHRoaXMuc2V0KCd0aXRsZScsIHBhcmFtc1sndGl0bGUnXSk7Cisg ICAgICAgICAgICAgIHZhciB0cmFuc19pZDsKKyAgICAgICAgICAgICAgdGhp cy50aXRsZSA9IHBhcmFtcy50aXRsZTsKKworICAgICAgICAgICAgICBwYXJh bXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOworICAgICAgICAgICAgICAk Y29udGFpbmVyLmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1vdmUoKTsK KyAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoIjxkaXYgY2xhc3M9 J3N0b3JhZ2VfY29udGVudCc+PC9kaXY+Iik7CisgICAgICAgICAgICAgIHJl bmRlclN0b3JhZ2VQYW5lbChwYXJhbXMpOworICAgICAgICAgICAgICB0aGlz LnNob3coKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR1cDpm dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg ICAgICAgICBidXR0b25zOlsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ1NlbGVjdCcpIH19Iiwga2V5 OiAxMywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWZpbGUg ZmlsZV9tYW5hZ2VyX29rIGRpc2FibGVkIgorICAgICAgICAgICAgICAgICAg fSwKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg dGV4dDogInt7IF8oJ0NhbmNlbCcpIH19Iiwga2V5OiAyNywgY2xhc3NOYW1l OiAiYnRuIGJ0bi1kYW5nZXIgZmEgZmEtdGltZXMiCisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBm b2N1czogeyBlbGVtZW50OiAwIH0sCisgICAgICAgICAgICAgICAgb3B0aW9u czogeworICAgICAgICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFs c2UsCisgICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsCisg ICAgICAgICAgICAgICAgICBjbG9zYWJsZTogZmFsc2UsCisgICAgICAgICAg ICAgICAgICBtb3ZhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNh bGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2ZW50KSB7CisgICAgICAgICAgICAg IGlmIChjbG9zZUV2ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdTZWxlY3Qn KSB9fSIpIHsKKyAgICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIuRXZl bnRzLnRyaWdnZXIoJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRuOnNlbGVj dF9maWxlJyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmVt b3ZlVHJhbnNJZCh0cmFuc19pZCk7CisgICAgICAgICAgICB9LAorICAgICAg ICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB0aGlz LmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRhaW5lci5nZXQo MCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGhvb2tzOiB7Cisg ICAgICAgICAgICAgIG9uc2hvdzogZnVuY3Rpb24oKSB7CisgICAgICAgICAg ICAgICAgJCh0aGlzLmVsZW1lbnRzLmJvZHkpLmFkZENsYXNzKCdwZ2FkbWlu LXN0b3JhZ2UtYm9keScpOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8g RGVjbGFyZSB0aGUgRm9sZGVyIFNlbGVjdGlvbiBkaWFsb2cKKyAgICAgICAg YWxlcnRpZnkuZGlhbG9nKCdmb2xkZXJTZWxlY3Rpb25EbGcnLCBmdW5jdGlv bigpIHsKKyAgICAgICAgICB2YXIgY29udHJvbHMgPSBbXSwgLy8gS2VlcCB0 cmFja2luZyBvZiBhbGwgdGhlIGJhY2tmb3JtIGNvbnRyb2xzCisgICAgICAg ICAgICAgIC8vIERpYWxvZyBjb250YWludGVyCisgICAgICAgICAgICAgICRj b250YWluZXIgPSAkKCI8ZGl2IGNsYXNzPSdzdG9yYWdlX2RpYWxvZyc+PC9k aXY+Iik7CisKKyAgICAgICAgICAvLyBzZW5kIGEgcmVxdWVzdCB0byBnZXQg dHJhbnNhY3Rpb24gaWQKKyAgICAgICAgICB2YXIgZ2V0VHJhbnNJZCA9IGZ1 bmN0aW9uKGNvbmZpZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiAkLmFqYXgo eworICAgICAgICAgICAgICBkYXRhOiBjb25maWdzLAorICAgICAgICAgICAg ICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwK KyAgICAgICAgICAgICAgdXJsOiAiLi4vZmlsZV9tYW5hZ2VyL2dldF90cmFu c19pZCIsCisgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCisgICAg ICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hh cnNldD11dGYtOCIsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9Owor CisgICAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHRyYW5zIGlkIGZy b20gc2Vzc2lvbgorICAgICAgICAgIHZhciByZW1vdmVUcmFuc0lkID0gZnVu Y3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gJC5hamF4KHsKKyAgICAg ICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgIGFzeW5jOiBm YWxzZSwKKyAgICAgICAgICAgICAgdXJsOiAiLi4vZmlsZV9tYW5hZ2VyL2Rl bF90cmFuc19pZC8iK3RyYW5zX2lkLAorICAgICAgICAgICAgICBkYXRhVHlw ZTogImpzb24iLAorICAgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxp Y2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLAorICAgICAgICAgICAgfSk7 CisgICAgICAgICAgfTsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIEZ1 bmN0aW9uOiByZW5kZXJTdG9yYWdlUGFuZWwKKyAgICAgICAgICAgKgorICAg ICAgICAgICAqIFJlbmRlcnMgdGhlIEZpbGVNYW5hZ2VyIGluIHRoZSBjb250 ZW50IGRpdiBiYXNlZCBvbiB0aGUgZ2l2ZW4KKyAgICAgICAgICAgKiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICovCisgICAgICAg ICAgdmFyIHJlbmRlclN0b3JhZ2VQYW5lbCA9IGZ1bmN0aW9uKHBhcmFtcykg eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENsZWFyIHRoZSBl eGlzdGluZyBodG1sIGluIHRoZSBzdG9yYWdlIGNvbnRlbnQKKyAgICAgICAg ICAgICAqLworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAkY29udGFpbmVy LmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKTsKKyAgICAgICAgICAgIGNvbnRl bnQuZW1wdHkoKTsKKworICAgICAgICAgICAgJC5nZXQoInt7IHVybF9mb3Io J2ZpbGVfbWFuYWdlci5pbmRleCcpIH19IiwgZnVuY3Rpb24oZGF0YSkgewor ICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZChkYXRhKTsKKyAgICAgICAg ICAgIH0pOworCisgICAgICAgICAgICB0cmFuc0lkID0gZ2V0VHJhbnNJZChw YXJhbXMpOworICAgICAgICAgICAgaWYgKHRyYW5zSWQucmVhZHlTdGF0ZSA9 PSA0KQorICAgICAgICAgICAgICB0X3JlcyA9IEpTT04ucGFyc2UodHJhbnNJ ZC5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgdHJhbnNfaWQgPSB0X3Jl cy5kYXRhLmZpbGVUcmFuc0lkOworCisgICAgICAgICAgfTsKKworICAgICAg ICAgIC8vIERpYWxvZyBwcm9wZXJ0eQorICAgICAgICAgIHJldHVybiB7Cisg ICAgICAgICAgICBtYWluOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAg ICAgICAgdGhpcy5zZXQoJ3RpdGxlJywgcGFyYW1zWyd0aXRsZSddKTsKKyAg ICAgICAgICAgICAgdmFyIHRyYW5zX2lkOworICAgICAgICAgICAgICBwYXJh bXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOworICAgICAgICAgICAgICAk Y29udGFpbmVyLmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1vdmUoKTsK KyAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoIjxkaXYgY2xhc3M9 J3N0b3JhZ2VfY29udGVudCc+PC9kaXY+Iik7CisgICAgICAgICAgICAgIHJl bmRlclN0b3JhZ2VQYW5lbChwYXJhbXMpOworICAgICAgICAgICAgICB0aGlz LnNob3coKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR1cDpm dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg ICAgICAgICBidXR0b25zOlsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ1NlbGVjdCcpIH19Iiwga2V5 OiAxMywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWZpbGUg ZmlsZV9tYW5hZ2VyX29rIGRpc2FibGVkIgorICAgICAgICAgICAgICAgICAg fSwKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg dGV4dDogInt7IF8oJ0NhbmNlbCcpIH19Iiwga2V5OiAyNywgY2xhc3NOYW1l OiAiYnRuIGJ0bi1kYW5nZXIgZmEgZmEtdGltZXMiCisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBm b2N1czogeyBlbGVtZW50OiAwIH0sCisgICAgICAgICAgICAgICAgb3B0aW9u czogeworICAgICAgICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFs c2UsCisgICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsCisg ICAgICAgICAgICAgICAgICBjbG9zYWJsZTogZmFsc2UsCisgICAgICAgICAg ICAgICAgICBtb3ZhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNh bGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2ZW50KSB7CisgICAgICAgICAgICAg IGlmIChjbG9zZUV2ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdTZWxlY3Qn KSB9fSIpIHsKKyAgICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIuRXZl bnRzLnRyaWdnZXIoJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRuOnNlbGVj dF9mb2xkZXInKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBy ZW1vdmVUcmFuc0lkKHRyYW5zX2lkKTsKKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICBidWlsZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHRo aXMuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdl dCgwKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaG9va3M6IHsK KyAgICAgICAgICAgICAgb25zaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAg ICAgICAgICAkKHRoaXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRt aW4tc3RvcmFnZS1ib2R5Jyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9KTsKKworICAgICAgICAv LyBEZWNsYXJlIHRoZSBDcmVhdGUgbW9kZSBkaWFsb2cKKyAgICAgICAgYWxl cnRpZnkuZGlhbG9nKCdjcmVhdGVNb2RlRGxnJywgZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgdmFyIGNvbnRyb2xzID0gW10sIC8vIEtlZXAgdHJhY2tpbmcg b2YgYWxsIHRoZSBiYWNrZm9ybSBjb250cm9scworICAgICAgICAgICAgICAv LyBEaWFsb2cgY29udGFpbnRlcgorICAgICAgICAgICAgICAkY29udGFpbmVy ID0gJCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9kaWFsb2cnPjwvZGl2PiIpOwor CisgICAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0IHRyYW5zYWN0 aW9uIGlkCisgICAgICAgICAgdmFyIGdldFRyYW5zSWQgPSBmdW5jdGlvbihj b25maWdzKSB7CisgICAgICAgICAgICByZXR1cm4gJC5hamF4KHsKKyAgICAg ICAgICAgICAgZGF0YTogY29uZmlncywKKyAgICAgICAgICAgICAgdHlwZTog IlBPU1QiLAorICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAg ICAgICAgIHVybDogIi4uL2ZpbGVfbWFuYWdlci9nZXRfdHJhbnNfaWQiLAor ICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAorICAgICAgICAgICAg ICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRm LTgiLAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfTsKKworICAgICAg ICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB0cmFucyBpZCBmcm9tIHNlc3Np b24KKyAgICAgICAgICB2YXIgcmVtb3ZlVHJhbnNJZCA9IGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgcmV0dXJuICQuYWpheCh7CisgICAgICAgICAgICAg IHR5cGU6ICJHRVQiLAorICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisg ICAgICAgICAgICAgIHVybDogIi4uL2ZpbGVfbWFuYWdlci9kZWxfdHJhbnNf aWQvIit0cmFuc19pZCwKKyAgICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29u IiwKKyAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9q c29uOyBjaGFyc2V0PXV0Zi04IiwKKyAgICAgICAgICAgIH0pOworICAgICAg ICAgIH07CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBGdW5jdGlvbjog cmVuZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAgICAgICAgICAg KiBSZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29udGVudCBkaXYg YmFzZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAgICAgIHZhciBy ZW5kZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUgZXhpc3Rpbmcg aHRtbCBpbiB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcu c3RvcmFnZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250ZW50LmVtcHR5 KCk7CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAg ICAgICAgY29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAgICAgICB9KTsK KworICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQocGFyYW1zKTsK KyAgICAgICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUgPT0gNCkKKyAg ICAgICAgICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5zSWQucmVzcG9u c2VUZXh0KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9yZXMuZGF0YS5m aWxlVHJhbnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAgICAgICAvLyBE aWFsb2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAg ICAgbWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgICAgICAgIHRo aXMuc2V0KCd0aXRsZScsIHBhcmFtc1sndGl0bGUnXSk7CisgICAgICAgICAg ICAgIHZhciB0cmFuc19pZDsKKyAgICAgICAgICAgICAgcGFyYW1zID0gSlNP Ti5zdHJpbmdpZnkocGFyYW1zKTsKKyAgICAgICAgICAgICAgJGNvbnRhaW5l ci5maW5kKCcuc3RvcmFnZV9jb250ZW50JykucmVtb3ZlKCk7CisgICAgICAg ICAgICAgICRjb250YWluZXIuYXBwZW5kKCI8ZGl2IGNsYXNzPSdzdG9yYWdl X2NvbnRlbnQnPjwvZGl2PiIpOworICAgICAgICAgICAgICByZW5kZXJTdG9y YWdlUGFuZWwocGFyYW1zKTsKKyAgICAgICAgICAgICAgdGhpcy5zaG93KCk7 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0dXA6ZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg YnV0dG9uczpbCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIHRleHQ6ICJ7eyBfKCdDcmVhdGUnKSB9fSIsIGtleTogMTMsIGNs YXNzTmFtZTogImJ0biBidG4tcHJpbWFyeSBmYSBmYS1maWxlIGZpbGVfbWFu YWdlcl9jcmVhdGUgZmlsZV9tYW5hZ2VyX29rIGRpc2FibGVkIgorICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgdGV4dDogInt7IF8oJ0NhbmNlbCcpIH19Iiwga2V5OiAy NywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1kYW5nZXIgZmEgZmEtdGltZXMgZmls ZV9tYW5hZ2VyX2NyZWF0ZV9jYW5jZWwiCisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBmb2N1czog eyBlbGVtZW50OiAwIH0sCisgICAgICAgICAgICAgICAgb3B0aW9uczogewor ICAgICAgICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFsc2UsCisg ICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsCisgICAgICAg ICAgICAgICAgICBjbG9zYWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAg ICBtb3ZhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlcGxhY2Vf ZmlsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgJCgnLnJlcGxh Y2VfZmlsZScpLnNob3coKTsKKyAgICAgICAgICAgICAgICAkKCcucmVwbGFj ZV9maWxlIC5idG5feWVzJykuY2xpY2soZnVuY3Rpb24oc2VsZikgeworICAg ICAgICAgICAgICAgICAgJCgnLnJlcGxhY2VfZmlsZScpLmhpZGUoKTsKKyAg ICAgICAgICAgICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dl cigncGdhZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46Y3JlYXRlX2ZpbGUnKTsK KyAgICAgICAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfY3JlYXRlX2Nh bmNlbCcpLnRyaWdnZXIoJ2NsaWNrJyk7CisgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgJCgnLnJlcGxhY2VfZmlsZSAuYnRuX25vJyku Y2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAkKCcucmVw bGFjZV9maWxlJykuaGlkZSgpOworICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihj bG9zZUV2ZW50KSB7CisgICAgICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1 dHRvbi50ZXh0ID09ICJ7eyBfKCdDcmVhdGUnKSB9fSIpeworICAgICAgICAg ICAgICAgIHZhciBzZWxlY3RfZWxlX2xlbmd0aCA9IDA7CisgICAgICAgICAg ICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlk Jyl7CisgICAgICAgICAgICAgICAgICBzZWxlY3RfZWxlX2xlbmd0aCA9ICQo Jy5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmdyaWQgbGkuc2VsZWN0ZWQnKS5s ZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICAgICAgc2VsZWN0X2VsZV9sZW5ndGggPSAk KCcuZmlsZWluZm8nKS5maW5kKCd0YWJsZSNjb250ZW50cyB0Ym9keSB0ci5z ZWxlY3RlZCcpLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgaWYoc2VsZWN0X2VsZV9sZW5ndGggPiAwKSB7CisgICAgICAg ICAgICAgICAgICB0aGlzLnJlcGxhY2VfZmlsZSgpOworICAgICAgICAgICAg ICAgICAgY2xvc2VFdmVudC5jYW5jZWwgPSB0cnVlOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdhZG1pbi1z dG9yYWdlOmZpbmlzaF9idG46Y3JlYXRlX2ZpbGUnKTsKKyAgICAgICAgICAg ICAgICAgIHJlbW92ZVRyYW5zSWQodHJhbnNfaWQpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoY2xv c2VFdmVudC5idXR0b24udGV4dCA9PSAie3sgXygnQ2FuY2VsJykgfX0iKXsK KyAgICAgICAgICAgICAgICByZW1vdmVUcmFuc0lkKHRyYW5zX2lkKTsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGJ1 aWxkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdGhpcy5lbGVtZW50 cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBob29rczogeworICAgICAgICAg ICAgICBvbnNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQo dGhpcy5lbGVtZW50cy5ib2R5KS5hZGRDbGFzcygncGdhZG1pbi1zdG9yYWdl LWJvZHknKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgfSwKKyAgICAgIHNob3df c3RvcmFnZV9kbGc6IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICBhbGVy dGlmeS5zdG9yYWdlTWFuYWdlckRsZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUn LCAnODAlJyk7CisgICAgICB9LAorICAgICAgc2hvd19maWxlX3NlbGVjdGlv bjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5LmZpbGVT ZWxlY3Rpb25EbGcocGFyYW1zKS5yZXNpemVUbygnNjAlJywgJzgwJScpOwor ICAgICAgfSwKKyAgICAgIHNob3dfZm9sZGVyX3NlbGVjdGlvbjogZnVuY3Rp b24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5LmZvbGRlclNlbGVjdGlv bkRsZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUnLCAnODAlJyk7CisgICAgICB9 LAorICAgICAgc2hvd19jcmVhdGVfZGxnOiBmdW5jdGlvbihwYXJhbXMpIHsK KyAgICAgICAgYWxlcnRpZnkuY3JlYXRlTW9kZURsZyhwYXJhbXMpLnJlc2l6 ZVRvKCc2MCUnLCAnODAlJyk7CisgICAgICB9LAorICAgICAgLy8gY2FsbCBk aWFsb2dzIHN1YmplY3QgdG8gZGlhbG9nX3R5cGUgcGFyYW0KKyAgICAgIHNo b3dfZGlhbG9nOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAgaWYocGFy YW1zLmRpYWxvZ190eXBlID09ICdzZWxlY3RfZmlsZScpIHsKKyAgICAgICAg ICBwYXJhbXNbJ3RpdGxlJ10gPSAnU2VsZWN0IEZpbGUnOworICAgICAgICAg IHRoaXMuc2hvd19maWxlX3NlbGVjdGlvbihwYXJhbXMpOworICAgICAgICB9 CisgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5kaWFsb2dfdHlwZSA9PSAnc2Vs ZWN0X2ZvbGRlcicpIHsKKyAgICAgICAgICBwYXJhbXNbJ3RpdGxlJ10gPSAn U2VsZWN0IEZvbGRlcic7CisgICAgICAgICAgdGhpcy5zaG93X2ZvbGRlcl9z ZWxlY3Rpb24ocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm IChwYXJhbXMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJykgeworICAg ICAgICAgIHBhcmFtc1sndGl0bGUnXSA9ICdDcmVhdGUgRmlsZSc7CisgICAg ICAgICAgdGhpcy5zaG93X2NyZWF0ZV9kbGcocGFyYW1zKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBwYXJhbXNbJ3RpdGxlJ10g PSAnU3RvcmFnZSBNYW5hZ2VyJzsKKyAgICAgICAgICB0aGlzLnNob3dfc3Rv cmFnZV9kbGcocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07 CisKKyAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdlcjsKKyAgfSk7CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1w bGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNv biBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9m aWxlX21hbmFnZXIvanMvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjczNzUKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90 ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcu anNvbgpAQCAtMCwwICsxLDIzIEBACit7CisgICAgIm9wdGlvbnMiOiB7Cisg ICAgICAgICJjdWx0dXJlIjogImVuIiwKKyAgICAgICAgImxhbmciOiAicHki LAorICAgICAgICAiZGVmYXVsdFZpZXdNb2RlIjogImdyaWQiLAorICAgICAg ICAiYXV0b2xvYWQiOiB0cnVlLAorICAgICAgICAic2hvd0Z1bGxQYXRoIjog ZmFsc2UsCisgICAgICAgICJkaWFsb2dfdHlwZSI6ICJ7e2RhdGEuZGlhbG9n X3R5cGV9fSIsCisgICAgICAgICJmaWxlUm9vdCI6ICJ7e2RhdGEuZmlsZXJv b3R9fSIsCisgICAgICAgICJjYXBhYmlsaXRpZXMiOiBbeyUgZm9yIGkgaW4g ZGF0YS5jYXBhYmlsaXRpZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0s IHslIGVuZGlmICV9Int7aX19InslIGVuZGZvciAlfV0sCisgICAgICAgICJh bGxvd2VkX2ZpbGVfdHlwZXMiOiBbeyUgZm9yIGkgaW4gZGF0YS5zdXBwb3J0 ZWRfdHlwZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHslIGVuZGlm ICV9Int7aX19InslIGVuZGZvciAlfV0KKyAgICB9LAorICAgICJzZWN1cml0 eSI6IHsKKyAgICAgICAgInVwbG9hZFBvbGljeSI6ICJ7eyBkYXRhLnNlY3Vy aXR5LnVwbG9hZFBvbGljeSB9fSIsCisgICAgICAgICJ1cGxvYWRSZXN0cmlj dGlvbnMiOiBbeyUgZm9yIGkgaW4gZGF0YS5zZWN1cml0eS51cGxvYWRSZXN0 cmljdGlvbnMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHslIGVuZGlm ICV9Int7aX19InslIGVuZGZvciAlfV0KKyAgICB9LAorICAgICJ1cGxvYWQi OiB7CisgICAgICAgICJtdWx0aXBsZSI6ICJ7eyBkYXRhLnVwbG9hZC5tdWx0 aXBsZSB9fSIsCisgICAgICAgICJudW1iZXIiOiAyMCwKKyAgICAgICAgImZp bGVTaXplTGltaXQiOiAie3sgZGF0YS51cGxvYWQuZmlsZVNpemVMaW1pdCB9 fSIsCisgICAgICAgICJpbWFnZXNPbmx5IjogZmFsc2UKKyAgICB9Cit9CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1w bGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2xhbmd1YWdlcy9lbi5qcyBiL3dlYi9w Z2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFn ZXIvanMvbGFuZ3VhZ2VzL2VuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmI3ZWQ4OTgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5h Z2VyL2pzL2xhbmd1YWdlcy9lbi5qcwpAQCAtMCwwICsxLDk2IEBACit7Cisg ICAgIkFMTE9XRURfRklMRV9UWVBFIjogIk9ubHkgZm9sbG93aW5nIGZpbGVz IGFyZSBhbGxvd2VkIDogIiwKKyAgICAiQVVUSE9SSVpBVElPTl9SRVFVSVJF RCI6ICJZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHVzZSBmaWxlbWFuYWdl ci4iLAorICAgICJESVJFQ1RPUllfQUxSRUFEWV9FWElTVFMiOiAiVGhlIGRp cmVjdG9yeSAnJXMnIGFscmVhZHkgZXhpc3RzLiIsCisgICAgIkRJUkVDVE9S WV9OT1RfRVhJU1QiOiAiVGhlIGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlz dC4iLAorICAgICJESVNBTExPV0VEX0ZJTEVfVFlQRSI6ICJGb2xsb3dpbmcg ZmlsZXMgYXJlIG5vdCBhbGxvd2VkIDogIiwKKyAgICAiRVJST1JfQ1JFQVRJ TkdfWklQIjogIkVycm9yIGNyZWF0aW5nIFppcCBhcmNoaXZlIiwKKyAgICAi RVJST1JfT1BFTklOR19GSUxFIjogIkVycm9yIG9wZW5pbmcgZmlsZS4iLAor ICAgICJFUlJPUl9SRU5BTUlOR19ESVJFQ1RPUlkiOiAiRXJyb3Igd2hpbGUg cmVuYW1pbmcgdGhlIGRpcmVjdG9yeSAlcyB0byAlcy4iLAorICAgICJFUlJP Ul9SRU5BTUlOR19GSUxFIjogIkVycm9yIHdoaWxlIHJlbmFtaW5nIHRoZSBm aWxlICVzIHRvICVzLiIsCisgICAgIkVSUk9SX1JFUExBQ0lOR19GSUxFIjog IlBsZWFzZSwgcHJvdmlkZSBhIGZpbGUgaGF2aW5nIHRoZSBmb2xsb3dpbmcg ZXh0ZW5zaW9uIDoiLAorICAgICJFUlJPUl9TQVZJTkdfRklMRSI6ICJFcnJv ciBzYXZpbmcgZmlsZS4iLAorICAgICJFUlJPUl9VUExPQURJTkdfRklMRSI6 ICJFcnJvciB1cGxvYWRpbmcgZmlsZS4iLAorICAgICJFUlJPUl9XUklUSU5H X1BFUk0iOiAiWW91IGRvbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgb24g dGhhdCBmaWxlLiIsCisgICAgIkZJTEVfQUxSRUFEWV9FWElTVFMiOiAiVGhl IGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLAorICAgICJGSUxFX0RPRVNf Tk9UX0VYSVNUIjogIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0LiIsCisg ICAgIklOVkFMSURfQUNUSU9OIjogIkludmFsaWQgYWN0aW9uLiIsCisgICAg IklOVkFMSURfRElSRUNUT1JZX09SX0ZJTEUiOiAiSW52YWxpZCBkaXJlY3Rv cnkgb3IgZmlsZS4iLAorICAgICJJTlZBTElEX0ZJTEVfVFlQRSI6ICJGaWxl IHR5cGUgaXMgbm90IGFsbG93ZWQuIiwKKyAgICAiSU5WQUxJRF9GSUxFX1VQ TE9BRCI6ICJJbnZhbGlkIGZpbGUgdXBsb2FkLiIsCisgICAgIklOVkFMSURf VkFSIjogIkludmFsaWQgdmFyICVzLiIsCisgICAgIkxBTkdVQUdFX0ZJTEVf Tk9UX0ZPVU5EIjogIkxhbmd1YWdlIGZpbGUgbm90IGZvdW5kLiIsCisgICAg Ik1PREVfRVJST1IiOiAiTW9kZSBlcnJvci4iLAorICAgICJOT1RfQUxMT1dF RCI6ICJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHByb2Nlc3MgdGhpcyBhY3Rp b24iLAorICAgICJOT1RfQUxMT1dFRF9TWVNURU0iOiAiU3lzdGVtIHBlcm1p c3Npb25zIGRvIG5vdCBhbGxvdyB5b3UgdG8gcGVyZm9ybSB0aGlzIGFjdGlv biIsCisgICAgIlVOQUJMRV9UT19DUkVBVEVfRElSRUNUT1JZIjogIlVuYWJs ZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSAlcy4iLAorICAgICJVTkFCTEVf VE9fT1BFTl9ESVJFQ1RPUlkiOiAiVW5hYmxlIHRvIG9wZW4gdGhlIGRpcmVj dG9yeSAlcy4iLAorICAgICJVUExPQURfRklMRVNfU01BTExFUl9USEFOIjog IlBsZWFzZSB1cGxvYWQgb25seSBmaWxlcyBzbWFsbGVyIHRoYW4gJXMuIiwK KyAgICAiVVBMT0FEX0lNQUdFU19PTkxZIjogIlBsZWFzZSB1cGxvYWQgb25s eSBpbWFnZXMsIG5vIG90aGVyIGZpbGVzIGFyZSBzdXBwb3J0ZWQuIiwKKyAg ICAiVVBMT0FEX0lNQUdFU19UWVBFX0pQRUdfR0lGX1BORyI6ICJQbGVhc2Ug dXBsb2FkIG9ubHkgaW1hZ2VzIG9mIHR5cGUgSlBFRywgR0lGIG9yIFBORy4i LAorICAgICJ1cGxvYWRfc3VjY2VzcyI6ICJGaWxlIHVwbG9hZGVkIHN1Y2Nl c3NmdWxseS4iLAorICAgICJ1cGxvYWRfZXJyb3IiOiAiRXJyb3IgdXBsb2Fk aW5nIGZpbGUiLAorICAgICJicm93c2UiOiAiQnJvd3NlLi4uIiwKKyAgICAi Ynl0ZXMiOiAiIGJ5dGVzIiwKKyAgICAiY2FuY2VsIjogIkNhbmNlbCIsCisg ICAgImNsb3NlIjogIkNsb3NlIiwKKyAgICAiY29uZmlybWF0aW9uX2RlbGV0 ZSI6ICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZGVsZXRlIHRoaXMgZmls ZT8iLAorICAgICJjb3BpZWQiOiAiVVJMIGNvcGllZCAhIiwKKyAgICAiY29w eV90b19jbGlwYm9hcmQiOiAiQ29weSBVUkwgdG8gQ2xpcGJvYXJkIiwKKyAg ICAiY291bGRfbm90X3JldHJpZXZlX2ZvbGRlciI6ICJDb3VsZCBub3QgcmV0 cmlldmUgZm9sZGVyIGNvbnRlbnRzLiIsCisgICAgImNyZWF0ZV9mb2xkZXIi OiAiQ3JlYXRlIEZvbGRlciIsCisgICAgImNyZWF0ZV9uZXdfZm9sZGVyIjog IkVudGVyIHRoZSBuYW1lIGZvciBmb2xkZXIiLAorICAgICJjcmVhdGVkIjog IkNyZWF0ZWQiLAorICAgICJjdXJyZW50X2ZvbGRlciI6ICIiLAorICAgICJk ZWZhdWx0X2ZvbGRlcm5hbWUiOiAiTXkgZm9sZGVyIiwKKyAgICAiZGVsIjog IkRlbGV0ZSIsCisgICAgImRpbWVuc2lvbnMiOiAiRGltZW5zaW9ucyIsCisg ICAgImRvd25sb2FkIjogIkRvd25sb2FkIiwKKyAgICAiZmlsZV91cGxvYWQi OiAiRmlsZSBVcGxvYWQiLAorICAgICJkel9kaWN0RGVmYXVsdE1lc3NhZ2Ui OiAiRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCIsCisgICAgImR6X2RpY3RG YWxsYmFja01lc3NhZ2UiOiAiWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBv cnQgZHJhZyduJ2Ryb3AgZmlsZSB1cGxvYWRzLiIsCisgICAgImR6X2RpY3RN YXhGaWxlc0V4Y2VlZGVkIjogIk9ubHkgJXMgc2ltdWx0YW5lb3VzIHVwbG9h ZHMgYXJlIGFsbG93ZWQuIiwKKyAgICAiZHpfZGljdEludmFsaWRGaWxlVHlw ZSI6ICJZb3UgY2FuJ3QgdXBsb2FkIGZpbGVzIG9mIHRoaXMgdHlwZS4iLAor ICAgICJlZGl0IjogIkVkaXQgZmlsZSIsCisgICAgImZja19zZWxlY3RfaW50 ZWdyYXRpb24iOiAiVGhlICdTZWxlY3QnIGZ1bmN0aW9uIGlzIG9ubHkgdXNl ZCBmb3IgaW50ZWdyYXRpb24gd2l0aCBGQ0tFZGl0b3IuIiwKKyAgICAiZmls ZV9zaXplX2xpbWl0IjogIlRoZSBmaWxlIHNpemUgbGltaXQgKHBlciBmaWxl KSBpcyAiLAorICAgICJmaWxlX3Rvb19iaWciOiAiVGhlIGZpbGUgaXMgdG9v IGJpZy4iLAorICAgICJnYiI6ICJnYiIsCisgICAgImdyaWRfdmlldyI6ICJT d2l0Y2ggdG8gZ3JpZCB2aWV3LiIsCisgICAgImhlbHBfbW92ZSI6ICJUaGUg dXNlIG9mICcuLi8nIGlzIGZvcmJpZGRlbi4gWW91IGNhbiBhY2Nlc3Mgcm9v dCBmb2xkZXIgYnkgdXNpbmcgJy8nLiIsCisgICAgIml0ZW1zIjogIml0ZW1z IiwKKyAgICAia2IiOiAia2IiLAorICAgICJsaXN0X3ZpZXciOiAiU3dpdGNo IHRvIGxpc3Qgdmlldy4iLAorICAgICJsb2FkaW5nX2RhdGEiOiAiVHJhbnNm ZXJyaW5nIGRhdGEgLi4uIiwKKyAgICAibWIiOiAibWIiLAorICAgICJtb2Rp ZmllZCI6ICJNb2RpZmllZCIsCisgICAgIm1vdmUiOiAiTW92ZSB0byAuLi4i LAorICAgICJuYW1lIjogIk5hbWUiLAorICAgICJuZXdfZmlsZW5hbWUiOiAi RW50ZXIgYSBuZXcgbmFtZSBmb3IgdGhlIGZpbGUiLAorICAgICJuZXdfZm9s ZGVyIjogIk5ldyBmb2xkZXIiLAorICAgICJubyI6ICJObyIsCisgICAgIm5v X2ZvbGRlcm5hbWUiOiAiTm8gZm9sZGVyIG5hbWUgd2FzIHByb3ZpZGVkLiIs CisgICAgInBhcmVudGZvbGRlciI6ICJQYXJlbnQgZm9sZGVyIiwKKyAgICAi cHJvbXB0X2ZvbGRlcm5hbWUiOiAiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIG5l dyBmb2xkZXIiLAorICAgICJxdWl0X2VkaXRvciI6ICJRdWl0IGVkaXRvciIs CisgICAgInJlbmFtZSI6ICJSZW5hbWUiLAorICAgICJyZW5hbWVfdGV4dCI6 ICJFbnRlciB0aGUgbmV3IG5hbWUiLAorICAgICJyZXBsYWNlIjogIlJlcGxh Y2UgZmlsZSIsCisgICAgInNhdmUiOiAiU2F2ZSIsCisgICAgInNlYXJjaCI6 ICJTZWFyY2giLAorICAgICJzZWFyY2hfcmVzZXQiOiAiUmVzZXQiLAorICAg ICJzZWxlY3QiOiAiU2VsZWN0IiwKKyAgICAic2VsZWN0X2Zyb21fbGVmdCI6 ICJTZWxlY3QgYW4gaXRlbSBmcm9tIHRoZSBsZWZ0LiIsCisgICAgInNpemUi OiAiU2l6ZSIsCisgICAgInN1Y2Nlc3NmdWxfYWRkZWRfZmlsZSI6ICJOZXcg ZmlsZShzKSBhZGRlZCBzdWNjZXNzZnVsbHkuIiwKKyAgICAic3VjY2Vzc2Z1 bF9hZGRlZF9mb2xkZXIiOiAiTmV3IGZvbGRlciBhZGRlZCBzdWNjZXNzZnVs bHkuIiwKKyAgICAic3VjY2Vzc2Z1bF9kZWxldGUiOiAiRGVsZXRlIHN1Y2Nl c3NmdWwuIiwKKyAgICAic3VjY2Vzc2Z1bF9tb3ZlZCI6ICJNb3ZlIHN1Y2Nl c3NmdWwuIiwKKyAgICAic3VjY2Vzc2Z1bF9yZXBsYWNlIjogIkZpbGUgcmVw bGFjZW1lbnQgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNjZXNzZnVsX3JlbmFt ZSI6ICJSZW5hbWUgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNjZXNzZnVsX2Vk aXQiOiAiQ29udGVudCB1cGRhdGUgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNj ZXNzZnVsX2NyZWF0ZSI6ICJOZXcgRm9sZGVyIGNyZWF0ZWQgc3VjY2Vzc2Z1 bGx5IiwKKyAgICAidXBsb2FkIjogIlVwbG9hZCIsCisgICAgInZlcnNpb24i OiAidmVyc2lvbiIsCisgICAgInllcyI6ICJZZXMiCit9CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmls ZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMgYi93ZWIvcGdhZG1pbi9taXNjL2Zp bGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL3V0aWxpdHku anMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWExMjUw YwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9t YW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvdXRpbGl0eS5qcwpA QCAtMCwwICsxLDE0MTAgQEAKKy8qKgorICogRmlsZW1hbmFnZXIgSlMgY29y ZQorICoKKyAqIGZpbGVtYW5hZ2VyLmpzCisgKgorICogIEBsaWNlbnNlICBN SVQgTGljZW5zZQorICogIEBhdXRob3IgSmFzb24gSHVjayAtIENvcmUgRml2 ZSBMYWJzCisgKiAgQGF1dGhvciBTaW1vbiBHZW9yZ2V0IDxzaW1vbiAoYXQp IGxpbmVhMjEgKGRvdCkgY29tPgorICogIEBjb3B5cmlnaHQgIEF1dGhvcnMK KyAqLworCisoZnVuY3Rpb24oJCkgeworCisvLyBVc2VyIGFsZXJ0aWZ5IG9i amVjdAordmFyIGFsZXJ0aWZ5ID0gcmVxdWlyZSgiYWxlcnRpZnkiKTsKKwor CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmUgZnVuY3Rpb25zIHVzZWQgZm9y IHZhcmlvdXMgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gZnVu Y3Rpb24gdG8gcmV0cmlldmUgR0VUIHBhcmFtcworJC51cmxQYXJhbSA9IGZ1 bmN0aW9uKG5hbWUpIHsKKyAgdmFyIHJlc3VsdHMgPSBuZXcgUmVnRXhwKCdb XFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKS5leGVjKHdpbmRvdy5sb2Nh dGlvbi5ocmVmKTsKKyAgaWYgKHJlc3VsdHMpCisgICAgcmV0dXJuIHJlc3Vs dHNbMV07CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK307CisKK3ZhciBnZXRG aWxlRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSkgeworICAgIHZhciBmb3Vu ZCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKSArIDE7CisgICAgcmV0dXJuIChm b3VuZCA+IDAgPyBuYW1lLnN1YnN0cihmb3VuZCkgOiAiIik7Cit9OworCit2 YXIgZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7CisgIHZhciBmbV9m aWxlbmFtZSA9IG5hbWU7CisgIGlmIChmbV9maWxlbmFtZS5sZW5ndGggPiAx NSApIHsKKyAgICAgIGZtX2ZpbGVuYW1lID0gbmFtZS5zdWJzdHIoMCwgMTAp ICsnLi4uJzsKKyAgfQorICByZXR1cm4gZm1fZmlsZW5hbWU7Cit9OworCisv LyBzZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKK3ZhciBn ZXRUcmFuc0lkID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAkLmFqYXgoewor ICAgIGFzeW5jOiBmYWxzZSwKKyAgICB1cmw6ICIuLi9maWxlX21hbmFnZXIv Z2V0X3RyYW5zX2lkIiwKKyAgICBkYXRhVHlwZTogImpzb25wIgorICB9KTsK K307CisKKy8vIExvYWQgbGFuZ3VhZ2UgZmlsZQordmFyIGxvYWRMYW5nRmls ZSA9IGZ1bmN0aW9uKGVuanMpIHsKKyAgaWYoJC51cmxQYXJhbSgnbGFuZ0Nv ZGUnKSAhPT0gMCAmJiBmaWxlX2V4aXN0cyAoZW5qcykpIGN1bHR1cmUgPSAk LnVybFBhcmFtKCdsYW5nQ29kZScpOworICByZXR1cm4gJC5hamF4KHsKKyAg ICBhc3luYzogZmFsc2UsCisgICAgdXJsOiBlbmpzLAorICAgIGRhdGFUeXBl OiAnanNvbnAnCisgIH0pOworfTsKKworLy8gV2UgcmV0cmlldmUgY29uZmln IHNldHRpbmdzIGZyb20gZmlsZW1hbmFnZXIuY29uZmlnLmpzCit2YXIgbG9h ZENvbmZpZ0ZpbGUgPSBmdW5jdGlvbiAodHlwZSkgeworICB0eXBlID0gKHR5 cGVvZiB0eXBlID09PSAidW5kZWZpbmVkIikgPyAidXNlciIgOiB0eXBlOwor ICBpZiAodHlwZSA9PSAndXNlcicpIHsKKyAgICB1cmwgPSBmaWxlX21hbmFn ZXJfY29uZmlnX2pzb247CisgICAgdXNlcmNvbmZpZyA9IGZpbGVfbWFuYWdl cl9jb25maWdfanNvbjsKKyAgfQorICByZXR1cm4gJC5hamF4KHsKKyAgICBh c3luYzogZmFsc2UsCisgICAgdXJsOiB1cmwsCisgICAgZGF0YVR5cGU6ICJq c29ucCIKKyAgfSk7Cit9OworCisvKgorICogRm9yY2VzIGNvbHVtbnMgdG8g ZmlsbCB0aGUgbGF5b3V0IHZlcnRpY2FsbHkuCisgKiBDYWxsZWQgb24gaW5p dGlhbCBwYWdlIGxvYWQgYW5kIG9uIHJlc2l6ZS4KKyAqLwordmFyIHNldERp bWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIG1haW5fY29udGFpbmVy X2hlaWdodCA9ICggJCh3aW5kb3cpLmhlaWdodCgpICkgLyAyICsgMzUsCisg ICAgICBuZXdIID0gbWFpbl9jb250YWluZXJfaGVpZ2h0IC0gJCgnI3VwbG9h ZGVyJykuaGVpZ2h0KCkgLSAzMDsKK307CisKKy8vIERpc3BsYXkgTWluIFBh dGgKK3ZhciBkaXNwbGF5UGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgaWYo Y29uZmlnLm9wdGlvbnMuc2hvd0Z1bGxQYXRoID09PSBmYWxzZSkgeworICAg IC8vIGlmIGEgImRpc3BsYXlQYXRoRGVjb3JhdG9yIiBmdW5jdGlvbiBpcyBk ZWZpbmVkLCB1c2UgaXQgdG8gZGVjb3JhdGUgcGF0aAorICAgIHJldHVybiAn ZnVuY3Rpb24nID09PSAodHlwZW9mIGRpc3BsYXlQYXRoRGVjb3JhdG9yKQor ICAgICAgICAgPyBkaXNwbGF5UGF0aERlY29yYXRvcihwYXRoKQorICAgICAg ICAgOiBwYXRoLnJlcGxhY2UoZmlsZVJvb3QsICIvIik7CisgIH0gZWxzZSB7 CisgICAgcmV0dXJuIHBhdGg7CisgIH0KK307CisKKy8vIFNldCB0aGUgdmll dyBidXR0b25zIHN0YXRlCit2YXIgc2V0Vmlld0J1dHRvbnNGb3IgPSBmdW5j dGlvbih2aWV3TW9kZSkgeworICAgIGlmICh2aWV3TW9kZSA9PSAnZ3JpZCcp IHsKKyAgICAgICAgJCgnLmdyaWQnKS5hZGRDbGFzcygnT04nKTsKKyAgICAg ICAgJCgnLmxpc3QnKS5yZW1vdmVDbGFzcygnT04nKTsKKyAgICB9CisgICAg ZWxzZSB7CisgICAgICAgICQoJy5saXN0JykuYWRkQ2xhc3MoJ09OJyk7Cisg ICAgICAgICQoJy5ncmlkJykucmVtb3ZlQ2xhc3MoJ09OJyk7CisgICAgfQor fTsKKworLyoKKyAqIHByZWdfcmVwbGFjZQorICogQ29kZSBmcm9tIDogaHR0 cDovL3h1eHUuZnIvMjAwNi8wNS8yMC9wcmVnLXJlcGxhY2UtamF2YXNjcmlw dC8KKyAqLwordmFyIHByZWdfcmVwbGFjZSA9IGZ1bmN0aW9uKGFycmF5X3Bh dHRlcm4sIGFycmF5X3BhdHRlcm5fcmVwbGFjZSwgc3RyKSAgeworICB2YXIg bmV3X3N0ciA9IFN0cmluZyAoc3RyKTsKKyAgICBmb3IgKGk9MDsgaTxhcnJh eV9wYXR0ZXJuLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmVnX2V4cD0g UmVnRXhwKGFycmF5X3BhdHRlcm5baV0sICJnIik7CisgICAgICB2YXIgdmFs X3RvX3JlcGxhY2UgPSBhcnJheV9wYXR0ZXJuX3JlcGxhY2VbaV07CisgICAg ICBuZXdfc3RyID0gbmV3X3N0ci5yZXBsYWNlIChyZWdfZXhwLCB2YWxfdG9f cmVwbGFjZSk7CisgICAgfQorICAgIHJldHVybiBuZXdfc3RyOworICB9Owor CisvKgorICogY2xlYW5TdHJpbmcgKCksIG9uIHRoZSBzYW1lIG1vZGVsIGFz IHNlcnZlciBzaWRlIChjb25uZWN0b3IpCisgKiBjbGVhblN0cmluZworICov Cit2YXIgY2xlYW5TdHJpbmcgPSBmdW5jdGlvbihzdHIpIHsKKyAgdmFyIGNs ZWFuZWQgPSAiIjsKKyAgdmFyIHBfc2VhcmNoICA9ICAgbmV3IEFycmF5KCLF oCIsICLFoSIsICLEkCIsICLEkSIsICLFvSIsICLFviIsICLEjCIsICLEjSIs ICLEhiIsICLEhyIsICLDgCIsCisgICAgICAgICAgICAiw4EiLCAiw4IiLCAi w4MiLCAiw4QiLCAiw4UiLCAiw4YiLCAiw4ciLCAiw4giLCAiw4kiLCAiw4oi LCAiw4siLCAiw4wiLCAiw40iLCAiw44iLCAiw48iLAorICAgICAgICAgICAg IsORIiwgIsOSIiwgIsOTIiwgIsOUIiwgIsOVIiwgIsOWIiwgIsWQIiwgIsOY IiwgIsOZIiwgIsOaIiwgIsObIiwgIsOcIiwgIsOdIiwgIsOeIiwgIsOfIiwK KyAgICAgICAgICAgICLDoCIsICLDoSIsICLDoiIsICLDoyIsICLDpCIsICLD pSIsICLDpiIsICLDpyIsICLDqCIsICLDqSIsICLDqiIsICLDqyIsICLDrCIs ICAiw60iLAorICAgICAgICAgICAgIsOuIiwgIsOvIiwgIsOwIiwgIsOxIiwg IsOyIiwgIsOzIiwgIsO0IiwgIsO1IiwgIsO2IiwgIsWRIiwgIsO4IiwgIsO5 IiwgIsO6IiwgIsO7IiwgIsO9IiwKKyAgICAgICAgICAgICLDvSIsICLDviIs ICLDvyIsICLFlCIsICLFlSIsICIgIiwgIiciLCAiLyIKKyAgICAgICAgICAg ICk7CisgIHZhciBwX3JlcGxhY2UgPSAgIG5ldyBBcnJheSgiUyIsICJzIiwg IkRqIiwgImRqIiwgIloiLCAieiIsICJDIiwgImMiLCAiQyIsICJjIiwgIkEi LAorICAgICAgICAgICAgIkEiLCAiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwg IkMiLCAiRSIsICJFIiwgIkUiLCAiRSIsICJJIiwgIkkiLCAiSSIsICJJIiwK KyAgICAgICAgICAgICJOIiwgIk8iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJP IiwgIk8iLCAiVSIsICJVIiwgIlUiLCAiVSIsICJZIiwgIkIiLCAiU3MiLAor ICAgICAgICAgICAgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEi LCAiYyIsICJlIiwgImUiLCAiZSIsICJlIiwgImkiLCAiaSIsCisgICAgICAg ICAgICAiaSIsICJpIiwgIm8iLCAibiIsICJvIiwgIm8iLCAibyIsICJvIiwg Im8iLCAibyIsICJvIiwgInUiLCAidSIsICJ1IiwgInkiLAorICAgICAgICAg ICAgInkiLCAiYiIsICJ5IiwgIlIiLCAiciIsICJfIiwgIl8iLCAiIgorICAg ICAgICAgICk7CisKKyAgY2xlYW5lZCA9IHByZWdfcmVwbGFjZShwX3NlYXJj aCwgcF9yZXBsYWNlLCBzdHIpOworICBjbGVhbmVkID0gY2xlYW5lZC5yZXBs YWNlKC9bXl9hLXpBLVowLTldL2csICIiKTsKKyAgY2xlYW5lZCA9IGNsZWFu ZWQucmVwbGFjZSgvW19dKy9nLCAiXyIpOworCisgIHJldHVybiBjbGVhbmVk OworfTsKKworLyoKKyAqIG5hbWVGb3JtYXQgKCksIHNlcGFyYXRlIGZpbGVu YW1lIGZyb20gZXh0ZW5zaW9uIGJlZm9yZSBjYWxsaW5nIGNsZWFuU3RyaW5n KCkKKyAqIG5hbWVGb3JtYXQKKyAqLwordmFyIG5hbWVGb3JtYXQgPSBmdW5j dGlvbihpbnB1dCkgeworICBmaWxlbmFtZSA9ICcnOworICBpZihpbnB1dC5s YXN0SW5kZXhPZignLicpICE9IC0xKSB7CisgICAgZmlsZW5hbWUgID0gY2xl YW5TdHJpbmcoaW5wdXQuc3Vic3RyKDAsIGlucHV0Lmxhc3RJbmRleE9mKCcu JykpKTsKKyAgICBmaWxlbmFtZSArPSAnLicgKyBpbnB1dC5zcGxpdCgnLicp LnBvcCgpOworICB9IGVsc2UgeworICAgIGZpbGVuYW1lID0gY2xlYW5TdHJp bmcoaW5wdXQpOworICB9CisgIHJldHVybiBmaWxlbmFtZTsKK307CisKKy8v Q29udmVydHMgYnl0ZXMgdG8ga2IsIG1iLCBvciBnYiBhcyBuZWVkZWQgZm9y IGRpc3BsYXkuCit2YXIgZm9ybWF0Qnl0ZXMgPSBmdW5jdGlvbihieXRlcyl7 CisgIHZhciBuID0gcGFyc2VGbG9hdChieXRlcyk7CisgIHZhciBkID0gcGFy c2VGbG9hdCgxMDI0KTsKKyAgdmFyIGMgPSAwOworICB2YXIgdSA9IFtsZy5i eXRlcyxsZy5rYixsZy5tYixsZy5nYl07CisKKyAgd2hpbGUodHJ1ZSl7Cisg ICAgaWYobiA8IGQpeworICAgICAgbiA9IE1hdGgucm91bmQobiAqIDEwMCkg LyAxMDA7CisgICAgICByZXR1cm4gbiArIHVbY107CisgICAgfSBlbHNlIHsK KyAgICAgIG4gLz0gZDsKKyAgICAgIGMgKz0gMTsKKyAgICB9CisgIH0KK307 CisKKy8qCisgKiBIYW5kbGUgRXJyb3IuIEZyZWV6ZSBpbnRlcmFjdGl2ZSBi dXR0b25zIGFuZCBkaXNwbGF5CisgKiBlcnJvciBtZXNzYWdlLiBBbHNvIGNh bGxlZCB3aGVuIGF1dGgoKSBmdW5jdGlvbiByZXR1cm4gZmFsc2UgKENvZGUg PT0gIi0xIikKKyAqLwordmFyIGhhbmRsZUVycm9yID0gZnVuY3Rpb24oZXJy TXNnKSB7CisgIC8vJCgnLnN0b3JhZ2VfZGlhbG9nIC5maWxlaW5mbycpLmh0 bWwoJzxoMT4nICsgZXJyTXNnKyAnPC9oMT4nKTsKKyAgJCgnLnN0b3JhZ2Vf ZGlhbG9nIC5uZXdmaWxlJykuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQi KTsKKyAgJCgnLnN0b3JhZ2VfZGlhbG9nIC51cGxvYWQnKS5hdHRyKCJkaXNh YmxlZCIsICJkaXNhYmxlZCIpOworICAkKCcuc3RvcmFnZV9kaWFsb2cgLmNy ZWF0ZScpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7Cit9OworCisv KgorICogVGVzdCBpZiBEYXRhIHN0cnVjdHVyZSBoYXMgdGhlICdjYXAnIGNh cGFiaWxpdHkKKyAqICdjYXAnIGlzIG9uZSBvZiAnc2VsZWN0JywgJ3JlbmFt ZScsICdkZWxldGUnLCAnZG93bmxvYWQnCisgKi8KK2Z1bmN0aW9uIGhhc19j YXBhYmlsaXR5KGRhdGEsIGNhcCkgeworICBpZiAodHlwZW9mKGRhdGFbJ0Nh cGFiaWxpdGllcyddKSA9PSAidW5kZWZpbmVkIikgcmV0dXJuIHRydWU7Cisg IGVsc2UgcmV0dXJuICQuaW5BcnJheShjYXAsIGRhdGFbJ0NhcGFiaWxpdGll cyddKSA+IC0xOworfQorCisvLyBUZXN0IGlmIGZpbGUgaXMgYXV0aG9yaXpl ZAordmFyIGlzQXV0aG9yaXplZEZpbGUgPSBmdW5jdGlvbihmaWxlbmFtZSkg eworICBpZihjb25maWcuc2VjdXJpdHkudXBsb2FkUG9saWN5ID09ICdESVNB TExPV19BTEwnKSB7CisgICAgaWYoJC5pbkFycmF5KGdldEV4dGVuc2lvbihm aWxlbmFtZSksIGNvbmZpZy5zZWN1cml0eS51cGxvYWRSZXN0cmljdGlvbnMp ICE9IC0xKSByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZihjb25maWcuc2VjdXJp dHkudXBsb2FkUG9saWN5ID09ICdBTExPV19BTEwnKSB7CisgICAgaWYoJC5p bkFycmF5KGdldEV4dGVuc2lvbihmaWxlbmFtZSksIGNvbmZpZy5zZWN1cml0 eS51cGxvYWRSZXN0cmljdGlvbnMpID09IC0xKSByZXR1cm4gdHJ1ZTsKKyAg fQorICByZXR1cm4gZmFsc2U7Cit9OworCisvLyByZXR1cm4gZmlsZW5hbWUg ZXh0ZW5zaW9uCit2YXIgZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24oZmlsZW5h bWUpIHsKKyAgaWYoZmlsZW5hbWUuc3BsaXQoJy4nKS5sZW5ndGggPT0gMSkK KyAgICByZXR1cm4gIiI7CisgIHJldHVybiBmaWxlbmFtZS5zcGxpdCgnLicp LnBvcCgpOworfTsKKworLy8gcmV0dXJuIGZpbGVuYW1lIHdpdGhvdXQgZXh0 ZW5zaW9uIHsKK3ZhciBnZXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGZpbGVuYW1l KSB7CisgIGlmKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgIT0gLTEpCisg ICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sYXN0 SW5kZXhPZignLicpKTsKKyAgZWxzZQorICAgIHJldHVybiBmaWxlbmFtZTsK K307CisKKy8qCisgKiBTZXRzIHRoZSBmb2xkZXIgc3RhdHVzLCB1cGxvYWQs IGFuZCBuZXcgZm9sZGVyIGZ1bmN0aW9ucworICogdG8gdGhlIHBhdGggc3Bl Y2lmaWVkLiBDYWxsZWQgb24gaW5pdGlhbCBwYWdlIGxvYWQgYW5kCisgKiB3 aGVuZXZlciBhIG5ldyBkaXJlY3RvcnkgaXMgc2VsZWN0ZWQuCisgKi8KK3Zh ciBzZXRVcGxvYWRlciA9IGZ1bmN0aW9uKHBhdGgpeworCisgIC8vIFJlbW92 ZSBhbmNob3IgYW5kIGJvbGQoYikgdGFncworICAkKCcuc3RvcmFnZV9kaWFs b2cgI3VwbG9hZGVyJykuZmluZCgnYScpLnJlbW92ZSgpOworICAkKCcuc3Rv cmFnZV9kaWFsb2cgI3VwbG9hZGVyJykuZmluZCgnYicpLnJlbW92ZSgpOwor CisgIHZhciBkaXNwbGF5X3N0cmluZyA9IGRpc3BsYXlQYXRoKHBhdGgpOwor ICB2YXIgbXlwYXRoID0gJyc7CisKKyAgLy8gc3BsaXQgcGF0aAorICBzcGxp dF9wYXRoID0gZGlzcGxheV9zdHJpbmcuc3BsaXQoJy8nKTsKKyAgc3BsaXRf cGF0aCA9IHNwbGl0X3BhdGguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBl O30pOworCisgIGlmIChzcGxpdF9wYXRoLmxlbmd0aCA9PT0gMCkKKyAgICBt eXBhdGggPSAkKCc8Yj4vPC9iPicpOworICBlbHNlCisgICAgbXlwYXRoID0g JCgnPGEgY2xhc3M9ImJyZWFkY3J1bWJzIiBocmVmPSIjIiBkYXRhLXBhdGg9 Ii8iPi88L2E+Jyk7CisgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFn ZV9kaWFsb2cgI3VwbG9hZGVyIGgxJykpOworCisgIGZvcih2YXIgaSBpbiBz cGxpdF9wYXRoKSB7CisgICAgaWYgKGkgPCBzcGxpdF9wYXRoLmxlbmd0aC0x KSB7CisgICAgICBteXBhdGggPSAkKCc8YSBjbGFzcz0iYnJlYWRjcnVtYnMi IGhyZWY9IiMiIGRhdGEtcGF0aD0iJytkaXNwbGF5X3N0cmluZy5yZXBsYWNl KHNwbGl0X3BhdGhbaSsxXSwgJycpKyciPicrc3BsaXRfcGF0aFtpXSsnLzwv YT4nKTsKKyAgICAgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFnZV9k aWFsb2cgI3VwbG9hZGVyIGgxJykpOworICAgfQorICAgZWxzZSB7CisgICAg IG15cGF0aCA9ICQoJzxiPicrc3BsaXRfcGF0aFtpXSsnPC9iPicpOworICAg ICAkKG15cGF0aCkuYXBwZW5kVG8oJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxv YWRlciBoMScpKTsKKyAgIH0KKyAgfQorCisgICQoJy5jdXJyZW50cGF0aCcp LnZhbChwYXRoKTsKKyAgaWYoJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxvYWRl ciBoMSBzcGFuJykubGVuZ3RoID09PSAwKSB7CisgICAgJCgnPHNwYW4+Jyts Zy5jdXJyZW50X2ZvbGRlcisnPC9zcGFuPicpLmFwcGVuZFRvKCQoJy5zdG9y YWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisgIH0KKworICAkKCcuc3Rv cmFnZV9kaWFsb2cgI3VwbG9hZGVyIGgxJykuYXR0cigndGl0bGUnLCBkaXNw bGF5X3N0cmluZyk7CisgICQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIg aDEnKS5hdHRyKCdkYXRhLXBhdGgnLCBkaXNwbGF5X3N0cmluZyk7CisKKyAg JCgnLmNyZWF0ZScpLnVuYmluZCgpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAg dmFyIGZvbGRlcm5hbWUgPSAgbGcuZGVmYXVsdF9mb2xkZXJuYW1lOworICAg IHZhciAkZmlsZV9lbGVtZW50LAorICAgICAgICAkZmlsZV9lbGVtZW50X2xp c3Q7CisKKyAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5jcmVhdGUnKS5h dHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgIGlmKCQoJy5maWxl aW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworCisgICAgICB2YXIg Zm9sZGVyX2RpdiA9ICI8bGkgY2xhc3M9J2NhcF9kb3dubG9hZGNhcF9kZWxl dGVjYXBfc2VsZWN0X2ZpbGVjYXBfc2VsZWN0X2ZvbGRlcmNhcF9yZW5hbWVj YXBfY3JlYXRlY2FwX3VwbG9hZCc+IisKKyAgICAgICAgICAiPGRpdiBjbGFz cz0nY2xpcCc+PHNwYW4gZGF0YS1hbHQ9JycgY2xhc3M9J2ZhIGZhLWZvbGRl ci1vcGVuIGZtX2ZvbGRlcic+PC9zcGFuPjwvZGl2PiIrCisgICAgICAgICAg IjxwPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZm1fZmlsZV9yZW5hbWUn PjxzcGFuIHRpdGxlPScnPk5ld19Gb2xkZXI8L3NwYW4+PC9wPiIrCisgICAg ICAgICAgIjxzcGFuIGNsYXNzPSdtZXRhIHNpemUnPjwvc3Bhbj48c3BhbiBj bGFzcz0nbWV0YSBjcmVhdGVkJz48L3NwYW4+PHNwYW4gY2xhc3M9J21ldGEg bW9kaWZpZWQnPjwvc3Bhbj48L2xpPiI7CisKKyAgICAgIHZhciBwYXRoID0g JCgnLmN1cnJlbnRwYXRoJykudmFsKCksCisgICAgICAgICAgJGZpbGVfZWxl bWVudCA9ICAkKGZvbGRlcl9kaXYpOworICAgICAgJCgnLmZpbGVpbmZvICNj b250ZW50cy5ncmlkJykuYXBwZW5kKCRmaWxlX2VsZW1lbnQpOworICAgICAg JGZpbGVfZWxlbWVudC5maW5kKCdwIHNwYW4nKS50b2dnbGUoKTsKKyAgICAg ICRmaWxlX2VsZW1lbnQuZmluZCgncCBpbnB1dCcpLnRvZ2dsZSgpLnZhbCgn TmV3IEZvbGRlcicpOworCisgICAgICAkZmlsZV9lbGVtZW50LmZpbmQoJ3Ag aW5wdXQnKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgJCgn LmZpbGVfbWFuYWdlciBidXR0b24uY3JlYXRlJykucmVtb3ZlQXR0cignZGlz YWJsZWQnKTsKKyAgICAgICAgdmFyIHRleHRfdmFsdWUgPSAkZmlsZV9lbGVt ZW50LmZpbmQoJ3AgaW5wdXQnKS52YWwoKSwKKyAgICAgICAgICAgIHBhdGgg PSAkKCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICAgICAgJGZpbGVfZWxl bWVudC5maW5kKCdwIGlucHV0JykudG9nZ2xlKCk7CisgICAgICAgICRmaWxl X2VsZW1lbnQuZmluZCgncCBzcGFuJykudG9nZ2xlKCkuaHRtbCh0ZXh0X3Zh bHVlKTsKKyAgICAgICAgaWYodGV4dF92YWx1ZSA9PT0gdW5kZWZpbmVkKSB0 ZXh0X3ZhbHVlID0gJ05ldyBGb2xkZXInOworICAgICAgICBnZXRGb2xkZXJO YW1lKHRleHRfdmFsdWUpOworICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgp OworICAgICAgfSk7CisKKyAgICB9CisgICAgZWxzZSBpZigkKCcuZmlsZWlu Zm8nKS5kYXRhKCd2aWV3JykgPT0gJ2xpc3QnKXsKKworICAgICAgdmFyIGZv bGRlcl9kaXYgPSAkKCI8dHIgY2xhc3M9J2NhcF9kb3dubG9hZCBjYXBfZGVs ZXRlIGNhcF9zZWxlY3RfZmlsZSBjYXBfc2VsZWN0X2ZvbGRlciBjYXBfcmVu YW1lIGNhcF9jcmVhdGUgY2FwX3VwbG9hZCc+IisKKyAgICAgICAgIjx0ZCB0 aXRsZT0nJyBjbGFzcz0nZmEgZmEtZm9sZGVyLW9wZW4gdGJsX2ZvbGRlcic+ IisKKyAgICAgICAgICAiPHA+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdm bV9maWxlX3JlbmFtZSc+PHNwYW4+TmV3IEZvbGRlcjwvc3Bhbj48L3A+IisK KyAgICAgICAgICAiPC90ZD48dGQ+IisKKyAgICAgICAgICAiPGFiYnIgdGl0 bGU9Jyc+PC9hYmJyPjwvdGQ+IisKKyAgICAgICAgICAiPHRkPjwvdGQ+IisK KyAgICAgICAgIjwvdHI+Iik7CisKKyAgICAgICRmaWxlX2VsZW1lbnRfbGlz dCA9ICAkKGZvbGRlcl9kaXYpOworICAgICAgJCgnLmZpbGVpbmZvICNjb250 ZW50cy5saXN0JykucHJlcGVuZCgkZmlsZV9lbGVtZW50X2xpc3QpOworICAg ICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Agc3BhbicpLnRvZ2dsZSgp OworICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3AgaW5wdXQnKS50 b2dnbGUoKS52YWwoJ05ldyBGb2xkZXInKTsKKworICAgICAgJGZpbGVfZWxl bWVudF9saXN0LmZpbmQoJ3AgaW5wdXQnKS5vbignYmx1cicsIGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uY3JlYXRl JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgdmFyIHRleHRf dmFsdWUgPSAkZmlsZV9lbGVtZW50X2xpc3QuZmluZCgncCBpbnB1dCcpLnZh bCgpLAorICAgICAgICAgICAgcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpOworICAgICAgICAkZmlsZV9lbGVtZW50X2xpc3QuZmluZCgncCBpbnB1 dCcpLnRvZ2dsZSgpOworICAgICAgICAkZmlsZV9lbGVtZW50X2xpc3QuZmlu ZCgncCBzcGFuJykudG9nZ2xlKCkuaHRtbCh0ZXh0X3ZhbHVlKTsKKyAgICAg ICAgaWYodGV4dF92YWx1ZSA9PT0gdW5kZWZpbmVkKSB0ZXh0X3ZhbHVlID0g J05ldyBGb2xkZXInOworICAgICAgICBnZXRGb2xkZXJOYW1lKHRleHRfdmFs dWUpOworICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOworICAgICAgfSk7 CisgICAgfQorCisgICAgdmFyIGdldEZvbGRlck5hbWUgPSBmdW5jdGlvbih2 YWx1ZSl7CisgICAgICB2YXIgZm5hbWUgPSB2YWx1ZTsKKworICAgICAgaWYo Zm5hbWUgIT0gJycpeworICAgICAgICBmb2xkZXJuYW1lID0gY2xlYW5TdHJp bmcoZm5hbWUpOworICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7IC8vIHRv IHByZXZlbnQgSUUgY2FjaGUgaXNzdWVzCisgICAgICAgICQuZ2V0SlNPTihm aWxlQ29ubmVjdG9yICsgJz9tb2RlPWFkZGZvbGRlciZwYXRoPScgKyAkKCcu Y3VycmVudHBhdGgnKS52YWwoKSArICcmbmFtZT0nICsgZm9sZGVybmFtZSAr ICcmdGltZT0nICsgZC5nZXRNaWxsaXNlY29uZHMoKSwgZnVuY3Rpb24ocmVz dWx0KXsKKyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7Cisg ICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGxnLnN1Y2Nlc3NmdWxfY3Jl YXRlKTsKKyAgICAgICAgICAgIGdldEZvbGRlckluZm8ocmVzdWx0WydQYXJl bnQnXSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0 aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7CisgICAgICAgICAgfQorICAg ICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0aWZ5LmVy cm9yKGxnLm5vX2ZvbGRlcm5hbWUpOworICAgICAgfQorICAgIH07CisKKyAg fSk7Cit9OworCisvKgorICogQmluZHMgc3BlY2lmaWMgYWN0aW9ucyB0byB0 aGUgdG9vbGJhciBpbiBkZXRhaWwgdmlld3MuCisgKiBDYWxsZWQgd2hlbiBk ZXRhaWwgdmlld3MgYXJlIGxvYWRlZC4KKyAqLwordmFyIGJpbmRUb29sYmFy ID0gZnVuY3Rpb24oZGF0YSl7CisKKyAgaWYgKCFoYXNfY2FwYWJpbGl0eShk YXRhLCAndXBsb2FkJykpIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmlu ZCgnYnV0dG9uLnVwbG9hZCcpLmhpZGUoKTsKKyAgfQorCisgIGlmICghaGFz X2NhcGFiaWxpdHkoZGF0YSwgJ2NyZWF0ZScpKSB7CisgICAgJCgnLmZpbGVf bWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5jcmVhdGUnKS5oaWRlKCk7CisgIH0K KworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdkZWxldGUnKSkgewor ICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24uZGVsZXRlJyku aGlkZSgpOworICB9IGVsc2UgeworICAgICQoJy5maWxlX21hbmFnZXInKS5m aW5kKCdidXR0b24uZGVsZXRlJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAg ICQoJy5maWxlaW5mbyAuZGVsZXRlX2l0ZW0nKS5zaG93KCk7CisgICAgfSk7 CisKKyAgICAkKCcuZmlsZWluZm8gLmRlbGV0ZV9pdGVtIGJ1dHRvbi5idG5f eWVzJykudW5iaW5kKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAg ICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsK KyAgICAgICAgdmFyIHBhdGggPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29u dGVudHMgbGkuc2VsZWN0ZWQgLmNsaXAgc3BhbicpLmF0dHIoJ2RhdGEtYWx0 Jyk7CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRo Lmxlbmd0aCAtIDEpeworICAgICAgICAgIGRhdGFbJ1BhdGgnXSA9IHBhdGg7 CisgICAgICAgICAgZGVsZXRlSXRlbShkYXRhKTsKKyAgICAgICAgfQorICAg ICAgICBlbHNlIHsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEpOworICAg ICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdmFyIHBh dGggPSAkKCcuZmlsZWluZm8nKS5maW5kKCd0YWJsZSNjb250ZW50cyB0Ym9k eSB0ci5zZWxlY3RlZCB0ZDpmaXJzdC1jaGlsZCcpLmF0dHIoJ3RpdGxlJyk7 CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRoLmxl bmd0aCAtIDEpeworICAgICAgICAgIGRhdGFbJ1BhdGgnXSA9IHBhdGg7Cisg ICAgICAgICAgZGVsZXRlSXRlbShkYXRhKTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIHsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEpOworICAgICAg ICB9CisgICAgICB9CisgICAgfSk7CisKKyAgfQorCisgIC8vIERvd25sb2Fk IGZpbGUgb24gY2xpY2sgb24gZG93bmxvYWQgYnV0dG9uIGFkb3dubG9hZAor ICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdkb3dubG9hZCcpKSB7Cisg ICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5kb3dubG9hZCcp LmhpZGUoKTsKKyAgfSBlbHNlIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJyku ZmluZCgnYnV0dG9uLmRvd25sb2FkJykuY2xpY2soZnVuY3Rpb24oKXsKKyAg ICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcp eworICAgICAgICB2YXIgcGF0aCA9ICQoJy5maWxlaW5mbyBsaS5zZWxlY3Rl ZCcpLmZpbmQoJy5jbGlwIHNwYW4nKS5hdHRyKCdkYXRhLWFsdCcpOworICAg ICAgICB3aW5kb3cub3BlbihmaWxlQ29ubmVjdG9yICsgJz9tb2RlPWRvd25s b2FkJnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXRoKSwgJ19ibGFu aycpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHZhciBwYXRo ID0gJCgnLmZpbGVpbmZvJykuZmluZCgndGFibGUjY29udGVudHMgdGJvZHkg dHIuc2VsZWN0ZWQgdGQ6Zmlyc3QtY2hpbGQnKS5hdHRyKCd0aXRsZScpOwor ICAgICAgICB3aW5kb3cub3BlbihmaWxlQ29ubmVjdG9yICsgJz9tb2RlPWRv d25sb2FkJnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXRoKSwgJ19i bGFuaycpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgaWYgKCFoYXNf Y2FwYWJpbGl0eShkYXRhLCAncmVuYW1lJykpIHsKKyAgICAkKCcuZmlsZV9t YW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLmhpZGUoKTsKKyAgfQor fTsKKworLy8gcmVuYW1lIGZ1bmN0aW9uYWxpdHkKKyQoJy5maWxlX21hbmFn ZXIgLmZpbGVpbmZvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworICAv LyAkKHRoaXMpLmZpbmQoJyNjb250ZW50cyBsaSBwJykudG9nZ2xlKCk7Cisg IGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpewor ICAgICQoJy5maWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3Rl ZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICQoJy5maWxlX21h bmFnZXJfb2snKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAkKCcuZmls ZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmRlbGV0ZScpLnByb3AoJ2Rpc2Fi bGVkJywgdHJ1ZSk7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1 dHRvbi5kb3dubG9hZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAg JCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5yZW5hbWUnKS5wcm9w KCdkaXNhYmxlZCcsIHRydWUpOworICB9IGVsc2UgeworICAgICQoJy5maWxl aW5mbyB0Ym9keScpLmZpbmQoJ3RyLnNlbGVjdGVkJykucmVtb3ZlQ2xhc3Mo J3NlbGVjdGVkJyk7CisgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLmFkZENs YXNzKCdkaXNhYmxlZCcpOworICAgICQoJy5maWxlX21hbmFnZXInKS5maW5k KCdidXR0b24uZGVsZXRlJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAg ICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmRvd25sb2FkJyku cHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAkKCcuZmlsZV9tYW5hZ2Vy JykuZmluZCgnYnV0dG9uLnJlbmFtZScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1 ZSk7CisgIH0KKyAgJCgnLmRlbGV0ZV9pdGVtJykuaGlkZSgpOworICAvLyBj bGVhciBhZGRyZXNzIGJhcgorICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRl ciBoMScpLnNob3coKTsKKyAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIg LnNob3dfc2VsZWN0ZWRfZmlsZScpLnJlbW92ZSgpOworICAkKCcuY3JlYXRl X2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZhbCgnJyk7Cit9KTsKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIEl0ZW0gQWN0aW9ucworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K KworLyoKKyAqIFJlbmFtZSB0aGUgY3VycmVudCBpdGVtIGFuZCByZXR1cm5z IHRoZSBuZXcgbmFtZS4KKyAqIGJ5IGRvdWJsZSBjbGlja2luZyBvciBieSBj bGlja2luZyB0aGUgIlJlbmFtZSIgYnV0dG9uIGluCisgKiBsaXN0IHZpZXdz LgorICovCit2YXIgcmVuYW1lSXRlbSA9IGZ1bmN0aW9uKGRhdGEpeworICB2 YXIgb3JpZ19uYW1lID0gZ2V0RmlsZW5hbWUoZGF0YVsnRmlsZW5hbWUnXSks CisgICAgICBmaW5hbE5hbWUgPSAnJzsKKworICB2YXIgZ2V0TmV3TmFtZSA9 IGZ1bmN0aW9uKHJuYW1lKXsKKyAgICBpZihybmFtZSAhPT0gJycpeworICAg ICAgdmFyIGdpdmVuTmFtZSA9IG5hbWVGb3JtYXQocm5hbWUpLAorICAgICAg ICAgIHN1ZmZpeCA9IGdldEV4dGVuc2lvbihkYXRhWydGaWxlbmFtZSddKTsK KyAgICAgIGlmKHN1ZmZpeC5sZW5ndGggPiAwKSB7CisgICAgICAgIGdpdmVu TmFtZSA9IGdpdmVuTmFtZSArICcuJyArIHN1ZmZpeDsKKyAgICAgIH0KKwor ICAgICAgdmFyIG9sZFBhdGggPSBkYXRhWydQYXRoJ10sCisgICAgICAgICAg cG9zdF9kYXRhID0geworICAgICAgICAibW9kZSI6ICJyZW5hbWUiLAorICAg ICAgICAib2xkIjogZGF0YVsnUGF0aCddLAorICAgICAgICAibmV3IjogZ2l2 ZW5OYW1lLAorICAgICAgfTsKKworICAgICAgJC5hamF4KHsKKyAgICAgICAg dHlwZTogJ1BPU1QnLAorICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShw b3N0X2RhdGEpLAorICAgICAgICB1cmw6IGZpbGVDb25uZWN0b3IsCisgICAg ICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAgIGNvbnRlbnRUeXBlOiAi YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgICAgIGFz eW5jOiBmYWxzZSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0 KXsKKyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7CisgICAg ICAgICAgICB2YXIgbmV3UGF0aCA9IHJlc3VsdFsnTmV3IFBhdGgnXSwKKyAg ICAgICAgICAgICAgICBuZXdOYW1lID0gcmVzdWx0WydOZXcgTmFtZSddLAor ICAgICAgICAgICAgICAgIHRpdGxlID0gJCgiI3ByZXZpZXcgaDEiKS5hdHRy KCJ0aXRsZSIpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIHRpdGxlICE9 InVuZGVmaW5lZCIgJiYgdGl0bGUgPT0gb2xkUGF0aCkKKyAgICAgICAgICAg ICAgJCgnI3ByZXZpZXcgaDEnKS50ZXh0KG5ld05hbWUpOworCisgICAgICAg ICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQn KXsKKyAgICAgICAgICAgICAgJCgnLmZpbGVpbmZvIHNwYW5bZGF0YS1hbHQ9 IicgKyBvbGRQYXRoICsgJyJdJykucGFyZW50KCkubmV4dCgncCBzcGFuJyku dGV4dChuZXdOYW1lKTsKKyAgICAgICAgICAgICAgJCgnLmZpbGVpbmZvIHNw YW5bZGF0YS1hbHQ9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cignZGF0YS1h bHQnLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICQoJy5maWxlaW5mbyB0ZFt0aXRsZT0iJyArIG9sZFBhdGggKyAn Il0nKS50ZXh0KG5ld05hbWUpOworICAgICAgICAgICAgICAkKCcuZmlsZWlu Zm8gdGRbdGl0bGU9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cigndGl0bGUn LCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQoIiNw cmV2aWV3IGgxIikuaHRtbChuZXdOYW1lKTsKKworICAgICAgICAgICAgLy8g YWN0dWFsaXplZCBkYXRhIGZvciBiaW5kaW5nCisgICAgICAgICAgICBkYXRh WydQYXRoJ109bmV3UGF0aDsKKyAgICAgICAgICAgIGRhdGFbJ0ZpbGVuYW1l J109bmV3TmFtZTsKKworICAgICAgICAgICAgLy8gVW5CaW5kIHRvb2xiYXIg ZnVuY3Rpb25zLgorICAgICAgICAgICAgJCgnLmZpbGVpbmZvJykuZmluZCgn YnV0dG9uLnJlbmFtZSwgYnV0dG9uLmRlbGV0ZSwgYnV0dG9uLmRvd25sb2Fk JykudW5iaW5kKCk7CisKKyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3Mo bGcuc3VjY2Vzc2Z1bF9yZW5hbWUpOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7 CisgICAgICAgICAgfQorCisgICAgICAgICAgZmluYWxOYW1lID0gcmVzdWx0 WydOZXcgTmFtZSddOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9Cisg IH07CisKKyAgZ2V0TmV3TmFtZShkYXRhWydOZXdGaWxlbmFtZSddKTsKKyAg cmV0dXJuIGZpbmFsTmFtZTsKK307CisKKy8qCisgKiBQcm9tcHRzIGZvciBj b25maXJtYXRpb24sIHRoZW4gZGVsZXRlcyB0aGUgZm9sZGVyIHdpdGggc3Vi IGZvbGRlcgorICogb3IgZmlsZXMgYnkgY2xpY2tpbmcgdGhlICJEZWxldGUi IGJ1dHRvbiBpbiBsaXN0IHZpZXcKKyAqLwordmFyIGRlbGV0ZUl0ZW0gPSBm dW5jdGlvbihkYXRhKXsKKyAgdmFyIGlzRGVsZXRlZCA9IGZhbHNlLAorICAg ICAgbXNnID0gbGcuY29uZmlybWF0aW9uX2RlbGV0ZTsKKworICB2YXIgZG9E ZWxldGUgPSBmdW5jdGlvbihkYXRhKXsKKyAgICB2YXIgcGFyZW50ID0gZGF0 YVsnUGF0aCddLnNwbGl0KCcvJykucmV2ZXJzZSgpLnNsaWNlKDEpLnJldmVy c2UoKS5qb2luKCcvJykgKyAnLyc7CisgICAgdmFyIHBvc3RfZGF0YSA9IHsK KyAgICAgICJtb2RlIjogImRlbGV0ZSIsCisgICAgICAicGF0aCI6IGRhdGFb J1BhdGgnXQorICAgIH07CisKKyAgICAkLmFqYXgoeworICAgICAgdHlwZTog J1BPU1QnLAorICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocG9zdF9kYXRh KSwKKyAgICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAgICAgIGRhdGFUeXBl OiAnanNvbicsCisgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pz b247IGNoYXJzZXQ9dXRmLTgiLAorICAgICAgYXN5bmM6IGZhbHNlLAorICAg ICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KXsKKyAgICAgICAgaWYocmVz dWx0WydDb2RlJ10gPT09IDApeworICAgICAgICAgIGlzRGVsZXRlZCA9IHRy dWU7CisgICAgICAgICAgaWYoaXNEZWxldGVkKSB7CisgICAgICAgICAgICBh bGVydGlmeS5zdWNjZXNzKGxnLnN1Y2Nlc3NmdWxfZGVsZXRlKTsKKyAgICAg ICAgICAgIHZhciByb290cGF0aCA9IHJlc3VsdFsnUGF0aCddLnN1YnN0cmlu ZygwLCByZXN1bHRbJ1BhdGgnXS5sZW5ndGgtMSk7IC8vIHJlbW92aW5nIHRo ZSBsYXN0IHNsYXNoCisgICAgICAgICAgICAgICAgcm9vdHBhdGggPSByb290 cGF0aC5zdWJzdHIoMCwgcm9vdHBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEp OworICAgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhyb290cGF0aCk7CisgICAg ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlzRGVsZXRl ZCA9IGZhbHNlOworICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKHJlc3VsdFsn RXJyb3InXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgICBy ZXR1cm4gaXNEZWxldGVkOworICB9OworCisgIGRvRGVsZXRlKGRhdGEpOwor ICByZXR1cm4gaXNEZWxldGVkOworfTsKKworCiskKCcuZGVsZXRlX2l0ZW0g YnV0dG9uLmJ0bl9ubycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeworICAk KCcuZGVsZXRlX2l0ZW0nKS5oaWRlKCk7Cit9KTsKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgIEZ1bmN0aW9ucyB0byBSZXRyaWV2ZSBGaWxlIGFuZCBGb2xkZXIgRGV0 YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGVjaWRlcyB3aGV0aGVyIHRv IHJldHJpZXZlIGZpbGUgb3IgZm9sZGVyIGluZm8gYmFzZWQgb24KKyAqIHRo ZSBwYXRoIHByb3ZpZGVkLgorICovCit2YXIgZ2V0RGV0YWlsVmlldyA9IGZ1 bmN0aW9uKHBhdGgpeworICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0g cGF0aC5sZW5ndGggLSAxKXsKKyAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOwor ICB9IGVsc2UgeworICAgIC8vZ2V0RmlsZUluZm8ocGF0aCk7CisgIH0KK307 CisKKy8qCisgKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNw ZWNpZmllZCBmaWxlIGFzIGEgSlNPTgorICogb2JqZWN0IGFuZCB1c2VzIHRo YXQgZGF0YSB0byBwb3B1bGF0ZSBhIHRlbXBsYXRlIGZvcgorICogbGlzdCB2 aWV3cy4gQmluZHMgdGhlIHRvb2xiYXIgZm9yIHRoYXQgZmlsZS9mb2xkZXIg dG8KKyAqIGVuYWJsZSBzcGVjaWZpYyBhY3Rpb25zLiBDYWxsZWQgd2hlbmV2 ZXIgYW4gaXRlbSBpcworICogY2xpY2tlZCBpbiBsaXN0IHZpZXdzLgorICov Cit2YXIgZ2V0RmlsZUluZm8gPSBmdW5jdGlvbihmaWxlKXsKKyAgLy8gVXBk YXRlIGxvY2F0aW9uIGZvciBzdGF0dXMsIHVwbG9hZCwgJiBuZXcgZm9sZGVy IGZ1bmN0aW9ucy4KKyAgdmFyIGN1cnJlbnRwYXRoID0gZmlsZS5zdWJzdHIo MCwgZmlsZS5sYXN0SW5kZXhPZignLycpICsgMSk7CisgIHNldFVwbG9hZGVy KGN1cnJlbnRwYXRoKTsKKworICAvLyBSZXRyaWV2ZSB0aGUgZGF0YSAmIHBv cHVsYXRlIHRoZSB0ZW1wbGF0ZS4KKyAgdmFyIGQgPSBuZXcgRGF0ZSgpOyAv LyB0byBwcmV2ZW50IElFIGNhY2hlIGlzc3VlcworICB2YXIgcG9zdF9kYXRh ID0geworICAgICdwYXRoJzogZmlsZSwKKyAgICAnbW9kZSc6ICdnZXRpbmZv JworICB9OworCisgICQuYWpheCh7CisgICAgdHlwZTogJ1BPU1QnLAorICAg IGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RfZGF0YSksCisgICAgdXJsOiBm aWxlQ29ubmVjdG9yLAorICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgY29u dGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwK KyAgICBhc3luYzogZmFsc2UsCisgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0 YSl7CisgICAgICBpZihkYXRhWydDb2RlJ10gPT09IDApeworICAgICAgICB2 YXIgcHJvcGVydGllcyA9ICcnOworICAgICAgICBpZihkYXRhWydQcm9wZXJ0 aWVzJ11bJ1dpZHRoJ10gJiYgZGF0YVsnUHJvcGVydGllcyddWydXaWR0aCdd ICE9ICcnKSBwcm9wZXJ0aWVzICs9ICc8ZHQ+JyArIGxnLmRpbWVuc2lvbnMg KyAnPC9kdD48ZGQ+JyArIGRhdGFbJ1Byb3BlcnRpZXMnXVsnV2lkdGgnXSAr ICd4JyArIGRhdGFbJ1Byb3BlcnRpZXMnXVsnSGVpZ2h0J10gKyAnPC9kZD4n OworICAgICAgICBpZihkYXRhWydQcm9wZXJ0aWVzJ11bJ0RhdGUgQ3JlYXRl ZCddICYmIGRhdGFbJ1Byb3BlcnRpZXMnXVsnRGF0ZSBDcmVhdGVkJ10gIT0g JycpIHByb3BlcnRpZXMgKz0gJzxkdD4nICsgbGcuY3JlYXRlZCArICc8L2R0 PjxkZD4nICsgZGF0YVsnUHJvcGVydGllcyddWydEYXRlIENyZWF0ZWQnXSAr ICc8L2RkPic7CisgICAgICAgIGlmKGRhdGFbJ1Byb3BlcnRpZXMnXVsnRGF0 ZSBNb2RpZmllZCddICYmIGRhdGFbJ1Byb3BlcnRpZXMnXVsnRGF0ZSBNb2Rp ZmllZCddICE9ICcnKSBwcm9wZXJ0aWVzICs9ICc8ZHQ+JyArIGxnLm1vZGlm aWVkICsgJzwvZHQ+PGRkPicgKyBkYXRhWydQcm9wZXJ0aWVzJ11bJ0RhdGUg TW9kaWZpZWQnXSArICc8L2RkPic7CisgICAgICAgIGlmKGRhdGFbJ1Byb3Bl cnRpZXMnXVsnU2l6ZSddIHx8IHBhcnNlSW50KGRhdGFbJ1Byb3BlcnRpZXMn XVsnU2l6ZSddKT09MCkgcHJvcGVydGllcyArPSAnPGR0PicgKyBsZy5zaXpl ICsgJzwvZHQ+PGRkPicgKyBmb3JtYXRCeXRlcyhkYXRhWydQcm9wZXJ0aWVz J11bJ1NpemUnXSkgKyAnPC9kZD4nOworICAgICAgICBkYXRhWydDYXBhYmls aXRpZXMnXSA9IGNhcGFiaWxpdGllczsKKyAgICAgICAgYmluZFRvb2xiYXIo ZGF0YSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhbGVydGlmeS5lcnJv cihkYXRhWydFcnJvciddKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworfTsK KworLyoKKyAqIFJldHJpZXZlcyBkYXRhIGZvciBhbGwgaXRlbXMgd2l0aGlu IHRoZSBnaXZlbiBmb2xkZXIgYW5kCisgKiBjcmVhdGVzIGEgbGlzdCB2aWV3 LgorICovCit2YXIgZ2V0Rm9sZGVySW5mbyA9IGZ1bmN0aW9uKHBhdGgsIGZp bGVfdHlwZT0nJyl7CisgIC8vIFVwZGF0ZSBsb2NhdGlvbiBmb3Igc3RhdHVz LCB1cGxvYWQsICYgbmV3IGZvbGRlciBmdW5jdGlvbnMuCisgIHNldFVwbG9h ZGVyKHBhdGgpOworCisgIC8vIEJyZWFkQ3J1bWIgY2xpY2sgZXZlbnQKKyAg JCgnLmZpbGVfbWFuYWdlciBhLmJyZWFkY3J1bWJzJykudW5iaW5kKCkub24o J2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhdGggPSAkKHRoaXMp LmF0dHIoJ2RhdGEtcGF0aCcpLAorICAgICAgICBjdXJyZW50X2RpciA9ICQo dGhpcykuaHRtbCgpLAorICAgICAgICBtb3ZlX3RvID0gcGF0aC5zdWJzdHJp bmcoMCwgcGF0aC5sYXN0SW5kZXhPZihjdXJyZW50X2RpcikpK2N1cnJlbnRf ZGlyOworICAgIGdldEZvbGRlckluZm8obW92ZV90byk7CisgICAgZW5hYl9k aXNfbGV2ZWxfdXAoKTsKKyAgfSk7CisKKyAgLy8gRGlzcGxheSBhbiBhY3Rp dml0eSBpbmRpY2F0b3IuCisgICQoJy5maWxlaW5mbycpLmZpbmQoJ2ltZyNh Y3Rpdml0eScpLnJlbW92ZSgpLmFwcGVuZCgnPGltZyBpZD0iYWN0aXZpdHki IHNyYz0iLi4vZmlsZV9tYW5hZ2VyL3N0YXRpYy9pbWcvd2FpdDMwdHJhbnMu Z2lmIiB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIC8+Jyk7CisgIC8vIFJldHJp ZXZlIHRoZSBkYXRhIGFuZCBnZW5lcmF0ZSB0aGUgbWFya3VwLgorICB2YXIg ZCA9IG5ldyBEYXRlKCk7IC8vIHRvIHByZXZlbnQgSUUgY2FjaGUgaXNzdWVz CisgIGlmICgkLnVybFBhcmFtKCd0eXBlJykpIHVybCArPSAnJnR5cGU9JyAr ICQudXJsUGFyYW0oJ3R5cGUnKTsKKworICB2YXIgcG9zdF9kYXRhID0gewor ICAgICdwYXRoJzogcGF0aCwKKyAgICAnbW9kZSc6ICdnZXRmb2xkZXInLAor ICAgICdmaWxlX3R5cGUnOiBmaWxlX3R5cGUKKyAgfTsKKworICAkLmFqYXgo eworICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRhOiBKU09OLnN0cmluZ2lm eShwb3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAgICBk YXRhVHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRp b24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgYXN5bmM6IGZhbHNlLAor ICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpeworICAgIHZhciByZXN1bHQg PSAnJzsKKworICAgIC8vIElzIHRoZXJlIGFueSBlcnJvciBvciB1c2VyIGlz IHVuYXV0aG9yaXplZD8KKyAgICBpZihkYXRhLkNvZGU9PSctMScpIHsKKyAg ICAgIGhhbmRsZUVycm9yKGRhdGEuRXJyb3IpOworICAgICAgcmV0dXJuOwor ICAgIH07CisKKyAgICBpZihkYXRhKXsKKyAgICAgIGlmKCQoJy5maWxlaW5m bycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICByZXN1bHQg Kz0gJzx1bCBpZD0iY29udGVudHMiIGNsYXNzPSJncmlkIj4nOworICAgICAg ICBmb3Ioa2V5IGluIGRhdGEpeworICAgICAgICAgIHZhciBwcm9wcyA9IGRh dGFba2V5XVsnUHJvcGVydGllcyddLAorICAgICAgICAgICAgICBjYXBfY2xh c3NlcyA9ICIiOworICAgICAgICAgIGZvciAoY2FwIGluIGNhcGFiaWxpdGll cykgeworICAgICAgICAgICAgaWYgKGhhc19jYXBhYmlsaXR5KGRhdGFba2V5 XSwgY2FwYWJpbGl0aWVzW2NhcF0pKSB7CisgICAgICAgICAgICAgIGNhcF9j bGFzc2VzICs9ICJjYXBfIiArIGNhcGFiaWxpdGllc1tjYXBdOworICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHZhciBzY2FsZWRX aWR0aCA9IDY0LAorICAgICAgICAgICAgICBhY3R1YWxXaWR0aCA9IHByb3Bz WydXaWR0aCddOworICAgICAgICAgIGlmKGFjdHVhbFdpZHRoID4gMSAmJiBh Y3R1YWxXaWR0aCA8IHNjYWxlZFdpZHRoKSBzY2FsZWRXaWR0aCA9IGFjdHVh bFdpZHRoOworCisgICAgICAgICAgZGF0YVtrZXldWydDYXBhYmlsaXRpZXMn XSA9IGNhcGFiaWxpdGllczsKKyAgICAgICAgICBiaW5kVG9vbGJhcihkYXRh W2tleV0pOworCisgICAgICAgICAgdmFyIGNsYXNzX3R5cGUgPSAoZGF0YVtr ZXldWydmaWxlX3R5cGUnXSA9PSAnZGlyJyA/ICdmYSBmYS1mb2xkZXItb3Bl biBmbV9mb2xkZXInIDogJ2ZhIGZhLWZpbGUtdGV4dCBmbV9maWxlJykKKyAg ICAgICAgICAgICAgZm1fZmlsZW5hbWUgPSBkYXRhW2tleV1bJ0ZpbGVuYW1l J107CisgICAgICAgICAgaWYgKGZtX2ZpbGVuYW1lLmxlbmd0aCA+IDE1ICkg eworICAgICAgICAgICAgICBmbV9maWxlbmFtZSA9IGRhdGFba2V5XVsnRmls ZW5hbWUnXS5zdWJzdHIoMCwgMTApICsnLi4uJzsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYoIWhhc19jYXBhYmlsaXR5KGRhdGFba2V5XSwgJ3JlbmFt ZScpKQorICAgICAgICAgICAgcmVzdWx0ICs9ICc8bGkgY2xhc3M9IicgKyBj YXBfY2xhc3NlcyArICciPjxkaXYgY2xhc3M9ImNsaXAiPjxzcGFuIGRhdGEt YWx0PSInICsgZGF0YVtrZXldWydQYXRoJ10gKyAnIiBjbGFzcz0iJyArIGNs YXNzX3R5cGUgKyAnIj48L3NwYW4+PC9kaXY+PHNwYW4+JyArIGZtX2ZpbGVu YW1lICsgJzwvc3Bhbj4nOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHJlc3VsdCArPSAnPGxpIGNsYXNzPSInICsgY2FwX2NsYXNzZXMgKyAnIj48 ZGl2IGNsYXNzPSJjbGlwIj48c3BhbiBkYXRhLWFsdD0iJyArIGRhdGFba2V5 XVsnUGF0aCddICsgJyIgY2xhc3M9IicgKyBjbGFzc190eXBlICsgJyI+PC9z cGFuPjwvZGl2PjxwPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm1fZmls ZV9yZW5hbWUiIC8+PHNwYW4gdGl0bGU9IicrZGF0YVtrZXldWydGaWxlbmFt ZSddKyciPicgKyBmbV9maWxlbmFtZSArICc8L3NwYW4+PC9wPic7CisgICAg ICAgICAgaWYocHJvcHNbJ1dpZHRoJ10gJiYgcHJvcHNbJ1dpZHRoJ10gIT0g JycpIHJlc3VsdCArPSAnPHNwYW4gY2xhc3M9Im1ldGEgZGltZW5zaW9ucyI+ JyArIHByb3BzWydXaWR0aCddICsgJ3gnICsgcHJvcHNbJ0hlaWdodCddICsg Jzwvc3Bhbj4nOworICAgICAgICAgIGlmKHByb3BzWydTaXplJ10gJiYgcHJv cHNbJ1NpemUnXSAhPSAnJykgcmVzdWx0ICs9ICc8c3BhbiBjbGFzcz0ibWV0 YSBzaXplIj4nICsgcHJvcHNbJ1NpemUnXSArICc8L3NwYW4+JzsKKyAgICAg ICAgICBpZihwcm9wc1snRGF0ZSBDcmVhdGVkJ10gJiYgcHJvcHNbJ0RhdGUg Q3JlYXRlZCddICE9ICcnKSByZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJtZXRh IGNyZWF0ZWQiPicgKyBwcm9wc1snRGF0ZSBDcmVhdGVkJ10gKyAnPC9zcGFu Pic7CisgICAgICAgICAgaWYocHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAmJiBw cm9wc1snRGF0ZSBNb2RpZmllZCddICE9ICcnKSByZXN1bHQgKz0gJzxzcGFu IGNsYXNzPSJtZXRhIG1vZGlmaWVkIj4nICsgcHJvcHNbJ0RhdGUgTW9kaWZp ZWQnXSArICc8L3NwYW4+JzsKKyAgICAgICAgICByZXN1bHQgKz0gJzwvbGk+ JzsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCArPSAnPC91bD4nOwor ICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ICs9ICc8dGFibGUgaWQ9 ImNvbnRlbnRzIiBjbGFzcz0ibGlzdCI+JzsKKyAgICAgICAgcmVzdWx0ICs9 ICc8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iaGVhZGVyU29ydERvd24iPjxzcGFu PicgKyBsZy5uYW1lICsgJzwvc3Bhbj48L3RoPjx0aD48c3Bhbj4nICsgbGcu c2l6ZSArICc8L3NwYW4+PC90aD48dGg+PHNwYW4+JyArIGxnLm1vZGlmaWVk ICsgJzwvc3Bhbj48L3RoPjwvdHI+PC90aGVhZD4nOworICAgICAgICByZXN1 bHQgKz0gJzx0Ym9keT4nOworCisgICAgICAgIGZvcihrZXkgaW4gZGF0YSl7 CisgICAgICAgICAgdmFyIHBhdGggPSBkYXRhW2tleV1bJ1BhdGgnXSwKKyAg ICAgICAgICAgICAgcHJvcHMgPSBkYXRhW2tleV1bJ1Byb3BlcnRpZXMnXSwK KyAgICAgICAgICAgICAgY2FwX2NsYXNzZXMgPSAiIjsKKyAgICAgICAgICBm b3IgKGNhcCBpbiBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgICAgIGlmICho YXNfY2FwYWJpbGl0eShkYXRhW2tleV0sIGNhcGFiaWxpdGllc1tjYXBdKSkg eworICAgICAgICAgICAgICBjYXBfY2xhc3NlcyArPSAiIGNhcF8iICsgY2Fw YWJpbGl0aWVzW2NhcF07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor CisgICAgICAgICAgZGF0YVtrZXldWydDYXBhYmlsaXRpZXMnXSA9IGNhcGFi aWxpdGllczsKKyAgICAgICAgICBiaW5kVG9vbGJhcihkYXRhW2tleV0pOwor CisgICAgICAgICAgdmFyIGNsYXNzX3R5cGUgPSAoZGF0YVtrZXldWydmaWxl X3R5cGUnXSA9PSAnZGlyJyA/ICdmYSBmYS1mb2xkZXItb3BlbiB0YmxfZm9s ZGVyJyA6ICdmYSBmYS1maWxlLXRleHQgdGJsX2ZpbGUnKQorCisgICAgICAg ICAgcmVzdWx0ICs9ICc8dHIgY2xhc3M9IicgKyBjYXBfY2xhc3NlcyArICci Pic7CisKKyAgICAgICAgICB2YXIgZm1fZmlsZW5hbWUgPSBkYXRhW2tleV1b J0ZpbGVuYW1lJ107CisgICAgICAgICAgaWYgKGZtX2ZpbGVuYW1lLmxlbmd0 aCA+IDE1ICkgeworICAgICAgICAgICAgICBmbV9maWxlbmFtZSA9IGRhdGFb a2V5XVsnRmlsZW5hbWUnXS5zdWJzdHIoMCwgMTApICsnLi4uJzsKKyAgICAg ICAgICB9CisKKyAgICAgICAgICBpZighaGFzX2NhcGFiaWxpdHkoZGF0YVtr ZXldLCAncmVuYW1lJykpCisgICAgICAgICAgICByZXN1bHQgKz0gJzx0ZCB0 aXRsZT0iJyArIHBhdGggKyAnIiBjbGFzcz0iJytjbGFzc190eXBlKyciPjxz cGFuIHRpdGxlPSInICsgZGF0YVtrZXldWydGaWxlbmFtZSddICsgJyI+JyAr IGZtX2ZpbGVuYW1lICsgJzwvc3Bhbj48L3RkPic7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQgdGl0bGU9IicgKyBwYXRo ICsgJyIgY2xhc3M9IicrY2xhc3NfdHlwZSsnIj48cD48aW5wdXQgdHlwZT0i dGV4dCIgY2xhc3M9ImZtX2ZpbGVfcmVuYW1lIiAvPjxzcGFuIHRpdGxlPSIn ICsgZGF0YVtrZXldWydGaWxlbmFtZSddICsgJyI+JyArIGZtX2ZpbGVuYW1l ICsgJzwvc3Bhbj48L3A+PC90ZD4nOworCisgICAgICAgICAgaWYocHJvcHNb J1NpemUnXSAmJiBwcm9wc1snU2l6ZSddICE9ICcnKXsKKyAgICAgICAgICAg IHJlc3VsdCArPSAnPHRkPjxhYmJyIHRpdGxlPSInICsgcHJvcHNbJ1NpemUn XSArICciPicgKyBmb3JtYXRCeXRlcyhwcm9wc1snU2l6ZSddKSArICc8L2Fi YnI+PC90ZD4nOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy ZXN1bHQgKz0gJzx0ZD48L3RkPic7CisgICAgICAgICAgfQorCisgICAgICAg ICAgaWYocHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAmJiBwcm9wc1snRGF0ZSBN b2RpZmllZCddICE9ICcnKXsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHRk PicgKyBwcm9wc1snRGF0ZSBNb2RpZmllZCddICsgJzwvdGQ+JzsKKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+PC90 ZD4nOworICAgICAgICAgIH0KKworICAgICAgICAgIHJlc3VsdCArPSAnPC90 cj4nOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ICs9ICc8L3Rib2R5 Pic7CisgICAgICAgIHJlc3VsdCArPSAnPC90YWJsZT4nOworICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICByZXN1bHQgKz0gJzxoMT4nICsgbGcuY291 bGRfbm90X3JldHJpZXZlX2ZvbGRlciArICc8L2gxPic7CisgICAgfQorCisg ICAgLy8gQWRkIHRoZSBuZXcgbWFya3VwIHRvIHRoZSBET00uCisgICAgJCgn LmZpbGVpbmZvIC5maWxlX2xpc3RpbmcnKS5odG1sKHJlc3VsdCk7CisKKyAg ICAvLyByZW5hbWUgZmlsZS9mb2xkZXIKKyAgICAkKCcuZmlsZV9tYW5hZ2Vy IGJ1dHRvbi5yZW5hbWUnKS51bmJpbmQoKS5vbignY2xpY2snLGZ1bmN0aW9u KGUpeworICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09 ICdncmlkJyl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg ICAgIHZhciAkdGhpcyA9ICQoJy5maWxlX21hbmFnZXInKS5maW5kKCcjY29u dGVudHMgbGkuc2VsZWN0ZWQgcCcpLAorICAgICAgICAgICAgb3JpZ192YWx1 ZSA9ICR0aGlzLmZpbmQoJ3NwYW4nKS5hdHRyKCd0aXRsZScpLAorICAgICAg ICAgICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmln X3ZhbHVlLmluZGV4T2YoJy4nKSk7CisKKyAgICAgICAgaWYgKG5ld3ZhbHVl ID09PSAnJykKKyAgICAgICAgICBuZXd2YWx1ZSA9IG9yaWdfdmFsdWU7CisK KyAgICAgICAgJHRoaXMuZmluZCgnaW5wdXQnKS50b2dnbGUoKS52YWwobmV3 dmFsdWUpLmZvY3VzKCk7CisgICAgICAgICR0aGlzLmZpbmQoJ3NwYW4nKS50 b2dnbGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoJCgnLmZpbGVpbmZv JykuZGF0YSgndmlldycpID09ICdsaXN0Jyl7CisgICAgICAgIGUuc3RvcFBy b3BhZ2F0aW9uKCk7CisgICAgICAgIHZhciAkdGhpcyA9ICQoJy5maWxlaW5m bycpLmZpbmQoJ3RhYmxlI2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkIHRk OmZpcnN0LWNoaWxkIHAnKSwKKyAgICAgICAgICAgIG9yaWdfdmFsdWUgPSAk dGhpcy5maW5kKCdzcGFuJykuaHRtbCgpLAorICAgICAgICAgICAgbmV3dmFs dWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3ZhbHVlLmluZGV4 T2YoJy4nKSk7CisgICAgICAgIGlmIChuZXd2YWx1ZSA9PT0gJycpCisgICAg ICAgICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlOworCisgICAgICAgICR0aGlz LmZpbmQoJ2lucHV0JykudG9nZ2xlKCkudmFsKG5ld3ZhbHVlKS5mb2N1cygp OworICAgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9nZ2xlKCk7CisgICAg ICB9CisgICAgfSk7CisKKyAgICAkKCcuZmlsZWluZm8gI2NvbnRlbnRzIGxp IHAnKS5vbignZGJsY2xpY2snLGZ1bmN0aW9uKGUpeworICAgICAgZS5zdG9w UHJvcGFnYXRpb24oKTsKKyAgICAgIC8vIFByb21wdCB0byByZW5hbWUgZmls ZS9mb2xkZXIKKyAgICAgICR0aGlzID0gJCh0aGlzKTsKKyAgICAgIHZhciBv cmlnX3ZhbHVlID0gJHRoaXMuZmluZCgnc3BhbicpLmF0dHIoJ3RpdGxlJyks CisgICAgICAgICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygw LCBvcmlnX3ZhbHVlLmluZGV4T2YoJy4nKSk7CisKKyAgICAgIGlmIChuZXd2 YWx1ZSA9PT0gJycpCisgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZTsK KworICAgICAgJHRoaXMuZmluZCgnaW5wdXQnKS50b2dnbGUoKS52YWwobmV3 dmFsdWUpLmZvY3VzKCk7CisgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9n Z2xlKCk7CisgICAgfSk7CisKKyAgICAkKCcuZmlsZWluZm8gdGFibGUjY29u dGVudHMgdHIgdGQgcCcpLm9uKCdkYmxjbGljaycsZnVuY3Rpb24oZSl7Cisg ICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgLy8gUHJvbXB0IHRv IHJlbmFtZSBmaWxlL2ZvbGRlcgorICAgICAgJHRoaXMgPSAkKHRoaXMpOwor ICAgICAgdmFyIG9yaWdfdmFsdWUgPSAkdGhpcy5maW5kKCdzcGFuJykuYXR0 cigndGl0bGUnKSwKKyAgICAgICAgICBuZXd2YWx1ZSA9IG9yaWdfdmFsdWUu c3Vic3RyaW5nKDAsIG9yaWdfdmFsdWUuaW5kZXhPZignLicpKTsKKworICAg ICAgaWYgKG5ld3ZhbHVlID09PSAnJykKKyAgICAgICAgbmV3dmFsdWUgPSBv cmlnX3ZhbHVlOworCisgICAgICAkdGhpcy5maW5kKCdpbnB1dCcpLnRvZ2ds ZSgpLnZhbChuZXd2YWx1ZSkuZm9jdXMoKTsKKyAgICAgICR0aGlzLmZpbmQo J3NwYW4nKS50b2dnbGUoKTsKKyAgICB9KTsKKworICAgIC8vIFJlbmFtZSBV SSBoYW5kbGluZworICAgICQoJy5maWxlaW5mbyAjY29udGVudHMgbGkgcCcp Lm9uKCdrZXlkb3duIGJsdXIgZGJsY2xpY2snLCdpbnB1dCcsIGZ1bmN0aW9u KGUpeworICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIHZhciBv bGRfbmFtZSA9ICQodGhpcykuc2libGluZ3MoJ3NwYW4nKS5hdHRyKCd0aXRs ZScpLAorICAgICAgICAgIG5ld3ZhbHVlID0gb2xkX25hbWUuc3Vic3RyaW5n KDAsIG9sZF9uYW1lLmluZGV4T2YoJy4nKSk7CisgICAgICAgICAgbGFzdCA9 IGdldEZpbGVFeHRlbnNpb24ob2xkX25hbWUpOworICAgICAgaWYob2xkX25h bWUuaW5kZXhPZignLicpID09IDApCisgICAgICAgIGxhc3QgPSAnJworCisg ICAgICBpZiAobmV3dmFsdWUgPT0gJycpCisgICAgICAgIG5ld3ZhbHVlID0g b2xkX25hbWU7CisKKyAgICAgIGlmKGUudHlwZT09ImtleWRvd24iKQorICAg ICAgeworICAgICAgICBpZihlLndoaWNoPT0xMykKKyAgICAgICAgeworICAg ICAgICAgIHZhciBmdWxsX25hbWUgPSAkKHRoaXMpLnZhbCgpICsgKGxhc3Qg IT09ICcnID8gJy4nICsgbGFzdDogJycpOworICAgICAgICAgICQodGhpcyku dG9nZ2xlKCk7CisgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygnc3Bhbicp LnRvZ2dsZSgpLmh0bWwoZnVsbF9uYW1lKTsKKworICAgICAgICAgIHZhciBu ZXdfbmFtZSA9ICQodGhpcykudmFsKCksCisgICAgICAgICAgICAgIHBhdGgg PSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJ3NwYW4nKS5hdHRy KCdkYXRhLWFsdCcpOworCisgICAgICAgICAgdmFyIGRhdGEgPSB7CisgICAg ICAgICAgICAnRmlsZW5hbWUnOiBvbGRfbmFtZSwKKyAgICAgICAgICAgICdQ YXRoJzogcGF0aCwKKyAgICAgICAgICAgICdOZXdGaWxlbmFtZSc6IG5ld19u YW1lCisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmIChuZXd2YWx1ZSAh PT0gbmV3X25hbWUpIHsKKyAgICAgICAgICAgIHJlbmFtZUl0ZW0oZGF0YSk7 CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gJCgnLmN1cnJlbnRwYXRoJyku dmFsKCk7CisgICAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7Cisg ICAgICAgICAgfQorICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYoZS53aGljaD09MzggfHwgZS53aGljaD09 NDAgfHwgZS53aGljaD09MzcgfHwgZS53aGljaD09MzkgfHwgZS5rZXlDb2Rl ID09IDMyKQorICAgICAgICB7CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihlLnR5 cGU9PSJmb2N1c291dCIpCisgICAgICB7CisgICAgICAgIGlmKCQodGhpcyku Y3NzKCdkaXNwbGF5Jyk9PSJpbmxpbmUtYmxvY2siKQorICAgICAgICB7Cisg ICAgICAgICAgdmFyIGZ1bGxfbmFtZSA9ICQodGhpcykudmFsKCkgKyAobGFz dCAhPT0gJyc/ICcuJyArIGxhc3Q6ICcnKTsKKyAgICAgICAgICAkKHRoaXMp LnRvZ2dsZSgpOworICAgICAgICAgICQodGhpcykuc2libGluZ3MoJ3NwYW4n KS50b2dnbGUoKS5odG1sKGZ1bGxfbmFtZSk7CisKKyAgICAgICAgICB2YXIg bmV3X25hbWUgPSAkKHRoaXMpLnZhbCgpLAorICAgICAgICAgICAgICBwYXRo ID0gJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCdzcGFuJykuYXR0 cignZGF0YS1hbHQnKTsKKworICAgICAgICAgIHZhciBkYXRhID0geworICAg ICAgICAgICAgJ0ZpbGVuYW1lJzogb2xkX25hbWUsCisgICAgICAgICAgICAn UGF0aCc6IHBhdGgsCisgICAgICAgICAgICAnTmV3RmlsZW5hbWUnOiBuZXdf bmFtZQorICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAobmV3dmFsdWUg IT09IG5ld19uYW1lKSB7CisgICAgICAgICAgICByZW5hbWVJdGVtKGRhdGEp OworICAgICAgICAgICAgdmFyIHBhcmVudCA9ICQoJy5jdXJyZW50cGF0aCcp LnZhbCgpOworICAgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhwYXJlbnQpOwor ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQor ICAgICAgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg fQorICAgIH0pOworCisgICAgJCgnLmZpbGVpbmZvIHRhYmxlI2NvbnRlbnRz IHRyIHRkIHAnKS5vbigna2V5ZG93biBibHVyIGRibGNsaWNrJywnaW5wdXQn LGZ1bmN0aW9uKGUpeworICAgICAgdmFyIG9sZF9uYW1lID0gJCh0aGlzKS5z aWJsaW5ncygnc3BhbicpLmF0dHIoJ3RpdGxlJyksCisgICAgICAgICAgbmV3 dmFsdWUgPSBvbGRfbmFtZS5zdWJzdHJpbmcoMCwgb2xkX25hbWUuaW5kZXhP ZignLicpKTsKKyAgICAgICAgICBsYXN0ID0gZ2V0RmlsZUV4dGVuc2lvbihv bGRfbmFtZSk7CisgICAgICBpZihvbGRfbmFtZS5pbmRleE9mKCcuJykgPT0g MCkKKyAgICAgICAgbGFzdCA9ICcnCisKKyAgICAgIGlmIChuZXd2YWx1ZSA9 PSAnJykKKyAgICAgICAgbmV3dmFsdWUgPSBvbGRfbmFtZTsKKworICAgICAg aWYoZS50eXBlPT0iZm9jdXNvdXQiKQorICAgICAgeworICAgICAgICBpZigk KHRoaXMpLmNzcygnZGlzcGxheScpPT0iaW5saW5lLWJsb2NrIikKKyAgICAg ICAgeworICAgICAgICAgIHZhciBmdWxsX25hbWUgPSAkKHRoaXMpLnZhbCgp ICsgKGxhc3QgIT09ICcnPyAnLicgKyBsYXN0OiAnJyk7CisgICAgICAgICAg JCh0aGlzKS50b2dnbGUoKTsKKyAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdz KCdzcGFuJykudG9nZ2xlKCkuaHRtbChmdWxsX25hbWUpOworCisgICAgICAg ICAgdmFyIG5ld19uYW1lID0gJCh0aGlzKS52YWwoKSwKKyAgICAgICAgICAg ICAgcGF0aCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkuYXR0cigndGl0 bGUnKTsKKworICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAg J0ZpbGVuYW1lJzogb2xkX25hbWUsCisgICAgICAgICAgICAnUGF0aCc6IHBh dGgsCisgICAgICAgICAgICAnTmV3RmlsZW5hbWUnOiBuZXdfbmFtZQorICAg ICAgICAgIH07CisKKyAgICAgICAgICBpZiAobmV3dmFsdWUgIT09IG5ld19u YW1lKSB7CisgICAgICAgICAgICByZW5hbWVJdGVtKGRhdGEpOworICAgICAg ICAgICAgdmFyIHBhcmVudCA9IHBhdGguc3BsaXQoJy8nKS5yZXZlcnNlKCku c2xpY2UoMikucmV2ZXJzZSgpLmpvaW4oJy8nKSArICcvJzsKKyAgICAgICAg ICAgIGdldEZvbGRlckluZm8ocGFyZW50KTsKKyAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAg ZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIH0KKyAgICB9KTsKKworCisg ICAgLyoKKyAgICAgKiBCaW5kIGNsaWNrIGV2ZW50cworICAgICAqIFNlbGVj dCBpdGVtcyAtIGFmb2xkZXIgZGJsY2xpY2sKKyAgICAgKi8KKyAgICBpZigk KCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsKKyAgICAg IC8vIEdldCBpbnRvIGZvbGRlciBvbiBkYmxjbGljaworICAgICAgJCgnLmZp bGVpbmZvJykuZmluZCgnI2NvbnRlbnRzIGxpJykuZGJsY2xpY2soZnVuY3Rp b24oZSl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisKKyAgICAg ICAgLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAgYnV0dG9uCisgICAgICAg IGVuYWJfZGlzX2xldmVsX3VwKCk7CisgICAgICAgIHZhciBwYXRoID0gJCh0 aGlzKS5maW5kKCdzcGFuJykuYXR0cignZGF0YS1hbHQnKTsKKworICAgICAg ICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0gcGF0aC5sZW5ndGggLSAx KXsKKyAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykuYWRkQ2xhc3Mo J2Rpc2FibGVkJyk7CisgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0 b24uZG93bmxvYWQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwor ICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZp bGVfbWFuYWdlciBidXR0b24ucmVuYW1lJykuYXR0cignZGlzYWJsZWQnLCAn ZGlzYWJsZWQnKTsKKyAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGdldEZpbGVJbmZvKHBhdGgp OworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgZGF0YV9jYXAgPSB7 fQorICAgICAgZGF0YV9jYXBbJ0NhcGFiaWxpdGllcyddID0gY2FwYWJpbGl0 aWVzOworICAgICAgJCgnLmZpbGVpbmZvJykuZmluZCgnI2NvbnRlbnRzIGxp JykuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0 aW9uKCk7CisgICAgICAgIHZhciBwYXRoID0gZmlsZV9uYW1lID0gJCh0aGlz KS5maW5kKCdzcGFuJykuYXR0cignZGF0YS1hbHQnKTsKKyAgICAgICAgaWYo cGF0aC5sYXN0SW5kZXhPZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7Cisg ICAgICAgICAgaWYoaGFzX2NhcGFiaWxpdHkoZGF0YV9jYXAsICdzZWxlY3Rf Zm9sZGVyJykpIHsKKyAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmlu ZCgnbGkuc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAg ICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3MoJ2Rp c2FibGVkJyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRv bi5kZWxldGUsIC5maWxlX21hbmFnZXIgYnV0dG9uLnJlbmFtZScpLnJlbW92 ZUF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAk KCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2Fi bGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAvLyBzZXQgc2VsZWN0 ZWQgZm9sZGVyIG5hbWUgaW4gYnJlYWRjcnVtcworICAgICAgICAgICAgJCgn LmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgaDEnKS5oaWRlKCk7CisgICAgICAg ICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuc2hvd19zZWxlY3Rl ZF9maWxlJykucmVtb3ZlKCk7CisgICAgICAgICAgICAkKCc8c3BhbiBjbGFz cz0ic2hvd19zZWxlY3RlZF9maWxlIj4nK3BhdGgrJzwvc3Bhbj4nKS5hcHBl bmRUbygnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBh dGgtZ3JvdXAnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy9nZXRGb2xk ZXJJbmZvKHBhdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlm KGhhc19jYXBhYmlsaXR5KGRhdGFfY2FwLCAnc2VsZWN0X2ZpbGUnKSkgewor ICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCdsaS5zZWxlY3Rl ZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgJCh0 aGlzKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJy5m aWxlX21hbmFnZXJfb2snKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAg ICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZp bGVfbWFuYWdlciBidXR0b24uZG93bmxvYWQsIC5maWxlX21hbmFnZXIgYnV0 dG9uLnJlbmFtZScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAg ICAgICAvLyBzZXQgc2VsZWN0ZWQgZm9sZGVyIG5hbWUgaW4gYnJlYWRjcnVt cworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgaDEn KS5oaWRlKCk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxv YWRlciAuc2hvd19zZWxlY3RlZF9maWxlJykucmVtb3ZlKCk7CisgICAgICAg ICAgICAkKCc8c3BhbiBjbGFzcz0ic2hvd19zZWxlY3RlZF9maWxlIj4nK3Bh dGgrJzwvc3Bhbj4nKS5hcHBlbmRUbygnLmZpbGVfbWFuYWdlciAjdXBsb2Fk ZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAnKTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYoY29uZmlnLm9wdGlvbnMuZGlhbG9nX3R5cGUgPT0gJ2Ny ZWF0ZV9maWxlJykgeworICAgICAgICAgICAgJCgnLmNyZWF0ZV9pbnB1dCBp bnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoZmlsZV9uYW1lKTsKKyAgICAgICAg ICAgICQoJy5maWxlX21hbmFnZXJfb2ssIC5maWxlX21hbmFnZXJfY3JlYXRl JykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgfQorICAg ICAgICAgIGdldEZpbGVJbmZvKHBhdGgpOworICAgICAgICB9CisKKyAgICAg IH0pOworICAgIH0gZWxzZSB7CisgICAgICAkKCcuZmlsZWluZm8gdGFibGUj Y29udGVudHMgdGJvZHkgdHInKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsK KyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdmFyIHBh dGggPSBmaWxlX25hbWUgPSAkKCd0ZDpmaXJzdC1jaGlsZCcsIHRoaXMpLmF0 dHIoJ3RpdGxlJyk7CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8n KSA9PSBwYXRoLmxlbmd0aCAtIDEpeworICAgICAgICAgIGlmKGhhc19jYXBh YmlsaXR5KGRhdGFfY2FwLCAnc2VsZWN0X2ZvbGRlcicpKSB7CisgICAgICAg ICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJ3RyLnNlbGVjdGVkJykucmVt b3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAkKCd0ZDpmaXJz dC1jaGlsZCcsIHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdzZWxlY3RlZCcp OworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNs YXNzKCdkaXNhYmxlZCcpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdl ciBidXR0b24uZG93bmxvYWQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxl ZCcpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZGVs ZXRlLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5yZW1vdmVBdHRy KCdkaXNhYmxlZCcpOworICAgICAgICAgICAgLy8gc2V0IHNlbGVjdGVkIGZv bGRlciBuYW1lIGluIGJyZWFkY3J1bXMKKyAgICAgICAgICAgICQoJy5maWxl X21hbmFnZXIgI3VwbG9hZGVyIGgxJykuaGlkZSgpOworICAgICAgICAgICAg JCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2VsZWN0ZWRfZmls ZScpLnJlbW92ZSgpOworICAgICAgICAgICAgJCgnPHNwYW4gY2xhc3M9InNo b3dfc2VsZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBwZW5kVG8o Jy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRoLWdy b3VwJyk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vZ2V0Rm9sZGVySW5m byhwYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZihoYXNf Y2FwYWJpbGl0eShkYXRhX2NhcCwgJ3NlbGVjdF9maWxlJykpIHsKKyAgICAg ICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgndHIuc2VsZWN0ZWQnKS5y ZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJ3RkOmZp cnN0LWNoaWxkJywgdGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ3NlbGVjdGVk Jyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3Zl Q2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5h Z2VyIGJ1dHRvbi5kZWxldGUsIC5maWxlX21hbmFnZXIgYnV0dG9uLmRvd25s b2FkLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5yZW1vdmVBdHRy KCdkaXNhYmxlZCcpOworICAgICAgICAgICAgLy8gc2V0IHNlbGVjdGVkIGZv bGRlciBuYW1lIGluIGJyZWFkY3J1bXMKKyAgICAgICAgICAgICQoJy5maWxl X21hbmFnZXIgI3VwbG9hZGVyIGgxJykuaGlkZSgpOworICAgICAgICAgICAg JCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2VsZWN0ZWRfZmls ZScpLnJlbW92ZSgpOworICAgICAgICAgICAgJCgnPHNwYW4gY2xhc3M9InNo b3dfc2VsZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBwZW5kVG8o Jy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRoLWdy b3VwJyk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGNvbmZpZy5vcHRp b25zLmRpYWxvZ190eXBlID09ICdjcmVhdGVfZmlsZScpIHsKKyAgICAgICAg ICAgICQoJy5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFs KGZpbGVfbmFtZSk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29r LCAuZmlsZV9tYW5hZ2VyX2NyZWF0ZScpLnJlbW92ZUNsYXNzKCdkaXNhYmxl ZCcpOworICAgICAgICAgIH0KKyAgICAgICAgICBnZXRGaWxlSW5mbyhwYXRo KTsKKyAgICAgICAgfQorCisKKyAgICAgIH0pOworCisgICAgICAkKCcuZmls ZWluZm8gdGFibGUjY29udGVudHMgdGJvZHkgdHInKS5vbignZGJsY2xpY2sn LCBmdW5jdGlvbihlKXsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK KworICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBsZXZlbCB1cCBidXR0b24K KyAgICAgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKyAgICAgICAgdmFyIHBh dGggPSAkKCd0ZDpmaXJzdC1jaGlsZCcsIHRoaXMpLmF0dHIoJ3RpdGxlJyk7 CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRoLmxl bmd0aCAtIDEpeworICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5y ZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICAkKCcuZmlsZV9t YW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rp c2FibGVkJyk7CisgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24u ZGVsZXRlLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5hdHRyKCdk aXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgIGdldEZvbGRlcklu Zm8ocGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ2V0Rmls ZUluZm8ocGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgfQor ICAgfQorICB9KTsKK307CisKKy8vIFRvIHNhdmUgZmlsZQordmFyIHNhdmVG aWxlID0gZnVuY3Rpb24ocGF0aCkgeworICB2YXIgcG9zdF9kYXRhID0gewor ICAgICdwYXRoJzogcGF0aCwKKyAgICAnbmFtZSc6ICd0ZXN0LnR4dCcsCisg ICAgJ21vZGUnOiAnYWRkJworICB9OworCisgICQuYWpheCh7CisgICAgdHlw ZTogJ1BPU1QnLAorICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RfZGF0 YSksCisgICAgdXJsOiBmaWxlQ29ubmVjdG9yLAorICAgIGRhdGFUeXBlOiAn anNvbicsCisgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LWRvd25s b2FkOyBjaGFyc2V0PXV0Zi04IiwKKyAgICBhc3luYzogZmFsc2UsCisgICAg c3VjY2VzczogZnVuY3Rpb24oZGF0YSl7CisgICAgICBpZihkYXRhWydDb2Rl J10gPT09IDApeworICAgICAgICB2YXIgcHJvcGVydGllcyA9ICcnOworCisg ICAgICAgIGRhdGFbJ0NhcGFiaWxpdGllcyddID0gY2FwYWJpbGl0aWVzOwor ICAgICAgICBiaW5kVG9vbGJhcihkYXRhKTsKKyAgICAgIH0gZWxzZSB7Cisg ICAgICAgIGFsZXJ0aWZ5LmVycm9yKGRhdGFbJ0Vycm9yJ10pOworICAgICAg fQorICAgIH0KKyAgfSk7Cit9CisKKworLy8gRW5hYmxlL0Rpc2FibGUgbGV2 ZWwgdXAgYnV0dG9uCit2YXIgZW5hYl9kaXNfbGV2ZWxfdXAgPSBmdW5jdGlv bigpIHsKKworICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScpLnNo b3coKTsKKyAgJCgnLnNob3dfc2VsZWN0ZWRfZmlsZScpLnJlbW92ZSgpOwor ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgIHZhciBiID0gJCgnLmN1 cnJlbnRwYXRoJykudmFsKCksCisgICAgICAgICRsZXZlbF91cCA9ICQoJy5m aWxlX21hbmFnZXInKS5maW5kKCdidXR0b24ubGV2ZWwtdXAnKTsKKyAgICAg ICAgJGhvbWVfYnRuID0gJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRv bi5ob21lJyk7CisgICAgaWYgKGIgPT09IGZpbGVSb290KSB7CisgICAgICAk bGV2ZWxfdXAuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAg ICRob21lX2J0bi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAg IH0KKyAgICBlbHNlIHsKKyAgICAgICRob21lX2J0bi5yZW1vdmVBdHRyKCdk aXNhYmxlZCcpOworICAgICAgJGxldmVsX3VwLnJlbW92ZUF0dHIoJ2Rpc2Fi bGVkJyk7CisgICAgfQorICB9LCAxMDApOworfQorCisvLyBHZXQgdHJhbnNh Y3Rpb24gaWQgdG8gZ2VuZXJhdGUgcmVxdWVzdCB1cmwgYW5kCisvLyB0byBn ZW5lcmF0ZSBjb25maWcgZmlsZXMgb24gcnVudGltZQordmFyIHRyYW5zSWQg PSBnZXRUcmFuc0lkKCksCisgICAgdF9pZCA9ICcnOworCitpZiAodHJhbnNJ ZC5yZWFkeVN0YXRlID09IDQpCisgIHRfcmVzID0gSlNPTi5wYXJzZSh0cmFu c0lkLnJlc3BvbnNlVGV4dCk7Cit0X2lkID0gdF9yZXMuZGF0YS5maWxlVHJh bnNJZDsKKwordmFyIGZpbGVfbWFuYWdlcl9jb25maWdfanNvbiA9ICd7eyB1 cmxfZm9yKCJmaWxlX21hbmFnZXIuaW5kZXgiKSB9fScrdF9pZCsnL2ZpbGVf bWFuYWdlcl9jb25maWcuanNvbicsCisgICAgZmlsZV9tYW5hZ2VyX2NvbmZp Z19qcyA9ICd7eyB1cmxfZm9yKCJmaWxlX21hbmFnZXIuaW5kZXgiKSB9fScr J2ZpbGVfbWFuYWdlcl9jb25maWcuanMnLAorICAgIGZpbGVDb25uZWN0b3Ig PSAnLi4vZmlsZV9tYW5hZ2VyL2ZpbGVtYW5hZ2VyLycrdF9pZCsnLycsCisg ICAgY29uZmcgPSBsb2FkQ29uZmlnRmlsZSgpOworCisvLyBsb2FkIHVzZXIg Y29uZmlndXJhdGlvbiBmaWxlCitpZiAoY29uZmcucmVhZHlTdGF0ZSA9PSA0 KQorICBjb25maWcgPSBKU09OLnBhcnNlKGNvbmZnLnJlc3BvbnNlVGV4dCk7 CisKK3ZhciBmaWxlUm9vdCA9IGNvbmZpZy5vcHRpb25zLmZpbGVSb290LAor ICAgIGNhcGFiaWxpdGllcyA9IGNvbmZpZy5vcHRpb25zLmNhcGFiaWxpdGll czsKKworLyoKKyAqIEdldCBsb2NhbGl6ZWQgbWVzc2FnZXMgZnJvbSBmaWxl CisgKiB0aHJvdWdoIGN1bHR1cmUgdmFyIG9yIGZyb20gVVJMCisgKi8KK3Zh ciBsZyA9IFtdLAorICAgIGVuanMgPSAne3sgdXJsX2ZvcigiZmlsZV9tYW5h Z2VyLmluZGV4IikgfX0nKyJlbi5qcyIsCisgICAgbGdmID0gbG9hZExhbmdG aWxlKGVuanMpOworCitpZiAobGdmLnJlYWR5U3RhdGUgPT0gNCkKKyAgbGcg PSBKU09OLnBhcnNlKGxnZi5yZXNwb25zZVRleHQpOworCisvLyBEaXNhYmxl IGhvbWUgYnV0dG9uIG9uIGxvYWQKKyQoJy5maWxlX21hbmFnZXInKS5maW5k KCdidXR0b24uaG9tZScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7 CiskKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLmF0 dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisKK2lmIChjb25maWcub3B0 aW9ucy5kaWFsb2dfdHlwZSA9PSAnc2VsZWN0X2ZpbGUnIHx8CisJY29uZmln Lm9wdGlvbnMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJyB8fAorCWNv bmZpZy5vcHRpb25zLmRpYWxvZ190eXBlID09ICdzdG9yYWdlX2RpYWxvZycp IHsKKworICAvLyBDcmVhdGUgZmlsZSBzZWxlY3Rpb24gZHJvcGRvd24KKyAg dmFyIGFsbG93ZWRfdHlwZXMgPSBjb25maWcub3B0aW9ucy5hbGxvd2VkX2Zp bGVfdHlwZXMsCisgICAgICB0eXBlc19sZW4gPSBhbGxvd2VkX3R5cGVzLmxl bmd0aDsKKyAgaWYodHlwZXNfbGVuID4gMCkgeworICAgIHZhciBpID0gMCwK KyAgICAgICAgc2VsZWN0X2JveCA9ICI8ZGl2IGNsYXNzPSdjaGFuZ2VfZmls ZV90eXBlcyc+PHNlbGVjdCBuYW1lPSd0eXBlJz4iOworICAgIHdoaWxlKGkg PCB0eXBlc19sZW4pIHsKKyAgICAgIHNlbGVjdF9ib3ggKz0gIjxvcHRpb24g dmFsdWU9IithbGxvd2VkX3R5cGVzW2ldKyI+IisoYWxsb3dlZF90eXBlc1tp XSA9PSAnKicgPyAnQWxsIEZpbGVzJzogYWxsb3dlZF90eXBlc1tpXSkrIjwv b3B0aW9uPiI7CisgICAgICBpKys7CisgICAgfQorICAgIHNlbGVjdF9ib3gg Kz0gIjwvc2VsZWN0PiI7CisgICAgc2VsZWN0X2JveCArPSAiPGxhYmVsPkZv cm1hdDogPC9sYWJlbD48L2Rpdj4iOworICB9CisKKyAgJCgiLmFsbG93ZWRf ZmlsZV90eXBlcyIpLmh0bWwoc2VsZWN0X2JveCk7CisKKyAgJCgiLmFsbG93 ZWRfZmlsZV90eXBlcyBzZWxlY3QiKS5vbignY2hhbmdlJywgZnVuY3Rpb24o KSB7CisgICAgdmFyIHNlbGVjdGVkX3ZhbCA9ICQodGhpcykudmFsKCksCisg ICAgICAgIGN1cnJfcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpOwor ICAgIGdldEZvbGRlckluZm8oY3Vycl9wYXRoLCBzZWxlY3RlZF92YWwpOwor ICB9KTsKK30KKworaWYgKGNvbmZpZy5vcHRpb25zLmRpYWxvZ190eXBlID09 ICdjcmVhdGVfZmlsZScpIHsKKyAgdmFyIGNyZWF0ZV9maWxlX2h0bWwgPSAn PGRpdiBjbGFzcz0iY3JlYXRlX2lucHV0Ij4nKworICAgICAgJzxzcGFuPkZp bGVuYW1lOjwvc3Bhbj4nKworICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBu YW1lPSJuZXdfZmlsZW5hbWUiIGNsYXNzPSJmbV9jcmVhdGVfaW5wdXQiIC8+ JysKKyAgICAnPC9kaXY+JzsKKworICAkKCcuYWxsb3dlZF9maWxlX3R5cGVz JykucHJlcGVuZChjcmVhdGVfZmlsZV9odG1sKTsKKworICAkKCcuY3JlYXRl X2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLm9uKCdrZXlwcmVzcycsIGZ1 bmN0aW9uKCkgeworICAgIHZhciBpbnB1dF90ZXh0X2xlbiA9ICQodGhpcyku dmFsKCkubGVuZ3RoOworICAgIGlmKGlucHV0X3RleHRfbGVuID4gMCApIHsK KyAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5yZW1vdmVDbGFzcygnZGlz YWJsZWQnKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkKCcuZmlsZV9t YW5hZ2VyX29rJykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgfQorICB9 KTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEluaXRpYWxpemF0aW9uCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworCiskKGZ1bmN0aW9uKCl7CisgIGlmKGNvbmZpZy5leHRy YV9qcykgeworICAgIGZvcih2YXIgaT0wOyBpPCBjb25maWcuZXh0cmFfanMu bGVuZ3RoOyBpKyspIHsKKyAgICAgICQuYWpheCh7CisgICAgICAgIHVybDog Y29uZmlnLmV4dHJhX2pzW2ldLAorICAgICAgICBkYXRhVHlwZTogInNjcmlw dCIsCisgICAgICAgIGFzeW5jOiBleHRyYV9qc19hc3luYworICAgICAgfSk7 CisgICAgfQorICB9CisKKyAgaWYoJC51cmxQYXJhbSgnZXhwYW5kZWRGb2xk ZXInKSAhPSAwKSB7CisgICAgZXhwYW5kZWRGb2xkZXIgPSAkLnVybFBhcmFt KCdleHBhbmRlZEZvbGRlcicpOworICAgIGZ1bGxleHBhbmRlZEZvbGRlciA9 IGZpbGVSb290ICsgZXhwYW5kZWRGb2xkZXI7CisgIH0gZWxzZSB7CisgICAg ZXhwYW5kZWRGb2xkZXIgPSAnJzsKKyAgICBmdWxsZXhwYW5kZWRGb2xkZXIg PSBudWxsOworICB9CisKKyAgLy8gQWRqdXN0IGxheW91dC4KKyAgc2V0RGlt ZW5zaW9ucygpOworCisgIC8vIHdlIGZpbmFsaXplIHRoZSBGaWxlTWFuYWdl ciBVSSBpbml0aWFsaXphdGlvbgorICAvLyB3aXRoIGxvY2FsaXplZCB0ZXh0 IGlmIG5lY2Vzc2FyeQorICBpZihjb25maWcuYXV0b2xvYWQgPT0gdHJ1ZSkg eworICAgICQoJy51cGxvYWQnKS5hcHBlbmQobGcudXBsb2FkKTsKKyAgICAk KCcuY3JlYXRlJykuYXBwZW5kKGxnLm5ld19mb2xkZXIpOworICAgICQoJy5n cmlkJykuYXR0cigndGl0bGUnLCBsZy5ncmlkX3ZpZXcpOworICAgICQoJy5s aXN0JykuYXR0cigndGl0bGUnLCBsZy5saXN0X3ZpZXcpOworICAgICQoJy5m aWxlaW5mbyBoMScpLmFwcGVuZChsZy5zZWxlY3RfZnJvbV9sZWZ0KTsKKyAg ICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0iI3NlbGVjdCJdJykuYXBwZW5k KGxnLnNlbGVjdCk7CisgICAgJCgnI2l0ZW1PcHRpb25zIGFbaHJlZiQ9Ii5k b3dubG9hZCJdJykuYXBwZW5kKGxnLmRvd25sb2FkKTsKKyAgICAkKCcjaXRl bU9wdGlvbnMgYVtocmVmJD0iLnJlbmFtZSJdJykuYXBwZW5kKGxnLnJlbmFt ZSk7CisgICAgJCgnI2l0ZW1PcHRpb25zIGFbaHJlZiQ9Ii5kZWxldGUiXScp LmFwcGVuZChsZy5kZWwpOworICAgIC8qKiBJbnB1dCBmaWxlIFJlcGxhY2Vt ZW50ICovCisgICAgJCgnLmJyb3dzZScpLmFwcGVuZCgnKycpOworCisgICAg JCgnLmJyb3dzZScpLmF0dHIoJ3RpdGxlJywgbGcuYnJvd3NlKTsKKworICAg ICQoIi5uZXdmaWxlIikuY2hhbmdlKGZ1bmN0aW9uKCkgeworICAgICAgJCgi LmZpbGVwYXRoIikudmFsKCQodGhpcykudmFsKCkpOworICAgIH0pOworCisg ICAgLyoqIElucHV0IGZpbGUgUmVwbGFjZW1lbnQgLSBlbmQgKi8KKyAgfQor CisgIC8vIFNldCBpbml0aWFsIHZpZXcgc3RhdGUuCisgICQoJy5maWxlaW5m bycpLmRhdGEoJ3ZpZXcnLCBjb25maWcub3B0aW9ucy5kZWZhdWx0Vmlld01v ZGUpOworICBzZXRWaWV3QnV0dG9uc0Zvcihjb25maWcub3B0aW9ucy5kZWZh dWx0Vmlld01vZGUpOworCisgIC8vIFVwbG9hZCBjbGljayBldmVudAorICAk KCcuZmlsZV9tYW5hZ2VyIC51cGxvYWRlcicpLm9uKCdjbGljaycsICdhJywg ZnVuY3Rpb24oZSkgeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB2 YXIgYiA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpOworICAgIHZhciBub2Rl X3ZhbCA9ICQodGhpcykubmV4dCgpLnRleHQoKTsKKyAgICBwYXJlbnQgPSBi LnN1YnN0cmluZygwLCBiLnNsaWNlKDAsIC0xKS5sYXN0SW5kZXhPZihub2Rl X3ZhbCkpOworICAgIGdldEZvbGRlckluZm8ocGFyZW50KTsKKyAgfSk7CisK KyAgLy8gcmUtcmVuZGVyIHRoZSBob21lIHZpZXcKKyAgJCgnLmZpbGVfbWFu YWdlciAuaG9tZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGN1cnJl bnRWaWV3TW9kZSA9ICQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKTsKKyAg ICAkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JywgY3VycmVudFZpZXdNb2Rl KTsKKyAgICBnZXRGb2xkZXJJbmZvKGZpbGVSb290KTsKKyAgICBlbmFiX2Rp c19sZXZlbF91cCgpOworICB9KTsKKworICAvLyBHbyBvbmUgZGlyZWN0b3J5 IGJhY2sKKyAgJCgiLmZpbGVfbWFuYWdlciAubGV2ZWwtdXAiKS5jbGljayhm dW5jdGlvbigpIHsKKyAgICB2YXIgYiA9ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpOworCisgICAgLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAgYnV0dG9u CisgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKworICAgIGlmIChiICE9IGZp bGVSb290KSB7CisgICAgICAgIHBhcmVudCA9IGIuc3Vic3RyaW5nKDAsIGIu c2xpY2UoMCwgLTEpLmxhc3RJbmRleE9mKCIvIikpICsgIi8iOworICAgICAg ICB2YXIgZCA9ICQoIi5maWxlaW5mbyIpLmRhdGEoInZpZXciKTsKKyAgICAg ICAgJCgiLmZpbGVpbmZvIikuZGF0YSgidmlldyIsIGQpOworICAgICAgICBn ZXRGb2xkZXJJbmZvKHBhcmVudCk7CisgICAgfQorICB9KTsKKworICAvLyBy ZWZyZXNoIGRpYWxvZworICAkKCcuZmlsZV9tYW5hZ2VyIC5yZWZyZXNoJyku Y2xpY2soZnVuY3Rpb24oKXsKKyAgICBnZXRGb2xkZXJJbmZvKCQoJy5jdXJy ZW50cGF0aCcpLnZhbCgpKTsKKyAgfSk7CisKKyAgLy8gc2V0IGJ1dHRvbnMg dG8gc3dpdGNoIGJldHdlZW4gZ3JpZCBhbmQgbGlzdCB2aWV3cy4KKyAgJCgn LmZpbGVfbWFuYWdlciAuZ3JpZCcpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAg c2V0Vmlld0J1dHRvbnNGb3IoJ2dyaWQnKTsKKyAgICAkKCcuZmlsZWluZm8n KS5kYXRhKCd2aWV3JywgJ2dyaWQnKTsKKyAgICBnZXRGb2xkZXJJbmZvKCQo Jy5jdXJyZW50cGF0aCcpLnZhbCgpKTsKKyAgfSk7CisKKyAgLy8gU2hvdyBs aXN0IG1vZGUKKyAgJCgnLmZpbGVfbWFuYWdlciAubGlzdCcpLmNsaWNrKGZ1 bmN0aW9uKCl7CisgICAgc2V0Vmlld0J1dHRvbnNGb3IoJ2xpc3QnKTsKKyAg ICAkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JywgJ2xpc3QnKTsKKyAgICBn ZXRGb2xkZXJJbmZvKCQoJy5jdXJyZW50cGF0aCcpLnZhbCgpKTsKKyAgfSk7 CisKKyAgLy8gUHJvdmlkZSBpbml0aWFsIHZhbHVlcyBmb3IgdXBsb2FkIGZv cm0sIHN0YXR1cywgZXRjLgorICBzZXRVcGxvYWRlcihmaWxlUm9vdCk7CisK KyAgJCgnI3VwbG9hZGVyJykuYXR0cignYWN0aW9uJywgZmlsZUNvbm5lY3Rv cik7CisKKyAgZGF0YSA9IHsKKyAgICAnQ2FwYWJpbGl0aWVzJzogY2FwYWJp bGl0aWVzCisgIH07CisgIGlmIChoYXNfY2FwYWJpbGl0eShkYXRhLCAndXBs b2FkJykpIHsKKyAgICBEcm9wem9uZS5hdXRvRGlzY292ZXIgPSBmYWxzZTsK KyAgICAvLyB3ZSByZW1vdmUgc2ltcGxlIGZpbGUgdXBsb2FkIGVsZW1lbnQK KyAgICAkKCcuZmlsZS1pbnB1dC1jb250YWluZXInKS5yZW1vdmUoKTsKKyAg ICAkKCcudXBsb2FkJykucmVtb3ZlKCk7CisgICAgJCggIi5jcmVhdGUiICku YmVmb3JlKCAnPGJ1dHRvbiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJidXR0b24i IHRpdGxlPSJVcGxvYWQgRmlsZSIgbmFtZT0idXBsb2FkIiBpZD0idXBsb2Fk IiBjbGFzcz0iYnRuIGZhIGZhLXVwbG9hZCB1cGxvYWQiPjxzcGFuPjwvc3Bh bj48L2J1dHRvbj4gJyApOworCisgICAgJCgnLnVwbG9hZCcpLnVuYmluZCgp LmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgLy8gd2UgY3JlYXRlIHByb21w dAorICAgICAgdmFyIG1zZyAgPSAnPGRpdiBpZD0iZHJvcHpvbmUtY29udGFp bmVyIj4nOworICAgICAgICBtc2cgKz0gJzxidXR0b24gY2xhc3M9ImZhIGZh LXRpbWVzIGR6X2Nyb3NzX2J0biI+PC9idXR0b24+JzsKKyAgICAgICAgbXNn ICs9ICc8ZGl2IGlkPSJtdWx0aXBsZS11cGxvYWRzIiBjbGFzcz0iZHJvcHpv bmUiPjwvZGl2Pic7CisgICAgICAgIG1zZyArPSAnPGRpdiBjbGFzcz0icHJv bXB0LWluZm8iPicrbGcuZmlsZV9zaXplX2xpbWl0ICsgY29uZmlnLnVwbG9h ZC5maWxlU2l6ZUxpbWl0ICsgJyAnICsgbGcubWIgKyAnLjwvZGl2Pic7CisK KyAgICAgIGVycm9yX2ZsYWcgPSBmYWxzZTsKKyAgICAgIHZhciBwYXRoID0g JCgnLmN1cnJlbnRwYXRoJykudmFsKCksCisgICAgICAgICAgZmlsZVNpemUg PSAoY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0ICE9ICdhdXRvJykgPyBj b25maWcudXBsb2FkLmZpbGVTaXplTGltaXQgOiAyNTY7IC8vIGRlZmF1bHQg ZHJvcHpvbmUgdmFsdWUKKworICAgICAgaWYoY29uZmlnLnNlY3VyaXR5LnVw bG9hZFBvbGljeSA9PSAnRElTQUxMT1dfQUxMJykgeworICAgICAgICB2YXIg YWxsb3dlZEZpbGVzID0gJy4nICsgY29uZmlnLnNlY3VyaXR5LnVwbG9hZFJl c3RyaWN0aW9ucy5qb2luKCcsLicpOworICAgICAgfSBlbHNlIHsKKyAgICAg ICAgLy8gd2UgYWxsb3cgYW55IGV4dGVuc2lvbiBzaW5jZSB3ZSBoYXZlIG5v IGVhc3kgd2F5IHRvIGhhbmRsZSB0aGUgdGhlIGJ1aWx0LWluIGBhY2NlcHRl ZEZpbGVzYCBwYXJhbXMKKyAgICAgICAgLy8gV291bGQgYmUgaGFuZGxlZCBs YXRlciBieSB0aGUgY29ubmVjdG9yCisgICAgICAgIHZhciBhbGxvd2VkRmls ZXMgPSBudWxsOworICAgICAgfQorCisgICAgICBpZiAoJC51cmxQYXJhbSgn dHlwZScpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSAnaW1hZ2VzJyB8 fCBjb25maWcudXBsb2FkLmltYWdlc09ubHkpIHsKKyAgICAgICAgdmFyIGFs bG93ZWRGaWxlcyA9ICcuJyArIGNvbmZpZy5pbWFnZXMuaW1hZ2VzRXh0Lmpv aW4oJywuJyk7CisgICAgICB9CisKKyAgICAgICQoJy5maWxlX21hbmFnZXIg LnVwbG9hZF9maWxlJykudG9nZ2xlKCk7CisgICAgICAkKCcuZmlsZV9tYW5h Z2VyIC51cGxvYWRfZmlsZScpLmh0bWwobXNnKTsKKworICAgICAgLy92YXIg cHJldmlld1RlbXBsYXRlID0gJzxkaXYgaWQ9ImRyb3B6b25lLWNvbnRhaW5l ciI+JzsKKyAgICAgIHZhciBwcmV2aWV3VGVtcGxhdGUgPSAnPGRpdiBjbGFz cz0iZmlsZV91cGxvYWRfbWFpbiBkei1wcmV2aWV3IGR6LWZpbGUtcHJldmll dyI+JysKKyAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzaG93X2Vycm9yIj4n KworICAgICAgICAgICAgICAnPHAgY2xhc3M9InNpemUgZHotc2l6ZSIgZGF0 YS1kei1zaXplPjwvcD4nKworICAgICAgICAgICAgICAnPHAgY2xhc3M9Im5h bWUgZHotZmlsZW5hbWUiIGRhdGEtZHotbmFtZT48L3A+JysKKyAgICAgICAg ICAgICc8L2Rpdj4nKworICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LXBy b2dyZXNzIj48c3BhbiBjbGFzcz0iZHotdXBsb2FkIiBkYXRhLWR6LXVwbG9h ZHByb2dyZXNzPjwvc3Bhbj48L2Rpdj4nKworICAgICAgICAgICAgJzxkaXYg Y2xhc3M9ImR6LXN1Y2Nlc3MtbWFyayI+PHNwYW4+PC9zcGFuPjwvZGl2Picr CisgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZHotZXJyb3ItbWFyayI+PHNw YW4+PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAgICAnPGRpdiBjbGFzcz0i ZHotZXJyb3ItbWVzc2FnZSI+PHNwYW4gZGF0YS1kei1lcnJvcm1lc3NhZ2U+ PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAgICAnPGEgaHJlZj0iamF2YXNj cmlwdDp2b2lkKDApOyIgY2xhc3M9ImZhIGZhLXRyYXNoIGR6X2ZpbGVfcmVt b3ZlIiBkYXRhLWR6LXJlbW92ZT48L2E+JysKKyAgICAgICAgICAnPC9kaXY+ JzsKKworICAgICAgJCgiZGl2I211bHRpcGxlLXVwbG9hZHMiKS5kcm9wem9u ZSh7CisgICAgICAgIHBhcmFtTmFtZTogIm5ld2ZpbGUiLAorICAgICAgICB1 cmw6IGZpbGVDb25uZWN0b3IgKyAnP2NvbmZpZz0nICsgdXNlcmNvbmZpZywK KyAgICAgICAgbWF4RmlsZXNpemU6IGZpbGVTaXplLAorICAgICAgICBtYXhG aWxlczogY29uZmlnLnVwbG9hZC5udW1iZXIsCisgICAgICAgIGFkZFJlbW92 ZUxpbmtzOiB0cnVlLAorICAgICAgICBwcmV2aWV3VGVtcGxhdGU6IHByZXZp ZXdUZW1wbGF0ZSwKKyAgICAgICAgcGFyYWxsZWxVcGxvYWRzOiBjb25maWcu dXBsb2FkLm51bWJlciwKKyAgICAgICAgZGljdE1heEZpbGVzRXhjZWVkZWQ6 IGxnLmR6X2RpY3RNYXhGaWxlc0V4Y2VlZGVkLnJlcGxhY2UoIiVzIiwgY29u ZmlnLnVwbG9hZC5udW1iZXIpLAorICAgICAgICBkaWN0RGVmYXVsdE1lc3Nh Z2U6IGxnLmR6X2RpY3REZWZhdWx0TWVzc2FnZSwKKyAgICAgICAgZGljdElu dmFsaWRGaWxlVHlwZTogbGcuZHpfZGljdEludmFsaWRGaWxlVHlwZSwKKyAg ICAgICAgZGljdEZpbGVUb29CaWc6IGxnLmZpbGVfdG9vX2JpZyArICcgJyAr IGxnLmZpbGVfc2l6ZV9saW1pdCArIGNvbmZpZy51cGxvYWQuZmlsZVNpemVM aW1pdCArICcgJyArIGxnLm1iLAorICAgICAgICBhY2NlcHRlZEZpbGVzOiBh bGxvd2VkRmlsZXMsCisgICAgICAgIGF1dG9Qcm9jZXNzUXVldWU6IHRydWUs CisgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBk cm9wem9uZSA9IHRoaXM7CisgICAgICAgICAgJCgnLmR6X2Nyb3NzX2J0bicp LnVuYmluZCgpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg ICAgJCgnLmZpbGVfbWFuYWdlciAudXBsb2FkX2ZpbGUnKS50b2dnbGUoKTsK KyAgICAgICAgICB9KTsKKworICAgICAgICB9LAorICAgICAgICBzZW5kaW5n OiBmdW5jdGlvbihmaWxlLCB4aHIsIGZvcm1EYXRhKSB7CisgICAgICAgICAg Zm9ybURhdGEuYXBwZW5kKCJtb2RlIiwgImFkZCIpOworICAgICAgICAgIGZv cm1EYXRhLmFwcGVuZCgiY3VycmVudHBhdGgiLCBwYXRoKTsKKyAgICAgICAg ICAkKCcudXBsb2FkX2ZpbGUgLmR6X2Nyb3NzX2J0bicpLmF0dHIoJ2Rpc2Fi bGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbigpIHt9LCAxMDAwMCk7CisgICAgICAgIH0sCisgICAgICAgIHN1Y2Nl c3M6IGZ1bmN0aW9uKGZpbGUsIHJlc3BvbnNlKSB7CisgICAgICAgICAgdmFy IGRhdGEgPSBqUXVlcnkucGFyc2VKU09OKHJlc3BvbnNlKTsKKyAgICAgICAg ICB2YXIgJHRoaXMgPSAkKGZpbGUucHJldmlld1RlbXBsYXRlKTsKKworICAg ICAgICAgIGlmIChkYXRhWydDb2RlJ10gPT0gMCkgeworICAgICAgICAgICAg c2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAkdGhpcy5m aW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3MoInN1Y2Nlc3MiKTsKKyAgICAg ICAgICAgIH0sIDEwMDApOworICAgICAgICAgICAgJHRoaXMuZmluZCgiLmR6 LXVwbG9hZCIpLmNzcygnd2lkdGgnLCAiMTAwJSIpLmh0bWwoIjEwMCUiKTsK KyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MobGcudXBsb2FkX3N1Y2Nl c3MpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkdGhpcy5m aW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3MoImVycm9yIik7CisgICAgICAg ICAgICAkdGhpcy5maW5kKCIuZHotdXBsb2FkIikuY3NzKCd3aWR0aCcsICIw JSIpLmh0bWwoIjAlIik7CisgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihk YXRhWydFcnJvciddKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ2V0Rm9s ZGVySW5mbyhwYXRoKTsKKyAgICAgICAgfSwKKyAgICAgICAgdG90YWx1cGxv YWRwcm9ncmVzczogZnVuY3Rpb24ocHJvZ3Jlc3MpIHsKKyAgICAgICAgfSwK KyAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAg ICBpZiAodGhpcy5nZXRVcGxvYWRpbmdGaWxlcygpLmxlbmd0aCA9PT0gMCAm JiB0aGlzLmdldFF1ZXVlZEZpbGVzKCkubGVuZ3RoID09PSAwKSB7CisgICAg ICAgICAgfQorICAgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PSAiZXJyb3Ii KSB7CisgICAgICAgICAgICBhbGVydGlmeS5lcnJvcigiRXJyb3IgdXBsb2Fk aW5nIGZpbGUiKTsKKyAgICAgICAgICB9CisgICAgICAgICAgJCgnLnVwbG9h ZF9maWxlIC5kel9jcm9zc19idG4nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcp OworICAgICAgICAgIGdldEZvbGRlckluZm8ocGF0aCk7CisgICAgICAgIH0K KyAgICAgIH0pOworCisgICAgfSk7CisgIH0KKworICAvLyBEaXNhYmxlIHNl bGVjdCBmdW5jdGlvbiBpZiBubyB3aW5kb3cub3BlbmVyCisgIGlmKCEgKHdp bmRvdy5vcGVuZXIgfHwgd2luZG93LnRpbnlNQ0VQb3B1cCkgKSAkKCcjaXRl bU9wdGlvbnMgYVtocmVmJD0iI3NlbGVjdCJdJykucmVtb3ZlKCk7CisgIC8v IEtlZXAgb25seSBicm93c2VPbmx5IGZlYXR1cmVzIGlmIG5lZWRlZAorICBp Zihjb25maWcub3B0aW9ucy5icm93c2VPbmx5ID09IHRydWUpIHsKKyAgICAk KCcubmV3ZmlsZScpLnJlbW92ZSgpOworICAgICQoJy51cGxvYWQnKS5yZW1v dmUoKTsKKyAgICAkKCcuY3JlYXRlJykucmVtb3ZlKCk7CisgICAgJCgnI3Rv b2xiYXInKS5yZW1vdmUoJy5yZW5hbWUnKTsKKyAgICAkKCcuY29udGV4dE1l bnUgLnJlbmFtZScpLnJlbW92ZSgpOworICAgICQoJy5jb250ZXh0TWVudSAu ZGVsZXRlJykucmVtb3ZlKCk7CisgIH0KKyAgZ2V0RGV0YWlsVmlldyhmaWxl Um9vdCArIGV4cGFuZGVkRm9sZGVyKTsKK30pOworCit9KShqUXVlcnkpOwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9qcXVlcnkuZHJv cHpvbmUvZHJvcHpvbmUuY3NzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9q cXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuY3NzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjA0OTRkMWMKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL2pxdWVyeS5kcm9wem9uZS9kcm9w em9uZS5jc3MKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBUaGUgTUlUIExp Y2Vuc2UKKyAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRpYXMgTWVubyA8bUB0 aWFzLm1lPgorICovCitALXdlYmtpdC1rZXlmcmFtZXMgcGFzc2luZy10aHJv dWdoIHsKKyAgMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAgLXdlYmtpdC10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1vei10cmFuc2Zv cm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJh bnNsYXRlWSg0MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVko NDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOyB9Cisg IDMwJSwgNzAlIHsKKyAgICBvcGFjaXR5OiAxOworICAgIC13ZWJraXQtdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06 IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xh dGVZKDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7 CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7IH0KKyAgMTAwJSB7 CisgICAgb3BhY2l0eTogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJh bnNsYXRlWSgtNDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0 ZVkoLTQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQw cHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7Cisg ICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsgfSB9CitALW1vei1r ZXlmcmFtZXMgcGFzc2luZy10aHJvdWdoIHsKKyAgMCUgeworICAgIG9wYWNp dHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBw eCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7Cisg ICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtby10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3JtOiB0 cmFuc2xhdGVZKDQwcHgpOyB9CisgIDMwJSwgNzAlIHsKKyAgICBvcGFjaXR5 OiAxOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7 CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAt bXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW8tdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xh dGVZKDBweCk7IH0KKyAgMTAwJSB7CisgICAgb3BhY2l0eTogMDsKKyAgICAt d2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7CisgICAgLW1v ei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1tcy10cmFu c2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1vLXRyYW5zZm9ybTog dHJhbnNsYXRlWSgtNDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KC00MHB4KTsgfSB9CitAa2V5ZnJhbWVzIHBhc3NpbmctdGhyb3VnaCB7Cisg IDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVko NDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOwor ICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAzMCUsIDcw JSB7CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTog dHJhbnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xh dGVZKDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgp OworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIHRy YW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CisgIDEwMCUgeworICAgIG9w YWNpdHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVko LTQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4 KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAg ICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIHRyYW5z Zm9ybTogdHJhbnNsYXRlWSgtNDBweCk7IH0gfQorQC13ZWJraXQta2V5ZnJh bWVzIHNsaWRlLWluIHsKKyAgMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAg LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1v ei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1zLXRyYW5z Zm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOyB9CisgIDMwJSB7CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0 LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJh bnNsYXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgw cHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9IH0KK0At bW96LWtleWZyYW1lcyBzbGlkZS1pbiB7CisgIDAlIHsKKyAgICBvcGFjaXR5 OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgp OworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAg IC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8tdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTogdHJh bnNsYXRlWSg0MHB4KTsgfQorICAzMCUgeworICAgIG9wYWNpdHk6IDE7Cisg ICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAt bW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tcy10cmFu c2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoMHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4 KTsgfSB9CitAa2V5ZnJhbWVzIHNsaWRlLWluIHsKKyAgMCUgeworICAgIG9w YWNpdHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVko NDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7 CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAt by10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDQwcHgpOyB9CisgIDMwJSB7CisgICAgb3BhY2l0eTog MTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwor ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1z LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9y bTogdHJhbnNsYXRlWSgwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRl WSgwcHgpOyB9IH0KK0Atd2Via2l0LWtleWZyYW1lcyBwdWxzZSB7CisgIDAl IHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1v ei10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tcy10cmFuc2Zvcm06IHNj YWxlKDEpOworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgdHJh bnNmb3JtOiBzY2FsZSgxKTsgfQorICAxMCUgeworICAgIC13ZWJraXQtdHJh bnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2Fs ZSgxLjEpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEuMSk7CisgICAg LW8tdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIHRyYW5zZm9ybTogc2Nh bGUoMS4xKTsgfQorICAyMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBz Y2FsZSgxKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAg LW1zLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW8tdHJhbnNmb3JtOiBz Y2FsZSgxKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KK0AtbW96 LWtleWZyYW1lcyBwdWxzZSB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5z Zm9ybTogc2NhbGUoMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEp OworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5z Zm9ybTogc2NhbGUoMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQor ICAxMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwor ICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1tcy10cmFu c2Zvcm06IHNjYWxlKDEuMSk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgx LjEpOworICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgfQorICAyMCUgewor ICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbW96LXRy YW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUo MSk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICB0cmFuc2Zv cm06IHNjYWxlKDEpOyB9IH0KK0BrZXlmcmFtZXMgcHVsc2UgeworICAwJSB7 CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tb3ot dHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2Fs ZSgxKTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIHRyYW5z Zm9ybTogc2NhbGUoMSk7IH0KKyAgMTAlIHsKKyAgICAtd2Via2l0LXRyYW5z Zm9ybTogc2NhbGUoMS4xKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUo MS4xKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1v LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxl KDEuMSk7IH0KKyAgMjAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1t cy10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CisuZHJvcHpv bmUsIC5kcm9wem9uZSAqIHsKKyAgYm94LXNpemluZzogYm9yZGVyLWJveDsg fQorCisuZHJvcHpvbmUgeworICBtaW4taGVpZ2h0OiAxNTBweDsKKyAgYm9y ZGVyOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMpOworICBiYWNrZ3Jv dW5kOiB3aGl0ZTsKKyAgcGFkZGluZzogMjBweCAyMHB4OyB9CisgIC5kcm9w em9uZS5kei1jbGlja2FibGUgeworICAgIGN1cnNvcjogcG9pbnRlcjsgfQor ICAgIC5kcm9wem9uZS5kei1jbGlja2FibGUgKiB7CisgICAgICBjdXJzb3I6 IGRlZmF1bHQ7IH0KKyAgICAuZHJvcHpvbmUuZHotY2xpY2thYmxlIC5kei1t ZXNzYWdlLCAuZHJvcHpvbmUuZHotY2xpY2thYmxlIC5kei1tZXNzYWdlICog eworICAgICAgY3Vyc29yOiBwb2ludGVyOyB9CisgIC5kcm9wem9uZS5kei1z dGFydGVkIC5kei1tZXNzYWdlIHsKKyAgICBkaXNwbGF5OiBub25lOyB9Cisg IC5kcm9wem9uZS5kei1kcmFnLWhvdmVyIHsKKyAgICBib3JkZXItc3R5bGU6 IHNvbGlkOyB9CisgICAgLmRyb3B6b25lLmR6LWRyYWctaG92ZXIgLmR6LW1l c3NhZ2UgeworICAgICAgb3BhY2l0eTogMC41OyB9CisgIC5kcm9wem9uZSAu ZHotbWVzc2FnZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIG1h cmdpbjogMmVtIDA7IH0KKyAgLmRyb3B6b25lIC5kei1wcmV2aWV3IHsKKyAg ICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxheTogaW5saW5lLWJs b2NrOworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgICAgbWFyZ2luOiAx NnB4OworICAgIG1pbi1oZWlnaHQ6IDEwMHB4OyB9CisgICAgLmRyb3B6b25l IC5kei1wcmV2aWV3OmhvdmVyIHsKKyAgICAgIHotaW5kZXg6IDEwMDA7IH0K KyAgICAgIC5kcm9wem9uZSAuZHotcHJldmlldzpob3ZlciAuZHotZGV0YWls cyB7CisgICAgICAgIG9wYWNpdHk6IDE7IH0KKyAgICAuZHJvcHpvbmUgLmR6 LXByZXZpZXcuZHotZmlsZS1wcmV2aWV3IC5kei1pbWFnZSB7CisgICAgICBi b3JkZXItcmFkaXVzOiAyMHB4OworICAgICAgYmFja2dyb3VuZDogIzk5OTsK KyAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20s ICNlZWUsICNkZGQpOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6 LWZpbGUtcHJldmlldyAuZHotZGV0YWlscyB7CisgICAgICBvcGFjaXR5OiAx OyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWltYWdlLXByZXZp ZXcgeworICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH0KKyAgICAgIC5kcm9w em9uZSAuZHotcHJldmlldy5kei1pbWFnZS1wcmV2aWV3IC5kei1kZXRhaWxz IHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMg bGluZWFyOworICAgICAgICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4y cyBsaW5lYXI7CisgICAgICAgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAu MnMgbGluZWFyOworICAgICAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAu MnMgbGluZWFyOworICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMg bGluZWFyOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1yZW1v dmUgeworICAgICAgZm9udC1zaXplOiAxNHB4OworICAgICAgdGV4dC1hbGln bjogY2VudGVyOworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICBjdXJz b3I6IHBvaW50ZXI7CisgICAgICBib3JkZXI6IG5vbmU7IH0KKyAgICAgIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotcmVtb3ZlOmhvdmVyIHsKKyAgICAg ICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKyAgICAuZHJvcHpv bmUgLmR6LXByZXZpZXc6aG92ZXIgLmR6LWRldGFpbHMgeworICAgICAgb3Bh Y2l0eTogMTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0 YWlscyB7CisgICAgICB6LWluZGV4OiAyMDsKKyAgICAgIHBvc2l0aW9uOiBh YnNvbHV0ZTsKKyAgICAgIHRvcDogMDsKKyAgICAgIGxlZnQ6IDA7CisgICAg ICBvcGFjaXR5OiAwOworICAgICAgZm9udC1zaXplOiAxM3B4OworICAgICAg bWluLXdpZHRoOiAxMDAlOworICAgICAgbWF4LXdpZHRoOiAxMDAlOworICAg ICAgcGFkZGluZzogMmVtIDFlbTsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRl cjsKKyAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7CisgICAgICBs aW5lLWhlaWdodDogMTUwJTsgfQorICAgICAgLmRyb3B6b25lIC5kei1wcmV2 aWV3IC5kei1kZXRhaWxzIC5kei1zaXplIHsKKyAgICAgICAgbWFyZ2luLWJv dHRvbTogMWVtOworICAgICAgICBmb250LXNpemU6IDE2cHg7IH0KKyAgICAg IC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5h bWUgeworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CisgICAgICAg IC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5h bWU6aG92ZXIgc3BhbiB7CisgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQg cmdiYSgyMDAsIDIwMCwgMjAwLCAwLjgpOworICAgICAgICAgIGJhY2tncm91 bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfQorICAgICAg ICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVu YW1lOm5vdCg6aG92ZXIpIHsKKyAgICAgICAgICBvdmVyZmxvdzogaGlkZGVu OworICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9CisgICAg ICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1m aWxlbmFtZTpub3QoOmhvdmVyKSBzcGFuIHsKKyAgICAgICAgICAgIGJvcmRl cjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyB9CisgICAgICAuZHJvcHpvbmUg LmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1lIHNwYW4sIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotc2l6ZSBzcGFu IHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwg MjU1LCAwLjQpOworICAgICAgICBwYWRkaW5nOiAwIDAuNGVtOworICAgICAg ICBib3JkZXItcmFkaXVzOiAzcHg7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXBy ZXZpZXc6aG92ZXIgLmR6LWltYWdlIGltZyB7CisgICAgICAtd2Via2l0LXRy YW5zZm9ybTogc2NhbGUoMS4wNSwgMS4wNSk7CisgICAgICAtbW96LXRyYW5z Zm9ybTogc2NhbGUoMS4wNSwgMS4wNSk7CisgICAgICAtbXMtdHJhbnNmb3Jt OiBzY2FsZSgxLjA1LCAxLjA1KTsKKyAgICAgIC1vLXRyYW5zZm9ybTogc2Nh bGUoMS4wNSwgMS4wNSk7CisgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUs IDEuMDUpOworICAgICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoOHB4KTsKKyAg ICAgIGZpbHRlcjogYmx1cig4cHgpOyB9CisgICAgLmRyb3B6b25lIC5kei1w cmV2aWV3IC5kei1pbWFnZSB7CisgICAgICBib3JkZXItcmFkaXVzOiAyMHB4 OworICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgIHdpZHRoOiAxMjBw eDsKKyAgICAgIGhlaWdodDogMTIwcHg7CisgICAgICBwb3NpdGlvbjogcmVs YXRpdmU7CisgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgIHotaW5kZXg6 IDEwOyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWltYWdl IGltZyB7CisgICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CisgICAgLmRyb3B6 b25lIC5kei1wcmV2aWV3LmR6LXN1Y2Nlc3MgLmR6LXN1Y2Nlc3MtbWFyayB7 CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNz IGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtbW96 LWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1YmljLWJlemllcigw Ljc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtbXMtYW5pbWF0aW9uOiBwYXNz aW5nLXRocm91Z2ggM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAx KTsKKyAgICAgIC1vLWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1 YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAgICBhbmltYXRp b246IHBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwg MC4xNzUsIDEpOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVy cm9yIC5kei1lcnJvci1tYXJrIHsKKyAgICAgIG9wYWNpdHk6IDE7CisgICAg ICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVy KDAuNzcsIDAsIDAuMTc1LCAxKTsKKyAgICAgIC1tb3otYW5pbWF0aW9uOiBz bGlkZS1pbiAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOwor ICAgICAgLW1zLWFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVy KDAuNzcsIDAsIDAuMTc1LCAxKTsKKyAgICAgIC1vLWFuaW1hdGlvbjogc2xp ZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTsKKyAg ICAgIGFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcs IDAsIDAuMTc1LCAxKTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAu ZHotc3VjY2Vzcy1tYXJrLCAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWVy cm9yLW1hcmsgeworICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAg ICBvcGFjaXR5OiAwOworICAgICAgei1pbmRleDogNTAwOworICAgICAgcG9z aXRpb246IGFic29sdXRlOworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAg ICB0b3A6IDUwJTsKKyAgICAgIGxlZnQ6IDUwJTsKKyAgICAgIG1hcmdpbi1s ZWZ0OiAtMjdweDsKKyAgICAgIG1hcmdpbi10b3A6IC0yN3B4OyB9CisgICAg ICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXN1Y2Nlc3MtbWFyayBzdmcs IC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZXJyb3ItbWFyayBzdmcgewor ICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgd2lkdGg6IDU0cHg7 CisgICAgICAgIGhlaWdodDogNTRweDsgfQorICAgIC5kcm9wem9uZSAuZHot cHJldmlldy5kei1wcm9jZXNzaW5nIC5kei1wcm9ncmVzcyB7CisgICAgICBv cGFjaXR5OiAxOworICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4y cyBsaW5lYXI7CisgICAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjJzIGxp bmVhcjsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7 CisgICAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7CisgICAg ICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7IH0KKyAgICAuZHJvcHpv bmUgLmR6LXByZXZpZXcuZHotY29tcGxldGUgLmR6LXByb2dyZXNzIHsKKyAg ICAgIG9wYWNpdHk6IDA7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG9w YWNpdHkgMC40cyBlYXNlLWluOworICAgICAgLW1vei10cmFuc2l0aW9uOiBv cGFjaXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBv cGFjaXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIC1vLXRyYW5zaXRpb246IG9w YWNpdHkgMC40cyBlYXNlLWluOworICAgICAgdHJhbnNpdGlvbjogb3BhY2l0 eSAwLjRzIGVhc2UtaW47IH0KKyAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXc6 bm90KC5kei1wcm9jZXNzaW5nKSAuZHotcHJvZ3Jlc3MgeworICAgICAgLXdl YmtpdC1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7CisgICAg ICAtbW96LWFuaW1hdGlvbjogcHVsc2UgNnMgZWFzZSBpbmZpbml0ZTsKKyAg ICAgIC1tcy1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7Cisg ICAgICAtby1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7Cisg ICAgICBhbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7IH0KKyAg ICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXByb2dyZXNzIHsKKyAgICAg IG9wYWNpdHk6IDE7CisgICAgICB6LWluZGV4OiAxMDAwOworICAgICAgcG9p bnRlci1ldmVudHM6IG5vbmU7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7 CisgICAgICBoZWlnaHQ6IDE2cHg7CisgICAgICBsZWZ0OiA1MCU7CisgICAg ICB0b3A6IDUwJTsKKyAgICAgIG1hcmdpbi10b3A6IC04cHg7CisgICAgICB3 aWR0aDogODBweDsKKyAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDsKKyAgICAg IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKKyAgICAg IC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAgIGJvcmRlci1y YWRpdXM6IDhweDsKKyAgICAgIG92ZXJmbG93OiBoaWRkZW47IH0KKyAgICAg IC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotcHJvZ3Jlc3MgLmR6LXVwbG9h ZCB7CisgICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CisgICAgICAgIGJhY2tn cm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM2NjYsICM0NDQp OworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDog MDsKKyAgICAgICAgbGVmdDogMDsKKyAgICAgICAgYm90dG9tOiAwOworICAg ICAgICB3aWR0aDogMDsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB3 aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAgLW1vei10cmFuc2l0 aW9uOiB3aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAgLW1zLXRy YW5zaXRpb246IHdpZHRoIDMwMG1zIGVhc2UtaW4tb3V0OworICAgICAgICAt by10cmFuc2l0aW9uOiB3aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAg ICAgdHJhbnNpdGlvbjogd2lkdGggMzAwbXMgZWFzZS1pbi1vdXQ7IH0KKyAg ICAuZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotZXJyb3IgLmR6LWVycm9yLW1l c3NhZ2UgeworICAgICAgZGlzcGxheTogYmxvY2s7IH0KKyAgICAuZHJvcHpv bmUgLmR6LXByZXZpZXcuZHotZXJyb3I6aG92ZXIgLmR6LWVycm9yLW1lc3Nh Z2UgeworICAgICAgb3BhY2l0eTogMTsKKyAgICAgIHBvaW50ZXItZXZlbnRz OiBhdXRvOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJv ci1tZXNzYWdlIHsKKyAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAg ICAgei1pbmRleDogMTAwMDsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK KyAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgZGlzcGxheTogbm9uZTsK KyAgICAgIG9wYWNpdHk6IDA7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb246 IG9wYWNpdHkgMC4zcyBlYXNlOworICAgICAgLW1vei10cmFuc2l0aW9uOiBv cGFjaXR5IDAuM3MgZWFzZTsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBvcGFj aXR5IDAuM3MgZWFzZTsKKyAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkg MC4zcyBlYXNlOworICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVh c2U7CisgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CisgICAgICBmb250LXNp emU6IDEzcHg7CisgICAgICB0b3A6IDEzMHB4OworICAgICAgbGVmdDogLTEw cHg7CisgICAgICB3aWR0aDogMTQwcHg7CisgICAgICBiYWNrZ3JvdW5kOiAj YmUyNjI2OworICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRv IGJvdHRvbSwgI2JlMjYyNiwgI2E5MjIyMik7CisgICAgICBwYWRkaW5nOiAw LjVlbSAxLjJlbTsKKyAgICAgIGNvbG9yOiB3aGl0ZTsgfQorICAgICAgLmRy b3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJvci1tZXNzYWdlOmFmdGVyIHsK KyAgICAgICAgY29udGVudDogJyc7CisgICAgICAgIHBvc2l0aW9uOiBhYnNv bHV0ZTsKKyAgICAgICAgdG9wOiAtNnB4OworICAgICAgICBsZWZ0OiA2NHB4 OworICAgICAgICB3aWR0aDogMDsKKyAgICAgICAgaGVpZ2h0OiAwOworICAg ICAgICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHRyYW5zcGFyZW50OworICAg ICAgICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAg ICAgICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkICNiZTI2MjY7IH0KZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNz cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcwppbmRl eCAyZTkxYWU3Li4wOGJhMDcxIDEwMDc1NQotLS0gYS93ZWIvcGdhZG1pbi9z dGF0aWMvY3NzL292ZXJyaWRlcy5jc3MKKysrIGIvd2ViL3BnYWRtaW4vc3Rh dGljL2Nzcy9vdmVycmlkZXMuY3NzCkBAIC0xMDk0LDMgKzEwOTQsNDYgQEAg YnV0dG9uLnBnLWFsZXJ0aWZ5LWJ1dHRvbiB7CiAgIGZvbnQ6IG5vcm1hbCBu b3JtYWwgbm9ybWFsIDE4cHgvMSBGb250QXdlc29tZTsKICAgbWFyZ2luLXJp Z2h0OiA1cHg7CiB9CisKKy5maWxlX3NlbGVjdGlvbl9jdHJsIC5jcmVhdGVf aW5wdXQgc3BhbiB7CisgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgIGZvbnQt d2VpZ2h0OiBib2xkOworfQorCisuZmlsZV9zZWxlY3Rpb25fY3RybCAuY3Jl YXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXSB7CisgIGhlaWdodDogMjNw eDsKKyAgcGFkZGluZzogMnB4OworICB3aWR0aDogMTk0cHg7CisgIGJvcmRl ci1yYWRpdXM6IDJweDsKK30KKworLmZpbGVfc2VsZWN0aW9uX2N0cmwgLmJy b3dzZV9maWxlX2lucHV0IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOwor ICB3aWR0aDogMjIwcHg7CisgIG1hcmdpbi1yaWdodDogMDsKK30KKworLmZp bGVfc2VsZWN0aW9uX2N0cmwgYnV0dG9uLnNlbGVjdF9pdGVtIHsKKyAgZGlz cGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kOiAjNzc3OworICBiYWNrZ3Jv dW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgjNzc3LCAjOTk5OTk5KTsK KyAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCM3NzcsICM5OTkp OworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCgjNzc3LCAj OTk5KTsKKyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCM3NzcsICM5 OTkpOworICBjb2xvcjogI2ZmZjsKKyAgcGFkZGluZzogOXB4IDBweCA5cHgg MHB4OworICBtYXJnaW4tcmlnaHQ6IC03cHg7CisgIG1hcmdpbi10b3A6IC00 cHg7CisgIG1pbi13aWR0aDogMzBweDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJh ZGl1czogMDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKK30K KworLmZpbGVfc2VsZWN0aW9uX2N0cmwgaW5wdXRbdHlwZT0idGV4dCJdIHsK KyAgd2lkdGg6IGNhbGMoMTAwJSAtIDIycHgpOworICBib3JkZXI6IG5vbmU7 CisgIG1hcmdpbi1sZWZ0OiAtNnB4OworICBtYXJnaW4tdG9wOiAtM3B4Owor ICBoZWlnaHQ6IDMycHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworfQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRt aW4uanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1p bi5qcwppbmRleCA1NDRkNTc0Li42ZTEzNzYxIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1pbi5qcworKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1pbi5qcwpAQCAt MjAxNSw1ICsyMDE1LDc4IEBACiAgICAgfQogICB9KTsKIAorICAgIC8qCisg ICAgKiBJbnB1dCBGaWxlIENvbnRyb2w6IFRoaXMgY29udHJvbCBpcyB1c2Vk IHdpdGggU3RvcmFnZSBNYW5hZ2VyIERpYWxvZywKKyAgICAqIEl0IGFsbG93 cyB1c2VyIHRvIHBlcmZvcm0gZm9sbG93aW5nIG9wZXJhdGlvbnM6CisgICAg KiAtIFNlbGVjdCBGaWxlCisgICAgKiAtIFNlbGVjdCBGb2xkZXIKKyAgICAq IC0gQ3JlYXRlIEZpbGUKKyAgICAqIC0gT3BlbmluZyBTdG9yYWdlIE1hbmFn ZXIgRGlhbG9nIGl0c2VsZi4KKyAgICAqLworICAgIHZhciBGaWxlQ29udHJv bCA9IEJhY2tmb3JtLkZpbGVDb250cm9sID0gQmFja2Zvcm0uSW5wdXRDb250 cm9sLmV4dGVuZCh7CisgICAgICBkZWZhdWx0czogeworICAgICAgICB0eXBl OiAidGV4dCIsCisgICAgICAgIGxhYmVsOiAiIiwKKyAgICAgICAgbWluOiB1 bmRlZmluZWQsCisgICAgICAgIG1heDogdW5kZWZpbmVkLAorICAgICAgICBt YXhsZW5ndGg6IDI1NSwKKyAgICAgICAgZXh0cmFDbGFzc2VzOiBbXSwKKyAg ICAgICAgaGVscE1lc3NhZ2U6IG51bGwsCisgICAgICAgIGRpYWxvZ190eXBl OiAnc2VsZWN0X2ZpbGUnCisgICAgICB9LAorICAgICAgaW5pdGlhbGl6ZTog ZnVuY3Rpb24oKXsKKyAgICAgICAgQmFja2Zvcm0uSW5wdXRDb250cm9sLnBy b3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisK KyAgICAgICAgLy8gTGlzdGVuIGNsaWNrIGV2ZW50cyBvZiBTdG9yYWdlIE1h bmFnZXIgZGlhbG9nIGJ1dHRvbnMKKyAgICAgICAgcGdBZG1pbi5Ccm93c2Vy LkV2ZW50cy5vbigncGdhZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46Jyt0aGlz LmZpZWxkLmdldCgnZGlhbG9nX3R5cGUnKSwgdGhpcy5zdG9yYWdlX2RsZ19o YW5kZXIsIHRoaXMpOworICAgICAgfSwKKyAgICAgIHRlbXBsYXRlOiBfLnRl bXBsYXRlKFsKKyAgICAgICAgJzxsYWJlbCBjbGFzcz0iPCU9QmFja2Zvcm0u Y29udHJvbExhYmVsQ2xhc3NOYW1lJT4iPjwlPWxhYmVsJT48L2xhYmVsPics CisgICAgICAgICc8ZGl2IGNsYXNzPSI8JT1CYWNrZm9ybS5jb250cm9sc0Ns YXNzTmFtZSU+Ij4nLAorICAgICAgICAgICc8ZGl2IGNsYXNzPSJmaWxlX3Nl bGVjdGlvbl9jdHJsIGZvcm0tY29udHJvbCI+JywKKyAgICAgICAgICAgICc8 aW5wdXQgdHlwZT0iPCU9dHlwZSU+IiBjbGFzcz0iYnJvd3NlX2ZpbGVfaW5w dXQgPCU9ZXh0cmFDbGFzc2VzLmpvaW4oXCcgXCcpJT4iIG5hbWU9IjwlPW5h bWUlPiIgbWluPSI8JT1taW4lPiIgbWF4PSI8JT1tYXglPiJtYXhsZW5ndGg9 IjwlPW1heGxlbmd0aCU+IiB2YWx1ZT0iPCUtdmFsdWUlPiIgcGxhY2Vob2xk ZXI9IjwlLXBsYWNlaG9sZGVyJT4iIDwlPWRpc2FibGVkID8gImRpc2FibGVk IiA6ICIiJT4gPCU9cmVxdWlyZWQgPyAicmVxdWlyZWQiIDogIiIlPiAvPics CisgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGZhIGZhLWVsbGlw c2lzLWggc2VsZWN0X2l0ZW0gcHVsbC1yaWdodCI+PC9idXR0b24+JywKKyAg ICAgICAgICAgICc8JSBpZiAoaGVscE1lc3NhZ2UgJiYgaGVscE1lc3NhZ2Uu bGVuZ3RoKSB7ICU+JywKKyAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iPCU9 QmFja2Zvcm0uaGVscE1lc3NhZ2VDbGFzc05hbWUlPiI+PCU9aGVscE1lc3Nh Z2UlPjwvc3Bhbj4nLAorICAgICAgICAgICAgJzwlIH0gJT4nLAorICAgICAg ICAgICc8L2Rpdj4nLAorICAgICAgICAnPC9kaXY+JworICAgICAgXS5qb2lu KCJcbiIpKSwKKyAgICAgIGV2ZW50czogeworICAgICAgICAiY2xpY2sgLnNl bGVjdF9pdGVtIjogIm9uU2VsZWN0IiwKKyAgICAgIH0sCisgICAgICBvblNl bGVjdDogZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGlhbG9nX3R5cGUg PSB0aGlzLmZpZWxkLmdldCgnZGlhbG9nX3R5cGUnKTsKKyAgICAgICAgICAg IHN1cHBfdHlwZXMgPSB0aGlzLmZpZWxkLmdldCgnc3VwcF90eXBlcycpOwor ICAgICAgICB2YXIgcGFyYW1zID0geworICAgICAgICAgIHN1cHBvcnRlZF90 eXBlczogc3VwcF90eXBlcywKKyAgICAgICAgICBkaWFsb2dfdHlwZTogZGlh bG9nX3R5cGUKKyAgICAgICAgfTsKKyAgICAgICAgcGdBZG1pbi5GaWxlTWFu YWdlci5zaG93X2RpYWxvZyhwYXJhbXMpOworICAgICAgfSwKKyAgICAgIHN0 b3JhZ2VfZGxnX2hhbmRlcjogZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIg ZmllbGQgPSBfLmRlZmF1bHRzKHRoaXMuZmllbGQudG9KU09OKCksIHRoaXMu ZGVmYXVsdHMpLAorICAgICAgICAgICAgYXR0ckFyciA9IHRoaXMuZmllbGQu Z2V0KCJuYW1lIikuc3BsaXQoJy4nKSwKKyAgICAgICAgICAgIGRpYWxvZ190 eXBlID0gdGhpcy5maWVsZC5nZXQoJ2RpYWxvZ190eXBlJyksCisgICAgICAg ICAgICBuYW1lID0gYXR0ckFyci5zaGlmdCgpLAorICAgICAgICAgICAgc2Vs ZWN0ZWRfaXRlbTsKKworICAgICAgICAvLyBHZXQgc2VsZWN0ZWQgSXRlbSBm cm9tIHRoZSBTdG9yYWdlIE1hbmFnZXIgRGlhbG9nCisgICAgICAgIGlmKGRp YWxvZ190eXBlID09ICdjcmVhdGVfZmlsZScpIHsKKyAgICAgICAgICBzZWxl Y3RlZF9pdGVtID0gJCgnLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lu cHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZhbCgpOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRh dGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICAgICAgc2VsZWN0ZWRf aXRlbSA9ICQoJy5maWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxl Y3RlZCBzcGFuJykuYXR0cignZGF0YS1hbHQnKTsKKyAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgc2VsZWN0ZWRfaXRlbSA9ICQoJy5maWxlaW5m byB0Ym9keSB0ci5zZWxlY3RlZCB0ZCcpLmF0dHIoJ3RpdGxlJyk7CisgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNldCBzZWxlY3RlZCB2 YWx1ZSBpbnRvIHRoZSBtb2RlbAorICAgICAgICB0aGlzLm1vZGVsLnNldChu YW1lLCBzZWxlY3RlZF9pdGVtKTsKKyAgICAgIH0KKworICAgIH0pOworCiAg IHJldHVybiBCYWNrZm9ybTsKIH0pKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3N0YXRpYy9qcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuanMgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25l LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWYz OWUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMv anF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmpzCkBAIC0wLDAgKzEsMTc2NyBA QAorCisvKgorICoKKyAqIE1vcmUgaW5mbyBhdCBbd3d3LmRyb3B6b25lanMu Y29tXShodHRwOi8vd3d3LmRyb3B6b25lanMuY29tKQorICoKKyAqIENvcHly aWdodCAoYykgMjAxMiwgTWF0aWFzIE1lbm8KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp Z2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgor ICovCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIERyb3B6b25lLCBFbWl0dGVy LCBjYW1lbGl6ZSwgY29udGVudExvYWRlZCwgZGV0ZWN0VmVydGljYWxTcXVh c2gsIGRyYXdJbWFnZUlPU0ZpeCwgbm9vcCwgd2l0aG91dCwKKyAgICBfX3Ns aWNlID0gW10uc2xpY2UsCisgICAgX19oYXNQcm9wID0ge30uaGFzT3duUHJv cGVydHksCisgICAgX19leHRlbmRzID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVu dCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChfX2hhc1Byb3Au Y2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsg fSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7 IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5w cm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJl bnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH07CisKKyAgbm9vcCA9IGZ1 bmN0aW9uKCkge307CisKKyAgRW1pdHRlciA9IChmdW5jdGlvbigpIHsKKyAg ICBmdW5jdGlvbiBFbWl0dGVyKCkge30KKworICAgIEVtaXR0ZXIucHJvdG90 eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjsK KworICAgIEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnQs IGZuKSB7CisgICAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFj a3MgfHwge307CisgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrc1tldmVudF0p IHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSA9IFtdOworICAg ICAgfQorICAgICAgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XS5wdXNoKGZuKTsK KyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBFbWl0dGVyLnBy b3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYXJncywg Y2FsbGJhY2ssIGNhbGxiYWNrcywgZXZlbnQsIF9pLCBfbGVuOworICAgICAg ZXZlbnQgPSBhcmd1bWVudHNbMF0sIGFyZ3MgPSAyIDw9IGFyZ3VtZW50cy5s ZW5ndGggPyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IFtdOworICAg ICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9Owor ICAgICAgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTsKKyAg ICAgIGlmIChjYWxsYmFja3MpIHsKKyAgICAgICAgZm9yIChfaSA9IDAsIF9s ZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAg ICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tfaV07CisgICAgICAgICAg Y2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7CisgICAgICAgIH0KKyAgICAg IH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBFbWl0dGVy LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBl Lm9mZjsKKworICAgIEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3Rl bmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjsKKworICAgIEVtaXR0ZXIu cHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3Rv dHlwZS5vZmY7CisKKyAgICBFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5j dGlvbihldmVudCwgZm4pIHsKKyAgICAgIHZhciBjYWxsYmFjaywgY2FsbGJh Y2tzLCBpLCBfaSwgX2xlbjsKKyAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tz IHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgdGhpcy5f Y2FsbGJhY2tzID0ge307CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAg fQorICAgICAgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTsK KyAgICAgIGlmICghY2FsbGJhY2tzKSB7CisgICAgICAgIHJldHVybiB0aGlz OworICAgICAgfQorICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEp IHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tldmVudF07Cisg ICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorICAgICAgZm9yIChpID0g X2kgPSAwLCBfbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgX2kgPCBfbGVuOyBp ID0gKytfaSkgeworICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTsK KyAgICAgICAgaWYgKGNhbGxiYWNrID09PSBmbikgeworICAgICAgICAgIGNh bGxiYWNrcy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisK KyAgICByZXR1cm4gRW1pdHRlcjsKKworICB9KSgpOworCisgIERyb3B6b25l ID0gKGZ1bmN0aW9uKF9zdXBlcikgeworICAgIHZhciBleHRlbmQsIHJlc29s dmVPcHRpb247CisKKyAgICBfX2V4dGVuZHMoRHJvcHpvbmUsIF9zdXBlcik7 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuRW1pdHRlciA9IEVtaXR0ZXI7 CisKKworICAgIC8qCisgICAgVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIGF2YWls YWJsZSBldmVudHMgeW91IGNhbiByZWdpc3RlciBvbiBhIGRyb3B6b25lIG9i amVjdC4KKworICAgIFlvdSBjYW4gcmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxl ciBsaWtlIHRoaXM6CisKKyAgICAgICAgZHJvcHpvbmUub24oImRyYWdFbnRl ciIsIGZ1bmN0aW9uKCkgeyB9KTsKKyAgICAgKi8KKworICAgIERyb3B6b25l LnByb3RvdHlwZS5ldmVudHMgPSBbImRyb3AiLCAiZHJhZ3N0YXJ0IiwgImRy YWdlbmQiLCAiZHJhZ2VudGVyIiwgImRyYWdvdmVyIiwgImRyYWdsZWF2ZSIs ICJhZGRlZGZpbGUiLCAiYWRkZWRmaWxlcyIsICJyZW1vdmVkZmlsZSIsICJ0 aHVtYm5haWwiLCAiZXJyb3IiLCAiZXJyb3JtdWx0aXBsZSIsICJwcm9jZXNz aW5nIiwgInByb2Nlc3NpbmdtdWx0aXBsZSIsICJ1cGxvYWRwcm9ncmVzcyIs ICJ0b3RhbHVwbG9hZHByb2dyZXNzIiwgInNlbmRpbmciLCAic2VuZGluZ211 bHRpcGxlIiwgInN1Y2Nlc3MiLCAic3VjY2Vzc211bHRpcGxlIiwgImNhbmNl bGVkIiwgImNhbmNlbGVkbXVsdGlwbGUiLCAiY29tcGxldGUiLCAiY29tcGxl dGVtdWx0aXBsZSIsICJyZXNldCIsICJtYXhmaWxlc2V4Y2VlZGVkIiwgIm1h eGZpbGVzcmVhY2hlZCIsICJxdWV1ZWNvbXBsZXRlIl07CisKKyAgICBEcm9w em9uZS5wcm90b3R5cGUuZGVmYXVsdE9wdGlvbnMgPSB7CisgICAgICB1cmw6 IG51bGwsCisgICAgICBtZXRob2Q6ICJwb3N0IiwKKyAgICAgIHdpdGhDcmVk ZW50aWFsczogZmFsc2UsCisgICAgICBwYXJhbGxlbFVwbG9hZHM6IDIsCisg ICAgICB1cGxvYWRNdWx0aXBsZTogZmFsc2UsCisgICAgICBtYXhGaWxlc2l6 ZTogMjU2LAorICAgICAgcGFyYW1OYW1lOiAiZmlsZSIsCisgICAgICBjcmVh dGVJbWFnZVRodW1ibmFpbHM6IHRydWUsCisgICAgICBtYXhUaHVtYm5haWxG aWxlc2l6ZTogMTAsCisgICAgICB0aHVtYm5haWxXaWR0aDogMTIwLAorICAg ICAgdGh1bWJuYWlsSGVpZ2h0OiAxMjAsCisgICAgICBmaWxlc2l6ZUJhc2U6 IDEwMDAsCisgICAgICBtYXhGaWxlczogbnVsbCwKKyAgICAgIHBhcmFtczog e30sCisgICAgICBjbGlja2FibGU6IHRydWUsCisgICAgICBpZ25vcmVIaWRk ZW5GaWxlczogdHJ1ZSwKKyAgICAgIGFjY2VwdGVkRmlsZXM6IG51bGwsCisg ICAgICBhY2NlcHRlZE1pbWVUeXBlczogbnVsbCwKKyAgICAgIGF1dG9Qcm9j ZXNzUXVldWU6IHRydWUsCisgICAgICBhdXRvUXVldWU6IHRydWUsCisgICAg ICBhZGRSZW1vdmVMaW5rczogZmFsc2UsCisgICAgICBwcmV2aWV3c0NvbnRh aW5lcjogbnVsbCwKKyAgICAgIGhpZGRlbklucHV0Q29udGFpbmVyOiAiYm9k eSIsCisgICAgICBjYXB0dXJlOiBudWxsLAorICAgICAgcmVuYW1lRmlsZW5h bWU6IG51bGwsCisgICAgICBkaWN0RGVmYXVsdE1lc3NhZ2U6ICJEcm9wIGZp bGVzIGhlcmUgdG8gdXBsb2FkIiwKKyAgICAgIGRpY3RGYWxsYmFja01lc3Nh Z2U6ICJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBkcmFnJ24nZHJv cCBmaWxlIHVwbG9hZHMuIiwKKyAgICAgIGRpY3RGYWxsYmFja1RleHQ6ICJQ bGVhc2UgdXNlIHRoZSBmYWxsYmFjayBmb3JtIGJlbG93IHRvIHVwbG9hZCB5 b3VyIGZpbGVzIGxpa2UgaW4gdGhlIG9sZGVuIGRheXMuIiwKKyAgICAgIGRp Y3RGaWxlVG9vQmlnOiAiRmlsZSBpcyB0b28gYmlnICh7e2ZpbGVzaXplfX1N aUIpLiBNYXggZmlsZXNpemU6IHt7bWF4RmlsZXNpemV9fU1pQi4iLAorICAg ICAgZGljdEludmFsaWRGaWxlVHlwZTogIllvdSBjYW4ndCB1cGxvYWQgZmls ZXMgb2YgdGhpcyB0eXBlLiIsCisgICAgICBkaWN0UmVzcG9uc2VFcnJvcjog IlNlcnZlciByZXNwb25kZWQgd2l0aCB7e3N0YXR1c0NvZGV9fSBjb2RlLiIs CisgICAgICBkaWN0Q2FuY2VsVXBsb2FkOiAiQ2FuY2VsIHVwbG9hZCIsCisg ICAgICBkaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uOiAiQXJlIHlvdSBz dXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIHVwbG9hZD8iLAorICAgICAg ZGljdFJlbW92ZUZpbGU6ICJSZW1vdmUgZmlsZSIsCisgICAgICBkaWN0UmVt b3ZlRmlsZUNvbmZpcm1hdGlvbjogbnVsbCwKKyAgICAgIGRpY3RNYXhGaWxl c0V4Y2VlZGVkOiAiWW91IGNhbiBub3QgdXBsb2FkIGFueSBtb3JlIGZpbGVz LiIsCisgICAgICBhY2NlcHQ6IGZ1bmN0aW9uKGZpbGUsIGRvbmUpIHsKKyAg ICAgICAgcmV0dXJuIGRvbmUoKTsKKyAgICAgIH0sCisgICAgICBpbml0OiBm dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG5vb3A7CisgICAgICB9LAor ICAgICAgZm9yY2VGYWxsYmFjazogZmFsc2UsCisgICAgICBmYWxsYmFjazog ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjaGlsZCwgbWVzc2FnZUVsZW1l bnQsIHNwYW4sIF9pLCBfbGVuLCBfcmVmOworICAgICAgICB0aGlzLmVsZW1l bnQuY2xhc3NOYW1lID0gIiIgKyB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lICsg IiBkei1icm93c2VyLW5vdC1zdXBwb3J0ZWQiOworICAgICAgICBfcmVmID0g dGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKKyAg ICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBf bGVuOyBfaSsrKSB7CisgICAgICAgICAgY2hpbGQgPSBfcmVmW19pXTsKKyAg ICAgICAgICBpZiAoLyhefCApZHotbWVzc2FnZSgkfCApLy50ZXN0KGNoaWxk LmNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VFbGVtZW50ID0g Y2hpbGQ7CisgICAgICAgICAgICBjaGlsZC5jbGFzc05hbWUgPSAiZHotbWVz c2FnZSI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFtZXNzYWdlRWxlbWVudCkgeworICAg ICAgICAgIG1lc3NhZ2VFbGVtZW50ID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVu dCgiPGRpdiBjbGFzcz1cImR6LW1lc3NhZ2VcIj48c3Bhbj48L3NwYW4+PC9k aXY+Iik7CisgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1l c3NhZ2VFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBzcGFuID0gbWVz c2FnZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKVswXTsK KyAgICAgICAgaWYgKHNwYW4pIHsKKyAgICAgICAgICBpZiAoc3Bhbi50ZXh0 Q29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBzcGFuLnRleHRDb250 ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2U7CisgICAg ICAgICAgfSBlbHNlIGlmIChzcGFuLmlubmVyVGV4dCAhPSBudWxsKSB7Cisg ICAgICAgICAgICBzcGFuLmlubmVyVGV4dCA9IHRoaXMub3B0aW9ucy5kaWN0 RmFsbGJhY2tNZXNzYWdlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0 RmFsbGJhY2tGb3JtKCkpOworICAgICAgfSwKKyAgICAgIHJlc2l6ZTogZnVu Y3Rpb24oZmlsZSkgeworICAgICAgICB2YXIgaW5mbywgc3JjUmF0aW8sIHRy Z1JhdGlvOworICAgICAgICBpbmZvID0geworICAgICAgICAgIHNyY1g6IDAs CisgICAgICAgICAgc3JjWTogMCwKKyAgICAgICAgICBzcmNXaWR0aDogZmls ZS53aWR0aCwKKyAgICAgICAgICBzcmNIZWlnaHQ6IGZpbGUuaGVpZ2h0Cisg ICAgICAgIH07CisgICAgICAgIHNyY1JhdGlvID0gZmlsZS53aWR0aCAvIGZp bGUuaGVpZ2h0OworICAgICAgICBpbmZvLm9wdFdpZHRoID0gdGhpcy5vcHRp b25zLnRodW1ibmFpbFdpZHRoOworICAgICAgICBpbmZvLm9wdEhlaWdodCA9 IHRoaXMub3B0aW9ucy50aHVtYm5haWxIZWlnaHQ7CisgICAgICAgIGlmICgo aW5mby5vcHRXaWR0aCA9PSBudWxsKSAmJiAoaW5mby5vcHRIZWlnaHQgPT0g bnVsbCkpIHsKKyAgICAgICAgICBpbmZvLm9wdFdpZHRoID0gaW5mby5zcmNX aWR0aDsKKyAgICAgICAgICBpbmZvLm9wdEhlaWdodCA9IGluZm8uc3JjSGVp Z2h0OworICAgICAgICB9IGVsc2UgaWYgKGluZm8ub3B0V2lkdGggPT0gbnVs bCkgeworICAgICAgICAgIGluZm8ub3B0V2lkdGggPSBzcmNSYXRpbyAqIGlu Zm8ub3B0SGVpZ2h0OworICAgICAgICB9IGVsc2UgaWYgKGluZm8ub3B0SGVp Z2h0ID09IG51bGwpIHsKKyAgICAgICAgICBpbmZvLm9wdEhlaWdodCA9ICgx IC8gc3JjUmF0aW8pICogaW5mby5vcHRXaWR0aDsKKyAgICAgICAgfQorICAg ICAgICB0cmdSYXRpbyA9IGluZm8ub3B0V2lkdGggLyBpbmZvLm9wdEhlaWdo dDsKKyAgICAgICAgaWYgKGZpbGUuaGVpZ2h0IDwgaW5mby5vcHRIZWlnaHQg fHwgZmlsZS53aWR0aCA8IGluZm8ub3B0V2lkdGgpIHsKKyAgICAgICAgICBp bmZvLnRyZ0hlaWdodCA9IGluZm8uc3JjSGVpZ2h0OworICAgICAgICAgIGlu Zm8udHJnV2lkdGggPSBpbmZvLnNyY1dpZHRoOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgIGlmIChzcmNSYXRpbyA+IHRyZ1JhdGlvKSB7CisgICAg ICAgICAgICBpbmZvLnNyY0hlaWdodCA9IGZpbGUuaGVpZ2h0OworICAgICAg ICAgICAgaW5mby5zcmNXaWR0aCA9IGluZm8uc3JjSGVpZ2h0ICogdHJnUmF0 aW87CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZm8uc3Jj V2lkdGggPSBmaWxlLndpZHRoOworICAgICAgICAgICAgaW5mby5zcmNIZWln aHQgPSBpbmZvLnNyY1dpZHRoIC8gdHJnUmF0aW87CisgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGluZm8uc3JjWCA9IChmaWxlLndpZHRoIC0g aW5mby5zcmNXaWR0aCkgLyAyOworICAgICAgICBpbmZvLnNyY1kgPSAoZmls ZS5oZWlnaHQgLSBpbmZvLnNyY0hlaWdodCkgLyAyOworICAgICAgICByZXR1 cm4gaW5mbzsKKyAgICAgIH0sCisKKyAgICAgIC8qCisgICAgICBUaG9zZSBm dW5jdGlvbnMgcmVnaXN0ZXIgdGhlbXNlbHZlcyB0byB0aGUgZXZlbnRzIG9u IGluaXQgYW5kIGhhbmRsZSBhbGwKKyAgICAgIHRoZSB1c2VyIGludGVyZmFj ZSBzcGVjaWZpYyBzdHVmZi4gT3ZlcndyaXRpbmcgdGhlbSB3b24ndCBicmVh ayB0aGUgdXBsb2FkCisgICAgICBidXQgY2FuIGJyZWFrIHRoZSB3YXkgaXQn cyBkaXNwbGF5ZWQuCisgICAgICBZb3UgY2FuIG92ZXJ3cml0ZSB0aGVtIGlm IHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJZiB5b3Ug anVzdAorICAgICAgd2FudCB0byBhZGQgYW4gYWRkaXRpb25hbCBldmVudCBo YW5kbGVyLCByZWdpc3RlciBpdCBvbiB0aGUgZHJvcHpvbmUgb2JqZWN0Cisg ICAgICBhbmQgZG9uJ3Qgb3ZlcndyaXRlIHRob3NlIG9wdGlvbnMuCisgICAg ICAgKi8KKyAgICAgIGRyb3A6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0 dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1kcmFnLWhv dmVyIik7CisgICAgICB9LAorICAgICAgZHJhZ3N0YXJ0OiBub29wLAorICAg ICAgZHJhZ2VuZDogZnVuY3Rpb24oZSkgeworICAgICAgICByZXR1cm4gdGhp cy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LWRyYWctaG92ZXIiKTsK KyAgICAgIH0sCisgICAgICBkcmFnZW50ZXI6IGZ1bmN0aW9uKGUpIHsKKyAg ICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1k cmFnLWhvdmVyIik7CisgICAgICB9LAorICAgICAgZHJhZ292ZXI6IGZ1bmN0 aW9uKGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xp c3QuYWRkKCJkei1kcmFnLWhvdmVyIik7CisgICAgICB9LAorICAgICAgZHJh Z2xlYXZlOiBmdW5jdGlvbihlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVs ZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIpOworICAg ICAgfSwKKyAgICAgIHBhc3RlOiBub29wLAorICAgICAgcmVzZXQ6IGZ1bmN0 aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlz dC5yZW1vdmUoImR6LXN0YXJ0ZWQiKTsKKyAgICAgIH0sCisgICAgICBhZGRl ZGZpbGU6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgdmFyIG5vZGUsIHJl bW92ZUZpbGVFdmVudCwgcmVtb3ZlTGluaywgX2ksIF9qLCBfaywgX2xlbiwg X2xlbjEsIF9sZW4yLCBfcmVmLCBfcmVmMSwgX3JlZjIsIF9yZXN1bHRzOwor ICAgICAgICBpZiAodGhpcy5lbGVtZW50ID09PSB0aGlzLnByZXZpZXdzQ29u dGFpbmVyKSB7CisgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5h ZGQoImR6LXN0YXJ0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp cy5wcmV2aWV3c0NvbnRhaW5lcikgeworICAgICAgICAgIGZpbGUucHJldmll d0VsZW1lbnQgPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9u cy5wcmV2aWV3VGVtcGxhdGUudHJpbSgpKTsKKyAgICAgICAgICBmaWxlLnBy ZXZpZXdUZW1wbGF0ZSA9IGZpbGUucHJldmlld0VsZW1lbnQ7CisgICAgICAg ICAgdGhpcy5wcmV2aWV3c0NvbnRhaW5lci5hcHBlbmRDaGlsZChmaWxlLnBy ZXZpZXdFbGVtZW50KTsKKyAgICAgICAgICBfcmVmID0gZmlsZS5wcmV2aWV3 RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei1uYW1lXSIpOwor ICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9p IDwgX2xlbjsgX2krKykgeworICAgICAgICAgICAgbm9kZSA9IF9yZWZbX2ld OworICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IHRoaXMuX3JlbmFt ZUZpbGVuYW1lKGZpbGUubmFtZSk7CisgICAgICAgICAgfQorICAgICAgICAg IF9yZWYxID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxs KCJbZGF0YS1kei1zaXplXSIpOworICAgICAgICAgIGZvciAoX2ogPSAwLCBf bGVuMSA9IF9yZWYxLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykgeworICAg ICAgICAgICAgbm9kZSA9IF9yZWYxW19qXTsKKyAgICAgICAgICAgIG5vZGUu aW5uZXJIVE1MID0gdGhpcy5maWxlc2l6ZShmaWxlLnNpemUpOworICAgICAg ICAgIH0KKyAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFkZFJlbW92ZUxp bmtzKSB7CisgICAgICAgICAgICBmaWxlLl9yZW1vdmVMaW5rID0gRHJvcHpv bmUuY3JlYXRlRWxlbWVudCgiPGEgY2xhc3M9XCJkei1yZW1vdmVcIiBocmVm PVwiamF2YXNjcmlwdDp1bmRlZmluZWQ7XCIgZGF0YS1kei1yZW1vdmU+IiAr IHRoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZSArICI8L2E+Iik7CisgICAg ICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmFwcGVuZENoaWxkKGZpbGUu X3JlbW92ZUxpbmspOworICAgICAgICAgIH0KKyAgICAgICAgICByZW1vdmVG aWxlRXZlbnQgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAgIHJl dHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgIGUucHJldmVudERl ZmF1bHQoKTsKKyAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK KyAgICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5V UExPQURJTkcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRHJvcHpvbmUu Y29uZmlybShfdGhpcy5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWRDb25maXJt YXRpb24sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJu IF90aGlzLnJlbW92ZUZpbGUoZmlsZSk7CisgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg KF90aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb24pIHsK KyAgICAgICAgICAgICAgICAgIHJldHVybiBEcm9wem9uZS5jb25maXJtKF90 aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb24sIGZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMucmVt b3ZlRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICAgIH0pOworICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4g X3RoaXMucmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgfSko dGhpcyk7CisgICAgICAgICAgX3JlZjIgPSBmaWxlLnByZXZpZXdFbGVtZW50 LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LXJlbW92ZV0iKTsKKyAgICAg ICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgICAgIGZvciAoX2sgPSAwLCBf bGVuMiA9IF9yZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykgeworICAg ICAgICAgICAgcmVtb3ZlTGluayA9IF9yZWYyW19rXTsKKyAgICAgICAgICAg IF9yZXN1bHRzLnB1c2gocmVtb3ZlTGluay5hZGRFdmVudExpc3RlbmVyKCJj bGljayIsIHJlbW92ZUZpbGVFdmVudCkpOworICAgICAgICAgIH0KKyAgICAg ICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgICAgIH0KKyAgICAgIH0sCisg ICAgICByZW1vdmVkZmlsZTogZnVuY3Rpb24oZmlsZSkgeworICAgICAgICB2 YXIgX3JlZjsKKyAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHsK KyAgICAgICAgICBpZiAoKF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50KSAh PSBudWxsKSB7CisgICAgICAgICAgICBfcmVmLnBhcmVudE5vZGUucmVtb3Zl Q2hpbGQoZmlsZS5wcmV2aWV3RWxlbWVudCk7CisgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVNYXhGaWxlc1Jl YWNoZWRDbGFzcygpOworICAgICAgfSwKKyAgICAgIHRodW1ibmFpbDogZnVu Y3Rpb24oZmlsZSwgZGF0YVVybCkgeworICAgICAgICB2YXIgdGh1bWJuYWls RWxlbWVudCwgX2ksIF9sZW4sIF9yZWY7CisgICAgICAgIGlmIChmaWxlLnBy ZXZpZXdFbGVtZW50KSB7CisgICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVu dC5jbGFzc0xpc3QucmVtb3ZlKCJkei1maWxlLXByZXZpZXciKTsKKyAgICAg ICAgICBfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9y QWxsKCJbZGF0YS1kei10aHVtYm5haWxdIik7CisgICAgICAgICAgZm9yIChf aSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7 CisgICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50ID0gX3JlZltfaV07Cisg ICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50LmFsdCA9IGZpbGUubmFtZTsK KyAgICAgICAgICAgIHRodW1ibmFpbEVsZW1lbnQuc3JjID0gZGF0YVVybDsK KyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKChm dW5jdGlvbihfdGhpcykgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICByZXR1cm4gZmlsZS5wcmV2aWV3RWxlbWVu dC5jbGFzc0xpc3QuYWRkKCJkei1pbWFnZS1wcmV2aWV3Iik7CisgICAgICAg ICAgICB9OworICAgICAgICAgIH0pKHRoaXMpKSwgMSk7CisgICAgICAgIH0K KyAgICAgIH0sCisgICAgICBlcnJvcjogZnVuY3Rpb24oZmlsZSwgbWVzc2Fn ZSkgeworICAgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1 bHRzOworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkgeworICAg ICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHot ZXJyb3IiKTsKKyAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICJT dHJpbmciICYmIG1lc3NhZ2UuZXJyb3IpIHsKKyAgICAgICAgICAgIG1lc3Nh Z2UgPSBtZXNzYWdlLmVycm9yOworICAgICAgICAgIH0KKyAgICAgICAgICBf cmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJb ZGF0YS1kei1lcnJvcm1lc3NhZ2VdIik7CisgICAgICAgICAgX3Jlc3VsdHMg PSBbXTsKKyAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVu Z3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICAgIG5vZGUgPSBf cmVmW19pXTsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS50ZXh0 Q29udGVudCA9IG1lc3NhZ2UpOworICAgICAgICAgIH0KKyAgICAgICAgICBy ZXR1cm4gX3Jlc3VsdHM7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBl cnJvcm11bHRpcGxlOiBub29wLAorICAgICAgcHJvY2Vzc2luZzogZnVuY3Rp b24oZmlsZSkgeworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkg eworICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFk ZCgiZHotcHJvY2Vzc2luZyIpOworICAgICAgICAgIGlmIChmaWxlLl9yZW1v dmVMaW5rKSB7CisgICAgICAgICAgICByZXR1cm4gZmlsZS5fcmVtb3ZlTGlu ay50ZXh0Q29udGVudCA9IHRoaXMub3B0aW9ucy5kaWN0Q2FuY2VsVXBsb2Fk OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHBy b2Nlc3NpbmdtdWx0aXBsZTogbm9vcCwKKyAgICAgIHVwbG9hZHByb2dyZXNz OiBmdW5jdGlvbihmaWxlLCBwcm9ncmVzcywgYnl0ZXNTZW50KSB7CisgICAg ICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAg ICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAgICAgICAgX3Jl ZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2Rh dGEtZHotdXBsb2FkcHJvZ3Jlc3NdIik7CisgICAgICAgICAgX3Jlc3VsdHMg PSBbXTsKKyAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVu Z3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICAgIG5vZGUgPSBf cmVmW19pXTsKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAn UFJPR1JFU1MnKSB7CisgICAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9k ZS52YWx1ZSA9IHByb2dyZXNzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS5zdHlsZS53aWR0aCA9 ICIiICsgcHJvZ3Jlc3MgKyAiJSIpOworICAgICAgICAgICAgfQorICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgICAgIH0K KyAgICAgIH0sCisgICAgICB0b3RhbHVwbG9hZHByb2dyZXNzOiBub29wLAor ICAgICAgc2VuZGluZzogbm9vcCwKKyAgICAgIHNlbmRpbmdtdWx0aXBsZTog bm9vcCwKKyAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAg ICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHsKKyAgICAgICAgICByZXR1 cm4gZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1zdWNj ZXNzIik7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBzdWNjZXNzbXVs dGlwbGU6IG5vb3AsCisgICAgICBjYW5jZWxlZDogZnVuY3Rpb24oZmlsZSkg eworICAgICAgICByZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsIGZpbGUsICJV cGxvYWQgY2FuY2VsZWQuIik7CisgICAgICB9LAorICAgICAgY2FuY2VsZWRt dWx0aXBsZTogbm9vcCwKKyAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbihmaWxl KSB7CisgICAgICAgIGlmIChmaWxlLl9yZW1vdmVMaW5rKSB7CisgICAgICAg ICAgZmlsZS5fcmVtb3ZlTGluay50ZXh0Q29udGVudCA9IHRoaXMub3B0aW9u cy5kaWN0UmVtb3ZlRmlsZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmls ZS5wcmV2aWV3RWxlbWVudCkgeworICAgICAgICAgIHJldHVybiBmaWxlLnBy ZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LWNvbXBsZXRlIik7Cisg ICAgICAgIH0KKyAgICAgIH0sCisgICAgICBjb21wbGV0ZW11bHRpcGxlOiBu b29wLAorICAgICAgbWF4ZmlsZXNleGNlZWRlZDogbm9vcCwKKyAgICAgIG1h eGZpbGVzcmVhY2hlZDogbm9vcCwKKyAgICAgIHF1ZXVlY29tcGxldGU6IG5v b3AsCisgICAgICBhZGRlZGZpbGVzOiBub29wLAorICAgICAgcHJldmlld1Rl bXBsYXRlOiAiPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotZmlsZS1wcmV2 aWV3XCI+XG4gIDxkaXYgY2xhc3M9XCJkei1pbWFnZVwiPjxpbWcgZGF0YS1k ei10aHVtYm5haWwgLz48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImR6LWRldGFp bHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHotc2l6ZVwiPjxzcGFuIGRhdGEt ZHotc2l6ZT48L3NwYW4+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImR6LWZp bGVuYW1lXCI+PHNwYW4gZGF0YS1kei1uYW1lPjwvc3Bhbj48L2Rpdj5cbiAg PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkei1wcm9ncmVzc1wiPjxzcGFuIGNs YXNzPVwiZHotdXBsb2FkXCIgZGF0YS1kei11cGxvYWRwcm9ncmVzcz48L3Nw YW4+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tZXNzYWdlXCI+ PHNwYW4gZGF0YS1kei1lcnJvcm1lc3NhZ2U+PC9zcGFuPjwvZGl2PlxuICA8 ZGl2IGNsYXNzPVwiZHotc3VjY2Vzcy1tYXJrXCI+XG4gICAgPHN2ZyB3aWR0 aD1cIjU0cHhcIiBoZWlnaHQ9XCI1NHB4XCIgdmlld0JveD1cIjAgMCA1NCA1 NFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3Jn LzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8x OTk5L3hsaW5rXCIgeG1sbnM6c2tldGNoPVwiaHR0cDovL3d3dy5ib2hlbWlh bmNvZGluZy5jb20vc2tldGNoL25zXCI+XG4gICAgICA8dGl0bGU+Q2hlY2s8 L3RpdGxlPlxuICAgICAgPGRlZnM+PC9kZWZzPlxuICAgICAgPGcgaWQ9XCJQ YWdlLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZp bGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIHNrZXRjaDp0eXBl PVwiTVNQYWdlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMjMuNSwzMS44NDMx NDU4IEwxNy41ODUyNDE5LDI1LjkyODM4NzcgQzE2LjAyNDgyNTMsMjQuMzY3 OTcxMSAxMy40OTEwMjk0LDI0LjM2NjgzNSAxMS45Mjg5MzIyLDI1LjkyODkz MjIgQzEwLjM3MDAxMzYsMjcuNDg3ODUwOCAxMC4zNjY1OTEyLDMwLjAyMzQ0 NTUgMTEuOTI4Mzg3NywzMS41ODUyNDE5IEwyMC40MTQ3NTgxLDQwLjA3MTYx MjMgQzIwLjUxMzM5OTksNDAuMTcwMjU0MSAyMC42MTU5MzE1LDQwLjI2MjY2 NDkgMjAuNzIxODYxNSw0MC4zNDg4NDM1IEMyMi4yODM1NjY5LDQxLjg3MjU2 NTEgMjQuNzk0MjM0LDQxLjg2MjYyMDIgMjYuMzQ2MTU2NCw0MC4zMTA2OTc4 IEw0My4zMTA2OTc4LDIzLjM0NjE1NjQgQzQ0Ljg3NzEwMjEsMjEuNzc5NzUy MSA0NC44NzU4MDU3LDE5LjI0ODM4ODcgNDMuMzEzNzA4NSwxNy42ODYyOTE1 IEM0MS43NTQ3ODk5LDE2LjEyNzM3MjkgMzkuMjE3NjAzNSwxNi4xMjU1NDIy IDM3LjY1Mzg0MzYsMTcuNjg5MzAyMiBMMjMuNSwzMS44NDMxNDU4IFogTTI3 LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEy LjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEy LjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcs NTMgWlwiIGlkPVwiT3ZhbC0yXCIgc3Ryb2tlLW9wYWNpdHk9XCIwLjE5ODc5 NDE1OFwiIHN0cm9rZT1cIiM3NDc0NzRcIiBmaWxsLW9wYWNpdHk9XCIwLjgx NjUxOTQ3NVwiIGZpbGw9XCIjRkZGRkZGXCIgc2tldGNoOnR5cGU9XCJNU1No YXBlR3JvdXBcIj48L3BhdGg+XG4gICAgICA8L2c+XG4gICAgPC9zdmc+XG4g IDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHotZXJyb3ItbWFya1wiPlxuICAg IDxzdmcgd2lkdGg9XCI1NHB4XCIgaGVpZ2h0PVwiNTRweFwiIHZpZXdCb3g9 XCIwIDAgNTQgNTRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8v d3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3 dy53My5vcmcvMTk5OS94bGlua1wiIHhtbG5zOnNrZXRjaD1cImh0dHA6Ly93 d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9uc1wiPlxuICAgICAgPHRp dGxlPkVycm9yPC90aXRsZT5cbiAgICAgIDxkZWZzPjwvZGVmcz5cbiAgICAg IDxnIGlkPVwiUGFnZS0xXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0 aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBz a2V0Y2g6dHlwZT1cIk1TUGFnZVwiPlxuICAgICAgICA8ZyBpZD1cIkNoZWNr LSstT3ZhbC0yXCIgc2tldGNoOnR5cGU9XCJNU0xheWVyR3JvdXBcIiBzdHJv a2U9XCIjNzQ3NDc0XCIgc3Ryb2tlLW9wYWNpdHk9XCIwLjE5ODc5NDE1OFwi IGZpbGw9XCIjRkZGRkZGXCIgZmlsbC1vcGFjaXR5PVwiMC44MTY1MTk0NzVc Ij5cbiAgICAgICAgICA8cGF0aCBkPVwiTTMyLjY1Njg1NDIsMjkgTDM4LjMx MDY5NzgsMjMuMzQ2MTU2NCBDMzkuODc3MTAyMSwyMS43Nzk3NTIxIDM5Ljg3 NTgwNTcsMTkuMjQ4Mzg4NyAzOC4zMTM3MDg1LDE3LjY4NjI5MTUgQzM2Ljc1 NDc4OTksMTYuMTI3MzcyOSAzNC4yMTc2MDM1LDE2LjEyNTU0MjIgMzIuNjUz ODQzNiwxNy42ODkzMDIyIEwyNywyMy4zNDMxNDU4IEwyMS4zNDYxNTY0LDE3 LjY4OTMwMjIgQzE5Ljc4MjM5NjUsMTYuMTI1NTQyMiAxNy4yNDUyMTAxLDE2 LjEyNzM3MjkgMTUuNjg2MjkxNSwxNy42ODYyOTE1IEMxNC4xMjQxOTQzLDE5 LjI0ODM4ODcgMTQuMTIyODk3OSwyMS43Nzk3NTIxIDE1LjY4OTMwMjIsMjMu MzQ2MTU2NCBMMjEuMzQzMTQ1OCwyOSBMMTUuNjg5MzAyMiwzNC42NTM4NDM2 IEMxNC4xMjI4OTc5LDM2LjIyMDI0NzkgMTQuMTI0MTk0MywzOC43NTE2MTEz IDE1LjY4NjI5MTUsNDAuMzEzNzA4NSBDMTcuMjQ1MjEwMSw0MS44NzI2Mjcx IDE5Ljc4MjM5NjUsNDEuODc0NDU3OCAyMS4zNDYxNTY0LDQwLjMxMDY5Nzgg TDI3LDM0LjY1Njg1NDIgTDMyLjY1Mzg0MzYsNDAuMzEwNjk3OCBDMzQuMjE3 NjAzNSw0MS44NzQ0NTc4IDM2Ljc1NDc4OTksNDEuODcyNjI3MSAzOC4zMTM3 MDg1LDQwLjMxMzcwODUgQzM5Ljg3NTgwNTcsMzguNzUxNjExMyAzOS44Nzcx MDIxLDM2LjIyMDI0NzkgMzguMzEwNjk3OCwzNC42NTM4NDM2IEwzMi42NTY4 NTQyLDI5IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUg NTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0 MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0 MDU5NjUsNTMgMjcsNTMgWlwiIGlkPVwiT3ZhbC0yXCIgc2tldGNoOnR5cGU9 XCJNU1NoYXBlR3JvdXBcIj48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAg IDwvZz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj4iCisgICAgfTsK KworICAgIGV4dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGtleSwg b2JqZWN0LCBvYmplY3RzLCB0YXJnZXQsIHZhbCwgX2ksIF9sZW47CisgICAg ICB0YXJnZXQgPSBhcmd1bWVudHNbMF0sIG9iamVjdHMgPSAyIDw9IGFyZ3Vt ZW50cy5sZW5ndGggPyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IFtd OworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBvYmplY3RzLmxlbmd0aDsg X2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG9iamVjdCA9IG9iamVjdHNb X2ldOworICAgICAgICBmb3IgKGtleSBpbiBvYmplY3QpIHsKKyAgICAgICAg ICB2YWwgPSBvYmplY3Rba2V5XTsKKyAgICAgICAgICB0YXJnZXRba2V5XSA9 IHZhbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHRhcmdl dDsKKyAgICB9OworCisgICAgZnVuY3Rpb24gRHJvcHpvbmUoZWxlbWVudCwg b3B0aW9ucykgeworICAgICAgdmFyIGVsZW1lbnRPcHRpb25zLCBmYWxsYmFj aywgX3JlZjsKKyAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAg ICB0aGlzLnZlcnNpb24gPSBEcm9wem9uZS52ZXJzaW9uOworICAgICAgdGhp cy5kZWZhdWx0T3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPSB0aGlzLmRlZmF1 bHRPcHRpb25zLnByZXZpZXdUZW1wbGF0ZS5yZXBsYWNlKC9cbiovZywgIiIp OworICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cyA9IFtdOworICAgICAg dGhpcy5saXN0ZW5lcnMgPSBbXTsKKyAgICAgIHRoaXMuZmlsZXMgPSBbXTsK KyAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50ID09PSAic3RyaW5nIikg eworICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVj dG9yKHRoaXMuZWxlbWVudCk7CisgICAgICB9CisgICAgICBpZiAoISh0aGlz LmVsZW1lbnQgJiYgKHRoaXMuZWxlbWVudC5ub2RlVHlwZSAhPSBudWxsKSkp IHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRyb3B6b25l IGVsZW1lbnQuIik7CisgICAgICB9CisgICAgICBpZiAodGhpcy5lbGVtZW50 LmRyb3B6b25lKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiRHJvcHpv bmUgYWxyZWFkeSBhdHRhY2hlZC4iKTsKKyAgICAgIH0KKyAgICAgIERyb3B6 b25lLmluc3RhbmNlcy5wdXNoKHRoaXMpOworICAgICAgdGhpcy5lbGVtZW50 LmRyb3B6b25lID0gdGhpczsKKyAgICAgIGVsZW1lbnRPcHRpb25zID0gKF9y ZWYgPSBEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVudCh0aGlzLmVsZW1lbnQp KSAhPSBudWxsID8gX3JlZiA6IHt9OworICAgICAgdGhpcy5vcHRpb25zID0g ZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBlbGVtZW50T3B0aW9u cywgb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucyA6IHt9KTsKKyAgICAgIGlm ICh0aGlzLm9wdGlvbnMuZm9yY2VGYWxsYmFjayB8fCAhRHJvcHpvbmUuaXNC cm93c2VyU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3B0 aW9ucy5mYWxsYmFjay5jYWxsKHRoaXMpOworICAgICAgfQorICAgICAgaWYg KHRoaXMub3B0aW9ucy51cmwgPT0gbnVsbCkgeworICAgICAgICB0aGlzLm9w dGlvbnMudXJsID0gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgiYWN0aW9u Iik7CisgICAgICB9CisgICAgICBpZiAoIXRoaXMub3B0aW9ucy51cmwpIHsK KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBVUkwgcHJvdmlkZWQuIik7 CisgICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLmFjY2VwdGVkRmls ZXMgJiYgdGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKSB7CisgICAg ICAgIHRocm93IG5ldyBFcnJvcigiWW91IGNhbid0IHByb3ZpZGUgYm90aCAn YWNjZXB0ZWRGaWxlcycgYW5kICdhY2NlcHRlZE1pbWVUeXBlcycuICdhY2Nl cHRlZE1pbWVUeXBlcycgaXMgZGVwcmVjYXRlZC4iKTsKKyAgICAgIH0KKyAg ICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpIHsKKyAg ICAgICAgdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMgPSB0aGlzLm9wdGlv bnMuYWNjZXB0ZWRNaW1lVHlwZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLm9w dGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXM7CisgICAgICB9CisgICAgICB0aGlz Lm9wdGlvbnMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhvZC50b1VwcGVy Q2FzZSgpOworICAgICAgaWYgKChmYWxsYmFjayA9IHRoaXMuZ2V0RXhpc3Rp bmdGYWxsYmFjaygpKSAmJiBmYWxsYmFjay5wYXJlbnROb2RlKSB7CisgICAg ICAgIGZhbGxiYWNrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmFsbGJhY2sp OworICAgICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2aWV3c0Nv bnRhaW5lciAhPT0gZmFsc2UpIHsKKyAgICAgICAgaWYgKHRoaXMub3B0aW9u cy5wcmV2aWV3c0NvbnRhaW5lcikgeworICAgICAgICAgIHRoaXMucHJldmll d3NDb250YWluZXIgPSBEcm9wem9uZS5nZXRFbGVtZW50KHRoaXMub3B0aW9u cy5wcmV2aWV3c0NvbnRhaW5lciwgInByZXZpZXdzQ29udGFpbmVyIik7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5wcmV2aWV3c0NvbnRh aW5lciA9IHRoaXMuZWxlbWVudDsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja2FibGUpIHsKKyAgICAgICAgaWYg KHRoaXMub3B0aW9ucy5jbGlja2FibGUgPT09IHRydWUpIHsKKyAgICAgICAg ICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0gW3RoaXMuZWxlbWVudF07Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5jbGlja2FibGVFbGVt ZW50cyA9IERyb3B6b25lLmdldEVsZW1lbnRzKHRoaXMub3B0aW9ucy5jbGlj a2FibGUsICJjbGlja2FibGUiKTsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgdGhpcy5pbml0KCk7CisgICAgfQorCisgICAgRHJvcHpvbmUucHJvdG90 eXBlLmdldEFjY2VwdGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZh ciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVm ID0gdGhpcy5maWxlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBm b3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9p KyspIHsKKyAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAo ZmlsZS5hY2NlcHRlZCkgeworICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmls ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0 czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFJlamVj dGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwg X2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5maWxl czsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAg ICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAoIWZpbGUuYWNjZXB0 ZWQpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpOworICAgICAg ICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsK KworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRGaWxlc1dpdGhTdGF0dXMg PSBmdW5jdGlvbihzdGF0dXMpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xl biwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5maWxlczsK KyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xl biA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAg ZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09 IHN0YXR1cykgeworICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7Cisg ICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAg ICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFF1ZXVlZEZpbGVz ID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlc1dp dGhTdGF0dXMoRHJvcHpvbmUuUVVFVUVEKTsKKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLmdldFVwbG9hZGluZ0ZpbGVzID0gZnVuY3Rpb24o KSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoRHJv cHpvbmUuVVBMT0FESU5HKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJv dG90eXBlLmdldEFkZGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJl dHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5BRERFRCk7 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRBY3RpdmVG aWxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVu LCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmZpbGVzOwor ICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVu ID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBm aWxlID0gX3JlZltfaV07CisgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0g RHJvcHpvbmUuVVBMT0FESU5HIHx8IGZpbGUuc3RhdHVzID09PSBEcm9wem9u ZS5RVUVVRUQpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpOwor ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rp b24oKSB7CisgICAgICB2YXIgZXZlbnROYW1lLCBub1Byb3BhZ2F0aW9uLCBz ZXR1cEhpZGRlbkZpbGVJbnB1dCwgX2ksIF9sZW4sIF9yZWYsIF9yZWYxOwor ICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lID09PSAiZm9ybSIpIHsK KyAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZW5jdHlwZSIs ICJtdWx0aXBhcnQvZm9ybS1kYXRhIik7CisgICAgICB9CisgICAgICBpZiAo dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiZHJvcHpvbmUiKSAm JiAhdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kei1tZXNzYWdlIikp IHsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKERyb3B6b25l LmNyZWF0ZUVsZW1lbnQoIjxkaXYgY2xhc3M9XCJkei1kZWZhdWx0IGR6LW1l c3NhZ2VcIj48c3Bhbj4iICsgdGhpcy5vcHRpb25zLmRpY3REZWZhdWx0TWVz c2FnZSArICI8L3NwYW4+PC9kaXY+IikpOworICAgICAgfQorICAgICAgaWYg KHRoaXMuY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoKSB7CisgICAgICAgIHNl dHVwSGlkZGVuRmlsZUlucHV0ID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKF90 aGlzLmhpZGRlbkZpbGVJbnB1dCkgeworICAgICAgICAgICAgICBfdGhpcy5o aWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfdGhpcy5o aWRkZW5GaWxlSW5wdXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg X3RoaXMuaGlkZGVuRmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgiaW5wdXQiKTsKKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1 dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOworICAgICAgICAgICAg aWYgKChfdGhpcy5vcHRpb25zLm1heEZpbGVzID09IG51bGwpIHx8IF90aGlz Lm9wdGlvbnMubWF4RmlsZXMgPiAxKSB7CisgICAgICAgICAgICAgIF90aGlz LmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm11bHRpcGxlIiwgIm11 bHRpcGxlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5o aWRkZW5GaWxlSW5wdXQuY2xhc3NOYW1lID0gImR6LWhpZGRlbi1pbnB1dCI7 CisgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVz ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlu cHV0LnNldEF0dHJpYnV0ZSgiYWNjZXB0IiwgX3RoaXMub3B0aW9ucy5hY2Nl cHRlZEZpbGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChf dGhpcy5vcHRpb25zLmNhcHR1cmUgIT0gbnVsbCkgeworICAgICAgICAgICAg ICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJjYXB0dXJl IiwgX3RoaXMub3B0aW9ucy5jYXB0dXJlKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS52aXNpYmls aXR5ID0gImhpZGRlbiI7CisgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxl SW5wdXQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgICAgICAg ICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnRvcCA9ICIwIjsKKyAg ICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5sZWZ0ID0g IjAiOworICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxl LmhlaWdodCA9ICIwIjsKKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJ bnB1dC5zdHlsZS53aWR0aCA9ICIwIjsKKyAgICAgICAgICAgIGRvY3VtZW50 LnF1ZXJ5U2VsZWN0b3IoX3RoaXMub3B0aW9ucy5oaWRkZW5JbnB1dENvbnRh aW5lcikuYXBwZW5kQ2hpbGQoX3RoaXMuaGlkZGVuRmlsZUlucHV0KTsKKyAg ICAgICAgICAgIHJldHVybiBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuYWRkRXZl bnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg ICAgIHZhciBmaWxlLCBmaWxlcywgX2ksIF9sZW47CisgICAgICAgICAgICAg IGZpbGVzID0gX3RoaXMuaGlkZGVuRmlsZUlucHV0LmZpbGVzOworICAgICAg ICAgICAgICBpZiAoZmlsZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg Zm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsg X2krKykgeworICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGVzW19pXTsK KyAgICAgICAgICAgICAgICAgIF90aGlzLmFkZEZpbGUoZmlsZSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IF90aGlzLmVtaXQoImFkZGVkZmlsZXMiLCBmaWxlcyk7CisgICAgICAgICAg ICAgIHJldHVybiBzZXR1cEhpZGRlbkZpbGVJbnB1dCgpOworICAgICAgICAg ICAgfSk7CisgICAgICAgICAgfTsKKyAgICAgICAgfSkodGhpcyk7CisgICAg ICAgIHNldHVwSGlkZGVuRmlsZUlucHV0KCk7CisgICAgICB9CisgICAgICB0 aGlzLlVSTCA9IChfcmVmID0gd2luZG93LlVSTCkgIT0gbnVsbCA/IF9yZWYg OiB3aW5kb3cud2Via2l0VVJMOworICAgICAgX3JlZjEgPSB0aGlzLmV2ZW50 czsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBf aSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZXZlbnROYW1lID0gX3JlZjFb X2ldOworICAgICAgICB0aGlzLm9uKGV2ZW50TmFtZSwgdGhpcy5vcHRpb25z W2V2ZW50TmFtZV0pOworICAgICAgfQorICAgICAgdGhpcy5vbigidXBsb2Fk cHJvZ3Jlc3MiLCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJu IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGVU b3RhbFVwbG9hZFByb2dyZXNzKCk7CisgICAgICAgIH07CisgICAgICB9KSh0 aGlzKSk7CisgICAgICB0aGlzLm9uKCJyZW1vdmVkZmlsZSIsIChmdW5jdGlv bihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg ICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3Mo KTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpKTsKKyAgICAgIHRoaXMu b24oImNhbmNlbGVkIiwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJl dHVybiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgICAgcmV0dXJuIF90aGlz LmVtaXQoImNvbXBsZXRlIiwgZmlsZSk7CisgICAgICAgIH07CisgICAgICB9 KSh0aGlzKSk7CisgICAgICB0aGlzLm9uKCJjb21wbGV0ZSIsIChmdW5jdGlv bihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmlsZSkgewor ICAgICAgICAgIGlmIChfdGhpcy5nZXRBZGRlZEZpbGVzKCkubGVuZ3RoID09 PSAwICYmIF90aGlzLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3RoID09PSAw ICYmIF90aGlzLmdldFF1ZXVlZEZpbGVzKCkubGVuZ3RoID09PSAwKSB7Cisg ICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJxdWV1ZWNvbXBsZXRl Iik7CisgICAgICAgICAgICB9KSwgMCk7CisgICAgICAgICAgfQorICAgICAg ICB9OworICAgICAgfSkodGhpcykpOworICAgICAgbm9Qcm9wYWdhdGlvbiA9 IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK KyAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICBy ZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlID0gZmFsc2U7CisgICAg ICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmxpc3RlbmVycyA9IFsKKyAg ICAgICAgeworICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudCwKKyAg ICAgICAgICBldmVudHM6IHsKKyAgICAgICAgICAgICJkcmFnc3RhcnQiOiAo ZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdCgi ZHJhZ3N0YXJ0IiwgZSk7CisgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICB9KSh0aGlzKSwKKyAgICAgICAgICAgICJkcmFnZW50ZXIiOiAoZnVuY3Rp b24oX3RoaXMpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUp IHsKKyAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpOworICAgICAg ICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnZW50ZXIiLCBlKTsK KyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpLAorICAg ICAgICAgICAgImRyYWdvdmVyIjogKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAg ICAgdmFyIGVmY3Q7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg ICAgICAgICAgIGVmY3QgPSBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2Vk OworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnJvcikge30KKyAgICAg ICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUn ID09PSBlZmN0IHx8ICdsaW5rTW92ZScgPT09IGVmY3QgPyAnbW92ZScgOiAn Y29weSc7CisgICAgICAgICAgICAgICAgbm9Qcm9wYWdhdGlvbihlKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdCgiZHJhZ292ZXIiLCBl KTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpLAor ICAgICAgICAgICAgImRyYWdsZWF2ZSI6IChmdW5jdGlvbihfdGhpcykgewor ICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgeworICAgICAgICAg ICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnbGVhdmUiLCBlKTsKKyAg ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpLAorICAgICAg ICAgICAgImRyb3AiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAg ICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICBub1By b3BhZ2F0aW9uKGUpOworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5k cm9wKGUpOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSkodGhp cyksCisgICAgICAgICAgICAiZHJhZ2VuZCI6IChmdW5jdGlvbihfdGhpcykg eworICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnZW5kIiwgZSk7Cisg ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKQorICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgXTsKKyAgICAgIHRoaXMuY2xpY2th YmxlRWxlbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAg ICAgcmV0dXJuIGZ1bmN0aW9uKGNsaWNrYWJsZUVsZW1lbnQpIHsKKyAgICAg ICAgICByZXR1cm4gX3RoaXMubGlzdGVuZXJzLnB1c2goeworICAgICAgICAg ICAgZWxlbWVudDogY2xpY2thYmxlRWxlbWVudCwKKyAgICAgICAgICAgIGV2 ZW50czogeworICAgICAgICAgICAgICAiY2xpY2siOiBmdW5jdGlvbihldnQp IHsKKyAgICAgICAgICAgICAgICBpZiAoKGNsaWNrYWJsZUVsZW1lbnQgIT09 IF90aGlzLmVsZW1lbnQpIHx8IChldnQudGFyZ2V0ID09PSBfdGhpcy5lbGVt ZW50IHx8IERyb3B6b25lLmVsZW1lbnRJbnNpZGUoZXZ0LnRhcmdldCwgX3Ro aXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZHotbWVzc2FnZSIpKSkpIHsK KyAgICAgICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5jbGlj aygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgIH0pOworICAgICAgICB9OworICAgICAgfSkodGhpcykpOworICAg ICAgdGhpcy5lbmFibGUoKTsKKyAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMu aW5pdC5jYWxsKHRoaXMpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90 b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIF9yZWY7 CisgICAgICB0aGlzLmRpc2FibGUoKTsKKyAgICAgIHRoaXMucmVtb3ZlQWxs RmlsZXModHJ1ZSk7CisgICAgICBpZiAoKF9yZWYgPSB0aGlzLmhpZGRlbkZp bGVJbnB1dCkgIT0gbnVsbCA/IF9yZWYucGFyZW50Tm9kZSA6IHZvaWQgMCkg eworICAgICAgICB0aGlzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnROb2RlLnJl bW92ZUNoaWxkKHRoaXMuaGlkZGVuRmlsZUlucHV0KTsKKyAgICAgICAgdGhp cy5oaWRkZW5GaWxlSW5wdXQgPSBudWxsOworICAgICAgfQorICAgICAgZGVs ZXRlIHRoaXMuZWxlbWVudC5kcm9wem9uZTsKKyAgICAgIHJldHVybiBEcm9w em9uZS5pbnN0YW5jZXMuc3BsaWNlKERyb3B6b25lLmluc3RhbmNlcy5pbmRl eE9mKHRoaXMpLCAxKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90 eXBlLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSBmdW5jdGlvbigpIHsK KyAgICAgIHZhciBhY3RpdmVGaWxlcywgZmlsZSwgdG90YWxCeXRlcywgdG90 YWxCeXRlc1NlbnQsIHRvdGFsVXBsb2FkUHJvZ3Jlc3MsIF9pLCBfbGVuLCBf cmVmOworICAgICAgdG90YWxCeXRlc1NlbnQgPSAwOworICAgICAgdG90YWxC eXRlcyA9IDA7CisgICAgICBhY3RpdmVGaWxlcyA9IHRoaXMuZ2V0QWN0aXZl RmlsZXMoKTsKKyAgICAgIGlmIChhY3RpdmVGaWxlcy5sZW5ndGgpIHsKKyAg ICAgICAgX3JlZiA9IHRoaXMuZ2V0QWN0aXZlRmlsZXMoKTsKKyAgICAgICAg Zm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBf aSsrKSB7CisgICAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICAg IHRvdGFsQnl0ZXNTZW50ICs9IGZpbGUudXBsb2FkLmJ5dGVzU2VudDsKKyAg ICAgICAgICB0b3RhbEJ5dGVzICs9IGZpbGUudXBsb2FkLnRvdGFsOworICAg ICAgICB9CisgICAgICAgIHRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSAxMDAgKiB0 b3RhbEJ5dGVzU2VudCAvIHRvdGFsQnl0ZXM7CisgICAgICB9IGVsc2Ugewor ICAgICAgICB0b3RhbFVwbG9hZFByb2dyZXNzID0gMTAwOworICAgICAgfQor ICAgICAgcmV0dXJuIHRoaXMuZW1pdCgidG90YWx1cGxvYWRwcm9ncmVzcyIs IHRvdGFsVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsQnl0ZXMsIHRvdGFsQnl0ZXNT ZW50KTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9nZXRQ YXJhbU5hbWUgPSBmdW5jdGlvbihuKSB7CisgICAgICBpZiAodHlwZW9mIHRo aXMub3B0aW9ucy5wYXJhbU5hbWUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUobik7CisgICAgICB9 IGVsc2UgeworICAgICAgICByZXR1cm4gIiIgKyB0aGlzLm9wdGlvbnMucGFy YW1OYW1lICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSA/ICJbIiAr IG4gKyAiXSIgOiAiIik7CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5fcmVuYW1lRmlsZW5hbWUgPSBmdW5jdGlvbihuYW1l KSB7CisgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZW5hbWVGaWxl bmFtZSAhPT0gImZ1bmN0aW9uIikgeworICAgICAgICByZXR1cm4gbmFtZTsK KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVuYW1lRmls ZW5hbWUobmFtZSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlw ZS5nZXRGYWxsYmFja0Zvcm0gPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBl eGlzdGluZ0ZhbGxiYWNrLCBmaWVsZHMsIGZpZWxkc1N0cmluZywgZm9ybTsK KyAgICAgIGlmIChleGlzdGluZ0ZhbGxiYWNrID0gdGhpcy5nZXRFeGlzdGlu Z0ZhbGxiYWNrKCkpIHsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nRmFsbGJh Y2s7CisgICAgICB9CisgICAgICBmaWVsZHNTdHJpbmcgPSAiPGRpdiBjbGFz cz1cImR6LWZhbGxiYWNrXCI+IjsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMu ZGljdEZhbGxiYWNrVGV4dCkgeworICAgICAgICBmaWVsZHNTdHJpbmcgKz0g IjxwPiIgKyB0aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrVGV4dCArICI8L3A+ IjsKKyAgICAgIH0KKyAgICAgIGZpZWxkc1N0cmluZyArPSAiPGlucHV0IHR5 cGU9XCJmaWxlXCIgbmFtZT1cIiIgKyAodGhpcy5fZ2V0UGFyYW1OYW1lKDAp KSArICJcIiAiICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSA/ICdt dWx0aXBsZT0ibXVsdGlwbGUiJyA6IHZvaWQgMCkgKyAiIC8+PGlucHV0IHR5 cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlVwbG9hZCFcIj48L2Rpdj4iOworICAg ICAgZmllbGRzID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudChmaWVsZHNTdHJp bmcpOworICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lICE9PSAiRk9S TSIpIHsKKyAgICAgICAgZm9ybSA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQo Ijxmb3JtIGFjdGlvbj1cIiIgKyB0aGlzLm9wdGlvbnMudXJsICsgIlwiIGVu Y3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgbWV0aG9kPVwiIiArIHRo aXMub3B0aW9ucy5tZXRob2QgKyAiXCI+PC9mb3JtPiIpOworICAgICAgICBm b3JtLmFwcGVuZENoaWxkKGZpZWxkcyk7CisgICAgICB9IGVsc2UgeworICAg ICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJlbmN0eXBlIiwgIm11 bHRpcGFydC9mb3JtLWRhdGEiKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnNl dEF0dHJpYnV0ZSgibWV0aG9kIiwgdGhpcy5vcHRpb25zLm1ldGhvZCk7Cisg ICAgICB9CisgICAgICByZXR1cm4gZm9ybSAhPSBudWxsID8gZm9ybSA6IGZp ZWxkczsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEV4 aXN0aW5nRmFsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmYWxs YmFjaywgZ2V0RmFsbGJhY2ssIHRhZ05hbWUsIF9pLCBfbGVuLCBfcmVmOwor ICAgICAgZ2V0RmFsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50cykgeworICAg ICAgICB2YXIgZWwsIF9pLCBfbGVuOworICAgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IGVsZW1lbnRzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7Cisg ICAgICAgICAgZWwgPSBlbGVtZW50c1tfaV07CisgICAgICAgICAgaWYgKC8o XnwgKWZhbGxiYWNrKCR8ICkvLnRlc3QoZWwuY2xhc3NOYW1lKSkgeworICAg ICAgICAgICAgcmV0dXJuIGVsOworICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgfTsKKyAgICAgIF9yZWYgPSBbImRpdiIsICJmb3JtIl07CisgICAg ICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47 IF9pKyspIHsKKyAgICAgICAgdGFnTmFtZSA9IF9yZWZbX2ldOworICAgICAg ICBpZiAoZmFsbGJhY2sgPSBnZXRGYWxsYmFjayh0aGlzLmVsZW1lbnQuZ2V0 RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkpKSB7CisgICAgICAgICAgcmV0 dXJuIGZhbGxiYWNrOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKwor ICAgIERyb3B6b25lLnByb3RvdHlwZS5zZXR1cEV2ZW50TGlzdGVuZXJzID0g ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZWxlbWVudExpc3RlbmVycywgZXZl bnQsIGxpc3RlbmVyLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAg ICBfcmVmID0gdGhpcy5saXN0ZW5lcnM7CisgICAgICBfcmVzdWx0cyA9IFtd OworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kg PCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGVsZW1lbnRMaXN0ZW5lcnMgPSBf cmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCgoZnVuY3Rpb24oKSB7 CisgICAgICAgICAgdmFyIF9yZWYxLCBfcmVzdWx0czE7CisgICAgICAgICAg X3JlZjEgPSBlbGVtZW50TGlzdGVuZXJzLmV2ZW50czsKKyAgICAgICAgICBf cmVzdWx0czEgPSBbXTsKKyAgICAgICAgICBmb3IgKGV2ZW50IGluIF9yZWYx KSB7CisgICAgICAgICAgICBsaXN0ZW5lciA9IF9yZWYxW2V2ZW50XTsKKyAg ICAgICAgICAgIF9yZXN1bHRzMS5wdXNoKGVsZW1lbnRMaXN0ZW5lcnMuZWxl bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2Up KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIF9yZXN1bHRzMTsK KyAgICAgICAgfSkoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3Vs dHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVF dmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGVsZW1l bnRMaXN0ZW5lcnMsIGV2ZW50LCBsaXN0ZW5lciwgX2ksIF9sZW4sIF9yZWYs IF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubGlzdGVuZXJzOworICAg ICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0g X3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBlbGVt ZW50TGlzdGVuZXJzID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1 c2goKGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBfcmVmMSwgX3Jlc3Vs dHMxOworICAgICAgICAgIF9yZWYxID0gZWxlbWVudExpc3RlbmVycy5ldmVu dHM7CisgICAgICAgICAgX3Jlc3VsdHMxID0gW107CisgICAgICAgICAgZm9y IChldmVudCBpbiBfcmVmMSkgeworICAgICAgICAgICAgbGlzdGVuZXIgPSBf cmVmMVtldmVudF07CisgICAgICAgICAgICBfcmVzdWx0czEucHVzaChlbGVt ZW50TGlzdGVuZXJzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu dCwgbGlzdGVuZXIsIGZhbHNlKSk7CisgICAgICAgICAgfQorICAgICAgICAg IHJldHVybiBfcmVzdWx0czE7CisgICAgICAgIH0pKCkpOworICAgICAgfQor ICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBEcm9wem9u ZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFy IGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIHRoaXMu Y2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7 CisgICAgICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6 LWNsaWNrYWJsZSIpOworICAgICAgfSk7CisgICAgICB0aGlzLnJlbW92ZUV2 ZW50TGlzdGVuZXJzKCk7CisgICAgICBfcmVmID0gdGhpcy5maWxlczsKKyAg ICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9 IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmls ZSA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuY2Fu Y2VsVXBsb2FkKGZpbGUpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVz dWx0czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmVuYWJs ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50 cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJu IGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotY2xpY2thYmxlIik7CisgICAg ICB9KTsKKyAgICAgIHJldHVybiB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMo KTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmZpbGVzaXpl ID0gZnVuY3Rpb24oc2l6ZSkgeworICAgICAgdmFyIGN1dG9mZiwgaSwgc2Vs ZWN0ZWRTaXplLCBzZWxlY3RlZFVuaXQsIHVuaXQsIHVuaXRzLCBfaSwgX2xl bjsKKyAgICAgIHNlbGVjdGVkU2l6ZSA9IDA7CisgICAgICBzZWxlY3RlZFVu aXQgPSAiYiI7CisgICAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgdW5p dHMgPSBbJ1RCJywgJ0dCJywgJ01CJywgJ0tCJywgJ2InXTsKKyAgICAgICAg Zm9yIChpID0gX2kgPSAwLCBfbGVuID0gdW5pdHMubGVuZ3RoOyBfaSA8IF9s ZW47IGkgPSArK19pKSB7CisgICAgICAgICAgdW5pdCA9IHVuaXRzW2ldOwor ICAgICAgICAgIGN1dG9mZiA9IE1hdGgucG93KHRoaXMub3B0aW9ucy5maWxl c2l6ZUJhc2UsIDQgLSBpKSAvIDEwOworICAgICAgICAgIGlmIChzaXplID49 IGN1dG9mZikgeworICAgICAgICAgICAgc2VsZWN0ZWRTaXplID0gc2l6ZSAv IE1hdGgucG93KHRoaXMub3B0aW9ucy5maWxlc2l6ZUJhc2UsIDQgLSBpKTsK KyAgICAgICAgICAgIHNlbGVjdGVkVW5pdCA9IHVuaXQ7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2Vs ZWN0ZWRTaXplID0gTWF0aC5yb3VuZCgxMCAqIHNlbGVjdGVkU2l6ZSkgLyAx MDsKKyAgICAgIH0KKyAgICAgIHJldHVybiAiPHN0cm9uZz4iICsgc2VsZWN0 ZWRTaXplICsgIjwvc3Ryb25nPiAiICsgc2VsZWN0ZWRVbml0OworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX3VwZGF0ZU1heEZpbGVzUmVh Y2hlZENsYXNzID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoKHRoaXMub3B0 aW9ucy5tYXhGaWxlcyAhPSBudWxsKSAmJiB0aGlzLmdldEFjY2VwdGVkRmls ZXMoKS5sZW5ndGggPj0gdGhpcy5vcHRpb25zLm1heEZpbGVzKSB7CisgICAg ICAgIGlmICh0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGggPT09IHRo aXMub3B0aW9ucy5tYXhGaWxlcykgeworICAgICAgICAgIHRoaXMuZW1pdCgn bWF4ZmlsZXNyZWFjaGVkJywgdGhpcy5maWxlcyk7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1t YXgtZmlsZXMtcmVhY2hlZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1tYXgt ZmlsZXMtcmVhY2hlZCIpOworICAgICAgfQorICAgIH07CisKKyAgICBEcm9w em9uZS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgIHZh ciBmaWxlcywgaXRlbXM7CisgICAgICBpZiAoIWUuZGF0YVRyYW5zZmVyKSB7 CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuZW1pdCgi ZHJvcCIsIGUpOworICAgICAgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxl czsKKyAgICAgIHRoaXMuZW1pdCgiYWRkZWRmaWxlcyIsIGZpbGVzKTsKKyAg ICAgIGlmIChmaWxlcy5sZW5ndGgpIHsKKyAgICAgICAgaXRlbXMgPSBlLmRh dGFUcmFuc2Zlci5pdGVtczsKKyAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1z Lmxlbmd0aCAmJiAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSAhPSBudWxs KSkgeworICAgICAgICAgIHRoaXMuX2FkZEZpbGVzRnJvbUl0ZW1zKGl0ZW1z KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLmhhbmRsZUZp bGVzKGZpbGVzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUucGFzdGUgPSBmdW5jdGlvbihlKSB7Cisg ICAgICB2YXIgaXRlbXMsIF9yZWY7CisgICAgICBpZiAoKGUgIT0gbnVsbCA/ IChfcmVmID0gZS5jbGlwYm9hcmREYXRhKSAhPSBudWxsID8gX3JlZi5pdGVt cyA6IHZvaWQgMCA6IHZvaWQgMCkgPT0gbnVsbCkgeworICAgICAgICByZXR1 cm47CisgICAgICB9CisgICAgICB0aGlzLmVtaXQoInBhc3RlIiwgZSk7Cisg ICAgICBpdGVtcyA9IGUuY2xpcGJvYXJkRGF0YS5pdGVtczsKKyAgICAgIGlm IChpdGVtcy5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEZp bGVzRnJvbUl0ZW1zKGl0ZW1zKTsKKyAgICAgIH0KKyAgICB9OworCisgICAg RHJvcHpvbmUucHJvdG90eXBlLmhhbmRsZUZpbGVzID0gZnVuY3Rpb24oZmls ZXMpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3Jlc3VsdHM7Cisg ICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4g PSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBm aWxlID0gZmlsZXNbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMu YWRkRmlsZShmaWxlKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3Vs dHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fYWRkRmls ZXNGcm9tSXRlbXMgPSBmdW5jdGlvbihpdGVtcykgeworICAgICAgdmFyIGVu dHJ5LCBpdGVtLCBfaSwgX2xlbiwgX3Jlc3VsdHM7CisgICAgICBfcmVzdWx0 cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBpdGVtcy5sZW5n dGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBpdGVtID0gaXRlbXNb X2ldOworICAgICAgICBpZiAoKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSAhPSBu dWxsKSAmJiAoZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKSkpIHsK KyAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKSB7CisgICAgICAgICAgICBf cmVzdWx0cy5wdXNoKHRoaXMuYWRkRmlsZShpdGVtLmdldEFzRmlsZSgpKSk7 CisgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkgewor ICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLl9hZGRGaWxlc0Zyb21E aXJlY3RvcnkoZW50cnksIGVudHJ5Lm5hbWUpKTsKKyAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOworICAg ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpdGVtLmdldEFzRmlsZSAh PSBudWxsKSB7CisgICAgICAgICAgaWYgKChpdGVtLmtpbmQgPT0gbnVsbCkg fHwgaXRlbS5raW5kID09PSAiZmlsZSIpIHsKKyAgICAgICAgICAgIF9yZXN1 bHRzLnB1c2godGhpcy5hZGRGaWxlKGl0ZW0uZ2V0QXNGaWxlKCkpKTsKKyAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2 b2lkIDApOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7CisgICAgICAgIH0KKyAgICAg IH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLl9hZGRGaWxlc0Zyb21EaXJlY3RvcnkgPSBmdW5j dGlvbihkaXJlY3RvcnksIHBhdGgpIHsKKyAgICAgIHZhciBkaXJSZWFkZXIs IGVycm9ySGFuZGxlciwgcmVhZEVudHJpZXM7CisgICAgICBkaXJSZWFkZXIg PSBkaXJlY3RvcnkuY3JlYXRlUmVhZGVyKCk7CisgICAgICBlcnJvckhhbmRs ZXIgPSBmdW5jdGlvbihlcnJvcikgeworICAgICAgICByZXR1cm4gdHlwZW9m IGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIGNvbnNvbGUgIT09IG51bGwg PyB0eXBlb2YgY29uc29sZS5sb2cgPT09ICJmdW5jdGlvbiIgPyBjb25zb2xl LmxvZyhlcnJvcikgOiB2b2lkIDAgOiB2b2lkIDA7CisgICAgICB9OworICAg ICAgcmVhZEVudHJpZXMgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAg cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiBkaXJSZWFk ZXIucmVhZEVudHJpZXMoZnVuY3Rpb24oZW50cmllcykgeworICAgICAgICAg ICAgdmFyIGVudHJ5LCBfaSwgX2xlbjsKKyAgICAgICAgICAgIGlmIChlbnRy aWVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgZm9yIChfaSA9IDAs IF9sZW4gPSBlbnRyaWVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7Cisg ICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzW19pXTsKKyAgICAgICAg ICAgICAgICBpZiAoZW50cnkuaXNGaWxlKSB7CisgICAgICAgICAgICAgICAg ICBlbnRyeS5maWxlKGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKF90aGlzLm9wdGlvbnMuaWdub3JlSGlkZGVuRmlsZXMgJiYg ZmlsZS5uYW1lLnN1YnN0cmluZygwLCAxKSA9PT0gJy4nKSB7CisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGZpbGUuZnVsbFBhdGggPSAiIiArIHBh dGggKyAiLyIgKyBmaWxlLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybiBfdGhpcy5hZGRGaWxlKGZpbGUpOworICAgICAgICAgICAgICAgICAg fSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVj dG9yeSkgeworICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZEZpbGVzRnJv bURpcmVjdG9yeShlbnRyeSwgIiIgKyBwYXRoICsgIi8iICsgZW50cnkubmFt ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIHJlYWRFbnRyaWVzKCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9LCBlcnJvckhhbmRs ZXIpOworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAgICByZXR1 cm4gcmVhZEVudHJpZXMoKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJv dG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKGZpbGUsIGRvbmUpIHsKKyAgICAg IGlmIChmaWxlLnNpemUgPiB0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUgKiAx MDI0ICogMTAyNCkgeworICAgICAgICByZXR1cm4gZG9uZSh0aGlzLm9wdGlv bnMuZGljdEZpbGVUb29CaWcucmVwbGFjZSgie3tmaWxlc2l6ZX19IiwgTWF0 aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0IC8gMTAuMjQpIC8gMTAwKS5yZXBs YWNlKCJ7e21heEZpbGVzaXplfX0iLCB0aGlzLm9wdGlvbnMubWF4RmlsZXNp emUpKTsKKyAgICAgIH0gZWxzZSBpZiAoIURyb3B6b25lLmlzVmFsaWRGaWxl KGZpbGUsIHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzKSkgeworICAgICAg ICByZXR1cm4gZG9uZSh0aGlzLm9wdGlvbnMuZGljdEludmFsaWRGaWxlVHlw ZSk7CisgICAgICB9IGVsc2UgaWYgKCh0aGlzLm9wdGlvbnMubWF4RmlsZXMg IT0gbnVsbCkgJiYgdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoID49 IHRoaXMub3B0aW9ucy5tYXhGaWxlcykgeworICAgICAgICBkb25lKHRoaXMu b3B0aW9ucy5kaWN0TWF4RmlsZXNFeGNlZWRlZC5yZXBsYWNlKCJ7e21heEZp bGVzfX0iLCB0aGlzLm9wdGlvbnMubWF4RmlsZXMpKTsKKyAgICAgICAgcmV0 dXJuIHRoaXMuZW1pdCgibWF4ZmlsZXNleGNlZWRlZCIsIGZpbGUpOworICAg ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hY2Nl cHQuY2FsbCh0aGlzLCBmaWxlLCBkb25lKTsKKyAgICAgIH0KKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLmFkZEZpbGUgPSBmdW5jdGlvbihm aWxlKSB7CisgICAgICBmaWxlLnVwbG9hZCA9IHsKKyAgICAgICAgcHJvZ3Jl c3M6IDAsCisgICAgICAgIHRvdGFsOiBmaWxlLnNpemUsCisgICAgICAgIGJ5 dGVzU2VudDogMAorICAgICAgfTsKKyAgICAgIHRoaXMuZmlsZXMucHVzaChm aWxlKTsKKyAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQURERUQ7Cisg ICAgICB0aGlzLmVtaXQoImFkZGVkZmlsZSIsIGZpbGUpOworICAgICAgdGhp cy5fZW5xdWV1ZVRodW1ibmFpbChmaWxlKTsKKyAgICAgIHJldHVybiB0aGlz LmFjY2VwdChmaWxlLCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0 dXJuIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgaWYgKGVycm9yKSB7 CisgICAgICAgICAgICBmaWxlLmFjY2VwdGVkID0gZmFsc2U7CisgICAgICAg ICAgICBfdGhpcy5fZXJyb3JQcm9jZXNzaW5nKFtmaWxlXSwgZXJyb3IpOwor ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaWxlLmFjY2VwdGVk ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmF1dG9R dWV1ZSkgeworICAgICAgICAgICAgICBfdGhpcy5lbnF1ZXVlRmlsZShmaWxl KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIF90aGlzLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcygpOworICAg ICAgICB9OworICAgICAgfSkodGhpcykpOworICAgIH07CisKKyAgICBEcm9w em9uZS5wcm90b3R5cGUuZW5xdWV1ZUZpbGVzID0gZnVuY3Rpb24oZmlsZXMp IHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbjsKKyAgICAgIGZvciAoX2kg PSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsK KyAgICAgICAgZmlsZSA9IGZpbGVzW19pXTsKKyAgICAgICAgdGhpcy5lbnF1 ZXVlRmlsZShmaWxlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZW5xdWV1ZUZpbGUg PSBmdW5jdGlvbihmaWxlKSB7CisgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09 IERyb3B6b25lLkFEREVEICYmIGZpbGUuYWNjZXB0ZWQgPT09IHRydWUpIHsK KyAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5RVUVVRUQ7CisgICAg ICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSkgeworICAg ICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3RoaXMpIHsK KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg ICAgcmV0dXJuIF90aGlzLnByb2Nlc3NRdWV1ZSgpOworICAgICAgICAgICAg fTsKKyAgICAgICAgICB9KSh0aGlzKSksIDApOworICAgICAgICB9CisgICAg ICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZmls ZSBjYW4ndCBiZSBxdWV1ZWQgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVu IHByb2Nlc3NlZCBvciB3YXMgcmVqZWN0ZWQuIik7CisgICAgICB9CisgICAg fTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fdGh1bWJuYWlsUXVldWUg PSBbXTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vzc2luZ1Ro dW1ibmFpbCA9IGZhbHNlOworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9l bnF1ZXVlVGh1bWJuYWlsID0gZnVuY3Rpb24oZmlsZSkgeworICAgICAgaWYg KHRoaXMub3B0aW9ucy5jcmVhdGVJbWFnZVRodW1ibmFpbHMgJiYgZmlsZS50 eXBlLm1hdGNoKC9pbWFnZS4qLykgJiYgZmlsZS5zaXplIDw9IHRoaXMub3B0 aW9ucy5tYXhUaHVtYm5haWxGaWxlc2l6ZSAqIDEwMjQgKiAxMDI0KSB7Cisg ICAgICAgIHRoaXMuX3RodW1ibmFpbFF1ZXVlLnB1c2goZmlsZSk7CisgICAg ICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3RoaXMpIHsKKyAg ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1 cm4gX3RoaXMuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSgpOworICAgICAgICAg IH07CisgICAgICAgIH0pKHRoaXMpKSwgMCk7CisgICAgICB9CisgICAgfTsK KworICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vzc1RodW1ibmFpbFF1 ZXVlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5fcHJvY2Vzc2lu Z1RodW1ibmFpbCB8fCB0aGlzLl90aHVtYm5haWxRdWV1ZS5sZW5ndGggPT09 IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdGhpcy5f cHJvY2Vzc2luZ1RodW1ibmFpbCA9IHRydWU7CisgICAgICByZXR1cm4gdGhp cy5jcmVhdGVUaHVtYm5haWwodGhpcy5fdGh1bWJuYWlsUXVldWUuc2hpZnQo KSwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv bigpIHsKKyAgICAgICAgICBfdGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCA9 IGZhbHNlOworICAgICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2Vzc1RodW1i bmFpbFF1ZXVlKCk7CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKSk7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVGaWxlID0g ZnVuY3Rpb24oZmlsZSkgeworICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBE cm9wem9uZS5VUExPQURJTkcpIHsKKyAgICAgICAgdGhpcy5jYW5jZWxVcGxv YWQoZmlsZSk7CisgICAgICB9CisgICAgICB0aGlzLmZpbGVzID0gd2l0aG91 dCh0aGlzLmZpbGVzLCBmaWxlKTsKKyAgICAgIHRoaXMuZW1pdCgicmVtb3Zl ZGZpbGUiLCBmaWxlKTsKKyAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA9 PT0gMCkgeworICAgICAgICByZXR1cm4gdGhpcy5lbWl0KCJyZXNldCIpOwor ICAgICAgfQorICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucmVt b3ZlQWxsRmlsZXMgPSBmdW5jdGlvbihjYW5jZWxJZk5lY2Vzc2FyeSkgewor ICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmOworICAgICAgaWYgKGNh bmNlbElmTmVjZXNzYXJ5ID09IG51bGwpIHsKKyAgICAgICAgY2FuY2VsSWZO ZWNlc3NhcnkgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIF9yZWYgPSB0aGlz LmZpbGVzLnNsaWNlKCk7CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9y ZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9 IF9yZWZbX2ldOworICAgICAgICBpZiAoZmlsZS5zdGF0dXMgIT09IERyb3B6 b25lLlVQTE9BRElORyB8fCBjYW5jZWxJZk5lY2Vzc2FyeSkgeworICAgICAg ICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgfQorICAgICAg fQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIERyb3B6b25l LnByb3RvdHlwZS5jcmVhdGVUaHVtYm5haWwgPSBmdW5jdGlvbihmaWxlLCBj YWxsYmFjaykgeworICAgICAgdmFyIGZpbGVSZWFkZXI7CisgICAgICBmaWxl UmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7CisgICAgICBmaWxlUmVhZGVyLm9u bG9hZCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVu Y3Rpb24oKSB7CisgICAgICAgICAgaWYgKGZpbGUudHlwZSA9PT0gImltYWdl L3N2Zyt4bWwiKSB7CisgICAgICAgICAgICBfdGhpcy5lbWl0KCJ0aHVtYm5h aWwiLCBmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCk7CisgICAgICAgICAgICBp ZiAoY2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICBjYWxsYmFj aygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3RoaXMuY3JlYXRlVGh1bWJu YWlsRnJvbVVybChmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCwgY2FsbGJhY2sp OworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAgICByZXR1cm4g ZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOworICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuY3JlYXRlVGh1bWJuYWlsRnJvbVVybCA9 IGZ1bmN0aW9uKGZpbGUsIGltYWdlVXJsLCBjYWxsYmFjaywgY3Jvc3NPcmln aW4pIHsKKyAgICAgIHZhciBpbWc7CisgICAgICBpbWcgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgIGlmIChjcm9zc09yaWdpbikg eworICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjsKKyAg ICAgIH0KKyAgICAgIGltZy5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHsK KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBj YW52YXMsIGN0eCwgcmVzaXplSW5mbywgdGh1bWJuYWlsLCBfcmVmLCBfcmVm MSwgX3JlZjIsIF9yZWYzOworICAgICAgICAgIGZpbGUud2lkdGggPSBpbWcu d2lkdGg7CisgICAgICAgICAgZmlsZS5oZWlnaHQgPSBpbWcuaGVpZ2h0Owor ICAgICAgICAgIHJlc2l6ZUluZm8gPSBfdGhpcy5vcHRpb25zLnJlc2l6ZS5j YWxsKF90aGlzLCBmaWxlKTsKKyAgICAgICAgICBpZiAocmVzaXplSW5mby50 cmdXaWR0aCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXNpemVJbmZvLnRy Z1dpZHRoID0gcmVzaXplSW5mby5vcHRXaWR0aDsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYgKHJlc2l6ZUluZm8udHJnSGVpZ2h0ID09IG51bGwpIHsK KyAgICAgICAgICAgIHJlc2l6ZUluZm8udHJnSGVpZ2h0ID0gcmVzaXplSW5m by5vcHRIZWlnaHQ7CisgICAgICAgICAgfQorICAgICAgICAgIGNhbnZhcyA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgICAgICAg IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICAgIGNh bnZhcy53aWR0aCA9IHJlc2l6ZUluZm8udHJnV2lkdGg7CisgICAgICAgICAg Y2FudmFzLmhlaWdodCA9IHJlc2l6ZUluZm8udHJnSGVpZ2h0OworICAgICAg ICAgIGRyYXdJbWFnZUlPU0ZpeChjdHgsIGltZywgKF9yZWYgPSByZXNpemVJ bmZvLnNyY1gpICE9IG51bGwgPyBfcmVmIDogMCwgKF9yZWYxID0gcmVzaXpl SW5mby5zcmNZKSAhPSBudWxsID8gX3JlZjEgOiAwLCByZXNpemVJbmZvLnNy Y1dpZHRoLCByZXNpemVJbmZvLnNyY0hlaWdodCwgKF9yZWYyID0gcmVzaXpl SW5mby50cmdYKSAhPSBudWxsID8gX3JlZjIgOiAwLCAoX3JlZjMgPSByZXNp emVJbmZvLnRyZ1kpICE9IG51bGwgPyBfcmVmMyA6IDAsIHJlc2l6ZUluZm8u dHJnV2lkdGgsIHJlc2l6ZUluZm8udHJnSGVpZ2h0KTsKKyAgICAgICAgICB0 aHVtYm5haWwgPSBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKKyAg ICAgICAgICBfdGhpcy5lbWl0KCJ0aHVtYm5haWwiLCBmaWxlLCB0aHVtYm5h aWwpOworICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7CisgICAg ICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKKyAgICAgICAgICB9CisgICAg ICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIGlmIChjYWxsYmFjayAh PSBudWxsKSB7CisgICAgICAgIGltZy5vbmVycm9yID0gY2FsbGJhY2s7Cisg ICAgICB9CisgICAgICByZXR1cm4gaW1nLnNyYyA9IGltYWdlVXJsOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc1F1ZXVlID0g ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaSwgcGFyYWxsZWxVcGxvYWRzLCBw cm9jZXNzaW5nTGVuZ3RoLCBxdWV1ZWRGaWxlczsKKyAgICAgIHBhcmFsbGVs VXBsb2FkcyA9IHRoaXMub3B0aW9ucy5wYXJhbGxlbFVwbG9hZHM7CisgICAg ICBwcm9jZXNzaW5nTGVuZ3RoID0gdGhpcy5nZXRVcGxvYWRpbmdGaWxlcygp Lmxlbmd0aDsKKyAgICAgIGkgPSBwcm9jZXNzaW5nTGVuZ3RoOworICAgICAg aWYgKHByb2Nlc3NpbmdMZW5ndGggPj0gcGFyYWxsZWxVcGxvYWRzKSB7Cisg ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHF1ZXVlZEZpbGVzID0g dGhpcy5nZXRRdWV1ZWRGaWxlcygpOworICAgICAgaWYgKCEocXVldWVkRmls ZXMubGVuZ3RoID4gMCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor ICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAg ICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMocXVldWVkRmlsZXMuc2xp Y2UoMCwgcGFyYWxsZWxVcGxvYWRzIC0gcHJvY2Vzc2luZ0xlbmd0aCkpOwor ICAgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGkgPCBwYXJhbGxlbFVw bG9hZHMpIHsKKyAgICAgICAgICBpZiAoIXF1ZXVlZEZpbGVzLmxlbmd0aCkg eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAg ICB0aGlzLnByb2Nlc3NGaWxlKHF1ZXVlZEZpbGVzLnNoaWZ0KCkpOworICAg ICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc0ZpbGUgPSBmdW5jdGlvbihm aWxlKSB7CisgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMoW2ZpbGVd KTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLnByb2Nlc3NG aWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7CisgICAgICB2YXIgZmlsZSwgX2ks IF9sZW47CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0 aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBmaWxlc1tf aV07CisgICAgICAgIGZpbGUucHJvY2Vzc2luZyA9IHRydWU7CisgICAgICAg IGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuVVBMT0FESU5HOworICAgICAgICB0 aGlzLmVtaXQoInByb2Nlc3NpbmciLCBmaWxlKTsKKyAgICAgIH0KKyAgICAg IGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsKKyAgICAgICAg dGhpcy5lbWl0KCJwcm9jZXNzaW5nbXVsdGlwbGUiLCBmaWxlcyk7CisgICAg ICB9CisgICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhmaWxlcyk7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZ2V0RmlsZXNXaXRo WGhyID0gZnVuY3Rpb24oeGhyKSB7CisgICAgICB2YXIgZmlsZSwgZmlsZXM7 CisgICAgICByZXR1cm4gZmlsZXMgPSAoZnVuY3Rpb24oKSB7CisgICAgICAg IHZhciBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICAgIF9yZWYg PSB0aGlzLmZpbGVzOworICAgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAg ICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47 IF9pKyspIHsKKyAgICAgICAgICBmaWxlID0gX3JlZltfaV07CisgICAgICAg ICAgaWYgKGZpbGUueGhyID09PSB4aHIpIHsKKyAgICAgICAgICAgIF9yZXN1 bHRzLnB1c2goZmlsZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIHJldHVybiBfcmVzdWx0czsKKyAgICAgIH0pLmNhbGwodGhpcyk7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5jYW5jZWxVcGxvYWQg PSBmdW5jdGlvbihmaWxlKSB7CisgICAgICB2YXIgZ3JvdXBlZEZpbGUsIGdy b3VwZWRGaWxlcywgX2ksIF9qLCBfbGVuLCBfbGVuMSwgX3JlZjsKKyAgICAg IGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5HKSB7Cisg ICAgICAgIGdyb3VwZWRGaWxlcyA9IHRoaXMuX2dldEZpbGVzV2l0aFhocihm aWxlLnhocik7CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZ3JvdXBl ZEZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAg Z3JvdXBlZEZpbGUgPSBncm91cGVkRmlsZXNbX2ldOworICAgICAgICAgIGdy b3VwZWRGaWxlLnN0YXR1cyA9IERyb3B6b25lLkNBTkNFTEVEOworICAgICAg ICB9CisgICAgICAgIGZpbGUueGhyLmFib3J0KCk7CisgICAgICAgIGZvciAo X2ogPSAwLCBfbGVuMSA9IGdyb3VwZWRGaWxlcy5sZW5ndGg7IF9qIDwgX2xl bjE7IF9qKyspIHsKKyAgICAgICAgICBncm91cGVkRmlsZSA9IGdyb3VwZWRG aWxlc1tfal07CisgICAgICAgICAgdGhpcy5lbWl0KCJjYW5jZWxlZCIsIGdy b3VwZWRGaWxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5vcHRp b25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgICAgdGhpcy5lbWl0KCJj YW5jZWxlZG11bHRpcGxlIiwgZ3JvdXBlZEZpbGVzKTsKKyAgICAgICAgfQor ICAgICAgfSBlbHNlIGlmICgoX3JlZiA9IGZpbGUuc3RhdHVzKSA9PT0gRHJv cHpvbmUuQURERUQgfHwgX3JlZiA9PT0gRHJvcHpvbmUuUVVFVUVEKSB7Cisg ICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQ0FOQ0VMRUQ7CisgICAg ICAgIHRoaXMuZW1pdCgiY2FuY2VsZWQiLCBmaWxlKTsKKyAgICAgICAgaWYg KHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICAgIHRo aXMuZW1pdCgiY2FuY2VsZWRtdWx0aXBsZSIsIFtmaWxlXSk7CisgICAgICAg IH0KKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nl c3NRdWV1ZSkgeworICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUo KTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmVzb2x2ZU9wdGlvbiA9IGZ1 bmN0aW9uKCkgeworICAgICAgdmFyIGFyZ3MsIG9wdGlvbjsKKyAgICAgIG9w dGlvbiA9IGFyZ3VtZW50c1swXSwgYXJncyA9IDIgPD0gYXJndW1lbnRzLmxl bmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107CisgICAg ICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAg ICByZXR1cm4gb3B0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgfQor ICAgICAgcmV0dXJuIG9wdGlvbjsKKyAgICB9OworCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLnVwbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7CisgICAg ICByZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhbZmlsZV0pOworICAgIH07CisK KyAgICBEcm9wem9uZS5wcm90b3R5cGUudXBsb2FkRmlsZXMgPSBmdW5jdGlv bihmaWxlcykgeworICAgICAgdmFyIGZpbGUsIGZvcm1EYXRhLCBoYW5kbGVF cnJvciwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUsIGhlYWRlcnMsIGksIGlu cHV0LCBpbnB1dE5hbWUsIGlucHV0VHlwZSwga2V5LCBtZXRob2QsIG9wdGlv biwgcHJvZ3Jlc3NPYmosIHJlc3BvbnNlLCB1cGRhdGVQcm9ncmVzcywgdXJs LCB2YWx1ZSwgeGhyLCBfaSwgX2osIF9rLCBfbCwgX2xlbiwgX2xlbjEsIF9s ZW4yLCBfbGVuMywgX20sIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3JlZjMsIF9y ZWY0LCBfcmVmNTsKKyAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp OworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9p IDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0gZmlsZXNbX2ldOwor ICAgICAgICBmaWxlLnhociA9IHhocjsKKyAgICAgIH0KKyAgICAgIG1ldGhv ZCA9IHJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLm1ldGhvZCwgZmlsZXMp OworICAgICAgdXJsID0gcmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMudXJs LCBmaWxlcyk7CisgICAgICB4aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7 CisgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISF0aGlzLm9wdGlvbnMu d2l0aENyZWRlbnRpYWxzOworICAgICAgcmVzcG9uc2UgPSBudWxsOworICAg ICAgaGFuZGxlRXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAg cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBfaiwgX2xlbjEs IF9yZXN1bHRzOworICAgICAgICAgIF9yZXN1bHRzID0gW107CisgICAgICAg ICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZmlsZXMubGVuZ3RoOyBfaiA8IF9s ZW4xOyBfaisrKSB7CisgICAgICAgICAgICBmaWxlID0gZmlsZXNbX2pdOwor ICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChfdGhpcy5fZXJyb3JQcm9jZXNz aW5nKGZpbGVzLCByZXNwb25zZSB8fCBfdGhpcy5vcHRpb25zLmRpY3RSZXNw b25zZUVycm9yLnJlcGxhY2UoInt7c3RhdHVzQ29kZX19IiwgeGhyLnN0YXR1 cyksIHhocikpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Jl c3VsdHM7CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHVw ZGF0ZVByb2dyZXNzID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJl dHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgdmFyIGFsbEZpbGVzRmlu aXNoZWQsIHByb2dyZXNzLCBfaiwgX2ssIF9sLCBfbGVuMSwgX2xlbjIsIF9s ZW4zLCBfcmVzdWx0czsKKyAgICAgICAgICBpZiAoZSAhPSBudWxsKSB7Cisg ICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCAqIGUubG9hZGVkIC8gZS50b3Rh bDsKKyAgICAgICAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxl bmd0aDsgX2ogPCBfbGVuMTsgX2orKykgeworICAgICAgICAgICAgICBmaWxl ID0gZmlsZXNbX2pdOworICAgICAgICAgICAgICBmaWxlLnVwbG9hZCA9IHsK KyAgICAgICAgICAgICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsCisgICAgICAg ICAgICAgICAgdG90YWw6IGUudG90YWwsCisgICAgICAgICAgICAgICAgYnl0 ZXNTZW50OiBlLmxvYWRlZAorICAgICAgICAgICAgICB9OworICAgICAgICAg ICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxGaWxl c0ZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHByb2dyZXNzID0gMTAw OworICAgICAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0gZmlsZXMubGVu Z3RoOyBfayA8IF9sZW4yOyBfaysrKSB7CisgICAgICAgICAgICAgIGZpbGUg PSBmaWxlc1tfa107CisgICAgICAgICAgICAgIGlmICghKGZpbGUudXBsb2Fk LnByb2dyZXNzID09PSAxMDAgJiYgZmlsZS51cGxvYWQuYnl0ZXNTZW50ID09 PSBmaWxlLnVwbG9hZC50b3RhbCkpIHsKKyAgICAgICAgICAgICAgICBhbGxG aWxlc0ZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgZmlsZS51cGxvYWQucHJvZ3Jlc3MgPSBwcm9ncmVzczsKKyAg ICAgICAgICAgICAgZmlsZS51cGxvYWQuYnl0ZXNTZW50ID0gZmlsZS51cGxv YWQudG90YWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWxs RmlsZXNGaW5pc2hlZCkgeworICAgICAgICAgICAgICByZXR1cm47CisgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIF9yZXN1bHRzID0g W107CisgICAgICAgICAgZm9yIChfbCA9IDAsIF9sZW4zID0gZmlsZXMubGVu Z3RoOyBfbCA8IF9sZW4zOyBfbCsrKSB7CisgICAgICAgICAgICBmaWxlID0g ZmlsZXNbX2xdOworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChfdGhpcy5l bWl0KCJ1cGxvYWRwcm9ncmVzcyIsIGZpbGUsIHByb2dyZXNzLCBmaWxlLnVw bG9hZC5ieXRlc1NlbnQpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIF9yZXN1bHRzOworICAgICAgICB9OworICAgICAgfSkodGhpcyk7Cisg ICAgICB4aHIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAg IHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgdmFyIF9yZWY7Cisg ICAgICAgICAgaWYgKGZpbGVzWzBdLnN0YXR1cyA9PT0gRHJvcHpvbmUuQ0FO Q0VMRUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0KSB7CisgICAgICAg ICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3BvbnNl ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICBpZiAoeGhyLmdldFJl c3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSAmJiB+eGhyLmdldFJlc3Bv bnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKS5pbmRleE9mKCJhcHBsaWNhdGlv bi9qc29uIikpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7CisgICAgICAgICAg ICB9IGNhdGNoIChfZXJyb3IpIHsKKyAgICAgICAgICAgICAgZSA9IF9lcnJv cjsKKyAgICAgICAgICAgICAgcmVzcG9uc2UgPSAiSW52YWxpZCBKU09OIHJl c3BvbnNlIGZyb20gc2VydmVyLiI7CisgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKCk7CisgICAgICAgICAg aWYgKCEoKDIwMCA8PSAoX3JlZiA9IHhoci5zdGF0dXMpICYmIF9yZWYgPCAz MDApKSkgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCk7Cisg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5f ZmluaXNoZWQoZmlsZXMsIHJlc3BvbnNlLCBlKTsKKyAgICAgICAgICB9Cisg ICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHhoci5vbmVycm9y ID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv bigpIHsKKyAgICAgICAgICBpZiAoZmlsZXNbMF0uc3RhdHVzID09PSBEcm9w em9uZS5DQU5DRUxFRCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoKTsKKyAgICAg ICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgcHJvZ3Jlc3NPYmogPSAo X3JlZiA9IHhoci51cGxvYWQpICE9IG51bGwgPyBfcmVmIDogeGhyOworICAg ICAgcHJvZ3Jlc3NPYmoub25wcm9ncmVzcyA9IHVwZGF0ZVByb2dyZXNzOwor ICAgICAgaGVhZGVycyA9IHsKKyAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNh dGlvbi9qc29uIiwKKyAgICAgICAgIkNhY2hlLUNvbnRyb2wiOiAibm8tY2Fj aGUiLAorICAgICAgICAiWC1SZXF1ZXN0ZWQtV2l0aCI6ICJYTUxIdHRwUmVx dWVzdCIKKyAgICAgIH07CisgICAgICBpZiAodGhpcy5vcHRpb25zLmhlYWRl cnMpIHsKKyAgICAgICAgZXh0ZW5kKGhlYWRlcnMsIHRoaXMub3B0aW9ucy5o ZWFkZXJzKTsKKyAgICAgIH0KKyAgICAgIGZvciAoaGVhZGVyTmFtZSBpbiBo ZWFkZXJzKSB7CisgICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyc1toZWFk ZXJOYW1lXTsKKyAgICAgICAgaWYgKGhlYWRlclZhbHVlKSB7CisgICAgICAg ICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyVmFs dWUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBmb3JtRGF0YSA9IG5l dyBGb3JtRGF0YSgpOworICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXJhbXMp IHsKKyAgICAgICAgX3JlZjEgPSB0aGlzLm9wdGlvbnMucGFyYW1zOworICAg ICAgICBmb3IgKGtleSBpbiBfcmVmMSkgeworICAgICAgICAgIHZhbHVlID0g X3JlZjFba2V5XTsKKyAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2 YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvciAoX2ogPSAw LCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykgewor ICAgICAgICBmaWxlID0gZmlsZXNbX2pdOworICAgICAgICB0aGlzLmVtaXQo InNlbmRpbmciLCBmaWxlLCB4aHIsIGZvcm1EYXRhKTsKKyAgICAgIH0KKyAg ICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsKKyAgICAg ICAgdGhpcy5lbWl0KCJzZW5kaW5nbXVsdGlwbGUiLCBmaWxlcywgeGhyLCBm b3JtRGF0YSk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5lbGVtZW50LnRh Z05hbWUgPT09ICJGT1JNIikgeworICAgICAgICBfcmVmMiA9IHRoaXMuZWxl bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVj dCwgYnV0dG9uIik7CisgICAgICAgIGZvciAoX2sgPSAwLCBfbGVuMiA9IF9y ZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykgeworICAgICAgICAgIGlu cHV0ID0gX3JlZjJbX2tdOworICAgICAgICAgIGlucHV0TmFtZSA9IGlucHV0 LmdldEF0dHJpYnV0ZSgibmFtZSIpOworICAgICAgICAgIGlucHV0VHlwZSA9 IGlucHV0LmdldEF0dHJpYnV0ZSgidHlwZSIpOworICAgICAgICAgIGlmIChp bnB1dC50YWdOYW1lID09PSAiU0VMRUNUIiAmJiBpbnB1dC5oYXNBdHRyaWJ1 dGUoIm11bHRpcGxlIikpIHsKKyAgICAgICAgICAgIF9yZWYzID0gaW5wdXQu b3B0aW9uczsKKyAgICAgICAgICAgIGZvciAoX2wgPSAwLCBfbGVuMyA9IF9y ZWYzLmxlbmd0aDsgX2wgPCBfbGVuMzsgX2wrKykgeworICAgICAgICAgICAg ICBvcHRpb24gPSBfcmVmM1tfbF07CisgICAgICAgICAgICAgIGlmIChvcHRp b24uc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBl bmQoaW5wdXROYW1lLCBvcHRpb24udmFsdWUpOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICghaW5wdXRU eXBlIHx8ICgoX3JlZjQgPSBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSkgIT09 ICJjaGVja2JveCIgJiYgX3JlZjQgIT09ICJyYWRpbyIpIHx8IGlucHV0LmNo ZWNrZWQpIHsKKyAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChpbnB1dE5h bWUsIGlucHV0LnZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIGZvciAoaSA9IF9tID0gMCwgX3JlZjUgPSBmaWxlcy5s ZW5ndGggLSAxOyAwIDw9IF9yZWY1ID8gX20gPD0gX3JlZjUgOiBfbSA+PSBf cmVmNTsgaSA9IDAgPD0gX3JlZjUgPyArK19tIDogLS1fbSkgeworICAgICAg ICBmb3JtRGF0YS5hcHBlbmQodGhpcy5fZ2V0UGFyYW1OYW1lKGkpLCBmaWxl c1tpXSwgdGhpcy5fcmVuYW1lRmlsZW5hbWUoZmlsZXNbaV0ubmFtZSkpOwor ICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVxdWVzdCh4aHIs IGZvcm1EYXRhLCBmaWxlcyk7CisgICAgfTsKKworICAgIERyb3B6b25lLnBy b3RvdHlwZS5zdWJtaXRSZXF1ZXN0ID0gZnVuY3Rpb24oeGhyLCBmb3JtRGF0 YSwgZmlsZXMpIHsKKyAgICAgIHJldHVybiB4aHIuc2VuZChmb3JtRGF0YSk7 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZmluaXNoZWQg PSBmdW5jdGlvbihmaWxlcywgcmVzcG9uc2VUZXh0LCBlKSB7CisgICAgICB2 YXIgZmlsZSwgX2ksIF9sZW47CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9 IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZp bGUgPSBmaWxlc1tfaV07CisgICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpv bmUuU1VDQ0VTUzsKKyAgICAgICAgdGhpcy5lbWl0KCJzdWNjZXNzIiwgZmls ZSwgcmVzcG9uc2VUZXh0LCBlKTsKKyAgICAgICAgdGhpcy5lbWl0KCJjb21w bGV0ZSIsIGZpbGUpOworICAgICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9u cy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlzLmVtaXQoInN1Y2Nl c3NtdWx0aXBsZSIsIGZpbGVzLCByZXNwb25zZVRleHQsIGUpOworICAgICAg ICB0aGlzLmVtaXQoImNvbXBsZXRlbXVsdGlwbGUiLCBmaWxlcyk7CisgICAg ICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CisgICAg ICB9CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZXJyb3JQ cm9jZXNzaW5nID0gZnVuY3Rpb24oZmlsZXMsIG1lc3NhZ2UsIHhocikgewor ICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuOworICAgICAgZm9yIChfaSA9IDAs IF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAg ICAgICBmaWxlID0gZmlsZXNbX2ldOworICAgICAgICBmaWxlLnN0YXR1cyA9 IERyb3B6b25lLkVSUk9SOworICAgICAgICB0aGlzLmVtaXQoImVycm9yIiwg ZmlsZSwgbWVzc2FnZSwgeGhyKTsKKyAgICAgICAgdGhpcy5lbWl0KCJjb21w bGV0ZSIsIGZpbGUpOworICAgICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9u cy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlzLmVtaXQoImVycm9y bXVsdGlwbGUiLCBmaWxlcywgbWVzc2FnZSwgeGhyKTsKKyAgICAgICAgdGhp cy5lbWl0KCJjb21wbGV0ZW11bHRpcGxlIiwgZmlsZXMpOworICAgICAgfQor ICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7Cisg ICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpOworICAgICAgfQor ICAgIH07CisKKyAgICByZXR1cm4gRHJvcHpvbmU7CisKKyAgfSkoRW1pdHRl cik7CisKKyAgRHJvcHpvbmUudmVyc2lvbiA9ICI0LjMuMCI7CisKKyAgRHJv cHpvbmUub3B0aW9ucyA9IHt9OworCisgIERyb3B6b25lLm9wdGlvbnNGb3JF bGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGlmIChlbGVtZW50 LmdldEF0dHJpYnV0ZSgiaWQiKSkgeworICAgICAgcmV0dXJuIERyb3B6b25l Lm9wdGlvbnNbY2FtZWxpemUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikp XTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHZvaWQgMDsKKyAgICB9 CisgIH07CisKKyAgRHJvcHpvbmUuaW5zdGFuY2VzID0gW107CisKKyAgRHJv cHpvbmUuZm9yRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBp ZiAodHlwZW9mIGVsZW1lbnQgPT09ICJzdHJpbmciKSB7CisgICAgICBlbGVt ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTsKKyAgICB9 CisgICAgaWYgKChlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LmRyb3B6b25l IDogdm9pZCAwKSA9PSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Io Ik5vIERyb3B6b25lIGZvdW5kIGZvciBnaXZlbiBlbGVtZW50LiBUaGlzIGlz IHByb2JhYmx5IGJlY2F1c2UgeW91J3JlIHRyeWluZyB0byBhY2Nlc3MgaXQg YmVmb3JlIERyb3B6b25lIGhhZCB0aGUgdGltZSB0byBpbml0aWFsaXplLiBV c2UgdGhlIGBpbml0YCBvcHRpb24gdG8gc2V0dXAgYW55IGFkZGl0aW9uYWwg b2JzZXJ2ZXJzIG9uIHlvdXIgRHJvcHpvbmUuIik7CisgICAgfQorICAgIHJl dHVybiBlbGVtZW50LmRyb3B6b25lOworICB9OworCisgIERyb3B6b25lLmF1 dG9EaXNjb3ZlciA9IHRydWU7CisKKyAgRHJvcHpvbmUuZGlzY292ZXIgPSBm dW5jdGlvbigpIHsKKyAgICB2YXIgY2hlY2tFbGVtZW50cywgZHJvcHpvbmUs IGRyb3B6b25lcywgX2ksIF9sZW4sIF9yZXN1bHRzOworICAgIGlmIChkb2N1 bWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7CisgICAgICBkcm9wem9uZXMgPSBk b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcHpvbmUiKTsKKyAgICB9 IGVsc2UgeworICAgICAgZHJvcHpvbmVzID0gW107CisgICAgICBjaGVja0Vs ZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMpIHsKKyAgICAgICAgdmFyIGVs LCBfaSwgX2xlbiwgX3Jlc3VsdHM7CisgICAgICAgIF9yZXN1bHRzID0gW107 CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZWxlbWVudHMubGVuZ3Ro OyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICBlbCA9IGVsZW1lbnRz W19pXTsKKyAgICAgICAgICBpZiAoLyhefCApZHJvcHpvbmUoJHwgKS8udGVz dChlbC5jbGFzc05hbWUpKSB7CisgICAgICAgICAgICBfcmVzdWx0cy5wdXNo KGRyb3B6b25lcy5wdXNoKGVsKSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTsKKyAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgICAg fTsKKyAgICAgIGNoZWNrRWxlbWVudHMoZG9jdW1lbnQuZ2V0RWxlbWVudHNC eVRhZ05hbWUoImRpdiIpKTsKKyAgICAgIGNoZWNrRWxlbWVudHMoZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKSk7CisgICAgfQorICAg IF9yZXN1bHRzID0gW107CisgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBkcm9w em9uZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgIGRyb3B6 b25lID0gZHJvcHpvbmVzW19pXTsKKyAgICAgIGlmIChEcm9wem9uZS5vcHRp b25zRm9yRWxlbWVudChkcm9wem9uZSkgIT09IGZhbHNlKSB7CisgICAgICAg IF9yZXN1bHRzLnB1c2gobmV3IERyb3B6b25lKGRyb3B6b25lKSk7CisgICAg ICB9IGVsc2UgeworICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7Cisg ICAgICB9CisgICAgfQorICAgIHJldHVybiBfcmVzdWx0czsKKyAgfTsKKwor ICBEcm9wem9uZS5ibGFja2xpc3RlZEJyb3dzZXJzID0gWy9vcGVyYS4qTWFj aW50b3NoLip2ZXJzaW9uXC8xMi9pXTsKKworICBEcm9wem9uZS5pc0Jyb3dz ZXJTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY2FwYWJsZUJy b3dzZXIsIHJlZ2V4LCBfaSwgX2xlbiwgX3JlZjsKKyAgICBjYXBhYmxlQnJv d3NlciA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5GaWxlICYmIHdpbmRvdy5G aWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlTGlzdCAmJiB3aW5kb3cuQmxvYiAm JiB3aW5kb3cuRm9ybURhdGEgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcikg eworICAgICAgaWYgKCEoImNsYXNzTGlzdCIgaW4gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgiYSIpKSkgeworICAgICAgICBjYXBhYmxlQnJvd3NlciA9IGZh bHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3JlZiA9IERyb3B6b25l LmJsYWNrbGlzdGVkQnJvd3NlcnM7CisgICAgICAgIGZvciAoX2kgPSAwLCBf bGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICAgIHJlZ2V4ID0gX3JlZltfaV07CisgICAgICAgICAgaWYgKHJlZ2V4LnRl c3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHsKKyAgICAgICAgICAgIGNhcGFi bGVCcm93c2VyID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgY2FwYWJsZUJyb3dzZXIgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0 dXJuIGNhcGFibGVCcm93c2VyOworICB9OworCisgIHdpdGhvdXQgPSBmdW5j dGlvbihsaXN0LCByZWplY3RlZEl0ZW0pIHsKKyAgICB2YXIgaXRlbSwgX2ks IF9sZW4sIF9yZXN1bHRzOworICAgIF9yZXN1bHRzID0gW107CisgICAgZm9y IChfaSA9IDAsIF9sZW4gPSBsaXN0Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsr KSB7CisgICAgICBpdGVtID0gbGlzdFtfaV07CisgICAgICBpZiAoaXRlbSAh PT0gcmVqZWN0ZWRJdGVtKSB7CisgICAgICAgIF9yZXN1bHRzLnB1c2goaXRl bSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBfcmVzdWx0czsKKyAg fTsKKworICBjYW1lbGl6ZSA9IGZ1bmN0aW9uKHN0cikgeworICAgIHJldHVy biBzdHIucmVwbGFjZSgvW1wtX10oXHcpL2csIGZ1bmN0aW9uKG1hdGNoKSB7 CisgICAgICByZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7 CisgICAgfSk7CisgIH07CisKKyAgRHJvcHpvbmUuY3JlYXRlRWxlbWVudCA9 IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHZhciBkaXY7CisgICAgZGl2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2LmlubmVy SFRNTCA9IHN0cmluZzsKKyAgICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF07 CisgIH07CisKKyAgRHJvcHpvbmUuZWxlbWVudEluc2lkZSA9IGZ1bmN0aW9u KGVsZW1lbnQsIGNvbnRhaW5lcikgeworICAgIGlmIChlbGVtZW50ID09PSBj b250YWluZXIpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB3 aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkgeworICAgICAg aWYgKGVsZW1lbnQgPT09IGNvbnRhaW5lcikgeworICAgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9 OworCisgIERyb3B6b25lLmdldEVsZW1lbnQgPSBmdW5jdGlvbihlbCwgbmFt ZSkgeworICAgIHZhciBlbGVtZW50OworICAgIGlmICh0eXBlb2YgZWwgPT09 ICJzdHJpbmciKSB7CisgICAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlT ZWxlY3RvcihlbCk7CisgICAgfSBlbHNlIGlmIChlbC5ub2RlVHlwZSAhPSBu dWxsKSB7CisgICAgICBlbGVtZW50ID0gZWw7CisgICAgfQorICAgIGlmIChl bGVtZW50ID09IG51bGwpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiSW52 YWxpZCBgIiArIG5hbWUgKyAiYCBvcHRpb24gcHJvdmlkZWQuIFBsZWFzZSBw cm92aWRlIGEgQ1NTIHNlbGVjdG9yIG9yIGEgcGxhaW4gSFRNTCBlbGVtZW50 LiIpOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfTsKKworICBE cm9wem9uZS5nZXRFbGVtZW50cyA9IGZ1bmN0aW9uKGVscywgbmFtZSkgewor ICAgIHZhciBlLCBlbCwgZWxlbWVudHMsIF9pLCBfaiwgX2xlbiwgX2xlbjEs IF9yZWY7CisgICAgaWYgKGVscyBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAg ICBlbGVtZW50cyA9IFtdOworICAgICAgdHJ5IHsKKyAgICAgICAgZm9yIChf aSA9IDAsIF9sZW4gPSBlbHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsK KyAgICAgICAgICBlbCA9IGVsc1tfaV07CisgICAgICAgICAgZWxlbWVudHMu cHVzaCh0aGlzLmdldEVsZW1lbnQoZWwsIG5hbWUpKTsKKyAgICAgICAgfQor ICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7CisgICAgICAgIGUgPSBfZXJyb3I7 CisgICAgICAgIGVsZW1lbnRzID0gbnVsbDsKKyAgICAgIH0KKyAgICB9IGVs c2UgaWYgKHR5cGVvZiBlbHMgPT09ICJzdHJpbmciKSB7CisgICAgICBlbGVt ZW50cyA9IFtdOworICAgICAgX3JlZiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0 b3JBbGwoZWxzKTsKKyAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IF9yZWYu bGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAgIGVsID0gX3Jl Zltfal07CisgICAgICAgIGVsZW1lbnRzLnB1c2goZWwpOworICAgICAgfQor ICAgIH0gZWxzZSBpZiAoZWxzLm5vZGVUeXBlICE9IG51bGwpIHsKKyAgICAg IGVsZW1lbnRzID0gW2Vsc107CisgICAgfQorICAgIGlmICghKChlbGVtZW50 cyAhPSBudWxsKSAmJiBlbGVtZW50cy5sZW5ndGgpKSB7CisgICAgICB0aHJv dyBuZXcgRXJyb3IoIkludmFsaWQgYCIgKyBuYW1lICsgImAgb3B0aW9uIHBy b3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSBhIENTUyBzZWxlY3RvciwgYSBwbGFp biBIVE1MIGVsZW1lbnQgb3IgYSBsaXN0IG9mIHRob3NlLiIpOworICAgIH0K KyAgICByZXR1cm4gZWxlbWVudHM7CisgIH07CisKKyAgRHJvcHpvbmUuY29u ZmlybSA9IGZ1bmN0aW9uKHF1ZXN0aW9uLCBhY2NlcHRlZCwgcmVqZWN0ZWQp IHsKKyAgICBpZiAod2luZG93LmNvbmZpcm0ocXVlc3Rpb24pKSB7CisgICAg ICByZXR1cm4gYWNjZXB0ZWQoKTsKKyAgICB9IGVsc2UgaWYgKHJlamVjdGVk ICE9IG51bGwpIHsKKyAgICAgIHJldHVybiByZWplY3RlZCgpOworICAgIH0K KyAgfTsKKworICBEcm9wem9uZS5pc1ZhbGlkRmlsZSA9IGZ1bmN0aW9uKGZp bGUsIGFjY2VwdGVkRmlsZXMpIHsKKyAgICB2YXIgYmFzZU1pbWVUeXBlLCBt aW1lVHlwZSwgdmFsaWRUeXBlLCBfaSwgX2xlbjsKKyAgICBpZiAoIWFjY2Vw dGVkRmlsZXMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBh Y2NlcHRlZEZpbGVzID0gYWNjZXB0ZWRGaWxlcy5zcGxpdCgiLCIpOworICAg IG1pbWVUeXBlID0gZmlsZS50eXBlOworICAgIGJhc2VNaW1lVHlwZSA9IG1p bWVUeXBlLnJlcGxhY2UoL1wvLiokLywgIiIpOworICAgIGZvciAoX2kgPSAw LCBfbGVuID0gYWNjZXB0ZWRGaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2kr KykgeworICAgICAgdmFsaWRUeXBlID0gYWNjZXB0ZWRGaWxlc1tfaV07Cisg ICAgICB2YWxpZFR5cGUgPSB2YWxpZFR5cGUudHJpbSgpOworICAgICAgaWYg KHZhbGlkVHlwZS5jaGFyQXQoMCkgPT09ICIuIikgeworICAgICAgICBpZiAo ZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWxpZFR5cGUudG9M b3dlckNhc2UoKSwgZmlsZS5uYW1lLmxlbmd0aCAtIHZhbGlkVHlwZS5sZW5n dGgpICE9PSAtMSkgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICB9CisgICAgICB9IGVsc2UgaWYgKC9cL1wqJC8udGVzdCh2YWxpZFR5cGUp KSB7CisgICAgICAgIGlmIChiYXNlTWltZVR5cGUgPT09IHZhbGlkVHlwZS5y ZXBsYWNlKC9cLy4qJC8sICIiKSkgeworICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobWlt ZVR5cGUgPT09IHZhbGlkVHlwZSkgeworICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxz ZTsKKyAgfTsKKworICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5l ZCIgJiYgalF1ZXJ5ICE9PSBudWxsKSB7CisgICAgalF1ZXJ5LmZuLmRyb3B6 b25lID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgcmV0dXJuIHRoaXMu ZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEcm9wem9u ZSh0aGlzLCBvcHRpb25zKTsKKyAgICAgIH0pOworICAgIH07CisgIH0KKwor ICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgJiYgbW9kdWxl ICE9PSBudWxsKSB7CisgICAgbW9kdWxlLmV4cG9ydHMgPSBEcm9wem9uZTsK KyAgfSBlbHNlIHsKKyAgICB3aW5kb3cuRHJvcHpvbmUgPSBEcm9wem9uZTsK KyAgfQorCisgIERyb3B6b25lLkFEREVEID0gImFkZGVkIjsKKworICBEcm9w em9uZS5RVUVVRUQgPSAicXVldWVkIjsKKworICBEcm9wem9uZS5BQ0NFUFRF RCA9IERyb3B6b25lLlFVRVVFRDsKKworICBEcm9wem9uZS5VUExPQURJTkcg PSAidXBsb2FkaW5nIjsKKworICBEcm9wem9uZS5QUk9DRVNTSU5HID0gRHJv cHpvbmUuVVBMT0FESU5HOworCisgIERyb3B6b25lLkNBTkNFTEVEID0gImNh bmNlbGVkIjsKKworICBEcm9wem9uZS5FUlJPUiA9ICJlcnJvciI7CisKKyAg RHJvcHpvbmUuU1VDQ0VTUyA9ICJzdWNjZXNzIjsKKworCisgIC8qCisKKyAg QnVnZml4IGZvciBpT1MgNiBhbmQgNworICBTb3VyY2U6IGh0dHA6Ly9zdGFj a292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE5MjkwOTkvaHRtbDUtY2FudmFz LWRyYXdpbWFnZS1yYXRpby1idWctaW9zCisgIGJhc2VkIG9uIHRoZSB3b3Jr IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9taXRhL2lvcy1pbWFnZWZpbGUt bWVnYXBpeGVsCisgICAqLworCisgIGRldGVjdFZlcnRpY2FsU3F1YXNoID0g ZnVuY3Rpb24oaW1nKSB7CisgICAgdmFyIGFscGhhLCBjYW52YXMsIGN0eCwg ZGF0YSwgZXksIGloLCBpdywgcHksIHJhdGlvLCBzeTsKKyAgICBpdyA9IGlt Zy5uYXR1cmFsV2lkdGg7CisgICAgaWggPSBpbWcubmF0dXJhbEhlaWdodDsK KyAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi KTsKKyAgICBjYW52YXMud2lkdGggPSAxOworICAgIGNhbnZhcy5oZWlnaHQg PSBpaDsKKyAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAg ICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgZGF0YSA9IGN0eC5n ZXRJbWFnZURhdGEoMCwgMCwgMSwgaWgpLmRhdGE7CisgICAgc3kgPSAwOwor ICAgIGV5ID0gaWg7CisgICAgcHkgPSBpaDsKKyAgICB3aGlsZSAocHkgPiBz eSkgeworICAgICAgYWxwaGEgPSBkYXRhWyhweSAtIDEpICogNCArIDNdOwor ICAgICAgaWYgKGFscGhhID09PSAwKSB7CisgICAgICAgIGV5ID0gcHk7Cisg ICAgICB9IGVsc2UgeworICAgICAgICBzeSA9IHB5OworICAgICAgfQorICAg ICAgcHkgPSAoZXkgKyBzeSkgPj4gMTsKKyAgICB9CisgICAgcmF0aW8gPSBw eSAvIGloOworICAgIGlmIChyYXRpbyA9PT0gMCkgeworICAgICAgcmV0dXJu IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiByYXRpbzsKKyAgICB9 CisgIH07CisKKyAgZHJhd0ltYWdlSU9TRml4ID0gZnVuY3Rpb24oY3R4LCBp bWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkgeworICAgIHZh ciB2ZXJ0U3F1YXNoUmF0aW87CisgICAgdmVydFNxdWFzaFJhdGlvID0gZGV0 ZWN0VmVydGljYWxTcXVhc2goaW1nKTsKKyAgICByZXR1cm4gY3R4LmRyYXdJ bWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCAvIHZl cnRTcXVhc2hSYXRpbyk7CisgIH07CisKKworICAvKgorICAgKiBjb250ZW50 bG9hZGVkLmpzCisgICAqCisgICAqIEF1dGhvcjogRGllZ28gUGVyaW5pIChk aWVnby5wZXJpbmkgYXQgZ21haWwuY29tKQorICAgKiBTdW1tYXJ5OiBjcm9z cy1icm93c2VyIHdyYXBwZXIgZm9yIERPTUNvbnRlbnRMb2FkZWQKKyAgICog VXBkYXRlZDogMjAxMDEwMjAKKyAgICogTGljZW5zZTogTUlUCisgICAqIFZl cnNpb246IDEuMgorICAgKgorICAgKiBVUkw6CisgICAqIGh0dHA6Ly9qYXZh c2NyaXB0Lm53Ym94LmNvbS9Db250ZW50TG9hZGVkLworICAgKiBodHRwOi8v amF2YXNjcmlwdC5ud2JveC5jb20vQ29udGVudExvYWRlZC9NSVQtTElDRU5T RQorICAgKi8KKworICBjb250ZW50TG9hZGVkID0gZnVuY3Rpb24od2luLCBm bikgeworICAgIHZhciBhZGQsIGRvYywgZG9uZSwgaW5pdCwgcG9sbCwgcHJl LCByZW0sIHJvb3QsIHRvcDsKKyAgICBkb25lID0gZmFsc2U7CisgICAgdG9w ID0gdHJ1ZTsKKyAgICBkb2MgPSB3aW4uZG9jdW1lbnQ7CisgICAgcm9vdCA9 IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgYWRkID0gKGRvYy5hZGRFdmVu dExpc3RlbmVyID8gImFkZEV2ZW50TGlzdGVuZXIiIDogImF0dGFjaEV2ZW50 Iik7CisgICAgcmVtID0gKGRvYy5hZGRFdmVudExpc3RlbmVyID8gInJlbW92 ZUV2ZW50TGlzdGVuZXIiIDogImRldGFjaEV2ZW50Iik7CisgICAgcHJlID0g KGRvYy5hZGRFdmVudExpc3RlbmVyID8gIiIgOiAib24iKTsKKyAgICBpbml0 ID0gZnVuY3Rpb24oZSkgeworICAgICAgaWYgKGUudHlwZSA9PT0gInJlYWR5 c3RhdGVjaGFuZ2UiICYmIGRvYy5yZWFkeVN0YXRlICE9PSAiY29tcGxldGUi KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIChlLnR5cGUg PT09ICJsb2FkIiA/IHdpbiA6IGRvYylbcmVtXShwcmUgKyBlLnR5cGUsIGlu aXQsIGZhbHNlKTsKKyAgICAgIGlmICghZG9uZSAmJiAoZG9uZSA9IHRydWUp KSB7CisgICAgICAgIHJldHVybiBmbi5jYWxsKHdpbiwgZS50eXBlIHx8IGUp OworICAgICAgfQorICAgIH07CisgICAgcG9sbCA9IGZ1bmN0aW9uKCkgewor ICAgICAgdmFyIGU7CisgICAgICB0cnkgeworICAgICAgICByb290LmRvU2Ny b2xsKCJsZWZ0Iik7CisgICAgICB9IGNhdGNoIChfZXJyb3IpIHsKKyAgICAg ICAgZSA9IF9lcnJvcjsKKyAgICAgICAgc2V0VGltZW91dChwb2xsLCA1MCk7 CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpbml0 KCJwb2xsIik7CisgICAgfTsKKyAgICBpZiAoZG9jLnJlYWR5U3RhdGUgIT09 ICJjb21wbGV0ZSIpIHsKKyAgICAgIGlmIChkb2MuY3JlYXRlRXZlbnRPYmpl Y3QgJiYgcm9vdC5kb1Njcm9sbCkgeworICAgICAgICB0cnkgeworICAgICAg ICAgIHRvcCA9ICF3aW4uZnJhbWVFbGVtZW50OworICAgICAgICB9IGNhdGNo IChfZXJyb3IpIHt9CisgICAgICAgIGlmICh0b3ApIHsKKyAgICAgICAgICBw b2xsKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRvY1thZGRdKHBy ZSArICJET01Db250ZW50TG9hZGVkIiwgaW5pdCwgZmFsc2UpOworICAgICAg ZG9jW2FkZF0ocHJlICsgInJlYWR5c3RhdGVjaGFuZ2UiLCBpbml0LCBmYWxz ZSk7CisgICAgICByZXR1cm4gd2luW2FkZF0ocHJlICsgImxvYWQiLCBpbml0 LCBmYWxzZSk7CisgICAgfQorICB9OworCisgIERyb3B6b25lLl9hdXRvRGlz Y292ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIGlmIChEcm9wem9u ZS5hdXRvRGlzY292ZXIpIHsKKyAgICAgIHJldHVybiBEcm9wem9uZS5kaXNj b3ZlcigpOworICAgIH0KKyAgfTsKKworICBjb250ZW50TG9hZGVkKHdpbmRv dywgRHJvcHpvbmUuX2F1dG9EaXNjb3ZlckZ1bmN0aW9uKTsKKworfSkuY2Fs bCh0aGlzKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9i YXNlLmh0bWwgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvYmFzZS5odG1sCmlu ZGV4IGZjMDFmOWMuLjdlOGVhYWYgMTAwNzU1Ci0tLSBhL3dlYi9wZ2FkbWlu L3RlbXBsYXRlcy9iYXNlLmh0bWwKKysrIGIvd2ViL3BnYWRtaW4vdGVtcGxh dGVzL2Jhc2UuaHRtbApAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICA8bGlu ayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7eyB1 cmxfZm9yKCdzdGF0aWMnLCBmaWxlbmFtZT0nY3NzL2JhY2tncmlkL2JhY2tn cmlkLXBhZ2luYXRvci5jc3MnIGlmIGNvbmZpZy5ERUJVRyBlbHNlICdjc3Mv YmFja2dyaWQvYmFja2dyaWQtcGFnaW5hdG9yLm1pbi5jc3MnKX19Ii8+CiAg ICAgICAgIDxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQi IGhyZWY9Int7IHVybF9mb3IoJ3N0YXRpYycsIGZpbGVuYW1lPSdjc3MvYmFj a2dyaWQvYmFja2dyaWQtZmlsdGVyLmNzcycgaWYgY29uZmlnLkRFQlVHIGVs c2UgJ2Nzcy9iYWNrZ3JpZC9iYWNrZ3JpZC1maWx0ZXIubWluLmNzcycpfX0i Lz4KICAgICAgICAgPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVz aGVldCIgaHJlZj0ie3sgdXJsX2Zvcignc3RhdGljJywgZmlsZW5hbWU9J2Nz cy9zZWxlY3QyL3NlbGVjdDIuY3NzJyBpZiBjb25maWcuREVCVUcgZWxzZSAn Y3NzL3NlbGVjdDIvc2VsZWN0Mi5taW4uY3NzJyl9fSIvPgorICAgICAgICA8 bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7 eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuc3RhdGljJywgZmlsZW5hbWU9J2Nz cy9maWxlX21hbmFnZXIuY3NzJykgfX0iPgogCiAgICAgICAgIDwhLS0gVmll dyBzcGVjaWZpZWQgc3R5bGVzaGVldHMgLS0+CiAgICAgICAgIHslIGZvciBz dHlsZXNoZWV0IGluIGN1cnJlbnRfYXBwLnN0eWxlc2hlZXRzICV9Cg== --001a114b080657d60c053176d44a Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a114b080657d60c053176d44a--